OfflineCreator Studio
AI Router · CLI · MCPCheapest eligible quotes before you create

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 creating
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 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 article did not call an authenticated account.

The current public catalog lists prices starting at 1 credit for FLUX Schnell, but it is not a fixed price sheet. Models whose cost depends on settings carry “from” starting prices, the highest starting at 934 credits for Seedance 2.0 4K, and the catalog notes that those prices vary with duration, resolution, references, layers, and other options. It also calls listed prices the current catalog starting point and says Studio shows a live quote before credits move. Record the chosen options beside the returned cost snapshot and an `observedAt` time 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 reading

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.

What this article covers

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 article does not treat community or social retrieval as proof of OfflineCreator quality, pricing, or customer results. Product statements stay limited to documented Studio routing, quotes, and provider disclosure for ai generation manifest.