Nodes/Gprompts/Save Image and add Note node to embedded workflow
ComfyUI Node

Save Image and add Note node to embedded workflow

Your PNG can carry a note now — and one loader actually reads it back

By GadzoinksOfficial·Created about a year ago·Updated a day ago· 3
Save Image and add Note node to embedded workflow
  • image
  • notes
  • computed_prompt
    filename_prefixComfyUI

    Every ComfyUI PNG already contains the workflow that made it. Drag it back onto the canvas and the whole graph rebuilds. The problem is what rebuilds: a pile of nodes, with the sentence you actually wrote buried in a text box in the middle of it and the seed you want buried in a widget.

    Save Image and add Note node to embedded workflow exists to fix exactly that. It saves the image the normal way, but first it injects a Note node into the workflow copy that gets embedded in the file, with your text in it. Open that PNG later - a week, a year - and there's a readable note sitting on the canvas saying Image created with prompt "a corgi in a spacesuit, golden hour". That's the whole trick, and it's a good one.

    What it actually is

    Mechanically it's core SaveImage with a pre-step: copy extra_pnginfo, optionally tuck your prompt in under computed_prompt, append a Note node to workflow.nodes, then hand off to the stock save. What you get is an ordinary ComfyUI PNG with the usual workflow and prompt text chunks - plus a note. No model files, no new output convention.

    The inputs

    Required: image (what you're saving) and filename_prefix. Optional: notes and computed_prompt - both typed as * because they'll accept a string from anywhere.

    You only really set one, and the rule is: if computed_prompt is connected, it wins and notes is ignored. Wire computed_prompt from the pack's own GPrompts node and you get the resolved prompt - the one after random or sequential blocks were picked and wildcards were expanded, which is the version you can't reconstruct from the original text. That's the killer use. notes is for anything else you want human-readable later: the String Formatter node from the same pack (it exposes $seed, $hostname, $date and friends) is the natural partner for building that string.

    There are no outputs. is_output_node is true, so the graph runs backward from it like any save node.

    The filename trap

    filename_prefix defaults to ComfyUI, and you may have noticed the tooltip promises $variables for dynamic naming. What the code actually checks is a %: if your prefix contains no % at all, the node silently prepends a dated folder, so ComfyUI becomes output/2026-09-16/ComfyUI_00001_.png. Nice for organisation if you know it's coming, baffling if you don't and go looking in output/. Want your saves flat? Put a core token in the prefix, e.g. portraits/%date:yyyy-MM-dd%, and the auto-folder is skipped.

    Install

    In ComfyUI Manager, search for Gprompts and install, then restart. Manually:

    cd ComfyUI/custom_nodes
    git clone https://github.com/GadzoinksOfficial/comfyui_gprompts
    

    No models, no downloads. The pack's requirements.txt is literally one line - pillow - so you are not signing up for a dependency adventure. One caveat that applies to the whole pack: __init__.py pulls in a module that imports ComfyUI's newer node API and comfy_extras audio/video classes. On an old install that import fails and every node in the pack disappears, including this one. Keep ComfyUI reasonably current.

    Round-tripping it

    The ask that sent you here is probably "I want to re-run the thing that made this image." The note is for your eyes; the machine-readable half is the computed_prompt chunk, and the pack's own Load images from folder node has a prompt output that reads it back off the file. Point that loader at your output folder, wire prompt into your positive text encoder, and you're iterating on old generations with different seeds instead of retyping prompts from memory. Save node and loader are designed as a pair - use them as one.

    Where people get burned

    • The note only exists if the workflow does. If you ran this headless or through an API, there's no workflow in extra_pnginfo and the Note node has nowhere to go. Nothing errors; you just get a plain PNG.
    • Don't expect the note to be a metadata standard. What lands in the file is ComfyUI's own chunks, so CivitAI-style model auto-linking does not come with this - if that's your goal you want a saver that also emits an A1111-style parameters block. This node is for you, not for an uploader's parser.
    • Anything that re-encodes destroys it. PNG is the only format that round-trips; converting to JPEG/WebP, screenshotting, or posting through a host that recompresses drops the note and the graph together. Keep the original PNG - that file is your master.

    One dependency, zero moving parts. If you've ever stared at a folder of 6,000 images wondering which seed produced that one, it's the cheapest fix here.

    Categoryimage

    Inputs (4)

    NameTypeDefaultDescription
    imageIMAGEInput image to save with metadata
    filename_prefixSTRINGComfyUIPrefix for the output filename (supports $variables for dynamic naming)
    notesopt*Text for notes node that is embedded in saved image
    computed_promptopt*The computed prompt from Gprompts Node to embed in saved image (use this OR notes)

    Outputs (0)

    No outputs