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

πŸ–ŒοΈ Multi-ControlnetUnion

The mode-picker stack

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

Union ControlNets changed the install story in a way worth understanding before you touch this node. Instead of one .safetensors per condition - a canny model here, a depth model there, a pose model somewhere else - a union is a single checkpoint that handles most or all of them, and you pick the mode at inference time. MultiControlnetUnion is the pack's stack builder for exactly that situation. It looks almost identical to its sibling MultiControlnet, with one crucial difference: each unit gets a controlnet_type_N dropdown instead of just a file picker.

How it works

The controlnet_type menu is the interesting bit:

auto Β· openpose Β· depth Β· hed/pidi/scribble/ted Β· canny/lineart/anime_lineart/mlsd Β· normal Β· segment Β· tile Β· repaint

That's the mode you're asking the union model to run in for that unit. auto lets the model guess the condition type from the image you feed it; the others are explicit. Notice the shape of the list - it's SDXL-union flavored, covering the twelve-condition xinsir-style menu including normal, segment, and repaint (the mask-driven inpaint mode).

The required inputs are controlnet (pick the union file from models/controlnet) and add_more_switches - a toggle that reveals the second and third unit slots. That's the pack's pattern for keeping the node compact: the switches exist on the node, but they're hidden until you say you want them. The per-unit inputs match MultiControlnet exactly - switch_N, controlnet_strength_N, start_percent_N, end_percent_N, image_N - and the output is the same multicontrolnet_stack type that feeds into MultiControlnetApply.

The input that matters

For beginners, it's the mode dropdown, and the mistake is choosing a mode your model can't do. A modern Flux-2 or Z-Image union covers canny, depth, pose, scribble-ish edges, gray - but not segment or normal, which exist on the SDXL union. The mode list here is the union menu in general, not a promise about your specific file. If you select normal and the union wasn't trained on normals, you'll get garbage or silence. Check the model card before assuming the dropdown is gospel.

Everything else is the familiar ControlNet stack flow: per-unit strength, per-unit start/end window (end early to let the model add detail), toggle switches for A/B testing, and the same daisy-chaining multicontrolnet_stack input if three slots aren't enough.

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, same author (YarvixPA, the FLUX.1-Fill-GGUF quantizer), same note as the other pack nodes: if the repo URL 404s during a manual clone, install through Manager.

One more honest note

Union strength has come down since the SD 1.5 era. The old 1.0 default overcooks on modern unions - the published recommendations run 0.65–0.8 for the Fun unions and 0.8–1.0 for Qwen's. Treat the node's 1.0 default as a starting guess, not a target. And if you're on a union, you generally don't need to tune the blend the way you did with separate files - that's the entire appeal.

CategoryComfyUI-NeuralMedia/ControlNets

Inputs (21)

NameTypeDefaultDescription
add_more_switchesBOOLEANfalseβ€”
controlnetCOMBO1 options: None
multicontrolnet_stackoptMULTICONTROLNET_STACKβ€”
switch_1optBOOLEANfalseβ€”
controlnet_type_1optCOMBO9 options: auto, openpose, depth, hed/pidi/scribble/ted, canny/lineart/anime_lineart/mlsd, normal, +3
controlnet_strength_1optFLOAT1.00-10–10β€”
start_percent_1optFLOAT0.0000–1β€”
end_percent_1optFLOAT1.0000–1β€”
image_1optIMAGEβ€”
switch_2optBOOLEANfalseβ€”
controlnet_type_2optCOMBO9 options: auto, openpose, depth, hed/pidi/scribble/ted, canny/lineart/anime_lineart/mlsd, normal, +3
controlnet_strength_2optFLOAT1.00-10–10β€”
start_percent_2optFLOAT0.0000–1β€”
end_percent_2optFLOAT1.0000–1β€”
image_2optIMAGEβ€”
switch_3optBOOLEANfalseβ€”
controlnet_type_3optCOMBO9 options: auto, openpose, depth, hed/pidi/scribble/ted, canny/lineart/anime_lineart/mlsd, normal, +3
controlnet_strength_3optFLOAT1.00-10–10β€”
start_percent_3optFLOAT0.0000–1β€”
end_percent_3optFLOAT1.0000–1β€”
image_3optIMAGEβ€”

Outputs (1)

NameTypeDescription
multicontrolnet_stackMULTICONTROLNET_STACKβ€”