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

ACES IO — EXR Loader

Read EXR sequences like a Nuke Read node — the node AI pipelines were missing

By BISAM20·Created 6 months ago·Updated 6 months ago· 9
ACES IO — EXR Loader
  • file_path
  • ocio_config
  • colorspace
  • output_transform
  • image
  • frame_count
  • first_frame
  • last_frame
frame_modeall
first_frame1001
last_frame1001
missing_frameserror
preview_fps24.0

ACES IO - EXR Loader is the node that finally lets AI content actually meet a production pipeline. ComfyUI's built-in image loader reads PNGs and JPEGs - 8-bit, sRGB, crushed shadows. Any real VFX or color work lives in 16/32-bit float OpenEXR, where highlights don't clip and you can grade later without banding. This node reads those files (and full frame sequences) the way Nuke's Read node does, and hands you a [B, H, W, C] float32 batch tensor - one item per frame - that flows straight into image-to-image or video work. There's a real appetite for exactly this: EXR/HDR output is the acknowledged missing piece for getting AI video into actual grading and compositing tools.

How it works

Point file_path at any single frame of a sequence and the node auto-detects the whole thing. It understands every naming convention you'll meet: render.0001.exr, render_0001.exr, render-0001.exr, 0001.exr, versioned names like shot_v01_beauty_0042.exr, Nuke's render.####.exr, and printf render.%04d.exr. There's a Browse button for picking.

The knobs that matter:

  • frame_mode - all (default) loads everything found on disk; range loads first_framelast_frame inclusive; single loads exactly one frame. first_frame defaults to 1001, the VFX convention, so set it consciously for range/single.
  • missing_frames - what to do when a frame in your range isn't on disk: error (default, matches Nuke), black, or hold (repeat the last good frame).
  • preview_fps - the node renders an animated WebP preview right in the UI, so a 200-frame sequence plays back without opening an external player.

Optional color transform on load

Connect an ocio_config and two more fields appear: colorspace (default ACES2065-1) is the space the file is stored in, output_transform (default ACEScg) is what you want downstream. The node converts between them on load - exactly Nuke Read's colorspace knob. Disconnect the config and pixels pass through unchanged. There's a handy detail buried in here: the loader isn't EXR-only. Drop a PNG/JPEG/TIFF in file_path and it loads it as a single frame through the same output, so it's a valid replacement for the built-in Load Image if you're already living in ACES.

Outputs: image, plus frame_count, first_frame, last_frame (INT) - the last three are handy for wiring range logic or filename padding into a saver.

Install

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

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

Reading/writing EXR goes through OpenEXR when available, with an OpenCV fallback (pip install openexr for the full codec set). The shared heavy dependency is PyOpenColorIO (pip package opencolorio).

Gotchas

  • "Black" frames on load that aren't actually black. If you load a scene-linear EXR and it looks dark, that's correct - you're viewing raw light values. Pipe it through a Viewer before you panic.
  • Range math is inclusive and 0-based in this node; a sequence numbered 1001–1100 means first_frame=1001, last_frame=1100, not 1101.
  • Half-float comes in as float32, so it's bigger in VRAM than you'd guess from the file size - a long sequence can eat memory fast. Use range to trim what you actually process.
  • Every node here re-runs each queue (no caching), so frame-set changes always take effect.
CategoryACES IO/EXR

Inputs (9)

NameTypeDefaultDescription
file_pathACES_PATH
frame_modeCOMBOall3 options: all, range, single
first_frameoptINT10010–999999Used by 'range' and 'single' modes
last_frameoptINT10010–999999Used by 'range' mode
missing_framesoptCOMBOerror3 options: error, black, hold
preview_fpsoptFLOAT24.01–120Animated preview playback speed
ocio_configoptOCIO_CONFIG
colorspaceoptACES_COLORSPACEACES2065-1Color space the EXR file is stored in (Nuke: colorspace knob)
output_transformoptACES_COLORSPACEACEScgColor space to deliver to downstream nodes (working / pipe space)

Outputs (4)

NameTypeDescription
imageIMAGE
frame_countINT
first_frameINT
last_frameINT