AI Router · CLI · MCPCheapest eligible quotes before you create
how-to · activation

Create a reproducible media-generation manifest

Record model, prompt, ratio, source input, job ID, timestamps, and selected output.

The practical answer to “ai generation manifest” is not a universal file format. It is a project-owned JSON record that preserves enough inputs, service identifiers, local evidence, and decisions to inspect or intentionally repeat a run. Treat each generation as immutable. If the prompt, model, ratio, or source changes, append a new run with a new local run ID even when the service reuses other account metadata.

This page uses “manifest” in that operational sense. It does not claim that preserving a request guarantees identical pixels on a later run; this research did not perform a rerun. It also does not claim that the file authenticates the media or qualifies as a C2PA Manifest. W3C PROV frames provenance around entities, activities, agents, derivation, versioning, and reproducibility; that vocabulary supports separating source assets, generation activity, outputs, and the responsible reviewer. It does not prescribe this page's JSON keys.

Start with 20 free credits
Input contract

Make the manifest a replayable input contract

An AI generation manifest is a small, append-only record that connects an output to the exact request that produced it. Store the provider-facing model ID, prompt text without normalization, submitted aspect ratio, workflow type, and any source input reference before the request is sent. Add the returned generation ID and status afterward. This is more useful than a filename such as `final-v3.png`, because another operator can distinguish what was requested from what was later selected or renamed.

OfflineCreator's current public MCP schema requires `modelId` and `prompt` for `generate`, accepts an optional `aspectRatio` of `16:9`, `9:16`, or `1:1`, and can return immediately or wait. Image-to-video uses a reserved `generationId` plus either a local `filePath` or `imageBase64` in `upload_input`. A local manifest should record the source file's project-relative path and a checksum, not the base64 body or a temporary signed URL. The checksum detects accidental source replacement; it does not prove authorship or rights.

Request identity
modelId, workflow, prompt, aspectRatio, promptRevisionPreserve submitted values exactly; put editorial notes in separate fields.
Source identity
project-relative path, media type, byte hashDo not archive credentials, base64 payloads, or an expiring delivery URL.
Job identity
generationId, submittedAt, completedAt, terminal statusUse UTC ISO 8601 timestamps and keep locally observed times distinct from service-returned fields.
Human gate

Keep human selection separate from generation history

Generation history answers what ran; a selection record answers what a person approved. Never overwrite a rejected run when a later run is chosen. Append a decision with the candidate generation ID, local output path, output checksum, reviewer, decision time, and a short reason tied to the creative brief. Use a neutral state such as `candidate` until a named reviewer records `selected` or `rejected`. An agent can assemble candidates and flag measurable defects, but it should not invent approval.

Selection also needs a stable local copy. The public MCP implementation describes completed output URLs as short-lived signed links, and `download_output` returns the generation ID, URL, expiry information, and content type rather than streaming the media into model context. Download while access is valid, calculate a checksum on the saved bytes, and then point the selection record to that local file. A manifest containing only the signed URL will not remain a dependable archive.

Candidate
Generated output saved locally with generationId and checksumA downloaded file is not approved merely because the job completed.
Decision
selected or rejected, reviewer, decidedAt, rationaleRecord the reviewer decision as a new event instead of mutating the generation request.
Credit gauge

Capture account context without copying secrets

Record the published per-run credit cost and the observed account balance only when those values are returned at execution time; do not place API keys, OAuth tokens, authorization headers, cookies, or billing identifiers in the manifest. OfflineCreator's public client types `get_credits` as a response containing `balance` and `currency`, while `list_models` supplies the live model catalog. Those calls are the appropriate preflight source for account context, but this research pass did not call an authenticated account.

The current public catalog lists generation costs from 1 credit for FLUX Schnell through 96 credits for Veo 3.1 Fast and warns that supplier pricing can change. Save the selected model's returned cost snapshot alongside `observedAt` rather than treating this page's catalog snapshot as permanent. Cost context explains why a run was approved or stopped; it should not be used as proof of output quality.

Model specimen

Local archive example for one image run

The following is an editorial archive shape, not a captured Studio response. A project might store it at `manifests/hero-launch.json` and save output bytes under `outputs/`. Fields prefixed by neither provider nor standard are local conventions. Keep the manifest in version control only when prompts and source references are safe to disclose; otherwise retain it in access-controlled project storage.

request
{"localRunId":"hero-007","modelId":"recraft-v3","workflow":"text-to-image","promptRevision":4,"prompt":"...exact submitted text...","aspectRatio":"16:9"}The ellipsis marks omitted example text; a real record must contain the complete submitted prompt.
source
{"kind":"none","path":null,"sha256":null}For image-to-video, replace this with the project-relative source path, media type, and checksum.
service
{"generationId":"<returned UUID>","status":"completed","submittedAt":"<UTC>","completedAt":"<UTC>"}Do not fabricate service timestamps. Label locally observed times explicitly if the response does not provide them.
output
{"path":"outputs/hero-007.png","contentType":"image/png","sha256":"<hash>","selected":true}Add reviewer, decidedAt, and rationale beside the selection; never use the temporary URL as the archive path.
Related circuit

Return to the creative-workflow hub when the record shows that the generation method itself is still undecided. Use duration-and-cost planning before a video run when the missing decision is model duration or spend. Move to output QA after download when the manifest is complete but no candidate has passed a human review. These links represent successive decisions, not alternate definitions of a manifest.

Canonical plate

Do not confuse an archive record with authenticity proof

C2PA 2.2 defines a C2PA Manifest as assertions and related claim information bound with a claim signature into a verifiable unit, with manifests stored as an asset's Content Credential. This local JSON example has no such signature or content binding. It can improve project traceability, but a person can edit it independently of the media. If a file carries Content Credentials, preserve and validate them separately and record the validation result without claiming that the local manifest created or authenticated those credentials.

This page remains an unreviewed research draft and owns only the operational generation record: request fields, source reference, generation ID, timestamps, local output, and selection decision. It does not specify a cross-provider standard, promise bit-for-bit regeneration, document account retention, or verify any real run. The August 9 2026 retrieval returned 112 items with zero relevant community hits, Reddit partial after rate limiting, and no X coverage; no authenticated Studio account payload or generated artifact was accessed. Editorial review should keep those gaps visible.