Extract Workflow Lineage
The workflow is already inside that PNG — this node gets it back
- positive_prompt
- negative_prompt
- models
- loras
- custom_nodes
- lineage_json
You know the moment: it's late, you finally got the lighting right, you saved the PNG - and the .json workflow is gone. Or you downloaded someone else's image and would kill to see exactly how they did it. That's what this node is for. It reads the workflow back out of the image itself.
ComfyUI has been embedding the full graph into every PNG it saves for ages. Open any image you generated with a text editor and you'll find workflow and prompt chunks sitting in the metadata - that's the whole reason you can drag a PNG back onto the canvas and have the pipeline rebuild. This node is that same trick turned into something you can query: point it at an image in your input folder and it hands you the prompts, models, LoRAs, custom nodes, and the raw JSON as strings you can wire anywhere in a graph.
How it works
Local, zero network, no account. It reads the PNG's text chunks - including the compressed zTXt/iTXt kinds that half-hearted tools quietly miss - then normalizes the raw JSON into a structured lineage. Models get dug out of the loader nodes (ckpt_name, unet_name, model_name), LoRAs out of LoraLoader, seed and sampler out of the sampler. One nice touch: it reads both seed and noise_seed, so it recovers seeds from modern Flux-style graphs that feed a RandomNoise node, not just classic KSampler wiring.
All of it happens on your machine. The other two nodes in this pack need a Numonic account to upload; this one doesn't, which makes it the friendliest thing in the pack and a genuinely useful standalone tool.
Inputs and outputs
One input: image. It's a picker that lists the files in ComfyUI's input folder (with an upload widget). Here's the gotcha though: the picker will happily show webp and jpg files, but local recovery is PNG-only. Feed it a JPEG and you get a warning, not a recovery. If you need lineage out of webp or jpg, this node isn't the tool - it parses PNG chunks and nothing else.
The outputs, all plain strings:
positive_prompt/negative_prompt- wire these into any text-display node to read them on the canvasmodels,loras,custom_nodes- one per line, so a text node shows them neatlylineage_json- the whole normalized result, pretty-printed, if you're building tooling
One caveat worth stating plainly: it recovers metadata that's already there. It doesn't sign anything and it isn't a C2PA provenance tool. If an image was saved without an embedded workflow, no node can invent one.
Install
ComfyUI Manager → search "Numonic Workflow Recovery" → Install → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/numonic-labs/comfyui-workflow-recovery
Then restart ComfyUI. No dependencies, no model downloads - the pack uses only Python's standard library plus modules ComfyUI already ships. That's the whole install.
Where people get burned
Images that came through tools that strip metadata - some upscalers, screenshot pipelines, re-encoded shares - come back empty. That's the source image's fault, not the node's. And remember it's recovering, not reconstructing: you get the workflow as it was when the image was generated. If you iterate on a workflow afterward, the PNG holds the version that produced it - which, for "how did this exact image get made," is usually precisely what you want.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | 1 options: example.png |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| positive_prompt | STRING | — |
| negative_prompt | STRING | — |
| models | STRING | — |
| loras | STRING | — |
| custom_nodes | STRING | — |
| lineage_json | STRING | — |