Simple Image Saver
Save PNGs and JPGs with metadata, suffixes, and no overwrites
- images
ComfyUI's built-in saver is fine until you want a specific filename in a specific folder with metadata intact - then it's a fight. SimpleImageSaver is the pack's no-drama file writer: take images, give it a path and a name, and it writes PNG or JPG with the workflow metadata embedded, an optional suffix on the filename, and a counter so it never silently clobbers an existing file.
The inputs are self-explanatory in a good way - most have tooltips from the author:
output_path- "Directory path (absolute or relative to ComfyUI/output)." Relative paths land in your output folder, so you can keep everything tidy.filename- base name without extension (defaultComfyUI).suffix- "Optional suffix appended with a dash when provided." Sofilename: photo,suffix: restored→photo-restored.png. Feed it fromFilenameAppendSuffixorLoadImageCombinedand your batch files get consistent, meaningful names.file_format- PNG or JPG.jpeg_quality(default 95, "JPEG quality (0-100)") for the JPG side.include_metadata- "Include workflow metadata (prompt + extras)" - on by default, so your saved PNG carries the prompt and graph info, which is the difference between a file you can reverse-engineer and a dead end.unique_filenames- "Append a counter to avoid overwriting existing files" - on by default. This is the anti-footgun: rerun the graph, getphoto-restored-1.png, not a silently destroyed previous run.
It's an output node (is_output_node true), so it has no outputs and sits at the end of the graph - the standard terminal-node shape. Under the hood it writes real PNG metadata via PIL's PngInfo and, for JPEG, embeds a comment. The honest caveat: JPEG comments have a size cap, so if your metadata payload is huge it gets skipped with a warning in the log rather than silently truncated. If metadata fidelity matters, PNG is the format.
Install
Manager → search "PortraitUtils", or:
cd ComfyUI/custom_nodes
git clone https://github.com/heyburns/PortraitUtils
Restart. PIL only, which the pack already requires.
Common issues
- "File already exists" behavior surprises you -
unique_filenamesdefaults on; turn it off if you genuinely want to overwrite each run. - JPEG has no metadata - comments cap out. If the workflow prompt is huge, it's dropped with a warning. Use PNG for archival, JPG for quick exports.
- Files landing somewhere unexpected - relative
output_pathresolves against ComfyUI/output. Use an absolute path if you want them elsewhere. - The
(1)counters feel messy - that'sunique_filenamesdoing its job. It's the "never lose a render" tradeoff, and it's usually worth it.
It's the least glamorous node in the pack and possibly the most used. Every pipeline ends somewhere, and ending at a well-named, metadata-carrying file is a quality-of-life upgrade you feel on the first batch.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| output_path | STRING | Directory path (absolute or relative to ComfyUI/output). | |
| filename | STRING | ComfyUI | Base filename without extension. |
| suffix | STRING | Optional suffix appended with a dash when provided. | |
| file_format | COMBO | PNG | 2 options: PNG, JPG |
| jpeg_quality | INT | 950–100 | JPEG quality (0-100). |
| include_metadata | BOOLEAN | true | Include workflow metadata (prompt + extras). |
| unique_filenames | BOOLEAN | true | Append a counter to avoid overwriting existing files. |
Outputs (0)
No outputs