Nodes/comfy-oiio/Save Image (OIIO)
ComfyUI Node

Save Image (OIIO)

Save Real EXR Sequences Out of ComfyUI (Your Nuke Comp Will Thank You)

By melMass·Created 2 years ago·Updated 12 months ago· 13
Save Image (OIIO)
  • images
  • filename
filename_prefixoutput.exr
precisionhalf
compressionzip
colorspaceauto
frame_start1
frame_pad4
dwa_compression_level45.00

Core ComfyUI can save a PNG, a JPEG, or a WebP, and that's about it. That's fine for sharing on Discord, but the moment your output needs to survive a Nuke comp, a DaVinci grade, or any pipeline that isn't "post image to Reddit," 8-bit PNG is the wrong tool. Save Image (OIIO) writes OpenEXR - plus TIFF, DPX, TGA, HDR, PSD and a pile more - with real float precision, real compression control, and proper frame numbering. It's the pack's closer, and the reason most people install it.

The tell is in the defaults: filename_prefix is output.exr. This node wants to write EXR frames, and by default it writes them as half (16-bit float) with zip compression. Half is the right call - it has enough dynamic range to survive color grading, at about half the file size of full float (32-bit). If it fits in half, just use it.

How it works

The node takes your batch of IMAGE tensors, converts each to float, pushes it through an OIIO ImageBuf, and writes each frame with ImageOutput. Because it's OpenImageIO underneath, the format is decided by whatever extension you put in filename_prefix - .exr, .dpx, .tiff, whatever. Frames get numbered with zero padding: with default frame_pad: 4 and frame_start: 1, you get output_0001.exr, output_0002.exr… on up. Relative paths land in ComfyUI's output folder; give it an absolute path and it'll create directories as needed.

The inputs that matter

  • images - the batch to write. A video-length batch becomes a frame sequence.
  • filename_prefix - default output.exr. The extension picks the format, so this is your format selector.
  • precision - half (default) or float. Half unless you specifically need 32-bit range.
  • compression - the OpenEXR codec list: none, zip, zips, piz, pxr24, b44, b44a, dwaa, dwab. zip is the safe default; piz is great for photographic content; dwaa/dwab are the lossy-but-small options and are the only ones that use dwa_compression_level (default 45, range 10–250 - higher = smaller files, more loss).
  • colorspace - auto by default. With auto it writes your values exactly as they are and tags the file with what's in them. Set it to something like scene_linear and the node converts from sRGB to that space on the way out, tagging the file so Nuke reads it correctly. If you're building an EXR comp, this is the field that pairs with Colorspace Convert (OIIO).
  • frame_start / frame_pad - first frame number and zero-pad width for sequences.

Installing it

ComfyUI Manager: search "comfy-oiio" (or "OpenImageIO"). Manual: cd ComfyUI/custom_nodes && git clone https://github.com/melMass/comfy_oiio, then pip install -r requirements.txt (openimageio plus clique), restart. If Manager's auto-install of requirements fails on the Windows portable build, pip-install into its embedded python: python_embeded\python.exe -m pip install openimageio clique.

Troubleshooting & honest caveats

  • It's marked EXPERIMENTAL in the source. It works, but it's early - treat it as "newest release first" territory and keep an eye on the repo.
  • EXR won't preview in ComfyUI's browser. The node writes a output_0001.exr.preview.png next to each sequence start so you can sanity-check it, but don't expect thumbnails like core SaveImage.
  • Workflow metadata isn't embedded in the file. The pack writes prompt/UI info as sidecar JSON files (_api.json, _ui.json), not into the EXR. Don't expect to drag a saved EXR back into ComfyUI and recover the graph - that PNG-injection trick doesn't carry over to float formats.
  • If the output looks dark or washed out, check colorspace - if you forced a conversion, your viewer needs to interpret the file in that same space. auto is the safe "just write what you see" mode.
Categoryoiio

Inputs (8)

NameTypeDefaultDescription
imagesIMAGE
filename_prefixSTRINGoutput.exr
precisionCOMBOhalf2 options: half, float
compressionCOMBOzip9 options: none, zip, zips, piz, pxr24, b44, +3
colorspaceCOMBOauto36 options: auto, scene_linear, lin_srgb, lin_rec709, Rec709, sRGB, +30
frame_startINT10–999999
frame_padINT41–8
dwa_compression_levelFLOAT45.0010–250

Outputs (1)

NameTypeDescription
filenameSTRING