Smart ControlNet Apply (CRT)
ControlNet apply that knows when to stay out of the way
- positive
- image
- vae
- control_net
- negative
- mask
- positive
- negative
- processed_image
ControlNet is the single biggest lever between "prompt roulette" and "I know where the subject goes" - edges, depth, pose, all of it. Smart ControlNet Apply (CRT) is a drop-in wrapper around ComfyUI's built-in ControlNetApplyAdvanced with three upgrades aimed at production: it does nothing when strength is zero (no wasted compute), it lets you pick a union-ControlNet condition type without extra nodes, and it handles inpainting masks properly. If you're wiring ControlNets into a big CRT-Nodes workflow, this is the apply node you want.
The one thing to internalize from the start: it expects a preprocessed image. You don't feed it your raw photo - you feed it a canny edge map or a depth map that came out of a preprocessor (like this pack's Smart Preprocessor). That's the standard ControlNet pipeline; the apply node is the point where the condition actually steers the sampler.
How it works
It delegates the heavy lifting to ComfyUI's own ControlNet apply logic, then adds the smart parts:
- Strength-0 bypass. If
strengthis 0, it returns your conditioning untouched and skips the ControlNet entirely. Great for A/B runs and for parking a branch without deleting it. - Union ControlNet type. Union models bundle many conditions in one file;
union_typetells the model which one to act as (auto,openpose,depth,canny/lineart/...,normal,segment,tile,repaint). Set it and the node sets the type on a copy of the ControlNet. Leave it onautofor single-purpose models. - Inpainting mask. If you pass an optional
maskto an inpainting ControlNet, it concats the mask into the conditioning properly instead of leaving it to you to hand-assemble.
Inputs and outputs that matter
- positive / negative - your CONDITIONING from the text encoder.
- image - the preprocessed conditioning image (edge map, depth map, etc.).
- vae - the VAE to encode that image into latent space.
- control_net - the loaded ControlNet model file.
- strength (0–10) - how hard the condition pushes. 0 = bypass; 1 is the classic default; the KB's standing advice for structure-heavy work is often to run it at 0.6–0.9.
- end_percent (0–1) - when to release the condition during denoising. Ending at ~0.5–0.7 lets the sampler take over detail late, which is the single most useful lever on a ControlNet.
Outputs are positive and negative (into your KSampler) plus processed_image, so you can preview exactly what condition the sampler saw.
Gotchas
union_typeonly matters for union ControlNets - on a regular canny-only model it's a no-op, andautois always safe.- Feed it a preprocessed image, not the source photo. If your ControlNet looks weak, the usual culprit is piping the wrong image in.
- It bypasses on strength 0 but the ControlNet model still has to be loaded - don't expect it to save your VRAM from the model itself.
Install is pack-level: ComfyUI Manager → search CRT-Nodes → install and restart, or clone the repo into custom_nodes. The suite brings a heavy dependency list, but it degrades gracefully - optional nodes fail on their own, not the whole UI.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| image | IMAGE | — | |
| vae | VAE | — | |
| control_net | CONTROL_NET | — | |
| strength | FLOAT | 1.000–10 | — |
| end_percent | FLOAT | 1.0000–1 | — |
| union_type | COMBO | auto | 9 options: auto, openpose, depth, hed/pidi/scribble/ted, canny/lineart/anime_lineart/mlsd, normal, +3 |
| negativeopt | CONDITIONING | — | |
| maskopt | MASK | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| processed_image | IMAGE | — |