Save Image Extended AdobeRGB 1.0.1
Saving real 16-bit Adobe RGB TIFFs from ComfyUI
- images
ComfyUI's stock Save Image node writes an sRGB, 8-bit PNG. For anything that lives on a screen, that's fine. But if you're handing files to a print shop, a stock library, or a retoucher whose pipeline expects wide-gamut working spaces, sRGB clips the color and 8-bit can band in smooth gradients. That's the hole this node fills: Save Image Extended AdobeRGB replaces your save node with one that does a real sRGB-to-Adobe RGB (1998) conversion, embeds a proper ICC profile, and writes genuinely 16-bit-per-channel PNG or TIFF files.
It's a descendant of the well-known Save Image Extended node (original concept by thedyze, maintained by AudioscavengeR), which already gave you filename templating, counters, and job logs. This fork by MushroomFleet rebuilt the broken TIFF path from scratch and bolted on the color pipeline. Honest take: this is a tiny niche - search the reddit corpus and almost nobody talks about Adobe RGB in ComfyUI. If you're not working toward a color-managed pipeline, this node solves a problem you don't have. If you are, it's essentially the only option, and it does it properly.
How the conversion actually works
The name sounds like marketing, but the README's pipeline is real and the code backs it up. When you pick Adobe RGB 1998, the node does a mathematical conversion - it does not just slap a profile tag on an sRGB file, which is the lazy move that turns everything muddy. The steps: undo the sRGB transfer function (linearize), multiply by a precomputed 3x3 chromaticity matrix (sRGB-linear → Adobe RGB-linear, both D65 so no chromatic adaptation needed), clamp to [0,1], then apply Adobe RGB's gamma of 563/256 = 2.19921875. That's the exact spec value, not a rounded 2.2. It's all vectorized NumPy, so it costs you nothing in workflow speed.
The ICC profile itself is hand-built in pure Python - a v2.1 profile with the nine required tags, Bradford-adapted D50 primaries. 16-bit TIFF goes through tifffile with the ICC embedded as tag 34675; 16-bit PNG goes through imagecodecs with an injected iCCP chunk; everything 8-bit goes through Pillow with the profile attached.
The inputs that matter
The node inherits a lot of Save Image Extended's knobs (filename/folder templating, jobs.json logging, counters), but a beginner really touches three things:
- color_space -
sRGBorAdobe RGB 1998. Pick Adobe RGB when the file is headed somewhere that will honor it. - bit_depth -
8or16. 16-bit is only honored for PNG and TIFF. Every other format silently falls back to 8-bit. - output_ext -
.png,.tiff,.webp,.jpg,.jpeg,.gif,.bmp, plus.avifand.jxlif you've installed the optional plugins (more below)..tiffor.pngis what you want for the full-fidelity path.
quality (0–100) matters for the lossy formats; for PNG it maps onto the compression level 0–9, which doesn't hurt quality, just file size. filename_keys defaults to sampler_name, cfg, steps, %F %H-%M-%S, so you get names like ComfyUI-euler-cfg7-2026-08-16 14-32-05_0001.png - handy when you're archiving batches. save_metadata embeds the prompt/workflow into the file, which you'll usually want on. There are no outputs: it's a terminal output node, returning only the image list the UI preview shows (toggleable with image_preview).
Installing it
Easiest route: ComfyUI Manager, search Save Image Extended AdobeRGB, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/MushroomFleet/ComfyUI-Save-Extended-TIFF16-adobe-rgb.git
pip install -r ComfyUI-Save-Extended-TIFF16-adobe-rgb/requirements.txt
Real dependencies are numpy, tifffile, imagecodecs, and pillow. imagecodecs is the heavy one - big binary wheels, but pip handles it. Two things to note: the README lists piexif, but the shipped requirements.txt doesn't install it and the code never imports it, so ignore it. And .avif/.jxl only appear in the format dropdown when pillow-avif-plugin / pillow-jxl-plugin are installed - the node checks at import and inserts them into the list.
Where people get burned
The big one: you pick bit_depth 16, choose .jpg out of habit, and get an 8-bit file. That's by design, but the node only prints a console message - it doesn't error or warn in the UI. Same story if tifffile or imagecodecs somehow didn't install: 16-bit quietly downgrades to 8-bit with a log line. So when your "16-bit" output looks suspicious, check the ComfyUI console before blaming your monitor.
Speaking of monitors: your screen and ComfyUI's preview are sRGB. In a color-managed viewer (Photoshop, any modern browser) the embedded Adobe RGB profile makes the file display correctly. In a naive viewer that ignores profiles, it may look flatter or oversaturated. That's not the node misbehaving - it's what correct color management looks like.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filename_prefix | STRING | ComfyUI | Fixed string prefixed to file name |
| filename_keys | STRING | sampler_name, cfg, steps, %F %H-%M-%S | Comma separated sampler parameters for filename. Example: sampler_name, scheduler, cfg, denoise. Also accepts vae_name, model_name, ckpt_name, resolution. Use node.widget syntax like 13.sampler_name for specific nodes. |
| foldername_prefix | STRING | Fixed string prefixed to subfolders | |
| foldername_keys | STRING | ckpt_name | Same rules as filename_keys. Use / or ../ for subfolders. |
| delimiter | STRING | - | Delimiter between filename parts. Can use / for subfolders. |
| save_job_data | COMBO | disabled | Save job info as entries in jobs.json. |
| job_data_per_image | BOOLEAN | false | Save individual job data file per image. |
| job_custom_text | STRING | Custom string saved with job data. | |
| save_metadata | BOOLEAN | true | Embed prompt/workflow metadata into image file. |
| counter_digits | INT | 40–8 | Digits for counter. 4 = 0001. Set 0 to disable. |
| counter_position | COMBO | last | Counter position: image_0001 or 0001_image. |
| one_counter_per_folder | BOOLEAN | true | Deprecated - retained for backward compatibility. |
| image_preview | BOOLEAN | true | Show image preview in UI. |
| output_ext | COMBO | .png | Output file format. |
| quality | INT | 900–100 | Quality for lossy formats. PNG: maps to compress level 0-9. |
| named_keys | BOOLEAN | false | Prefix values with key names. e.g. seed=123-cfg=7.5 |
| color_space | COMBO | sRGB | Color space for output. Adobe RGB 1998 converts from sRGB and embeds ICC profile. |
| bit_depth | COMBO | 8 | Bit depth per channel. 16-bit only for PNG and TIFF; others fall back to 8. |
| positive_text_optopt | STRING | Optional positive prompt for job.json. | |
| negative_text_optopt | STRING | Optional negative prompt for job.json. |
Outputs (0)
No outputs