Nodes/ComfyUI-CutomizableSave/Customizable Save
ComfyUI Node

Customizable Save

Finally, a Save node that names files the way you actually want

By MilleN2ium·Created 12 months ago·Updated 12 months ago· 0
Customizable Save
  • images
    directory
    filename_prefixComfyUI
    seed0
    format
    quality100
    filename_pattern["[prefix]", "_", "[seed]", "_", "[counter]"]

    The stock Save Image node is fine until it isn't. It dumps everything into output/ as ComfyUI_00001_.png, ComfyUI_00002_.png, and good luck telling which of those 400 files is the one you generated with that one seed yesterday. Customizable Save (node class AdvancedSave) from the MilleN2ium/ComfyUI-CutomizableSave pack is the small quality-of-life fix for exactly that problem: a drop-in replacement Save node that builds its own filenames from parts, and can route files into dated subfolders of output/.

    It's a tiny, opinionated utility - one node, no models, no API calls - and honestly that's most of its appeal. It slots onto the end of any generation pipeline: wire images in from your VAE Decode and it saves. Nothing else.

    How it works

    The core of the node is the filename_pattern field. It's a JSON array of pieces, defaulting to ["[prefix]", "_", "[seed]", "_", "[counter]"]. Each piece is either a placeholder or literal text, and at save time the node substitutes the real values and concatenates them. That's the whole trick - filename composition as a tiny template language.

    The placeholders you actually have, straight from the source:

    • [prefix] - your filename_prefix string
    • [seed] - the value in the seed input (see the gotcha below)
    • [counter] - a zero-padded 5-digit counter
    • [date] / [time] - the current date/time at save moment
    • [width] / [height] - the saved image's dimensions

    There's a directory input too. On the backend it's a plain string, but the node ships a JS extension that turns it into a dropdown of the subfolders already in output/ (plus a Refresh button and a handy "Open Folder" button that pops the folder in your OS file manager). Leave it empty and you're writing straight into output/.

    The inputs that actually matter

    • images - your IMAGE tensor, from VAE Decode.
    • filename_pattern - the template above. This is the input you'll fiddle with.
    • directory - output subfolder, chosen from the dropdown.
    • format - png, jpg, or webp, and quality (1–100, default 100) for the lossy ones.
    • seed and filename_prefix - feed the [seed] / [prefix] placeholders.

    It's an output node, so it has no outputs - it returns {"ui": {"images": ...}} so the browser preview and output panel still work normally.

    Install

    It's on ComfyUI Manager - search "ComfyUI-CutomizableSave" and hit install. Or do it by hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/MilleN2ium/ComfyUI-CutomizableSave
    

    Then restart ComfyUI. There's no requirements.txt and no model download: it only uses Pillow and numpy, which ComfyUI already ships. This is the rare custom node that can't break your environment - a genuine relief in an ecosystem where most installs drag in a pile of conflicting pip deps.

    Gotchas worth knowing

    • The seed isn't synced automatically. ComfyUI's KSampler doesn't push its seed to this node; whatever's in the seed input is what lands in the filename. If you want [seed] to match your generation, pass the same value in - wire it from a shared Seed source or just type it.
    • The counter is session-global. [counter] is a class-level counter shared by every save in your session, not per-folder or per-prefix, and it resets whenever you restart ComfyUI. Same session + same seed = same filename, and files will silently overwrite. The author knows - they patched it from a per-save counter to this session counter deliberately.
    • jpg and webp lose the embedded workflow. The node only writes prompt/workflow metadata into PNGs. The community's whole "drag the image back to rebuild the workflow" culture depends on that metadata, so if you want shareable/restorable outputs, keep saving PNG and use jpg/webp only for exports.
    • The drag-to-reorder is a little flaky. The README itself tells you: if reordering "doesn't work properly, just remove and add." Click an item to add it, drag to reorder, and when that fights you, delete and re-add.
    • Your terminal gets chatty. It prints debug lines for every save. Harmless, just noisy.

    Verdict

    If you batch-export previews or you're the kind of person who likes their seed and date readable in the filename at a glance, this is a genuinely useful ~20-line idea done well. If the built-in Save Image has never annoyed you, you don't need it. But for a zero-dependency, no-model utility that only does one thing - and does it better than the default - it's hard to complain.

    CategoryMilleN2ium

    Inputs (7)

    NameTypeDefaultDescription
    imagesIMAGE
    directorySTRING
    filename_prefixSTRINGComfyUI
    seedINT00–18446744073709550000
    formatCOMBO3 options: png, jpg, webp
    qualityINT1001–100
    filename_patternSTRING["[prefix]", "_", "[seed]", "_", "[counter]"]

    Outputs (0)

    No outputs