Doss Save Image
Save to an output subfolder, auto-numbered, without breaking the chain
- image
- image
Every ComfyUI user knows the ritual: hit Queue, wait, then spelunk through output trying to figure out which PNG is the one you just made. The stock Save Image node works, but it's PNG-only, terminal (nothing flows out of it), and its filename handling makes organizing batches annoying. Doss Save Image is a friendlier version with a real twist: it writes to the output folder or any subfolder you name, in JPEG, PNG, PDF, WEBP, TIFF, ICO or BMP, auto-increments filenames so it never overwrites, and passes the image batch through unchanged. It's a save node that isn't a dead end.
That pass-through output is the reason to care. You can wire image from the sampler into Doss Save Image, then keep feeding the same tensor to a preview, an upscaler, or a second saver - saving becomes a side effect of the pipeline instead of its end.
How it works
The backend is plain Python plus PIL - no extra dependencies. It sanitizes your filename (invalid Windows characters like \/:*?"<>| become _, with a toast warning), strips any known extension you typed, and resolves save_location relative to ComfyUI's output directory. Absolute paths, drive letters, and .. traversal are rejected outright, so you can't accidentally write outside output.
For a batch it pre-computes unique paths - ComfyUI.png, ComfyUI(1).png, ComfyUI(2).png - and writes every frame. PNG embeds the prompt and workflow metadata just like core Save Image (that's the "workflow included" culture in action). Formats behave sensibly: JPEG and PDF flatten transparency onto white, PNG and WEBP keep alpha, TIFF uses LZW compression, and ICO writes a single 256×256 icon per batch frame. There's also a Browse button that only shows folders inside output, so you can pick or create a subfolder without typing a path from memory.
Inputs and outputs
image- requiredIMAGE. The batch you want saved.filename- string, defaultComfyUI.save_location- string, defaultoutput. Subfolders are output-relative, likeportraits/session_01.file_format- the dropdown: JPEG, PNG, PDF, WEBP, TIFF, ICO, BMP.save_metadata- boolean, default on. Embeds prompt/workflow metadata where the format supports it.save_metadata_text_file- boolean, default off. Writes a.txtsidecar next to each image with generation metadata and save details as JSON.
Output is a single image - the original batch, untouched.
Installing it
ComfyUI Manager, search "Doss Node Suite", or:
cd ComfyUI/custom_nodes
git clone https://github.com/JamesDanielDoss/Doss-Node-Suite.git
Restart and look under the ⚡ Doss Node Suite category. No models, no heavy dependencies - numpy and PIL are already in ComfyUI.
Gotchas
The first time you use it, go look in ComfyUI/output (or the subfolder you chose) - that's where files land, not your Downloads folder. Other things that trip people up: there are no quality or compression sliders, so JPEG is hardcoded to quality 95 and WEBP to 100; ICO is always 256×256; typing an absolute path into save_location throws an error rather than silently redirecting. And because it never overwrites, every run adds a new (n) file - great for keeping runs, mildly annoying if you wanted in-place saves. The settings are ordinary widgets, so they ride along in the workflow JSON - copy your workflow and the folder choice travels with it.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| filename | STRING | ComfyUI | — |
| save_location | STRING | output | — |
| file_format | COMBO | PNG | 7 options: JPEG, PNG, PDF, WEBP, TIFF, ICO, +1 |
| save_metadata | BOOLEAN | true | — |
| save_metadata_text_file | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |