Nodes/Eden.art nodesuite/Save Image Advanced (Eden) πŸ’Ύ
ComfyUI Node Runs on cloud

Save Image Advanced (Eden) πŸ’Ύ

ComfyUI Took This Node's Name β€” Eden's Version Still Leaves a Paper Trail

By edenartlabΒ·Created 3 years agoΒ·Updated about 22 hours agoΒ· 120
Save Image Advanced (Eden) πŸ’Ύ
  • images
    β—„filename_prefixComfyUIβ–Ί
    β—„add_timestamptrueβ–Ί
    β—„save_metadata_jsontrueβ–Ί

    Save Image Advanced (Eden) πŸ’Ύ does what the core SaveImage node does - PNG into ComfyUI/output, with the prompt and workflow chunks embedded in the file - and adds two things: a timestamp in the filename, and a sidecar .json of the same metadata sitting next to the PNG.

    That's it. It's a small utility, and you'd reach for it for one of two reasons. Either you want to know when a render happened without opening it, or you want the graph metadata as actual data on disk - something you can jq, grep, diff with, or feed into a script or dataset pipeline, instead of something you have to open an image to read.

    Why the sidecar matters more than it sounds

    The metadata-in-the-image convention is the load-bearing fact of this whole ecosystem: a ComfyUI PNG is a re-openable project file, and the moment anything re-encodes it - a Reddit upload, a JPEG export, a screenshot - that project file is deleted (the KB's image-io-metadata doc). A .json sibling survives all of that. If your workflow is "render a lot, post the small webp, keep the archive sane," the sidecar is the part that doesn't get eaten.

    It also pairs neatly with the pack's own prompt reader: Eden_PromptFromImageFolder reads the prompt back out of a PNG in a folder, while this node leaves the same information as a standalone file that a script can read without opening an image at all.

    The four inputs

    All four are required, which really means "four widgets to set":

    • images - the IMAGE batch to save.
    • filename_prefix - defaults to ComfyUI, and it takes subfolders, so renders/shot writes into output/renders/shot/. Unlike core's, it doesn't do %date:...% token templating - that's what add_timestamp is for.
    • add_timestamp (on by default) - inserts YYYYMMDD-HHMMSS into each filename. With it off you get the core-style counter name (with a stray trailing underscore, harmlessly).
    • save_metadata_json (on by default) - writes a .json beside each PNG containing the prompt and workflow blobs, indented so you can actually read them.

    No outputs. It's a terminal output node that reports the saved filenames back to the UI for the preview, so there's nothing to wire downstream of it.

    The name situation, and why your old workflows still open

    Since May 2026 ComfyUI core ships a node whose id is SaveImageAdvanced - and core ids win. Eden's pack handles this properly rather than just breaking: the class is registered under both ids, and old workflows are migrated in two places. On the frontend, a small js/ extension renames any SaveImageAdvanced node whose second widget value is a boolean (core's second widget is a format string) when the graph loads. On the server, an on_prompt handler rewrites API-format prompts that use SaveImageAdvanced and pass add_timestamp over to Eden_SaveImageAdvanced. The pack also states that node ids, inputs and outputs never change between versions, which is a nicer compatibility promise than most packs make.

    The practical consequence for you: when you write API JSON by hand, use class_type: "Eden_SaveImageAdvanced" and don't rely on the rerouting. When you load an old workflow in the UI, expect the node to quietly rename itself and keep working.

    Installing it

    Same pack as everything else in the Eden.art nodesuite - 80+ nodes, MIT, built and used in production by Eden.art. Search Eden Comfy Pack in ComfyUI Manager, or:

    comfy node install eden_comfy_pipelines
    
    cd ComfyUI/custom_nodes
    git clone https://github.com/edenartlab/eden_comfy_pipelines.git
    pip install -r eden_comfy_pipelines/requirements.txt
    

    The pack needs ComfyUI 0.3.48+ and Python 3.10+. Worth saying plainly: you'll install open_clip_torch, transformers, openai, scikit-learn, scipy, matplotlib, opencv-python and py7zr for the whole pack, even though this node needs nothing but PIL and numpy. If all you wanted was a saver, that's a heavy trade - know that you're buying the pack's loaders (All Media Loader, the folder utilities) along with it.

    Verifying the sidecar is a one-liner:

    jq -r 'keys' "$(ls -t ComfyUI/output/*.json | head -1)"
    

    Where people get burned

    --disable-metadata kills the sidecar too. Both the embedded chunks and the .json write are guarded by the same ComfyUI launch flag, and the flag short-circuits before the JSON branch. So if you run with --disable-metadata for privacy reasons and turn on save_metadata_json expecting it to be the exception - it isn't. There is no JSON, silently. Nobody gets an error.

    It won't fix your CivitAI uploads. CivitAI's auto-linking keys on the A1111-style flat parameters chunk and resource hashes. This node writes the same prompt/workflow chunks core does, plus JSON - not a parameters string. If model auto-attribution on upload is what you're after, this isn't the swap; you need a saver that emits the A1111 dialect too.

    It's PNG-only. No webp, no JPEG, no compression setting you can reach. If you need a lighter output format, core's SaveImage is the right tool and this one isn't.

    Timestamp collisions in a batch are not a thing, but near-identical names are. Every image in one batch shares the timestamp and differs by the five-digit counter, so the useful sort is prefix β†’ timestamp β†’ counter. Two runs in the same second get different counters because the counter is resolved from what's already on disk, not from the run - so you won't clobber a file, you'll just get an unreadable pile of similar names.

    CategoryEden 🌱/Loaders

    Inputs (4)

    NameTypeDefaultDescription
    imagesIMAGEImages to save.
    filename_prefixSTRINGComfyUIFilename prefix; may include a subfolder (e.g. 'renders/shot').
    add_timestampBOOLEANtrueInsert a YYYYMMDD-HHMMSS timestamp into each filename.
    save_metadata_jsonBOOLEANtrueAlso write the prompt/workflow metadata as a .json next to each PNG.

    Outputs (0)

    No outputs