Nodes/Nuke Nodes for ComfyUI/Nuke Read MultiPass
ComfyUI Node

Nuke Read MultiPass

Pull every AOV out of a multi-channel EXR

By sumitchatterjee13·Created about a year ago·Updated 9 days ago· 59
Nuke Read MultiPass
    • passes
    • beauty
    • pass_list
    file_path
    frame1
    load_as_sequencetrue
    print_pass_listtrue

    If you've ever exported a render from Blender, Octane, or Redshift, you know the multi-channel EXR: one file, dozens of channels, every AOV jammed in there - diffuse, specular, normals, depth, cryptomattes. ComfyUI's default loaders see a few RGB channels and ignore the rest. NukeReadMultiPass is the node that cracks the file open and hands you everything.

    This is the node for people trying to do real compositing work inside ComfyUI instead of round-tripping to Nuke. It reads a multi-channel EXR, groups channels into passes by layer name, and outputs three things: a NUKE_PASSES bundle holding every pass, a beauty IMAGE for preview, and a pass_list STRING telling you what you got. From there, NukeShufflePass pulls individual AOVs out as normal images, and NukeWrite's all_channels mode can write the whole bundle back out as EXR.

    The niche barely exists in ComfyUI yet - this kind of workflow is usually done in Nuke or Resolve, and ComfyUI's community has almost no threads on it. That cuts both ways: you're early, and you're on your own for lore.

    How it works

    It resolves the path (sequences via %04d/#### or auto-detection), opens the EXR, and reads all channels through OpenImageIO. Channel names like diffuse.R, diffuse.G, diffuse.B get grouped into a diffuse pass; RGBA becomes the beauty; N, Z, crypto00 and friends each become their own pass. The result is a NUKE_PASSES dict keyed by pass name, plus a human-readable list.

    The beauty output is just a preview convenience: it prefers the RGBA pass, else the first pass it finds. Don't build your downstream graph on it as if it's "the" right pass - it's whatever came first.

    Inputs and output

    • file_path - path to the EXR (sequences supported).
    • frame - which frame to load.
    • load_as_sequence - expand patterns using the frame input.
    • print_pass_list - default on; dumps the pass list to the console when you run the node. Invaluable the first time.

    Outputs: passes (NUKE_PASSES), beauty (IMAGE), pass_list (STRING).

    Installing it

    Part of Nuke Nodes. Manager: search "Nuke Nodes", install. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/sumitchatterjee13/nuke-nodes-comfyui.git nuke-nodes
    cd nuke-nodes
    pip install -r requirements.txt
    

    Restart, find it under Add Node → Nuke → IO. No models - but this node genuinely needs OpenImageIO installed, because channel names are what make pass grouping possible. It's in the requirements; make sure it landed.

    Gotchas

    • No OIIO, no real pass names. Without it, reads degrade to OpenCV/PIL behavior and the channel-grouping magic falls apart. Verify with pip show OpenImageIO if multi-pass reads look wrong.
    • beauty is a guess. Prefer wiring the specific pass you want via NukeShufflePass instead of assuming beauty is your diffuse.
    • Cryptomatte isn't "decoded" here. Crypto channels come through as raw data passes - you get the numbers, not a click-to-select matte. This node's sibling ShufflePass will happily extract them as image data, but actual cryptomatte picking is a whole other tool.
    • Check the console on first run. print_pass_list writes the full pass inventory to your terminal - that's your map of what the file contains, and it beats guessing pass names blind.
    CategoryNuke/IO

    Inputs (4)

    NameTypeDefaultDescription
    file_pathSTRING
    frameINT1-999999–999999
    load_as_sequenceoptBOOLEANtrueExpand %04d / #### patterns using the frame input
    print_pass_listoptBOOLEANtruePrint the pass list to the console when executed

    Outputs (3)

    NameTypeDescription
    passesNUKE_PASSES
    beautyIMAGE
    pass_listSTRING