Image Saver (From Pipe)
The node that actually writes the file
- pipe
- images
- pipe
- hashes
- a1111_params
This is the business end of the pipe system - the node that takes your bundled IMAGESAVER_PIPE, unpacks it, and actually writes the image to disk with all its metadata baked in. Everything the other pipe nodes did was preparation; this is where it lands. It's an output node, so it's a valid endpoint for your graph.
Crucially, this is the moment the deferred work finally runs. Remember that the whole pipe system holds off on the expensive stuff - checkpoint hashing, CivitAI lookups - until the final save. This is that save. When this node executes, the hashes get computed, the a1111-style parameter string gets assembled, and the file gets written with metadata CivitAI can read back. All the branching and editing upstream was just staging; the commit happens here.
Why the metadata matters
The reason anyone installs this pack: images saved through it upload to CivitAI with their resources actually linked. Native ComfyUI images famously don't - you post a generation, and the site shows the prompt and steps but can't tell which checkpoint or LoRAs you used, because ComfyUI doesn't write the hashes CivitAI matches against. This node writes them. For PNG it stores both the full ComfyUI workflow and the a1111 parameter string; for JPEG and WEBP it stores the a1111 string only. Hashes of models, LoRAs and embeddings ride along so CivitAI's auto-detection resolves them to the right pages.
The inputs and outputs
Two required inputs:
pipe(typeIMAGESAVER_PIPE) - the bundle carrying every filename, path, format and metadata setting.images(typeIMAGE) - the actual pixels to write, straight from your VAE decode.
One optional input, show_preview (default true) - whether to show the saved image in the node UI. Turn it off in big batch graphs if the previews clutter things up.
The outputs let you keep going or inspect what was written:
pipe(IMAGESAVER_PIPE) - the pipe, passed through, so you can chain another save or reuse the settings.hashes(STRING) - the computed resource hashes, exposed as text if you want to log or reuse them.a1111_params(STRING) - the full a1111-style parameter string that got embedded. Handy for feeding into a text node, a caption, or a sidecar log.
Those two string outputs are a nice touch - you can see exactly what metadata was written without opening the file in an EXIF viewer.
How to install it
ComfyUI Manager: search "ComfyUI Image Saver", install, restart.
Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/alexopus/ComfyUI-Image-Saver
cd ComfyUI-Image-Saver
pip install -r requirements.txt
then restart. No model downloads; it's a pure-Python pack, a maintained fork of the older comfy-image-saver.
Common issues & troubleshooting
CivitAI detects the model but not the LoRAs. This is the recurring one. The checkpoint hashes fine, but LoRAs only get hashed if they show up in the prompt as <lora:name:weight> text. If your LoRAs are applied purely through loader nodes, this node never sees a string to hash. The pack's recommended fix is ImpactWildcardEncode from the Impact Pack, which turns LoRA strings into real conditioning while leaving the <lora:...> text for the metadata to catch. Or add them by hand via the metadata config's additional_hashes.
Nothing saved. Because everything defers to this node, if the branch feeding it never executes - a dead branch, a muted node upstream - no file appears and no error necessarily fires. Confirm the pipe and images inputs both reach this node.
Metadata missing on your WEBP/JPEG. Only PNG carries the full workflow graph. JPEG and WEBP get the a1111 parameter string but not the recoverable ComfyUI graph - that's a format limitation, not a bug. Save PNG if you want to drag the image back in later and rebuild the workflow.
Execution runs samplers before saving, memory climbs. In large multi-branch graphs ComfyUI can run several KSamplers before reaching the matching save nodes. Keep each Image Saver (From Pipe) branch free of dependencies on other active branches so ComfyUI finishes and frees them one at a time.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | IMAGESAVER_PIPE | — | |
| images | IMAGE | image(s) to save | |
| show_previewopt | BOOLEAN | true | if True, displays saved images in the UI preview |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| pipe | IMAGESAVER_PIPE | The pass-through Image Saver Pipe |
| 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 |