ACES IO — EXR Saver
Write real EXR sequences — half-float, full codecs, Nuke-Write style color transform
- image
- output_dir
- ocio_config
- input_transform
- colorspace
- image
- saved_path
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 torender_%04d; the%04dis 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 becomesrender_0001.exr…render_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 -
%04dgives 4 digits,%06dsix. If your downstream expects_0001.exrand you used%04dwithstart_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.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| output_dir | ACES_PATH | /root/ | — |
| filename | STRING | render_%04d | — |
| bit_depth | COMBO | 16f (half-float) | 2 options: 16f (half-float), 32f (float) |
| compression | COMBO | ZIP (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_frameopt | INT | 10–99999 | — |
| ocio_configopt | OCIO_CONFIG | — | |
| input_transformopt | ACES_COLORSPACE | ACEScg | Color space of the incoming image (working / pipe space) |
| colorspaceopt | ACES_COLORSPACE | ACES2065-1 | Color space to store in the EXR file |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| saved_path | STRING | — |