Nodes/noEmbryo nodes/Auto Save Workflow /noEmbryo
ComfyUI Node

Auto Save Workflow /noEmbryo

Your workflow is one bad save away from gone — Auto Save Workflow fixes that

By noembryo·Created 3 years ago·Updated 5 days ago· 38
Auto Save Workflow /noEmbryo
    • status
    • ✳️trigger
    save_directorysaved_workflows
    filenameworkflow_{timestamp}
    triggertrue

    ComfyUI already bakes your workflow into every PNG it saves - but that's a crutch, not a backup. Post-process the PNG in anything, re-save it, and the metadata is gone. Archive your runs as JPEG and it never had it in the first place. This node from the noEmbryo pack is the direct fix: every time you run a generation, it writes the current canvas workflow to its own .json file so you've got a versioned copy that survives whatever you do to the image after.

    The r/comfyui crowd has asked for exactly this more than once, and the honest answer is that it's a surprisingly rare node. Most "save" nodes dump the image. Auto Save Workflow dumps the graph. If you generate hundreds of images a day - especially batches where you want to remember which prompt and settings produced which result - this is the archival layer you're missing.

    How it works

    The node is an output node that hooks ComfyUI's EXTRA_PNGINFO (the same data that gets embedded in a PNG) and writes it to disk as pretty-printed JSON. Because it's an output node, it runs on every queue, and it doesn't need anything wired downstream of it to fire. There's even a dummy ✳️trigger boolean output whose only job is to keep the node alive in the graph if you're not connecting the status text anywhere.

    The inputs that matter

    • save_directory - defaults to saved_workflows. Relative paths land inside ComfyUI's output/ folder; you can also give it an absolute path anywhere on disk if you want your archive somewhere sensible.
    • filename - defaults to workflow_{timestamp}. The {timestamp} placeholder becomes YYYYMMDD-HHMMSS, so each run gets a unique name. Keep it.
    • trigger - the on/off switch. Leave it on; it's there so you can disable auto-saving without deleting the node.

    Outputs: status gives you a text report with the full save path (or an error message), and ✳️trigger is the dummy output described above.

    Install

    Via ComfyUI Manager, search "noEmbryo" (the pack title is noEmbryo nodes), or the manual way:

    cd ComfyUI/custom_nodes
    git clone https://github.com/noembryo/ComfyUI-noEmbryo.git
    

    Restart ComfyUI. The whole pack is pure Python stdlib - no requirements.txt, no model downloads, nothing extra to install, which is rare enough in this ecosystem to be worth saying out loud.

    Where people get burned

    • Two runs in the same second overwrite each other. The timestamp is second-resolution, so if you queue twice within one second (easy with turbo models), the second save clobbers the first. Slow down, or add your own counter to the filename.
    • It saves the workflow, not an image. Don't wire this in thinking it's a Save Image replacement - the file it writes won't open in an image viewer. Pair it with a normal Save Image node.
    • Default location is easy to forget. If you set no path, look in ComfyUI/output/saved_workflows/, not next to your workflow files.
    • Keep the node on the canvas. If you delete it, saving stops - there's no global setting that survives node removal.

    It's not glamorous, but it's the kind of node you install once, forget about, and then quietly thank yourself three weeks later when a workflow you swear you saved turns out to have only existed in your head.

    Categoryutils

    Inputs (3)

    NameTypeDefaultDescription
    save_directorySTRINGsaved_workflowsRelative to ComfyUI output directory or absolute path
    filenameSTRINGworkflow_{timestamp}Filename (include {timestamp} for unique timestamps)
    triggerBOOLEANtrueSave the workflow if Enabled

    Outputs (2)

    NameTypeDescription
    statusSTRINGGet a status report text
    ✳️triggerBOOLEANDammy output, to trigger execution if nothing is connected