Apply AnimateDiff Model ππ π β‘
Turning a loaded motion module into something usable
- motion_model
- motion_lora
- scale_multival
- effect_multival
- ad_keyframes
- per_block
- M_MODELS
This is the middle link in the Gen2 chain: ADE_LoadAnimateDiffModel loads the file, this node applies it, and ADE_UseEvolvedSampling actually patches your model with the result. On its own this node doesn't do anything visible to your generation - its output has to keep flowing downstream to Use Evolved Sampling before you see a single frame of motion.
The "Simple" in the name matters. Its sibling, ADE_ApplyAnimateDiffModel (labeled "Adv." in the UI), adds start_percent/end_percent scheduling and lets you chain multiple motion models together via prev_m_models. This node skips both - it's for the common case where you want one motion model active for the whole sampling process, no scheduling games.
How it works
It takes the MOTION_MODEL_ADE object from a loader and wraps it into an M_MODELS bundle - Gen2's internal representation of "the motion models that should be active." That bundle is what Use Evolved Sampling reads to know which modules to inject and how. Along the way this node is also where you set the per-run motion controls: how strong the motion is, whether it's masked, and whether a Motion LoRA rides along.
The inputs and outputs that matter
Required: motion_model (type MOTION_MODEL_ADE), fed straight from ADE_LoadAnimateDiffModel, ADE_InjectI2VIntoAnimateDiffModel, or similar.
Optional, and these are the knobs beginners actually touch: scale_multival (motion strength - can be a plain float, a list of floats for per-frame scheduling, or a mask), effect_multival (how strongly the motion module's output overrides the base model's own prediction - same flexible typing), and motion_lora for a camera-movement LoRA. Further in: ad_keyframes for scheduling scale/effect at specific points in sampling, and per_block for customizing individual motion-module blocks. Output is M_MODELS, which only fits Use Evolved Sampling's m_models input (or another Apply node's prev_m_models, if you're stacking).
How to install it
Same pack, same drill: ComfyUI Manager, search AnimateDiff Evolved by Kosinkadink. Or:
cd ComfyUI/custom_nodes && git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved
then restart. This node itself needs no model download - that happens upstream at the Load step. Just make sure you've got at least one motion module in ComfyUI/models/animatediff_models or the pack's own models folder before you get this far in the graph.
Common issues & troubleshooting
Wired everything but nothing happens. The single most common Gen2 mistake: forgetting Use Evolved Sampling at the end of the chain. This node's M_MODELS output does nothing on its own - it has to reach the m_models input of ADE_UseEvolvedSampling, which is what actually patches your model.
Motion too weak or too strong. That's scale_multival and effect_multival, not something upstream. If motion barely shows, push scale_multival up before reaching for a different motion module.
Used a Motion LoRA and saw no camera movement. The README's own caveat: original Motion LoRAs really only work reliably on v2-based motion modules (mm_sd_v15_v2, mm-p_0.5.pth, mm-p_0.75.pth). If your base module is v1 or v3, the LoRA may do very little - that's expected, not a bug in this node.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| motion_model | MOTION_MODEL_ADE | β | |
| motion_loraopt | MOTION_LORA | β | |
| scale_multivalopt | MULTIVAL | β | |
| effect_multivalopt | MULTIVAL | β | |
| ad_keyframesopt | AD_KEYFRAMES | β | |
| per_blockopt | PER_BLOCK | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| M_MODELS | M_MODELS | β |