Nodes/Numonic Workflow Recovery/Extract Workflow Lineage
ComfyUI Node

Extract Workflow Lineage

The workflow is already inside that PNG — this node gets it back

By numonic-labs·Created about a month ago·Updated 8 days ago· 4
Extract Workflow Lineage
    • positive_prompt
    • negative_prompt
    • models
    • loras
    • custom_nodes
    • lineage_json
    image

    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 canvas
    • models, loras, custom_nodes - one per line, so a text node shows them neatly
    • lineage_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.

    CategoryNumonic/Workflow Recovery

    Inputs (1)

    NameTypeDefaultDescription
    imageCOMBO1 options: example.png

    Outputs (6)

    NameTypeDescription
    positive_promptSTRING
    negative_promptSTRING
    modelsSTRING
    lorasSTRING
    custom_nodesSTRING
    lineage_jsonSTRING