ComfyUI Node

Load EXR

The sequence loader hiding behind a single-file name

By azhagurajpandians·Created 4 months ago·Updated about a month ago· 0
Load EXR
    • image
    • mask
    • frame_count
    • first_frame
    • last_frame
    • path
    exr_file
    alpha_mode
    clamp_negative
    frame_modeall
    start_frame1
    end_frame100
    missing_frameserror
    exr_path

    The name undersells it. Load EXR isn't really a single-file loader - it's the pack's picker-based loader and its EXR sequence loader, and it's the node you use when you've dropped EXRs into ComfyUI's input folder. It's the first node in the toolkit's ACES chain: EXR files are float tensors, which is the whole reason you're here. An 8-bit PNG is a picture; a 32-bit float EXR is data, with highlights that survive grading instead of clipping to white. If you've ever wanted AI output to hand off to Nuke or DaVinci, this is the door in.

    How it works

    The node lists every .exr it finds under ComfyUI/input into the exr_file dropdown. Behind the scenes it reads with OpenCV first (it sets OPENCV_IO_ENABLE_OPENEXR itself), falls back to the OpenEXR python module, then tifffile, and hands you a float32 IMAGE tensor plus an alpha-derived MASK. Note the mask is inverted from what you might guess: it's 1 - alpha, so transparent areas are white in the mask. That trips people up on the first try.

    The sequence part: if your file is numbered like render.0001.exr, it detects the whole run and loads it as a batch. frame_mode is all by default - every frame in the sequence - or single / range using start_frame and end_frame. missing_frames decides what happens when a number is skipped: error (default, fail loudly), black, or hold (repeat the last good frame). For a half-rendered animation, black or hold beats a hard crash.

    The alpha_mode dropdown is the one you'll actually touch. EXRs with transparency render as flat white or wrong when previewed, because ComfyUI's preview doesn't show the alpha as transparency. composite checker and composite black composite the RGB over a background so you can see it; premultiply / unpremultiply actually change the pixel values for comping. clamp_negative clips values below zero - usually you leave that false, because negative values are legitimate HDR data.

    The inputs that matter

    • exr_file - the picker (the node's own list, not ComfyUI's image upload)
    • alpha_mode - set composite checker or composite black if the preview looks white
    • frame_mode / start_frame / end_frame / missing_frames - the sequence controls

    There's also an optional exr_path string that overrides the picker entirely, and the outputs are image, mask, frame_count, first_frame, last_frame, and path. The frame numbers are handy for feeding a filename template into Save EXR later.

    Install

    From ComfyUI Manager, search "ACES EXR Toolkit" and install, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/azhagurajpandians/ComfyUI-ACES-EXR-Toolkit.git
    

    Then install the real dependencies into ComfyUI's Python (the pack's requirements.txt needs opencolorio, openexr, and opencv-python):

    python -m pip install -r ComfyUI/custom_nodes/ComfyUI-ACES-EXR-Toolkit/requirements.txt
    

    Restart ComfyUI. Nodes appear under image/ACES + EXR.

    Gotchas

    The big one: ComfyUI's upload widget is image-centric and genuinely unreliable for .exr files - the README says so outright. If your file won't show in the picker, paste the absolute path into exr_path or switch to its sibling, Load EXR From Path. And if the preview looks washed white, you've got transparency with white RGB in the transparent pixels - change alpha_mode, don't change the image.

    Categoryimage/ACES + EXR

    Inputs (8)

    NameTypeDefaultDescription
    exr_fileCOMBO1 options: <select EXR or paste full path below>
    alpha_modeCOMBO7 options: composite checker, ignore, unpremultiply, premultiply, composite black, composite gray, +1
    clamp_negativeCOMBO2 options: false, true
    frame_modeCOMBOall3 options: all, single, range
    start_frameINT10–99999
    end_frameINT1000–99999
    missing_framesCOMBOerror3 options: error, black, hold
    exr_pathoptSTRING

    Outputs (6)

    NameTypeDescription
    imageIMAGE
    maskMASK
    frame_countINT
    first_frameINT
    last_frameINT
    pathSTRING