Customizable Save
Finally, a Save node that names files the way you actually want
- images
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]- yourfilename_prefixstring[seed]- the value in theseedinput (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, orwebp, 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
seedinput 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.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| directory | STRING | — | |
| filename_prefix | STRING | ComfyUI | — |
| seed | INT | 00–18446744073709550000 | — |
| format | COMBO | 3 options: png, jpg, webp | |
| quality | INT | 1001–100 | — |
| filename_pattern | STRING | ["[prefix]", "_", "[seed]", "_", "[counter]"] | — |
Outputs (0)
No outputs