Nodes/JLC Flux2 ControlNet/ JLC Flux2 ControlNet Apply
ComfyUI Node

 JLC Flux2 ControlNet Apply

The boring, correct way to apply one ControlNet in FLUX.2

By Damkohler·Created 2 months ago·Updated 26 days ago· 20
 JLC Flux2 ControlNet Apply
  • controlnet
  • conditioning
  • vae
  • control_image
  • conditioning
strength0.75
start_percent0.000
end_percent1.000
diagnosticstrue

Ignore the class name - the node you see in the menu is JLC Flux2 ControlNet Apply, and "Diagnostic" is just the internal class it ships under. It's the plain single-branch apply node of this pack: one ControlNet, one control image, one conditioning stream, out the other side. If you only ever need one condition on a FLUX.2 generation, this is the node you'll reach for every single time.

Why it exists

For FLUX.2-dev, the Alibaba PAI Fun ControlNet Union is the standard side model, and ComfyUI core has no native node for it - third-party support is how everyone runs it. This pack's whole design bet is "extend FLUX.2 without replacing it": instead of swapping in a modified transformer or sampler, the Apply node attaches the ControlNet as conditioning metadata and the side branch gets injected through ComfyUI's native hooks. Your FLUX.2 guider, sampler, model loading, and offloading all stay stock. That's a real difference from packs that fork the model.

How it works

Wire in the controlnet handle from the JLC Loader, a conditioning stream (positive or negative, whichever you're conditioning), the vae, and a control_image. The image gets reordered into the BCHW hint format and attached to your conditioning with a strength and a timestep-percent range. Downstream, the side model's residuals are added into the base model at the FLUX.2 double-block seam - same mechanism the pack's Orchestrator uses, just without the multi-branch wrapper.

The knobs that matter:

  • strength (default 0.75) - how hard the condition pushes. The Alibaba card recommends 0.65–0.80 for this union, so the default is on target; cranking toward 1.0+ over-conditions and starts to fight the prompt.
  • start_percent / end_percent - when during denoising the condition applies. Letting it run 0.0→1.0 is fine for a first pass; for structure-heavy work, releasing the condition after composition forms is the classic move.

The output is a single conditioning socket that feeds your FLUX.2 guider. There's also a diagnostics toggle for verbose logging when something's misbehaving.

Installing it

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

Restart ComfyUI or install "JLC Flux2 ControlNet" from Manager. Requirements: a 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 not included - the depth/pose/canny map is your job upstream.

Common issues

strength = 0 is a runtime bypass, but you still need a real control image - passing None raises a hard error, which is by design. start_percent above end_percent also errors cleanly. And the most common "it did nothing" report: the union model at the old SD-era default strength of 1.0, which overcooks modern FLUX.2 conditioning. Start at the 0.75 default, tune from there. If you need positive and negative both conditioned with the same branch, that's the Apply Advanced variant; if you need two to four branches at once, that's the Orchestrator.

CategoryFlux2 Controlnet

Inputs (8)

NameTypeDefaultDescription
controlnetJLC_FLUX2_CONTROLNET
conditioningCONDITIONING
vaeVAE
control_imageIMAGE
strengthFLOAT0.750–2
start_percentFLOAT0.0000–1
end_percentFLOAT1.0000–1
diagnosticsBOOLEANtrue

Outputs (1)

NameTypeDescription
conditioningCONDITIONING