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

Load SparseCtrl Model πŸ›‚πŸ…πŸ…’πŸ…

Sparse-frame conditioning for AnimateDiff

By KosinkadinkΒ·Created 3 years agoΒ·Updated 12 days agoΒ· 994
Load SparseCtrl Model πŸ›‚πŸ…πŸ…’πŸ…
  • sparse_method
  • tk_optional
  • CONTROL_NET
β—„sparsectrl_nameβ–Ύβ–Ί
β—„use_motiontrueβ–Ί
β—„motion_strength1.000β–Ί
β—„motion_scale1.000β–Ί
β—„context_awareβ–Ύβ–Ί
β—„sparse_hint_mult1.000β–Ί
β—„sparse_nonhint_mult1.000β–Ί
β—„sparse_mask_mult1.000β–Ί

SparseCtrl is the AnimateDiff trick where you condition only a few frames - give it a starting frame, maybe an ending frame, and the motion module fills in everything between. Image animation, keyframe interpolation, sketch-to-video, storyboarding: that's the family of workflows this unlocks. This node loads the SparseCtrl model and turns it into an Advanced ControlNet you drive through an Apply Advanced ControlNet node.

Straight talk on where this sits in 2026: SparseCtrl is SD 1.5 / AnimateDiff-era tech (it shipped with AnimateDiff v3 in late 2023). AnimateDiff has since been superseded by Wan 2.2 for general video, and the arbitrary-length, per-frame-control, looping arguments that kept it alive all have Wan answers now. SparseCtrl still works and still does its specific morphing look well - just know you're on a legacy path, not the current one.

How it works

Normal per-frame ControlNet wants a control image for every frame. SparseCtrl instead accepts conditioning on a sparse subset of frames and lets the AnimateDiff motion module propagate that across the batch - which is why you can hand it two keyframes and get a filled-in sequence. The two flavors of SparseCtrl model are an RGB encoder (condition on actual images) and a scribble encoder (condition on sketches). This node loads whichever you picked and exposes motion controls for how much the model's own motion prior contributes. Because SparseCtrl patches the model, wire the apply node's model_opt output to your sampler, and keep an AnimateDiff-Evolved motion module in the graph.

The inputs and outputs that matter

Required: sparsectrl_name (the model dropdown from ComfyUI/models/controlnet), use_motion (default on - whether to use the SparseCtrl motion component), motion_strength (1.0), and motion_scale (1.0). For a first run, pick the model and leave the motion values at their defaults.

The optional inputs are where the finer control lives: sparse_method (a SPARSE_METHOD from the Spread Method node, deciding how your sparse hints spread across the batch), context_aware (context handling for sliding-window sampling), tk_optional (a timestep schedule), and three multipliers - sparse_hint_mult, sparse_nonhint_mult, and sparse_mask_mult - that separately weight the hinted frames, the un-hinted frames, and the mask.

Output is a CONTROL_NET for your apply node. Your actual conditioning images go into the apply node's image input, and for RGB SparseCtrl you'll usually preprocess them through the RGB SparseCtrl node first.

How to install it

ComfyUI Manager: search ComfyUI-Advanced-ControlNet, install, restart. Or:

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

then restart. You'll also need the SparseCtrl model files (the AnimateDiff v3 RGB and scribble SparseCtrl checkpoints) in ComfyUI/models/controlnet, plus Kosinkadink's ComfyUI-AnimateDiff-Evolved installed for the motion module - SparseCtrl doesn't do anything without it.

Common issues & troubleshooting

Empty dropdown. No SparseCtrl model in ComfyUI/models/controlnet. Download the v3 SparseCtrl checkpoints and refresh.

It runs but there's no motion or the frames don't fill in. Two usual causes: you didn't wire model_opt from the apply node into the sampler, or there's no AnimateDiff-Evolved motion module in the graph. SparseCtrl is a partner to AnimateDiff, not a standalone control.

You're trying to use it on a modern base. SparseCtrl is SD 1.5 / AnimateDiff only. For current video work, Wan 2.2 (with VACE for control) is the path - SparseCtrl won't attach to Flux, Wan, or the other DiT video models.

CategoryAdv-ControlNet πŸ›‚πŸ…πŸ…’πŸ…/SparseCtrl

Inputs (10)

NameTypeDefaultDescription
sparsectrl_nameCOMBO0 options:
use_motionBOOLEANtrueβ€”
motion_strengthFLOAT1.0000–10β€”
motion_scaleFLOAT1.0000–10β€”
sparse_methodoptSPARSE_METHODβ€”
tk_optionaloptTIMESTEP_KEYFRAMEβ€”
context_awareoptCOMBO2 options: nearest_hint, off
sparse_hint_multoptFLOAT1.0000–10β€”
sparse_nonhint_multoptFLOAT1.0000–10β€”
sparse_mask_multoptFLOAT1.0000–10β€”

Outputs (1)

NameTypeDescription
CONTROL_NETCONTROL_NETβ€”