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

Apply Advanced ControlNet πŸ›‚πŸ…πŸ…’πŸ…

Scheduling strength across steps and frames

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

This is the workhorse of the whole pack. If you've used ComfyUI's built-in "Apply ControlNet" node, this is the same idea - feed it your conditioning, a loaded ControlNet, and a control image, and it steers generation toward that image's structure. The difference is everything you can't do on the vanilla node: schedule the control's strength across sampling steps, vary it per frame in a batch, mask which region it touches, and swap in custom per-block weights. It also quietly upgrades any ControlNet you plug in - hand it a model from a regular loader and it converts it to the Advanced version on the fly, so you don't strictly need the pack's own loader to get the extra features.

The reason this node exists at all is video. Kosinkadink also wrote AnimateDiff-Evolved, and its sliding context window (16 frames at a time, overlapped, to make arbitrarily long clips) needs a ControlNet that understands the concept of "this frame, not that frame." That's what latent keyframes are, and this is the node that applies them.

How it works

At its core it's a normal ControlNet apply: the control image guides the frozen model's structure while your prompt keeps deciding what things are. What's bolted on top is the scheduling layer. The start_percent/end_percent window says when during denoising the control is live - a genuinely important knob, not decoration. The community's standing advice for structure-heavy work is to release the condition around halfway (end around 0.4-0.5) so the later steps stay the model's own detail. Anything you feed into timestep_kf, latent_kf_override, or weights_override layers finer control on top of that.

The inputs and outputs that matter

The three you'll actually touch first:

  • control_net and image - the loaded model and the (usually preprocessed) control image. If you pass more images than latents, each drives a different frame; one image is reused for all.
  • strength (default 1.0, up to 10) - overall control weight. On a modern union model start lower than 1.0; the 2025-26 ControlNets overcook at the old default.
  • start_percent / end_percent - the timing window described above.

The optional inputs are the pack's real surface: mask_optional (an attention mask - where the control applies, and how strongly if it's not binary), timestep_kf (a schedule from Timestep Keyframe nodes), latent_kf_override and weights_override (shortcuts for when you only need latent keyframes or custom weights and nothing else from a full timestep keyframe), plus model_optional and vae_optional for the ControlNet types that need them (SparseCtrl, SVD, Anima LLLite).

Outputs are positive, negative - the conditioning with control baked in, straight into your KSampler - and model_opt, the patched MODEL you must route to the sampler when you're using a model-patching control like SparseCtrl or Anima LLLite.

How to install it

Easiest path is ComfyUI Manager: search ComfyUI-Advanced-ControlNet, install, restart. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet

then restart ComfyUI. There are no heavy pip dependencies. What the pack does not include: the ControlNet model files (drop those in ComfyUI/models/controlnet) and the preprocessors that build canny/depth/pose maps - those live in the separate Fannovel16/comfyui_controlnet_aux pack.

Common issues & troubleshooting

The node or an input is missing. This one bites regularly. If model_optional or a whole node doesn't show up, your ComfyUI core is usually the stale piece, not the pack - and the Manager sometimes reports "up to date" when it isn't. Update ComfyUI itself (or reinstall the pack straight from GitHub); a few users only fixed input mismatches by rolling the pack back a version.

Control does nothing. Check you actually preprocessed the image - a raw photo into a canny model won't guide anything. And confirm end_percent isn't sitting at some tiny value that ends control before it starts.

Nothing happens with SparseCtrl or Anima. Those patch the model, so you have to wire model_opt into your sampler. Skip that and the control is silently inert.

Inputs (13)

NameTypeDefaultDescription
positiveCONDITIONINGβ€”
negativeCONDITIONINGβ€”
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 (3)

NameTypeDescription
positiveCONDITIONINGβ€”
negativeCONDITIONINGβ€”
model_optMODELβ€”