Nodes/ComfyUI-JakeUpgrade/Multi-Control Net Param Stack JK๐Ÿ‰
ComfyUI Node

Multi-Control Net Param Stack JK๐Ÿ‰

Six ControlNets in one stack, each with its own strength and timing

By jakechaiยทCreated 2 years agoยทUpdated 3 months agoยท 146
Multi-Control Net Param Stack JK๐Ÿ‰
  • controlnet_0
  • image_0
  • controlnet_1
  • image_1
  • controlnet_2
  • image_2
  • controlnet_3
  • image_3
  • controlnet_4
  • image_4
  • controlnet_5
  • image_5
  • CONTROLNET_STACK
  • ContrlNet_Switch
  • ContrlNet0_Switch
  • ContrlNet1_Switch
  • ContrlNet2_Switch
  • ContrlNet3_Switch
  • ContrlNet4_Switch
  • ContrlNet5_Switch
โ—„control_switchfalseโ–บ
โ—„ControlNet_Unit_0falseโ–บ
โ—„controlnet_strength_01.00โ–บ
โ—„start_percent_00.000โ–บ
โ—„end_percent_01.000โ–บ
โ—„ControlNet_Unit_1falseโ–บ
โ—„controlnet_strength_11.00โ–บ
โ—„start_percent_10.000โ–บ
โ—„end_percent_11.000โ–บ
โ—„ControlNet_Unit_2falseโ–บ
โ—„controlnet_strength_21.00โ–บ
โ—„start_percent_20.000โ–บ
โ—„end_percent_21.000โ–บ
โ—„ControlNet_Unit_3falseโ–บ
โ—„controlnet_strength_31.00โ–บ
โ—„start_percent_30.000โ–บ
โ—„end_percent_31.000โ–บ
โ—„ControlNet_Unit_4falseโ–บ
โ—„controlnet_strength_41.00โ–บ
โ—„start_percent_40.000โ–บ
โ—„end_percent_41.000โ–บ
โ—„ControlNet_Unit_5falseโ–บ
โ—„controlnet_strength_51.00โ–บ
โ—„start_percent_50.000โ–บ
โ—„end_percent_51.000โ–บ

Most multi-ControlNet workflows are a rat's nest of parallel apply nodes, each with its own strength and start/end percent, all converging on the same conditioning. Multi-ControlNet Param Stack JK๐Ÿ‰ exists to collapse that into one tidy node. It gathers up to six ControlNets, each with its own control image, strength, and active window in the denoising schedule, and hands you a single CONTROL_NET_STACK you can feed to the pack's Apply Multi-ControlNet Adv node.

It's the param half of the split Jake made in v1.8.0 when he separated the old monolithic "Multi-ControlNet Stack" into a loader and a param stacker. The workflow story: you load six different ControlNets with the loader, prep each one's hint image, then stack them here and apply in one shot. If you've ever wanted depth + pose + openpose layered with different weights at different points in the sample, this is the node that makes it not-a-headache.

How it works

The node gives you six slots (ControlNet_Unit_0 through _5). Each unit has:

  • a ControlNet_Unit_i on/off toggle,
  • controlnet_strength_i (default 1.0, range โˆ’10 to 10 - negative weights are legal and occasionally useful for suppressing a structure),
  • start_percent_i and end_percent_i (0โ€“1) controlling when during denoising that unit applies.

Wire a loaded CONTROL_NET and its hint IMAGE into the matching controlnet_i and image_i optional inputs. When the master control_switch is on, any unit that's enabled, has a model, has an image, and is non-empty gets bundled into the stack. Reading the source, each bundled entry is a tuple of (controlnet, image, strength, start_percent, end_percent) - that's exactly what the apply node unpacks.

The stack output wires into CR Apply Multi-ControlNet Adv JK, which takes positive/negative conditioning plus the stack and runs ControlNetApplyAdvanced per unit, in order. The node also re-emits its own switches as ContrlNet_Switch / ContrlNet0_Switchโ€ฆ booleans, which you can use to gate other logic downstream - a nice touch if you're building a switchable workflow and want to know what actually got applied.

Where people get burned

Two recurring mistakes. First: the per-unit on/off toggle is also gated by the master control_switch - if the master is off, nothing stacks, and the node silently returns an empty list. If your apply node does nothing, check the master switch first. Second: start/end percent are the parameters that matter most for structure work - the standing advice in the ControlNet community is to release the condition once composition has formed rather than holding it through the whole sample. For a stack of six, stagger them: pose early (0โ€“0.5), tile late (0.5โ€“1.0), and you'll get far less fighting between units.

Install

It ships with the JakeUpgrade pack, so install once via ComfyUI Manager (search ComfyUI-JakeUpgrade) or:

cd ComfyUI/custom_nodes
git clone https://github.com/jakechai/ComfyUI-JakeUpgrade
cd ComfyUI-JakeUpgrade && pip install -r requirements.txt

No extra models or heavy dependencies beyond the pack's standard list (opencv-python, torch, pillow, etc.). The ControlNet models themselves live in models/controlnet as usual. And if Manager grumbles about a conflict with IPAdapter Plus, that's the pack's replacement folder setting off the warning - it's not actually loaded, you can ignore it.

Category๐Ÿ‰ JK/๐Ÿ•น๏ธ ControlNet

Inputs (37)

NameTypeDefaultDescription
control_switchBOOLEANfalseEnable/disable ControlNet stacking
ControlNet_Unit_0BOOLEANfalseEnable/disable ControlNet unit 0
controlnet_strength_0FLOAT1.00-10โ€“10Control strength for unit 0
start_percent_0FLOAT0.0000โ€“1Start percentage for unit 0
end_percent_0FLOAT1.0000โ€“1End percentage for unit 0
ControlNet_Unit_1BOOLEANfalseEnable/disable ControlNet unit 1
controlnet_strength_1FLOAT1.00-10โ€“10Control strength for unit 1
start_percent_1FLOAT0.0000โ€“1Start percentage for unit 1
end_percent_1FLOAT1.0000โ€“1End percentage for unit 1
ControlNet_Unit_2BOOLEANfalseEnable/disable ControlNet unit 2
controlnet_strength_2FLOAT1.00-10โ€“10Control strength for unit 2
start_percent_2FLOAT0.0000โ€“1Start percentage for unit 2
end_percent_2FLOAT1.0000โ€“1End percentage for unit 2
ControlNet_Unit_3BOOLEANfalseEnable/disable ControlNet unit 3
controlnet_strength_3FLOAT1.00-10โ€“10Control strength for unit 3
start_percent_3FLOAT0.0000โ€“1Start percentage for unit 3
end_percent_3FLOAT1.0000โ€“1End percentage for unit 3
ControlNet_Unit_4BOOLEANfalseEnable/disable ControlNet unit 4
controlnet_strength_4FLOAT1.00-10โ€“10Control strength for unit 4
start_percent_4FLOAT0.0000โ€“1Start percentage for unit 4
end_percent_4FLOAT1.0000โ€“1End percentage for unit 4
ControlNet_Unit_5BOOLEANfalseEnable/disable ControlNet unit 5
controlnet_strength_5FLOAT1.00-10โ€“10Control strength for unit 5
start_percent_5FLOAT0.0000โ€“1Start percentage for unit 5
end_percent_5FLOAT1.0000โ€“1End percentage for unit 5
controlnet_0optCONTROL_NETFirst ControlNet input
image_0optIMAGEFirst control image input
controlnet_1optCONTROL_NETSecond ControlNet input
image_1optIMAGESecond control image input
controlnet_2optCONTROL_NETThird ControlNet input
image_2optIMAGEThird control image input
controlnet_3optCONTROL_NETFourth ControlNet input
image_3optIMAGEFourth control image input
controlnet_4optCONTROL_NETFifth ControlNet input
image_4optIMAGEFifth control image input
controlnet_5optCONTROL_NETSixth ControlNet input
image_5optIMAGESixth control image input

Outputs (8)

NameTypeDescription
CONTROLNET_STACKCONTROL_NET_STACKโ€”
ContrlNet_SwitchBOOLEANโ€”
ContrlNet0_SwitchBOOLEANโ€”
ContrlNet1_SwitchBOOLEANโ€”
ContrlNet2_SwitchBOOLEANโ€”
ContrlNet3_SwitchBOOLEANโ€”
ContrlNet4_SwitchBOOLEANโ€”
ContrlNet5_SwitchBOOLEANโ€”