Apply ControlNet Stack
Apply ControlNet Stack
- positive
- negative
- cnet_stack
- CONDITIONING+
- CONDITIONING-
ControlNet conditions your generation on spatial structure - a pose, a depth map, some edges - so the prompt handles what appears and the ControlNet handles where it goes. Running several at once (pose + depth, say) normally means chaining an Apply ControlNet node for each, threading conditioning through the whole line. Apply ControlNet Stack takes a pre-built stack and applies all of them to your positive and negative conditioning in a single node.
It's the "apply" half of the pack's stack pattern: a stacker node describes the ControlNets and their strengths, and this node bakes them into your conditioning.
How it works
The node takes your positive and negative conditioning and a cnet_stack - a CONTROL_NET_STACK bundle listing which ControlNet models, which reference images, and what strengths to use. It applies every entry in that stack to the conditioning and hands back the modified pair. One node, however many ControlNets.
The inputs and outputs
positive/negative(required) - the conditioning you're modifying, straight from your loader or CLIP encode.cnet_stack(optional) - the stack of ControlNets to apply. This comes from a ControlNet stacker node. If you leave it unconnected, the node just passes your conditioning through untouched - which is a feature, not a bug: you can leave it wired and toggle the effect by muting the stacker.
Outputs are CONDITIONING+ and CONDITIONING-, which go on to your KSampler's positive and negative inputs. Note that many loaders in this pack already have their own cnet_stack input, so this standalone apply node is mainly for when you're building conditioning outside the Efficient Loader and want to inject a stack at that point.
Installing it
ComfyUI Manager → search Efficiency Nodes for ComfyUI, or:
cd ComfyUI/custom_nodes
git clone https://github.com/jags111/efficiency-nodes-comfyui
Restart after. You'll need actual ControlNet model files in models/controlnet for the stack to reference, and if you're generating the control maps (depth, pose, canny) inside Comfy you'll want a preprocessor pack like comfyui_controlnet_aux.
Common issues
Reality check on ControlNet in general: the menu of available control types has shrunk on newer base models. Canny, depth, pose, edge and a couple more get built quickly for each new base, but the SD-era exotics - QR-code brightness and friends - only ever existed on SD1.5 and SDXL and nobody's rebuilt them. So what you can put in a stack depends heavily on which base model you're on.
Node-specifically: if applying the stack seems to do nothing, check that the cnet_stack is actually connected and that the stacker feeding it has valid models and reference images - an empty or misconfigured stack passes conditioning through unchanged, so it fails silently rather than erroring.
Pack-wide: an IMPORT FAILED at startup (often a pip freeze error) means the whole pack didn't load - update ComfyUI, the packages, and the node. Breakage after a ComfyUI update usually clears by updating the node to the latest commit.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| cnet_stackopt | CONTROL_NET_STACK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| CONDITIONING+ | CONDITIONING | — |
| CONDITIONING- | CONDITIONING | — |