Nodes/ComfyUI-ACES-IO/ACES IO — EXR Saver
ComfyUI Node

ACES IO — EXR Saver

Write real EXR sequences — half-float, full codecs, Nuke-Write style color transform

By BISAM20·Created 6 months ago·Updated 6 months ago· 9
ACES IO — EXR Saver
  • image
  • output_dir
  • ocio_config
  • input_transform
  • colorspace
  • image
  • saved_path
filenamerender_%04d
bit_depth16f (half-float)
compressionZIP (lossless, recommended)
start_frame1

ACES IO - EXR Saver is the node that turns "I made an image" into "I made a deliverable a colorist can work with." ComfyUI's built-in save nodes write 8-bit PNG/JPEG, which is fine for sharing and useless for actual color work - highlights clip, shadows band, and the linear light data your model worked in is gone forever. This is a Nuke Write node port: it writes proper OpenEXR files with 16-bit half-float or 32-bit float depth and your choice of compression codec. Once AI output goes through this, it drops into DaVinci Resolve, Nuke, or any EXR-compatible compositor without a fight.

The inputs that matter

  • bit_depth - 16f (half-float) is the default and the production workhorse (half the size of full float, plenty of range for ACES); 32f if you genuinely need it.
  • compression - eight options. ZIP (lossless) is the recommended default and what you want for archiving. ZIPS/PIZ/RLE are also lossless; DWAA is the fast lossy one for large sequences; PIZ is worth knowing because it's the best for smooth CG renders. "None" exists for exactly the people who shouldn't use it.
  • filename - defaults to render_%04d; the %04d is replaced with the frame number (4-digit padded) for each item in the batch. start_frame (default 1) sets where the numbering begins, so a 10-frame batch becomes render_0001.exrrender_0010.exr.
  • output_dir - where it writes, with a Browse button.

Color transform on write (the Nuke Write bit)

Connect ocio_config and two fields appear: input_transform (default ACEScg) is the space your incoming image is in, colorspace (default ACES2065-1) is the space to store in the file. The node converts before writing. The defaults are the classic choice - working in ACEScg, archiving to ACES2065-1 (AP0), the interchange space - which is exactly what a facility expects on ingest. Disconnect the config and it writes pixels untouched.

Outputs: image (the tensor passed through, so the saver can sit at the end of a chain without disturbing it) and saved_path (STRING, the last file written).

Install

Part of BISAM20/ComfyUI-ACES-IO. ComfyUI Manager → Install Custom Nodes → ComfyUI-ACES-IO, restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/BISAM20/ComfyUI-ACES-IO
cd ComfyUI-ACES-IO
pip install -r requirements.txt

EXR writing uses OpenEXR when installed (that's what gives you all eight codecs); otherwise it falls back to OpenCV's EXR support, which is ZIP-only in practice. pip install openexr if you want the full codec menu. The pack's other load-bearing dependency is PyOpenColorIO (pip package opencolorio).

Gotchas

  • Don't write display-referred data and call it linear. If you baked an sRGB display transform before the saver, the file will claim to be ACES2065-1 but contain sRGB - a classic way to poison a pipeline. Keep the middle linear; the saver's own colorspace conversion is the only transform you want here.
  • Codec selection matters for playback speed. PIZ/DWAA are the fast-in-Nuke choices; B44 is lossy at a fixed ratio and mostly for preview dailies.
  • Filename padding is exactly what you type - %04d gives 4 digits, %06d six. If your downstream expects _0001.exr and you used %04d with start_frame=1, that's what you get; render.0001.exr-style dots are on you.
  • Every node in this pack re-runs each queue, so changed images or settings always write on the next run - no stale-cache surprises.
CategoryACES IO/EXR

Inputs (9)

NameTypeDefaultDescription
imageIMAGE
output_dirACES_PATH/root/
filenameSTRINGrender_%04d
bit_depthCOMBO16f (half-float)2 options: 16f (half-float), 32f (float)
compressionCOMBOZIP (lossless, recommended)8 options: ZIP (lossless, recommended), ZIPS (lossless, scanline), PIZ (lossless, wavelet), PXR24 (lossy, 24-bit), RLE (lossless, run-length), B44 (lossy, fixed ratio), +2
start_frameoptINT10–99999
ocio_configoptOCIO_CONFIG
input_transformoptACES_COLORSPACEACEScgColor space of the incoming image (working / pipe space)
colorspaceoptACES_COLORSPACEACES2065-1Color space to store in the EXR file

Outputs (2)

NameTypeDescription
imageIMAGE
saved_pathSTRING