Nodes/Nukomfy Suite/Nukomfy Multilayer Pack
ComfyUI Node

Nukomfy Multilayer Pack

Bundle AOVs into one EXR and let Nuke sort out the layers

By francescolorussi·Created 3 months ago·Updated 2 months ago· 1
Nukomfy Multilayer Pack
    • extra_layers
    layer_count

    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:

    • depth or z → a single .Z channel (even if your upstream tensor padded it to RGBA - the pack reduces it back)
    • mask.a
    • position.X/.Y/.Z
    • motion → the canonical forward.u / forward.v / backward.u / backward.v set
    • 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, not Layer 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.

    CategoryNukomfy/Channels

    Inputs (1)

    NameTypeDefaultDescription
    layer_countCOMBOHow 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)

    NameTypeDescription
    extra_layersNUKOMFY_MULTILAYER