Ultimate Multi-ControlNet Stack
Three ControlNets in one node, each with its own mode
- controlnet_1
- image_1
- controlnet_2
- image_2
- controlnet_3
- image_3
- controlnet_stack
- controlnet_stack
Multi-ControlNet is one of the most powerful things in the toolkit - canny for edges plus depth for layout, tile plus canny for a detail-preserving upscale. The catch in ComfyUI is the graph: every unit means its own apply node, and pretty soon you're untangling wires instead of tuning weights. This node, "Ultimate Multi-ControlNet Stack" from the colorfix-v3 pack, is the fix: a single node with up to three ControlNet slots, each with its own switch, strength, timing, and control mode. One wire out.
How it works
The node builds a CONTROLNET_STACK - a list of entries, each (controlnet, image, strength, start_percent, end_percent, control_mode). Any slot whose switch is Off (or that has no controlnet/image attached) is skipped. You then feed the stack into the pack's apply node - FluxMultiControlNetApply for Flux, the SD multi-apply node for SD/SDXL - which walks the list and chains every active entry onto your conditioning. Stacks can even be chained: feed one stack's output into the controlnet_stack input of another to go past three.
The clever bit: the stack stores each slot's control mode as a string, and the apply node that consumes it decides what that string means. The Flux apply interprets it as decay/boost layer scaling; the SD apply uses A1111's soft injection + cfg injection. Build the stack once, and it works on either side.
The inputs that matter
switch_1- defaults to Off. Slot 1 is required (you must at least wire it), but you still have to flip the switch On for it to do anything.controlnet_1andimage_1- the model and its condition. For tile work the image is the reference you're upscaling.strength_1- 0–10, default 1.0. For tile + tiled diffusion, 0.7–0.9 is the usual starting band.start_percent_1/end_percent_1- denoising fractions for when this slot applies.control_mode_1- Balanced / My prompt is more important / ControlNet is more important.
Slots 2 and 3 are entirely optional - same six fields each. The controlnet_stack input is how you chain stacks. Output is a single controlnet_stack, into the apply node.
Install
Pure Python, no requirements.txt, no models:
cd ComfyUI/custom_nodes
git clone https://github.com/ihorpankin/comfyui-colorfix-v3.git
Restart ComfyUI; it's under colorfix-v3. ComfyUI Manager: search "comfyui-colorfix-v3".
Where people get burned
Two classic traps. First, slots default to Off - you wire up slot 2, connect everything, run, and nothing happens because you never flipped the switch. It's the most common complaint with this node and it's a five-second fix. Second, CONTROLNET_STACK is a pack-specific type: stock ComfyUI apply nodes won't accept it, so the stack is useless until you pair it with one of this pack's apply nodes. And a gentle reminder - control modes only really bite at CFG above 1.0 on the SD side, so if you're tuning modes and seeing no difference, check your CFG first.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| switch_1 | COMBO | Off | 2 options: Off, On |
| controlnet_1 | CONTROL_NET | — | |
| image_1 | IMAGE | — | |
| strength_1 | FLOAT | 1.000–10 | ControlNet influence strength for slot 1. |
| start_percent_1 | FLOAT | 0.0000–1 | Denoising fraction to START applying slot 1. |
| end_percent_1 | FLOAT | 1.0000–1 | Denoising fraction to STOP applying slot 1. |
| control_mode_1 | COMBO | Balanced | A1111-style control mode for slot 1. |
| switch_2opt | COMBO | Off | 2 options: Off, On |
| controlnet_2opt | CONTROL_NET | — | |
| image_2opt | IMAGE | — | |
| strength_2opt | FLOAT | 1.000–10 | ControlNet influence strength for slot 2. |
| start_percent_2opt | FLOAT | 0.0000–1 | Denoising fraction to START applying slot 2. |
| end_percent_2opt | FLOAT | 1.0000–1 | Denoising fraction to STOP applying slot 2. |
| control_mode_2opt | COMBO | Balanced | A1111-style control mode for slot 2. |
| switch_3opt | COMBO | Off | 2 options: Off, On |
| controlnet_3opt | CONTROL_NET | — | |
| image_3opt | IMAGE | — | |
| strength_3opt | FLOAT | 1.000–10 | ControlNet influence strength for slot 3. |
| start_percent_3opt | FLOAT | 0.0000–1 | Denoising fraction to START applying slot 3. |
| end_percent_3opt | FLOAT | 1.0000–1 | Denoising fraction to STOP applying slot 3. |
| control_mode_3opt | COMBO | Balanced | A1111-style control mode for slot 3. |
| controlnet_stackopt | CONTROLNET_STACK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| controlnet_stack | CONTROLNET_STACK | — |