Nodes/ComfyUI-NeuralMedia/πŸ–ŒοΈ Multi-Controlnet
ComfyUI Node

πŸ–ŒοΈ Multi-Controlnet

Three ControlNets in one node, and the switch to turn each off

By YarvixPAΒ·Created 2 years agoΒ·Updated about a year agoΒ· 5
πŸ–ŒοΈ Multi-Controlnet
  • multicontrolnet_stack
  • image_1
  • image_2
  • image_3
  • multicontrolnet_stack
β—„switch_1falseβ–Ί
β—„controlnet_1β–Ύβ–Ί
β—„controlnet_strength_11.00β–Ί
β—„start_percent_10.000β–Ί
β—„end_percent_11.000β–Ί
β—„switch_2falseβ–Ί
β—„controlnet_2β–Ύβ–Ί
β—„controlnet_strength_21.00β–Ί
β—„start_percent_20.000β–Ί
β—„end_percent_21.000β–Ί
β—„switch_3falseβ–Ί
β—„controlnet_3β–Ύβ–Ί
β—„controlnet_strength_31.00β–Ί
β—„start_percent_30.000β–Ί
β—„end_percent_31.000β–Ί

Multi-ControlNet is one of those ideas that sounds like a power-user gimmick until you need it. Canny alone gets you edges but not depth; depth alone gives you layout but no contours. Stacking them gets you both - pose plus scene, edges plus arrangement - and each condition keeps its own strength and its own start/end window. This node is the stack builder: it takes up to three ControlNet units and packs them into a single MULTICONTROLNET_STACK that a second node actually applies.

Here's the mental model for the pack's ControlNet menu. There are three pieces that work as a set:

  • MultiControlnet - builds the stack from up to three regular per-condition ControlNet files (this node).
  • MultiControlnetUnion - the same builder, but for union checkpoints that carry many conditions in one file.
  • MultiControlnetApply - the sink that takes the stack and bakes it into your base conditioning.

This node is the middle of that chain's first half: build, then apply.

How it works

Each of the three slots is a self-contained unit with a switch_1 toggle, a controlnet_1 file picker (it lists the .safetensors files in models/controlnet), a controlnet_strength_1, start_percent_1 / end_percent_1, and an image_1. You fill in what you need and leave the rest. The output multicontrolnet_stack carries all the enabled units downstream.

Two details are worth flagging. First, switch_N is a plain boolean - flip a unit off to disable it without deleting the wiring, which is the whole point when you're A/B testing whether depth is helping or just muddying. Second, controlnet_strength can go negative (the range runs from -10 to 10). Negative strength is an edge case you'll almost never want, but it's there - it inverts the condition's push, which is occasionally useful for fighting a condition rather than following it.

There's also a multicontrolnet_stack input on the node itself. That lets you daisy-chain - feed one stack into the next node's stack input and build a bigger stack than three units. Handy if the pack's slot count is the only thing holding your workflow back.

The inputs a beginner actually sets

  • controlnet_N - pick the file from the dropdown.
  • image_N - the preprocessed condition for that unit (canny map, depth map, pose skeleton).
  • controlnet_strength_N - start at 1.0 for separate per-condition files; if it fights the base model, drop it to 0.7.
  • start/end percent_N - per-unit control window. Classic combo: pose at full range, depth only in the first half so the model can add detail later.

Install

ComfyUI Manager β†’ search ComfyUI-NeuralMedia, or:

cd ComfyUI/custom_nodes
git clone https://github.com/YarvixPA/ComfyUI-NeuralMedia
cd ComfyUI-NeuralMedia
pip install -r requirements.txt

Restart ComfyUI. Same pack install as the rest of the ControlNets menu - YarvixPA's grab-bag pack, which also comes with the author's reputation for shipping GGUF Flux models. If the clone 404s (the repo's moved around), install via Manager.

When to reach for this vs. a union

If you're on a modern base, check whether you have a union ControlNet before reaching for this node. Union models (xinsir's SDXL union, the Fun unions for Flux 2 / Z-Image) learn how to blend conditions during training, so stacking needs no per-condition tuning - and for those, MultiControlnetUnion is the better fit. This node is for the classic separate-file workflow: canny + depth, openpose + depth, tile + canny on an SD 1.5 or SDXL setup. Both roads end at MultiControlnetApply, so the two stack builders swap freely.

CategoryComfyUI-NeuralMedia/ControlNets

Inputs (19)

NameTypeDefaultDescription
multicontrolnet_stackoptMULTICONTROLNET_STACKβ€”
switch_1optBOOLEANfalseβ€”
controlnet_1optCOMBO1 options: None
controlnet_strength_1optFLOAT1.00-10–10β€”
start_percent_1optFLOAT0.0000–1β€”
end_percent_1optFLOAT1.0000–1β€”
image_1optIMAGEβ€”
switch_2optBOOLEANfalseβ€”
controlnet_2optCOMBO1 options: None
controlnet_strength_2optFLOAT1.00-10–10β€”
start_percent_2optFLOAT0.0000–1β€”
end_percent_2optFLOAT1.0000–1β€”
image_2optIMAGEβ€”
switch_3optBOOLEANfalseβ€”
controlnet_3optCOMBO1 options: None
controlnet_strength_3optFLOAT1.00-10–10β€”
start_percent_3optFLOAT0.0000–1β€”
end_percent_3optFLOAT1.0000–1β€”
image_3optIMAGEβ€”

Outputs (1)

NameTypeDescription
multicontrolnet_stackMULTICONTROLNET_STACKβ€”