Apply Ultimate Multi-ControlNet (FLUX)
Three ControlNets on Flux without the spaghetti
- positive
- negative
- controlnet_stack
- vae
- positive
- negative
Stacking ControlNets is one of the best things about the technique - canny for structure plus tile for fidelity, or depth plus pose if you're doing scene work. The problem is the graph. Two units means two apply nodes and a pile of crossed wires. This node - "Apply Ultimate Multi-ControlNet (FLUX)" from the colorfix-v3 pack - collapses the whole thing to one wire in, two wires out.
It takes a CONTROLNET_STACK (built by the pack's Ultimate Multi-ControlNet Stack node), your positive/negative conditioning, and applies every active entry in the stack to the Flux model. One node does the job that would otherwise be a chain of individual applies.
How it works
A stack is just a list of entries - each one (controlnet, image, strength, start_percent, end_percent, control_mode). The stack node defines those per slot; this node honors them. It walks the list, chains each controlnet onto the conditioning via set_previous_controlnet, and wraps each one in the same Flux control-mode logic the single-node variant uses: symmetric layer scaling, with per-entry decay for "My prompt is more important" and boost for "ControlNet is more important". Flux runs at cfg_scale=1.0 with guidance embedded, so there's no uncond path to zero - the modes are pure layer reweighting.
There's also a switch input, defaulting to On. Flip it to Off and the whole stack is bypassed without disconnecting anything - genuinely useful when you're A/B testing whether your control stack is even helping.
The inputs that matter
controlnet_stack- the stack from the UltimateControlNetStack node. Each entry keeps its own strength, timing, and mode; you don't set any of that here.switch- global on/off. Leave it On.positive/negative- your conditioning from CLIP Text Encode.
Optional vae is there for latent-style controlnets; most Flux workflows leave it unconnected. Outputs are positive and negative CONDITIONING, into the KSampler.
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/flux. ComfyUI Manager: search "comfyui-colorfix-v3".
Where people get burned
CONTROLNET_STACK is a custom type that only this pack understands. You can't feed a stack into ComfyUI's stock ControlNet apply node - it'll throw a type mismatch. Pair it with this node (Flux) or the pack's SD multi-apply node (SDXL). Also remember the stack node's control modes are interpreted by whichever apply node consumes them: the Flux apply uses decay/boost layer scaling, the SD apply uses A1111's injection tricks. Same stack, different mode math depending on which side you're on - worth keeping in mind if you move a workflow between SDXL and Flux.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| controlnet_stack | CONTROLNET_STACK | — | |
| switch | COMBO | On | Global switch. Off = bypass all ControlNets. |
| vaeopt | VAE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |