ComfyUI Node Runs on cloud

Control Net Stacker

Control Net Stacker

By jags111·Created 3 years ago·Updated 4 months ago· 1,484
Control Net Stacker
  • control_net
  • image
  • cnet_stack
  • CNET_STACK
strength1.00
start_percent0.000
end_percent1.000

Running more than one ControlNet - say pose plus depth - normally means an Apply ControlNet node for each, chained one after another, with conditioning threaded through the whole line. Control Net Stacker collapses that into a tidy list you build up node by node. Each instance adds one ControlNet to a CONTROL_NET_STACK, and you chain them to describe as many as you want. It's the "describe the stack" half of the pack's stacker pattern; something else applies it.

How it works

Each Control Net Stacker holds a single ControlNet: which model, which reference image, and its strength and active window. It has an optional cnet_stack input, and that's the whole trick - feed the output of one stacker into the next stacker's cnet_stack input and you've appended to the list. Three ControlNets is three stackers in a row. The final stack then goes to a node that consumes it: the pack's Efficient Loader has a cnet_stack input, the standalone Apply ControlNet Stack node takes one, and so does XY Input: Control Net for plotting.

The mental model, straight from the KB: prompt decides what, ControlNet decides where. A stack just lets several "where" signals cooperate.

The inputs and outputs

  • control_net and image (required) - the model and the preprocessed map it reads (depth, canny, pose, etc.).
  • strength (0–10, default 1) - how hard this net pushes. Note the range goes to 10, but you're almost always living between 0.4 and 1.2; cranking it high tends to fry the image.
  • start_percent / end_percent (0–1) - the slice of denoising this net is active for. Dropping a net out early (lower end_percent) gives the model room to improvise detail; holding it longer locks structure.
  • cnet_stack (optional) - the incoming stack to append to. Leave it empty for the first net in the chain.

The single output is CNET_STACK (CONTROL_NET_STACK), which flows to the next stacker or to whatever applies it.

Installing it

ComfyUI Manager → search Efficiency Nodes for ComfyUI, install, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/jags111/efficiency-nodes-comfyui

Restart ComfyUI. You'll need real ControlNet models in models/controlnet, and if you're generating the control maps inside Comfy rather than importing them, a preprocessor pack like comfyui_controlnet_aux.

Common issues

The stacker only describes ControlNets - it doesn't apply them. If nothing changes in your output, check that the CNET_STACK actually reaches a consumer (an Efficient Loader's cnet_stack, Apply ControlNet Stack, or an XY plot). A stack that's built but never applied fails silently.

Feed it a valid model and image, too. An empty or mismatched entry passes through without erroring, so a typo'd image connection just means that net quietly does nothing.

Bigger picture, and not a node bug: the set of ControlNets you can stack has narrowed on newer base models. Canny, depth, pose and an edge model get rebuilt for each new base; the SD-era exotics only ever existed on SD 1.5 and SDXL. So what you can meaningfully stack depends on your model.

Pack-wide: an IMPORT FAILED at startup (often a pip freeze non-zero exit) takes the whole pack down at once. Update ComfyUI, update the node to the latest commit, and check your Python environment.

CategoryEfficiency Nodes/Stackers

Inputs (6)

NameTypeDefaultDescription
control_netCONTROL_NET
imageIMAGE
strengthFLOAT1.000–10
start_percentFLOAT0.0000–1
end_percentFLOAT1.0000–1
cnet_stackoptCONTROL_NET_STACK

Outputs (1)

NameTypeDescription
CNET_STACKCONTROL_NET_STACK