Nuke Read MultiPass
Pull every AOV out of a multi-channel EXR
- passes
- beauty
- pass_list
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 OpenImageIOif multi-pass reads look wrong. beautyis 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_listwrites the full pass inventory to your terminal - that's your map of what the file contains, and it beats guessing pass names blind.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| file_path | STRING | — | |
| frame | INT | 1-999999–999999 | — |
| load_as_sequenceopt | BOOLEAN | true | Expand %04d / #### patterns using the frame input |
| print_pass_listopt | BOOLEAN | true | Print the pass list to the console when executed |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| passes | NUKE_PASSES | — |
| beauty | IMAGE | — |
| pass_list | STRING | — |