Image Saver Simple
The file-saving half, fed by a separate metadata node
- images
- metadata
- hashes
- a1111_params
Same job as the big Image Saver node - write your images with Civitai-compatible metadata - but split in two. Image Saver Simple only handles the file part: name, path, format, quality. The metadata (prompt, sampler, seed, hashes) comes in through a single metadata input, produced by the separate Image Saver Metadata node. If you've ever stared at the full Image Saver with its twenty-something widgets and wished the "how do I save the file" bit were untangled from the "what do I record about the run" bit, this is that.
It's the cleaner half of a two-node pattern, and it's the one a lot of people end up preferring once their graphs get busy.
How it works
Think of it as unpacking a package. Image Saver Metadata gathers all the generation details and emits a METADATA object; Image Saver Simple receives that object and writes it into the image alongside the actual file. Because the metadata is prepared elsewhere, this node stays small - you point it at a folder, pick a format, and go. Everything about what gets recorded lives upstream, which means you can build the metadata once and route it to several savers, or tweak the file settings without touching the generation info.
Like the rest of the pack it writes an A1111-style parameter string for Civitai's auto-detection, and for PNG it also embeds the full ComfyUI workflow so the image stays re-openable.
The inputs and outputs that matter
- images - the batch to save.
- filename - placeholder-aware (
%basemodelname,%seed,%time,%counter, etc.); default%time_%basemodelname_%seed. - path - output subfolder, also placeholder-aware.
- extension -
png,jpeg,jpg,webp. PNG embeds the workflow; the others carry A1111 params only. - metadata (optional) - the
METADATAobject from Image Saver Metadata. Leave it disconnected and you get a plain save with no generation info, which defeats the point - wire it up. - embed_workflow / save_workflow_as_json - keep the graph inside the PNG, and optionally drop a sidecar
.json. - quality_jpeg_or_webp / lossless_webp / optimize_png - the usual size-vs-quality knobs.
Outputs are hashes and a1111_params strings, same as the other savers.
Installing it
ComfyUI Manager: search ComfyUI Image Saver, install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/alexopus/ComfyUI-Image-Saver
cd ComfyUI-Image-Saver
pip install -r requirements.txt
Restart and hard-refresh. Small requirements.txt, no models to download.
Where people get tripped up
The main gotcha is treating this as a standalone saver. On its own it just writes a file with no generation metadata - the whole reason to use this pack. It's only half the tool; pair it with Image Saver Metadata feeding the metadata input, or use the single all-in-one Image Saver node instead. Pick one pattern per branch and don't half-wire it.
Second: JPG and WEBP don't carry the ComfyUI workflow, only the A1111 params. If you want to drag the image back into ComfyUI later, save PNG (with embed_workflow on) or tick save_workflow_as_json for a sidecar. And if Civitai isn't linking your model or LoRAs after upload, that's an upstream problem - fix it in the Metadata node, since this node only writes what it's handed.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | image(s) to save | |
| filename | STRING | %time_%basemodelname_%seed | filename (available variables: %date, %time, %time_format<format>, %model, %width, %height, %seed, %counter, %counter<padding>, %sampler_name, %steps, %cfg, %scheduler_name, %basemodelname, %denoise, %clip_skip) |
| path | STRING | path to save the images (under Comfy's save directory) | |
| extension | COMBO | file extension/type to save image as | |
| lossless_webp | BOOLEAN | true | if True, saved WEBP files will be lossless |
| quality_jpeg_or_webp | INT | 1001–100 | quality setting of JPEG/WEBP |
| optimize_png | BOOLEAN | false | if True, saved PNG files will be optimized (can reduce file size but is slower) |
| embed_workflow | BOOLEAN | true | if True, embeds the workflow in the saved image files. Stable for PNG, experimental for WEBP. JPEG experimental and only if metadata size is below 65535 bytes |
| save_workflow_as_json | BOOLEAN | false | if True, also saves the workflow as a separate JSON file |
| metadataopt | METADATA | metadata to embed in the image | |
| counteropt | INT | 00–18446744073709550000 | counter |
| time_formatopt | STRING | %Y-%m-%d-%H%M%S | timestamp format |
| show_previewopt | BOOLEAN | true | if True, displays saved images in the UI preview |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| hashes | STRING | Comma-separated list of the hashes to chain with other Image Saver additional_hashes |
| a1111_params | STRING | Written parameters to the image metadata |