Nodes/ComfyUI-Advanced-ControlNet/Apply Advanced ControlNet(1) πŸ›‚πŸ…πŸ…’πŸ…
ComfyUI Node Runs on cloud

Apply Advanced ControlNet(1) πŸ›‚πŸ…πŸ…’πŸ…

Single-conditioning ControlNet in ComfyUI

By KosinkadinkΒ·Created 3 years agoΒ·Updated 8 days agoΒ· 993
Apply Advanced ControlNet(1) πŸ›‚πŸ…πŸ…’πŸ…
  • conditioning
  • control_net
  • image
  • mask_optional
  • timestep_kf
  • latent_kf_override
  • weights_override
  • model_optional
  • vae_optional
  • CONDITIONING
  • model_opt
β—„strength1.00β–Ί
β—„start_percent0.000β–Ί
β—„end_percent1.000β–Ί

This is the node that actually applies a ControlNet to your conditioning - the single-conditioning variant. Where the classic Apply ControlNet takes both positive and negative conditioning, this one takes a single conditioning stream. That's the shape newer architectures want: Flux and SD3-style pipelines route one conditioning, so the "(1)" version is what you wire into those graphs.

More importantly, it's the node that unlocks everything else in this pack. Advanced-ControlNet's scheduling, custom weights, and - the big one - sliding-context-window support for AnimateDiff only kick in when at least one Advanced apply (or loader) node is in the graph. Drop a vanilla ControlNet into an Advanced Apply and it gets auto-converted to the Advanced version on the fly. No conversion node, no ceremony.

What it does under the hood

It attaches a loaded ControlNet to your conditioning with the standard strength and start/end controls, then - if you've wired them - layers on the pack's extras: timestep keyframes, latent keyframes, custom per-block weights, and attention masks. The KB's one-line summary of why this matters: an edit model has no controlnet_conditioning_scale and no start/end step, so you cannot ask it for 40% of a pose. This node is where you get that dial.

Inputs and outputs that matter

The required set is the ControlNet basics:

  • conditioning - your single conditioning stream (out of CLIP Text Encode, usually).
  • control_net - the loaded ControlNet; auto-upgraded to Advanced here.
  • image - the preprocessed control image (canny map, depth map, pose, etc.). One image applies to all latents; a batch applies frame-by-frame.
  • strength / start_percent / end_percent - how hard, and the sampling-percentage window it applies over. Ending control around 0.5 is the standard "lock composition, then let go" trick.

The optionals are where the pack's power lives: mask_optional (attention mask - where the ControlNet applies), timestep_kf (schedule across steps), latent_kf_override and weights_override (apply latent keyframes / custom weights to all timesteps without a full keyframe chain), and model_optional / vae_optional for the newer ControlNets that need the model or a VAE handed to them.

Outputs: CONDITIONING (now carrying the ControlNet, wire it to your sampler) and model_opt, which passes the model through when you supplied one via model_optional - connect it onward so any model-side patching survives.

Installing the pack

ComfyUI Manager β†’ search "ComfyUI-Advanced-ControlNet" β†’ install β†’ restart. Or cd ComfyUI/custom_nodes && git clone https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet then restart. Pure ComfyUI, nothing heavy to compile. Kosinkadink's pack, actively maintained. It ships no preprocessors (comfyui_controlnet_aux handles those) and no ControlNet checkpoints - those go in ComfyUI/models/controlnet.

Common gotchas

The image input expects an already preprocessed map if your ControlNet needs one - feed a canny model a raw photo and you'll get mush. Run it through the matching preprocessor first.

The override inputs are a documented trap worth repeating: latent_kf_override and weights_override apply to all timesteps and ignore anything attached to your timestep keyframes. They're the shortcut for when you don't need a full schedule; if you do have a keyframe chain, don't also fill the overrides or they'll quietly take over. And the usual reminder: use this single-conditioning node for one-conditioning pipelines; if your graph has separate positive and negative conditioning, the regular pos/neg Apply Advanced ControlNet is the better fit.

Inputs (12)

NameTypeDefaultDescription
conditioningCONDITIONINGβ€”
control_netCONTROL_NETβ€”
imageIMAGEβ€”
strengthFLOAT1.000–10β€”
start_percentFLOAT0.0000–1β€”
end_percentFLOAT1.0000–1β€”
mask_optionaloptMASKβ€”
timestep_kfoptTIMESTEP_KEYFRAMEβ€”
latent_kf_overrideoptLATENT_KEYFRAMEβ€”
weights_overrideoptCONTROL_NET_WEIGHTSβ€”
model_optionaloptMODELβ€”
vae_optionaloptVAEβ€”

Outputs (2)

NameTypeDescription
CONDITIONINGCONDITIONINGβ€”
model_optMODELβ€”