Skip to content

How to document ComfyUI work for client delivery

ComfyUI is the rare generation tool whose outputs carry their own recipe, because the workflow graph rides inside the saved image. The craft is in knowing what that graph does not contain and when it quietly falls off.

Published July 22, 2026.

ComfyUI runs image and video generation as a node graph, and it treats that graph as a first-class artifact. The documentation states that the workflow is automatically saved in the metadata of any generated image, so the graph that produced an image can be reopened from the file itself: drag a ComfyUI-generated PNG into the interface and the full node setup returns, with prompts, seeds, samplers, and wiring included. Workflows can also be exported as JSON files, which the documentation notes are small enough to make versioning, archiving, and sharing convenient. Among generation tools this is as close to self-documenting as it currently gets.

The limits are just as specific. The embedded workflow records what your nodes pointed at, not what they contained. The checkpoint name in a loader node is a filename on your disk, and the image cannot prove which weights that filename held on render day. Input images, masks, and reference material are referenced by the graph without being carried inside it, and workflows built on custom node packs only reopen on machines where the same packs are installed. The documentation itself notes that storing the workflow as a separate JSON file becomes necessary for media types that lack metadata support, which in practice covers much of the video work ComfyUI is increasingly used for.

Metadata is also fragile in ordinary hands. One conversion to JPEG for a client deck, one pass through an editor that rewrites files, and the embedded graph is gone with no visible change to the image. So the working rule for ComfyUI is simple: let the embedded workflow be the convenience, and let an exported JSON, the model identities, and the input files be the record. The checklist below makes that concrete.

What ComfyUI stores on its side

  • The ComfyUI workflow is automatically saved in the metadata of any generated image, allowing the graph that produced an image to be opened again from the file itself. Source
  • A workflow can be loaded by dragging a ComfyUI-generated image into the interface or through the Workflows menu, and workflows can be exported as JSON files. Source
  • The built-in Save Image node writes PNG files to the ComfyUI output directory and can embed workflow metadata, such as the prompt, into the saved file. Source
  • Workflows stored as JSON files are very small, which the documentation notes allows convenient versioning, archiving, and sharing of graphs independently of any generated media. Source

What gets lost without your own record

  • The embedded workflow names the checkpoints, LoRAs, and input files your nodes loaded, but it contains none of them, so reproducing a render requires the same files on disk and the image alone cannot prove which files those were.
  • Converting the PNG to JPEG, or passing it through an editor or platform that rewrites metadata, silently drops the embedded graph while leaving the image looking untouched.
  • The documentation notes that a separate JSON file becomes necessary for media types lacking metadata support, so renders to formats without embedded metadata leave the output with no built-in record at all.
  • Workflows that depend on custom node packs only reopen where those packs are installed, and the image metadata does not carry the packs or their versions.
  • The graph records how a result was computed, never why. The brief, the client, the rejected branches, and the approval have no place inside ComfyUI.

The documentation checklist for ComfyUI

  1. Save deliverable images through the Save Image node, so the file that leaves the machine actually carries the workflow metadata.
  2. Export the workflow as JSON for every delivered final and store it next to the client file, because the JSON survives the format conversions that strip image metadata.
  3. Record the exact checkpoint, LoRA, and VAE files the graph loaded, with file hashes where you can, since the workflow stores the loader's filename and not the weights.
  4. List the custom node packs and versions the workflow depends on, so the graph can be reopened on another machine or after a rebuild.
  5. Archive every input image, mask, and reference the graph consumed, because the workflow references them without containing them.
  6. Note the ComfyUI version used for the render, and record which output the client approved and on which date, since neither exists anywhere in the graph.

ComfyUI gives a documentation-minded team a real head start: the recipe travels with the artifact by default, and a JSON export of the same graph costs nothing to keep. The gap between that and a delivery record is exactly the set of things outside the graph, which is the model files as they existed on disk, the inputs, the environment, and the human decisions. Teams that capture those things at render time can reproduce and defend their work in a way no hosted tool currently matches.

For EU-facing deliveries the same split applies to the transparency duties of Article 50 of the EU AI Act. The workflow shows how an output was generated, but the disclosure record, meaning what was published as AI generated, where, and when, still has to be kept by the team that ships the work. A record that pins the workflow JSON, the inputs, and the approved output to a date, and can show they have not changed since, covers what a client or a platform will actually ask to see.

Frequently asked questions

Can I recover the exact workflow from a ComfyUI image someone sent me?

If it is the original PNG saved by ComfyUI with its metadata intact, yes: drag it into the interface and the graph loads. If the file was converted, compressed, or re-saved along the way, the metadata is likely gone, which is why the exported JSON is the copy to trust.

Does the embedded workflow prove which model made the image?

It records the checkpoint name the loader node pointed at, which is a filename, not the weights. To make the record solid, store the hash of the model file that was on disk at render time next to the workflow JSON.

Why does my client's copy of the image have no workflow in it?

Somewhere between your output folder and their inbox the file was re-encoded, most commonly by a JPEG conversion, an editing tool, or an upload pipeline. The image survives that, the metadata does not. Deliver the JSON export alongside the final when the record matters.

Does any of this work for video rendered out of ComfyUI?

The documentation notes that a separate JSON workflow file becomes necessary for media types that lack metadata support, and video output is where that bites in practice. For video deliveries, treat the exported JSON plus your model and input records as the whole story.

What do I need beyond the workflow JSON for a defensible client record?

The model and LoRA files or their hashes, the custom node packs and versions, the input images and masks, the ComfyUI version, and the approval, meaning which render the client accepted and when. The graph covers the computation, and this list covers everything the graph cannot say.

Related guides

  • How to document AI-generated work for client delivery What broadcasters, platforms, agencies, and rights offices already require when AI is part of delivered work, and the per-shot checklist that answers all of them.
  • EU AI Act Article 50 for creative teams What the transparency obligations for AI-generated and AI-manipulated content actually say, the real timeline and penalty ceiling, and what a team should record to be ready.
  • AI provenance: what you can prove and what you cannot An honest map of provenance claims: what a record can demonstrate about inclusion, integrity, and time, and which causal claims no system can support.
  • Prompt and model documentation: a practical checklist for studios The fields worth capturing for every generation: prompts, models, versions, settings, references, and edits, and how to keep the habit alive in production.
  • What is an AI production log? An AI production log is the per-asset record of prompts, models, settings, references, edits, rights decisions, and approvals behind AI-assisted work. Here is the minimum useful structure and the limits of what that record can prove.
  • C2PA vs. AI workflow documentation C2PA and AI workflow documentation solve different parts of the provenance problem. C2PA protects signed assertions attached to media; workflow records preserve prompts, sources, decisions, rights, versions, and approvals around the file.
  • AI shot log template for image and video production A practical AI shot log template for prompts, models, references, versions, human edits, disclosure, and approval. Download the CSV and adapt the field guide to your production workflow.
  • How to record client approval for AI-generated work A client approval record for AI-generated work should identify the exact version, disclosed AI use, review scope, requested changes, approver, and time. This guide turns sign-off into evidence instead of an ambiguous email.
  • Guide editorial and verification policy How Behind The Workflow researches, sources, dates, updates, and corrects its AI production guides. Product facts use primary sources, legal claims link to official text, and machine-readable markup mirrors visible content.
  • How to document Sora work for client delivery Sora embeds C2PA metadata in every asset and marks downloads with a visible moving watermark, but the prompts, iterations, and cameo consents behind a clip stay in the app. This guide covers what OpenAI's provenance signals prove and what you still have to record before client delivery.
  • How to document Google Veo work for client delivery Every Flow output made with Veo carries an invisible SynthID watermark, and Gemini can verify it, but the check names Google AI as the origin and nothing else. This guide covers what to record so a Veo delivery can answer the questions SynthID cannot.
  • How to document Luma Dream Machine work for client delivery Dream Machine keeps your work organized in Boards and an Ideas stream, but the watermark and the commercial license of a clip depend on the plan that generated it, and the exported file names neither. This guide covers the records that close that gap before client delivery.
  • How to document Ideogram work for client delivery Ideogram shows the seed and even the Magic Prompt rewrite for every image in its Details Panel, but none of it travels with the downloaded file, and images are public by default. This guide covers what to copy out of the panel and when to generate privately.
  • How to document Midjourney work for client delivery Midjourney keeps a searchable archive of everything you generate, but the record stays inside your account and images are publicly discoverable by default. This guide covers what midjourney.com actually stores, what never travels with a delivered file, and the per-job checklist that closes the gap.
  • How to document Runway work for client delivery Runway keeps your generations in sessions and an asset browser, with a Fixed seed option for related takes, but the video you deliver carries no prompt, seed, or settings. This guide covers what Runway stores in the account and what a producer has to record per shot.
  • How to document self-hosted Stable Diffusion work for client delivery A self-hosted Stable Diffusion setup writes its generation parameters into every image by default, at least in the AUTOMATIC1111 web UI most teams run. This guide covers what that buys you, what silently breaks it, and what a client record still needs.
  • How to document FLUX work for client delivery The FLUX API from Black Forest Labs delivers each image through a signed URL that stays valid for ten minutes, and the docs describe no archive to return to later. This guide covers what the API gives you at request time and the logging your pipeline must do in that window.
  • How to document Adobe Firefly work for client delivery Firefly attaches a Content Credential naming the model and version to what it generates, and its API returns the seed for every image. This guide covers what that provenance layer proves, how it can be stripped, and what a client delivery record still adds.

Every requirement in this guide is answered from a record kept while the work happens. BTW keeps that record for you.

Start your own record