Save Image ICC
The other half of keeping color profiles alive
- images
- icc_profile
Here's the thing that makes this pack necessary: ComfyUI's normal SaveImage doesn't just ignore color profiles, it actively drops them. When Pillow loads a tagged PNG, the profile lives in the file's metadata - and when you save a fresh image, that metadata isn't carried over unless you explicitly ask for it. So every image you export through the default save node leaves ComfyUI untagged, even when the image you loaded in was meticulously profiled. Save Image ICC closes that gap by writing an ICC profile back into the PNG it produces.
How it works
This is a fork of the core SaveImage with one addition: an icc_profile input, passed straight to Pillow's save() call as icc_profile=. Whatever bytes come in get embedded as an iCCP chunk in the output PNG. Everything else is the familiar core behavior - images save to ComfyUI/output (or its configured output dir), workflow and prompt metadata get embedded by default, and you get a filename_prefix that supports the %date:yyyy-MM-dd% and %Node.widget% formatting, with ComfyUI appending the auto-incrementing counter and _00001_ style suffixes.
It's an output node with no outputs; it returns UI results for the gallery and that's it.
The inputs that matter
Only three, and honestly only two of them need your attention:
images- theIMAGEtensor to write. Same as core.icc_profile- theICC_PROFILEblob from Load Image ICC. This is the whole point. Feed it the profile and the PNG you save carries the tag.filename_prefix- default "ComfyUI", supports the same dynamic formatting as core SaveImage.
One detail worth knowing: icc_profile is effectively optional even though the schema lists it as required. If you feed it None - say, from a source image that had no profile - the node just writes a normal, untagged PNG exactly like stock SaveImage. No error, no drama.
Why you'd bother
You'd reach for this when the color tag on your output actually matters: print production, handing files to a prepress house, or a client who'll open your PNG in a color-managed app and expect it to look right. Photographers round-tripping reference images through img2img at low denoise use this to keep the profile with pixels that barely changed. If everything you make lives on sRGB screens and social media, this node is a solution to a problem you don't have - that's fine, it's cheap to keep around for the day you do.
Install and gotchas
Same as its sibling: ComfyUI Manager, search "ComfyUI-ICC-nodes", or
cd ComfyUI/custom_nodes
git clone https://github.com/rubi-du/ComfyUI-ICC-nodes
then restart. No dependencies beyond what ComfyUI already ships.
The one trap is mis-tagging. This node reattaches whatever profile you hand it - it doesn't check that the pixels actually belong to that color space. Reattaching the source's Adobe RGB tag to a heavily regenerated output just makes the file wrong with extra steps. Pair Save Image ICC with Load Image ICC, use it for round-trips where colors stay honest, and resist the urge to use it as a color-correction tool. It preserves, it doesn't fix.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The images to save. | |
| icc_profile | ICC_PROFILE | The ICC profile to save. | |
| filename_prefix | STRING | ComfyUI | The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes. |
Outputs (0)
No outputs