RookieUI ControlNet Apply (Advanced)
A1111-style ControlNet apply, with the dials that actually matter
- positive
- negative
- control_net
- image
- mask_optional
- vae_optional
- positive
- negative
This is the node that takes a loaded ControlNet plus a control map and actually welds them onto your conditioning - the "apply" step, the part that makes generation follow your pose or depth or canny edges. If you've ever used the ControlNet unit inside Automatic1111 with the weight slider and the start/end step boxes, this is that exact surface, rebuilt to run on native ComfyUI. RookieUI is an A1111-style sidebar for ComfyUI, and this is one of the backend nodes it emits when you enable a ControlNet unit and hit generate. You can also just wire it by hand.
It's the "advanced" apply, which in ControlNet terms means one thing: you get the timestep schedule and staged weighting, not only a single strength number.
How it works
ControlNet conditions generation on spatial structure pulled from a reference - edges, depth, a pose skeleton - so you steer what with the prompt and where with the map. This node injects that guidance into the denoising process. You feed it your positive and negative conditioning, the control_net model, and the image (your preprocessed control map, usually straight out of RookieUIControlNetPreprocess). It returns modified positive and negative conditioning that you wire into your KSampler. Nothing else in the graph changes.
The reason to reach for the advanced apply over a plain one is the scheduling. ControlNet doesn't have to hold the whole way through sampling, and usually it shouldn't.
The inputs that matter
strength(0–10, default 1) - how hard the condition pulls. The old SD-era default was 1.0, but if you're on a 2026 union model (Flux 2, Qwen-Image, Z-Image), the published scales are lower - roughly 0.65–0.9 depending on the mode. Starting at 1.0 on a modern union overcooks it. Turn it down before you blame the model.start_percent/end_percent(0–1, default 0 and 1) - when during denoising the condition applies. This is the parameter that actually matters most, and it's underused. Start at 0, end around 0.5, and ControlNet only guides the composition phase - it locks the structure early and then lets the model invent its own detail for the back half. For a hand fix or a loose pose, releasing the condition after composition forms is the standing community advice, not a hack.weight_preset(balanced/soft/strong) - a quick stand-in for per-block weighting.softleans the influence toward the model's own judgment;strongclamps harder to the map.
Then there are two advanced escape hatches. layer_weights_json takes a JSON array to weight individual UNet blocks by hand (leave it [] unless you know exactly which block you're targeting), and mask_aware_apply plus the optional mask_optional input lets the ControlNet act only inside a masked region - handy for applying structure to one subject in a busy frame. There's also an optional vae_optional for control types that need to encode to latent space.
How to install it
ControlNet is built into RookieUI - you don't need a separate ControlNet node pack. Via ComfyUI Manager, search ComfyUI-RookieUI, install, restart. Manually, from your ComfyUI root:
cd ComfyUI/custom_nodes
git clone https://github.com/rookiestar28/ComfyUI-RookieUI
cd ComfyUI-RookieUI
python -m pip install -r requirements.txt
Then restart ComfyUI. You still need the actual ControlNet model files in models/controlnet - the pack ships the wiring, not the weights.
Common issues
The number-one mistake is strength 1.0 on a modern base. If your output looks fried or ignores the prompt, drop strength and pull end_percent back to 0.5 before touching anything else.
The other trap is the union-model menu shrinking. On SD 1.5 and SDXL you had twelve-plus conditions; the 2026 unions typically ship seven or fewer, and segmentation, normal maps and QR/brightness conditioning were never rebuilt for post-Flux models. If your control type genuinely doesn't exist for your base, no apply node can save you - the fix is to run that structure pass on an SDXL model and carry the result forward. And if you're stacking two units (canny plus depth), give each its own strength and step range rather than blasting both at full - the advanced apply exists precisely so you can blend.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| control_net | CONTROL_NET | — | |
| image | IMAGE | — | |
| strength | FLOAT | 1.000–10 | — |
| start_percent | FLOAT | 0.0000–1 | — |
| end_percent | FLOAT | 1.0000–1 | — |
| weight_preset | COMBO | 3 options: balanced, soft, strong | |
| layer_weights_json | STRING | [] | — |
| mask_aware_apply | BOOLEAN | false | — |
| mask_optionalopt | MASK | — | |
| vae_optionalopt | VAE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |