Nodes/ComfyUI/Apply ControlNet
ComfyUI Node Runs on cloud

Apply ControlNet

The node that pins structure to your image, and the start/end dials that make it behave

By Comfy-Org·Created 4 years ago·Updated about 3 hours ago· 129,874
Apply ControlNet
  • positive
  • negative
  • control_net
  • image
  • vae
  • positive
  • negative
strength1.00
start_percent0.000
end_percent1.000

This is the ControlNet node. The one you'll actually use. It's the standard "Apply ControlNet" that takes your positive and negative conditioning, a ControlNet model, and a control image, and attaches the structure of that image - edges, depth, pose, whatever the ControlNet was trained on - to your prompt so the sampler renders into that structure instead of wherever the prompt alone would go. If you've ever wanted "same pose, different person" or "this exact layout, but anime," this node is the entire trick.

How it works

Mechanically it's simple: the control image is turned into a control hint and attached to both your positive and negative conditionings (with control_apply_to_uncond off, so the negative path doesn't get steered by the structure). If you chain multiple ControlNets - canny plus depth, say - each Apply ControlNet node sees the previous one's control already attached and stacks its own on top, so you get multi-condition blending for free. The vae input is optional and only matters for the newer ControlNets that want the hint encoded into latent space; on SD1.5/SDXL pixel-space ControlNets it just sits unused.

The inputs that matter

  • strength - how hard the structure pulls. Default 1.0. On SD-era ControlNets, 0.3–0.7 for loose guidance, 0.8–1.2 for strict adherence. But the 2025-26 union ControlNets publish lower numbers - 0.65 to 0.8 is the current guidance, and 1.0 on a modern union overcooks it.
  • start_percent / end_percent - when during denoising the condition applies. This pair is the secret sauce. Starting at 0 and ending at 0.5 means the ControlNet only guides the composition phase and lets the model add its own detail later - the community's standing advice for structure-heavy work, and the difference between "locked to the map" and "painted with the map as a suggestion."
  • control_net and image - the model (in models/controlnet) and the preprocessed control image (canny edges, depth map, pose skeleton - from a preprocessor node, which is a separate step).

The two outputs - positive, negative - go straight into your sampler.

How you get it

Core ComfyUI, no install. The workflow pattern is: preprocess → Apply ControlNet → sampler, repeated per condition.

Where people get burned

The "it's having no effect" mystery. Usually one of three things: the mode and the preprocessed image don't match (a union ControlNet set to depth fed canny edges does nothing), the start/end window is too narrow, or the preprocessor output is broken. Overcooking. Strength 1.0 everywhere is the beginner move; on modern unions it makes images look like the map was photocopied onto them. Old workflow, deprecated node. If a download has the older ControlNetApply (without start/end), that one's deprecated - this Advanced version is the one to build with. And a 2026 asterisk: edit models can now do a lot of what ControlNet does by just feeding the map as an image with a sentence. But they have no strength dial and no start/end - so for partial strength, or two conditions at once, this node is still the tool.

Categorymodel/conditioning/controlnet

Inputs (8)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
control_netCONTROL_NET
imageIMAGE
strengthFLOAT1.000–10
start_percentFLOAT0.0000–1
end_percentFLOAT1.0000–1
vaeoptVAE

Outputs (2)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING