SaveTifImage
Want a real 16-bit file out of ComfyUI? SaveTifImage is the whole pack
- images
ComfyUI's built-in SaveImage writes an 8-bit PNG. That's fine for posting on CivitAI, but the moment your output is going anywhere that needs real tonal range - a depth map for 3D printing, a displacement map, a base image you want to grade heavily in Photoshop or darktable - 8 bits crushes gradients into banding. SaveTifImage exists for exactly that: it writes your image out as a 16-bit TIFF instead.
And yes, the pack name is literal. ComfyUI-RawSaver ships one node, this one. No model files, no other features, no drama. If you need 16-bit output, it does the job in two inputs; if you don't, keep scrolling.
How it works
Under the hood it's almost comically small. The node takes your IMAGE tensor (which ComfyUI keeps as floats roughly in [0, 1]), moves it to the CPU, converts it to float16, multiplies by 65535, and casts the whole thing to uint16 before handing it to imageio to write. So your file is a genuine 16-bit-per-channel TIFF, 65535 levels per channel rather than PNG's 255.
One honest caveat, since we're looking at the source: the float16 step means the precision is really ~11 significant bits stretched into a 16-bit container, not a full 16 bits of clean integer data. That's still dramatically better than 8-bit, and for depth maps and grading it's more headroom than most workflows ever touch. Think of it as "lots more dynamic range," not "mathematically perfect 16-bit."
Because it reuses ComfyUI's get_save_image_path, files land in the same ComfyUI/output folder as SaveImage, named {prefix}_{counter:05}_.tif, and it uses the same auto-incrementing counter (it'll skip past existing files rather than overwrite). Feed it a batch of images and you get one numbered TIFF per frame.
The inputs that matter
There are only two, and you'll touch one of them:
- images - your
IMAGEtensor. Wire this from whatever produced your output; there's nothing to configure. - filename_prefix - default
ComfyUI. Set this to something meaningful. Counter-stamped filenames likeComfyUI_00001_.tifare how you lose files, and there's no subfolder option here.
That's the whole thing. It's an output node, so it produces no outputs to wire anywhere - you just add it to the end of the graph and run.
Installing it
The easy way is ComfyUI Manager: search for ComfyUI-RawSaver and hit install. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/LonicaMewinsky/ComfyUI-RawSaver
Then restart ComfyUI. There are no model downloads - the only dependency is imageio, which the pack's __init__.py quietly tries to pip install on its own if the import fails. Handy, though it means your first launch can take an extra few seconds while that happens.
Common gotchas
- Values outside
[0, 1]will wrap. The cast touint16doesn't clamp, so an over-bright pixel just wraps around and comes back dark. If a node upstream hands you HDR values past 1.0, clamp them first. - No metadata, no embedded workflow. PNG outputs carry the graph that made them; this TIFF doesn't. Keep the workflow JSON if you plan to revisit it.
- The auto-install only helps if you have network. On an offline box, install manually:
pip install imageio. - File goes to
output/, not your Downloads. Easy to miss when you're hunting for the file.
If you want the 16-bit TIFF to actually do something, it has to reach a program that respects bit depth - GIMP 2.10+, Affinity, Photoshop, RawTherapee. An 8-bit-only viewer will flatten it right back down and you'll wonder what the point was.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filename_prefix | STRING | ComfyUI | — |
Outputs (0)
No outputs