Nodes/JLC Flux2 ControlNet/ JLC Flux2 ControlNet Orchestrator
ComfyUI Node

 JLC Flux2 ControlNet Orchestrator

Four ControlNets at once, in parallel instead of stacked

By Damkohler·Created 2 months ago·Updated 26 days ago· 20
 JLC Flux2 ControlNet Orchestrator
  • controlnet
  • conditioning
  • vae
  • control_image_1
  • control_image_2
  • control_image_3
  • control_image_4
  • conditioning
  • vae
  • control_image_1
  • control_image_2
  • control_image_3
  • control_image_4
slot_count4
strength_10.50
start_percent_10.000
end_percent_11.000
diagnosticstrue
strength_20.50
start_percent_20.000
end_percent_21.000
strength_30.50
start_percent_30.000
end_percent_31.000
strength_40.50
start_percent_40.000
end_percent_41.000

This is the flagship node of the pack, and the one worth the install on its own. Most multi-ControlNet setups chain one Apply after another - A(B(C(x))) - so each branch has to pass through the previous ones and errors compound down the chain. The Orchestrator instead evaluates up to four branches independently and combines their residuals: A(x) + B(x) + C(x). Each branch gets its own control image, strength, and timestep range, and they all share one loaded side model. Flat composition, one ControlNet in memory, no recursion.

Why that design actually matters

Beyond the elegance, flat composition changes what you can tune. Because the branches don't nest, you can push one condition hard and another soft without the interaction effects of a recursive chain - the pose stays rigid while the depth just whispers. The shared side model means four branches don't cost four copies of the ControlNet weights, which on a FLUX.2-dev workload is the difference between fitting and OOMing. The author built this design on his earlier Flux.1 work and carried it straight over; it's the stable, preferred path in this pack, with the single Apply nodes kept for simpler graphs.

Wiring it

Connect the controlnet handle, your conditioning (or text conditioning), the vae, and control_image_1 - slot 1 is required. Set slot_count to how many branches you're actually using (1–4); slots above it are ignored even if stale workflow data is attached, and the node exposes only the sockets you configure. Per-slot, in the strength_1, start_percent_1, end_percent_1 style:

  • strength - default 0.5 per branch. The union model's overall published range is 0.65–0.80, but per-branch with several conditions you'll usually sit lower.
  • start_percent / end_percent - when that condition is active during denoising. Giving dense controls short windows is the recommended way to keep them from fighting the prompt.

Outputs: conditioning for your guider, a pass-through vae, and control_image_1..4 pass-throughs so you can branch off the same images downstream.

Installing it

cd ComfyUI/custom_nodes
git clone https://github.com/Damkohler/JLC-Flux2-ControlNet.git

Restart ComfyUI or use Manager ("JLC Flux2 ControlNet"). Requires current ComfyUI with native FLUX.2 support, Python 3.10+, a FLUX.2-dev model + text encoder + VAE, and the Fun ControlNet Union checkpoint in ComfyUI/models/controlnet/. Preprocessors are external.

Where people get burned

The orchestrator wants clean conditioning - place it right after text conditioning or the Reference Image Orchestrator, not after another Apply node, or you'll get a hard error. Two more classics: connecting a None control image (a disabled slot above slot_count reads as None and errors - enable it or disconnect it), and piling on dense conditions like depth + luminance at high strength and wondering why the image fights itself. Start with one branch, get it stable, then add the rest conservatively with short activation ranges. High-res multi-branch runs are also just slow and memory-hungry; that's physics, not a bug.

CategoryFlux2 Controlnet

Inputs (21)

NameTypeDefaultDescription
controlnetJLC_FLUX2_CONTROLNET
conditioningCONDITIONING
vaeVAE
control_image_1IMAGE
slot_countINT41–4Number of exposed and active ControlNet slots. Slots above this count are ignored by the backend even if stale workflow data remains connected.
strength_1FLOAT0.500–2
start_percent_1FLOAT0.0000–1
end_percent_1FLOAT1.0000–1
diagnosticsBOOLEANtrue
control_image_2optIMAGE
strength_2optFLOAT0.500–2
start_percent_2optFLOAT0.0000–1
end_percent_2optFLOAT1.0000–1
control_image_3optIMAGE
strength_3optFLOAT0.500–2
start_percent_3optFLOAT0.0000–1
end_percent_3optFLOAT1.0000–1
control_image_4optIMAGE
strength_4optFLOAT0.500–2
start_percent_4optFLOAT0.0000–1
end_percent_4optFLOAT1.0000–1

Outputs (6)

NameTypeDescription
conditioningCONDITIONING
vaeVAE
control_image_1IMAGE
control_image_2IMAGE
control_image_3IMAGE
control_image_4IMAGE