Nukomfy Multilayer Pack
Bundle AOVs into one EXR and let Nuke sort out the layers
- extra_layers
If you're from compositing, the idea of an AOV is second nature: the beauty pass is only useful if you kept the depth, the normals, the mask, the motion vectors that went into it. ComfyUI has been terrible at this - you get one image tensor per node, and stitching passes into a single file means fighting with a save node that doesn't know a layer from a hole in the ground.
Nukomfy MultiLayer Pack is the fix, and it's dead simple by design: it bundles up to 16 named extra image layers into one value, and you hand that bundle to Nukomfy Write's extra_layers socket. Write then produces a multilayer EXR with Nuke-convention channel names - depth.Z, normal.RGB, mask.a, motion.uv - that a Nuke Read node opens with every pass already separated. That round trip, from "ComfyUI made a depth map" to "Nuke sees a depth layer," is the whole point of this suite.
One thing to internalize up front: the main beauty pass does not go through the Pack. It goes straight into Nukomfy Write's regular image socket. The Pack exists for the extra passes only - that's why rgba and rgb are reserved layer names and rejected with a clear error if you try.
How it works
The Layer Count dropdown (1 to 16 layers) spawns that many pairs: a Layer N Name field and an image socket underneath it. Set the count, name each pass, wire each image in. The name becomes the EXR channel prefix, and the channel names follow Nuke conventions depending on the layer name and channel count:
depthorz→ a single.Zchannel (even if your upstream tensor padded it to RGBA - the pack reduces it back)mask→.aposition→.X/.Y/.Zmotion→ the canonicalforward.u / forward.v / backward.u / backward.vset- anything else →
.R/.G/.B[/.A]by channel count
Validation is strict and it's there to save you, not annoy you. Names must be letters, digits, and underscores only, and unique case-insensitively - Foo and foo would collide on read-back, so the pack refuses. Every layer must match the resolution and frame count of the first layer, and more than 8 channels per layer raises an error because Nuke itself drops anything past 8 silently. Leave a name empty and it defaults to layer_<n>.
Inputs and outputs
Three things to actually set:
- Layer Count - how many extra passes you're packing
- Layer N Name - the EXR channel prefix, so type
depth, notLayer 2 - Layer N - the image tensor for that pass
One output: extra_layers, which connects to the matching socket on Nukomfy Write. Remember the main image still goes to Write's image input directly, or you'll get a reserved-name error and a confused evening.
Install
Same pack, same install as the rest of the suite. ComfyUI Manager → search Nukomfy Suite, or:
cd ComfyUI/custom_nodes
git clone https://github.com/francescolorussi/ComfyUI-Nukomfy-Suite
cd ComfyUI-Nukomfy-Suite && pip install -r requirements.txt
Deps are OpenImageIO>=3.1.10 and fileseq, no models. If the nodes are missing entirely and the Nukomfy sidebar shows a red "Graph nodes unavailable" banner, those deps aren't in the ComfyUI Python env - install and restart.
Where people get burned
The usual failure is wiring the beauty pass into a Pack slot - the reserved-name error catches it, but you'll already know what you did wrong. Resolution mismatch between layers is the other common one, and it errors loudly rather than silently corrupting the EXR. And if you're packing for someone else to read, remember the case-insensitive rule: Depth and depth are the same layer to the unpacker, so pick one spelling and keep it.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| layer_count | COMBO | How many extra layers to pack. Choose the number of additional passes (depth, normal, mask, motion, …) you want to bundle into the multilayer EXR. The main rgba layer is not packed here: it goes to the image socket of Nukomfy Write directly. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| extra_layers | NUKOMFY_MULTILAYER | — |