Nodes/ComfyUI-JakeUpgrade/Apply Multi-Control Net Adv JK๐Ÿ‰
ComfyUI Node

Apply Multi-Control Net Adv JK๐Ÿ‰

Pose and depth at once โ€” multiple ControlNets on one conditioning

By jakechaiยทCreated 2 years agoยทUpdated 3 months agoยท 147
Apply Multi-Control Net Adv JK๐Ÿ‰
  • base_positive
  • base_negative
  • mask
  • vae
  • controlnet_stack
  • base_pos
  • base_neg
โ—„effective_maskfalseโ–บ

Single ControlNet gets you one spatial condition. Real images often need two or three pulling at once - pose from OpenPose, structure from canny, maybe depth - and that's what "multi-ControlNet" is for. CR Apply Multi-ControlNet Adv JK is the JakeUpgrade node that consumes a CONTROL_NET_STACK and applies every condition in it to the same conditioning, each with its own strength and denoising window, plus the same effective-mask support as its single-ControlNet sibling.

How it works

The node takes the classic three inputs - base_positive, base_negative, and an optional mask / vae - plus the controlnet_stack wire. That stack is built upstream by the pack's Multi-ControlNet Param Stack JK (or ControlNet Loader JK + stacking), where each entry bundles a ControlNet model, an image, a strength, and start/end percents. Applying is a loop: each tuple gets loaded, its image split via SplitImageWithAlpha (so alpha-channel masks work), and run through the core ControlNetApplyAdvanced. Because the previous pass's conditioning feeds into the next, conditions compose rather than overwrite - pose plus canny can coexist, each biting in its own percent window.

The effective_mask toggle works like the single-apply version: when on, the conditioning is split so the stack's effect applies inside the mask and plain base conditioning carries the rest. Handy when you want, say, pose control on the figure but a clean background the conditions can't touch.

Outputs are base_pos and base_neg - the fully stacked conditioning pair for your sampler.

One honest caveat: more conditions isn't automatically better. Each additional ControlNet is another constraint pulling against the prompt, and the community consensus (check the controlnet knowledge in the KB) is that stacking works best when conditions are disjoint - different modalities, different regions - and when each has a modest strength. Four maxed-out controls produce mush, not fidelity.

Installing it

This is one node in ComfyUI-JakeUpgrade:

cd ComfyUI/custom_nodes
git clone https://github.com/jakechai/ComfyUI-JakeUpgrade
cd ComfyUI-JakeUpgrade
# Windows standalone: install.bat
# or: python_embeded\python.exe -s -m pip install -r requirements.txt
pip install -r requirements.txt   # non-Windows

ComfyUI Manager works too (search "JakeUpgrade"). ControlNet files live in ComfyUI/models/controlnet; nothing downloads automatically.

Troubleshooting

  • An empty or ignored condition. Check that condition's own strength in the stack node - a 0-strength entry is still passed but does nothing. Also confirm the image is attached to that stack entry, not just to the apply node.
  • Import / load errors on startup. JakeUpgrade v2.1.5+ needs ComfyUI v0.3.64+ because of the SplitImageWithAlpha rename. Old ComfyUI, old behavior.
  • The whole ControlNet feature set depends on preprocessors. If your workflow expects a canny or depth map, that's a separate step (ComfyUI's own preprocessors or ControlNet-Aux). This node only applies ready-made conditions.
  • Manager shows a JakeUpgrade / IPAdapter_plus conflict. That's the pack's replacement/ folder tripping Manager's conflict check - the README confirms it's a false positive.
  • CUDA errors after adding the pack. If you run ComfyUI-MultiGPU, the README says to disable it; it conflicts with recent ComfyUI.
Category๐Ÿ‰ JK/๐Ÿ•น๏ธ ControlNet

Inputs (6)

NameTypeDefaultDescription
base_positiveCONDITIONINGPositive conditioning input
base_negativeCONDITIONINGNegative conditioning input
effective_maskBOOLEANfalseApply mask to ControlNet effects
maskoptMASKMask for selective application
vaeoptVAEVAE for image encoding
controlnet_stackoptCONTROL_NET_STACKStack of ControlNet parameters

Outputs (2)

NameTypeDescription
base_posCONDITIONINGโ€”
base_negCONDITIONINGโ€”