Visual Save Image (Studio Leiel)
Visual Save Image, and the folder it lets you walk
- images
What this actually is
Core SaveImage appends a five digit counter to whatever name you hand it: portraits/lara comes out as portraits/lara_00001_.png. The catch: that counter is scoped to the prefix. Build a filename that changes on every render - date, LoRAs, sampler, resolution - and there's no shared prefix to count up, so every file reads 00001 forever. Seven characters of nothing, on a name already long enough to be arguing with the Windows path limit.
Visual Save Image writes the name you gave it and nothing else. That's the pitch - and the second half of the node is the part you end up not wanting to give up: the folder you're saving into becomes browsable straight off the node. It's one of the seven nodes in the Visual Suite (Studio Leiel) pack, and being an output node it's model-independent.
How it works
It borrows ComfyUI's own path machinery rather than rebuilding it: the prefix goes through folder_paths.get_save_image_path(), so %date:...% tokens still expand, subfolders still work, and a prefix still can't climb out of output/. It just throws away the counter that call returns. Everything after the save is deliberately identical to core, because the rest of ComfyUI expects it - same output folder, same prompt and workflow PNG chunks (unless you launched with --disable-metadata, which it honours), same image list handed back to the browser so the preview and Open Image buttons keep working.
Without a counter, two renders can genuinely want the same name - the same recipe twice in a second, or a batch where the name is built once and reused. You get a short suffix instead of a silent overwrite: the first keeps the name, the rest become _2, _3.
The inputs that matter
There are eight widgets and you'll touch maybe three.
images- the IMAGE input. Wire your VAE Decode into it.filename_prefix- defaultLeiel. Wire the pack's Visual Filename Manager output in and the name gets built from whatever's actually in your graph; type in it by hand and it behaves like core SaveImage's field, folders included.trailing_counter- off writes the name as given (the button readsname), on restores the familiarname_00001_. The latter exists for a plain prefix that has nothing else to tell one render from the next.compress_level- 0–9, default 4, same as core. PNG is lossless at every setting; this changes file size and encode time, never a pixel. Leave it.extra_jpg/extra_webp- write a second file beside the PNG, full size, same name. Roughly a 4.6 MB PNG becomes 2.9 MB as JPEG and 1.3 MB as WebP.extra_quality- 1–100, default 92, applies to both copies. Greys out when neither is on.last_seen- not yours. The node stores the last folder it was pointed at here so reopening the workflow tomorrow puts that render back on screen instead of a blank node.
Outputs: none. This is an output node - it writes files and shows them.
The bar under the picture is where the browsing lives. ◀ ▶ (or the arrow keys) step through the folder in name order; click the image to open it full size, the name to copy it; t moves the current file to _trash and put back undoes that newest-first; ↻ re-reads the folder. Give the Filename Manager a seq chip at the front and name order becomes render order - the arrows walk time instead of alphabet.
Install
Search Visual Suite (Studio Leiel) in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/StudioLeiel/comfyui-visual-suite
Restart. There's deliberately no requirements.txt - the pack uses what ComfyUI already ships. The suite's one heavy dependency, transformers, belongs to the Prompt Composer's image reader and nothing else.
Where people get burned
Open folder opens a window on the machine running ComfyUI, not the machine you're reading the page on. On a remote server it'll try to xdg-open on a machine nobody's sitting at.
Trash is a move, not a delete - and the undo is session-scoped. Files go to output/_trash/<original path>/, so one put back by hand lands where it belongs. But put back only remembers this session, and nothing empties the trash for you. No confirmation dialog either, on purpose - the safety is that nothing is destroyed.
The jpg/webp copies lose the workflow. The PNG is written first and is the master - it keeps the prompt and workflow chunks. JPEG and WebP have no PNG text chunks, so the graph doesn't travel. Post the PNG if you want someone to drag it back in.
If CivitAI auto-linking matters to you, this isn't that node. It writes the ComfyUI graph, not the flat A1111-style parameters block CivitAI's parser keys on.
Arrow keys dead? Nothing's bound while you're typing in a field, or when two nodes are selected.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filename_prefix | STRING | Leiel | — |
| trailing_counter | BOOLEAN | false | — |
| compress_level | INT | 40–9 | — |
| extra_jpg | BOOLEAN | false | — |
| extra_webp | BOOLEAN | false | — |
| extra_quality | INT | 921–100 | — |
| last_seen | STRING | — |
Outputs (0)
No outputs