Extensions/AnimateDiff Evolved
ComfyUI Extension Runs on cloud

AnimateDiff Evolved

A forked repository that actively maintains [a/AnimateDiff](https://github.com/ArtVentureX/comfyui-animatediff), created by ArtVentureX.

By Kosinkadink·Created 3 years ago·Updated 13 days ago· 3,519
Kosinkadink/ComfyUI-AnimateDiff-Evolved
Nodes145
On cloudRunnable
CategoryAnimate Diff 🎭🅐🅓/per block, Animate Diff 🎭🅐🅓/ad settings/pe adjust
Stars3,519
Updated13 days ago

Nodes (145)

AD Block 🎭🅐🅓

Per-block motion control, the simple version

Animate Diff 🎭🅐🅓/per block
AD Block+ 🎭🅐🅓

Per-block motion control, split further

Animate Diff 🎭🅐🅓/per block
Adjust PE [Full Stretch] 🎭🅐🅓

Stretching AnimateDiff's positional encoding past its training window

Animate Diff 🎭🅐🅓/ad settings/pe adjust
Adjust PE [Manual] 🎭🅐🅓

Hand-tuning AnimateDiff's positional encoding, index by index

Animate Diff 🎭🅐🅓/ad settings/pe adjust
Adjust PE [Sweetspot] 🎭🅐🅓

Remapping AnimateDiff's positional encoding around its trained sweet spot

Animate Diff 🎭🅐🅓/ad settings/pe adjust
Adjust Weight [All◆Add] 🎭🅐🅓

A flat offset dial for the motion module's weights

Animate Diff 🎭🅐🅓/ad settings/weight adjust
Adjust Weight [All◆Mult] 🎭🅐🅓

One dial that scales every weight in the motion module

Animate Diff 🎭🅐🅓/ad settings/weight adjust
Adjust Weight [Indiv◆Add] 🎭🅐🅓

Nudging AnimateDiff's PE, attention, and other weights independently

Animate Diff 🎭🅐🅓/ad settings/weight adjust
Adjust Weight [Indiv-Attn◆Add] 🎭🅐🅓

Additive offsets down to the Q/K/V level of AnimateDiff's attention

Animate Diff 🎭🅐🅓/ad settings/weight adjust
Adjust Weight [Indiv-Attn◆Mult] 🎭🅐🅓

Scaling AnimateDiff's Q/K/V attention weights independently

Animate Diff 🎭🅐🅓/ad settings/weight adjust
Adjust Weight [Indiv◆Mult] 🎭🅐🅓

Scaling AnimateDiff's PE, attention, and other weights separately

Animate Diff 🎭🅐🅓/ad settings/weight adjust
Ancestral Options 🎭🅐🅓

Controlling the noise ancestral samplers inject, frame by frame

Animate Diff 🎭🅐🅓/sample settings
🚫AnimateDiff Combine [DEPRECATED, Use Video Combine (VHS) Instead!] 🎭🅐🅓

Deprecated by its own author, use Video Combine (VHS) instead

AnimateDiff Keyframe 🎭🅐🅓

Changing how strong the motion is partway through your clip

Animate Diff 🎭🅐🅓
AnimateDiff Loader 🎭🅐🅓①

The current recommended one-node AnimateDiff setup

Animate Diff 🎭🅐🅓/① Gen1 nodes ①
🚫AnimateDiff Loader (Advanced) [DEPRECATED] 🎭🅐🅓

What it did, and what to use instead

AnimateDiff Loader [Legacy] 🎭🅐🅓①

The original one-node AnimateDiff loader

Animate Diff 🎭🅐🅓/① Gen1 nodes ①
Load AnimateDiff LoRA 🎭🅐🅓

Camera-movement LoRAs, and why they don't always do much

Animate Diff 🎭🅐🅓
🚫[DEPR] Motion Model Settings (Advanced) 🎭🅐🅓①

Deprecated, and what it did

🚫[DEPR] Motion Model Settings (Adv. Attn) 🎭🅐🅓①

Deprecated, and what it did

🚫[DEPR] Motion Model Settings 🎭🅐🅓①

Deprecated — here's why you'll see it in old workflows

🚫[DEPR] Motion Model Settings (Simple) 🎭🅐🅓①

What it did before PE/Weight Adjust replaced it

Sample Settings 🎭🅐🅓

Where FreeNoise and the noise-scheduling tricks live

Animate Diff 🎭🅐🅓
AnimateDiff Settings 🎭🅐🅓

The bundle node for tweaking motion module internals

Animate Diff 🎭🅐🅓/ad settings
Context Options◆Looped Uniform 🎭🅐🅓

The older combined context-schedule node

AnimateDiff Unload 🎭🅐🅓

Detaching the motion module from a model mid-graph

Animate Diff 🎭🅐🅓/extras
Apply AnimateDiff Model (Adv.) 🎭🅐🅓②

The Advanced Apply node — scheduling and stacking motion models

Animate Diff 🎭🅐🅓/② Gen2 nodes ②
Apply AnimateDiff Model 🎭🅐🅓②

Turning a loaded motion module into something usable

Animate Diff 🎭🅐🅓/② Gen2 nodes ②
Apply AnimateDiff+CameraCtrl Model 🎭🅐🅓②

Giving AnimateDiff an actual camera move

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl
Apply AnimateDiff-PIA Model 🎭🅐🅓②

Image-conditioned motion, the Gen2 way

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/PIA
Apply AnimateLCM-I2V Model 🎭🅐🅓②

Turning a still image into your video's first frame

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/AnimateLCM-I2V
Set CLIP LoRA Hook 🎭🅐🅓

The node that actually turns a LoRA hook on

Animate Diff 🎭🅐🅓/conditioning
Set Model LoRA Hook 🎭🅐🅓

LoRAs that only apply to part of your prompt

Animate Diff 🎭🅐🅓/conditioning/single cond ops
Context Options◆Batched [Non-AD] 🎭🅐🅓

Sliding-window sampling without a motion module

Animate Diff 🎭🅐🅓/context opts
AnimateDiff+CameraCtrl Keyframe 🎭🅐🅓

Scheduling camera-control strength across a clip

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl
Manual Append CameraCtrl Poses 🎭🅐🅓②

Stitching camera moves together by hand

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl/poses
Create CameraCtrl Poses (Adv.) 🎭🅐🅓②

Stacking camera moves

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl/poses
Create CameraCtrl Poses 🎭🅐🅓②

Your first camera move in AnimateDiff

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl/poses
Create CameraCtrl Poses (Combo) 🎭🅐🅓②

Building a camera move for CameraCtrl, one segment at a time

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl/poses
CFG Extras◆PAG [Multival] 🎭🅐🅓

Perturbed-Attention Guidance for AnimateDiff's sample settings

Animate Diff 🎭🅐🅓/sample settings/cfg extras
CFG Extras◆PAG 🎭🅐🅓

PAG for AnimateDiff

Animate Diff 🎭🅐🅓/sample settings/cfg extras
CFG Extras◆RescaleCFG [Multival] 🎭🅐🅓

Taming overexposed, oversaturated high-CFG output

Animate Diff 🎭🅐🅓/sample settings/cfg extras
CFG Extras◆RescaleCFG 🎭🅐🅓

RescaleCFG for AnimateDiff

Animate Diff 🎭🅐🅓/sample settings/cfg extras
Combine LoRA Hooks [2] 🎭🅐🅓

Merging scheduled LoRAs in AnimateDiff

Animate Diff 🎭🅐🅓/conditioning/combine lora hooks
Combine LoRA Hooks [8] 🎭🅐🅓

Merging up to eight scheduled LoRAs

Animate Diff 🎭🅐🅓/conditioning/combine lora hooks
Combine LoRA Hooks [4] 🎭🅐🅓

Merging multiple scheduled/masked LoRAs into one chain

Animate Diff 🎭🅐🅓/conditioning/combine lora hooks
Condition Step Extraction 🎭🅐🅓

Pulling a single step out of a prompt schedule

Animate Diff 🎭🅐🅓/scheduling
Manual Combine Cond 🎭🅐🅓

Merge two masked conditioning branches into one

Animate Diff 🎭🅐🅓/conditioning/single cond ops
Set Props on Cond 🎭🅐🅓

Mask, strength, and schedule a conditioning branch

Animate Diff 🎭🅐🅓/conditioning/single cond ops
Set Props and Combine Cond 🎭🅐🅓

Masked, timed, LoRA-aware conditioning

Animate Diff 🎭🅐🅓/conditioning/single cond ops
Set Unmasked Cond 🎭🅐🅓

Fill in everything your mask didn't cover

Animate Diff 🎭🅐🅓/conditioning/single cond ops
Context Extras◆ContextRef 🎭🅐🅓

Keeping a sliding-window AnimateDiff render consistent

Animate Diff 🎭🅐🅓/context opts/context extras
ContextRef Keyframe 🎭🅐🅓

Schedule how hard the reference locks in

Animate Diff 🎭🅐🅓/context opts/context extras/contextref
ContextRef Keyframes From List 🎭🅐🅓

Batch-generate a ContextRef schedule

Animate Diff 🎭🅐🅓/context opts/context extras/contextref
ContextRef Keyframes Interp. 🎭🅐🅓

Ramp ContextRef's strength on a curve

Animate Diff 🎭🅐🅓/context opts/context extras/contextref
ContextRef Mode◆First 🎭🅐🅓

Anchor every window to frame one

Animate Diff 🎭🅐🅓/context opts/context extras/contextref
ContextRef Mode◆Indexes 🎭🅐🅓

Pick your own reference windows

Animate Diff 🎭🅐🅓/context opts/context extras/contextref
ContextRef Mode◆Sliding 🎭🅐🅓

Sliding — anchoring long AnimateDiff generations

Animate Diff 🎭🅐🅓/context opts/context extras/contextref
ContextRef Tune◆Attn 🎭🅐🅓

Dial in the attention-injection strength

Animate Diff 🎭🅐🅓/context opts/context extras/contextref
ContextRef Tune◆Attn+Adain 🎭🅐🅓

Attention injection plus color and style matching

Animate Diff 🎭🅐🅓/context opts/context extras/contextref
Context Extras◆NaiveReuse 🎭🅐🅓

The cheap fix for sliding-window drift

Animate Diff 🎭🅐🅓/context opts/context extras
NaiveReuse Keyframe 🎭🅐🅓

Schedule the cheap consistency fix over time

Animate Diff 🎭🅐🅓/context opts/context extras/naivereuse
NaiveReuse Keyframes From List 🎭🅐🅓

Batch-generate a NaiveReuse schedule

Animate Diff 🎭🅐🅓/context opts/context extras/naivereuse
NaiveReuse Keyframes Interp. 🎭🅐🅓

Ramp NaiveReuse's strength on a curve

Animate Diff 🎭🅐🅓/context opts/context extras/naivereuse
Set Context Extras 🎭🅐🅓

The node that actually turns ContextRef or NaiveReuse on

Animate Diff 🎭🅐🅓/context opts/context extras
Custom CFG [Multival] 🎭🅐🅓

Override the sampler's CFG with a schedule or a mask

Animate Diff 🎭🅐🅓/sample settings/custom cfg
Custom CFG Keyframe [Multival] 🎭🅐🅓

One point in a hand-built CFG schedule

Animate Diff 🎭🅐🅓/sample settings/custom cfg
Custom CFG Keyframes From List 🎭🅐🅓

Batch-generate a CFG schedule

Animate Diff 🎭🅐🅓/sample settings/custom cfg
Custom CFG Keyframes Interp. 🎭🅐🅓

Ramp CFG smoothly across the render

Animate Diff 🎭🅐🅓/sample settings/custom cfg
Custom CFG Keyframe 🎭🅐🅓

Scheduling your CFG scale to change mid-clip

Animate Diff 🎭🅐🅓/sample settings/custom cfg
Custom CFG 🎭🅐🅓

Overriding your sampler's guidance in AnimateDiff-Evolved

Animate Diff 🎭🅐🅓/sample settings/custom cfg
Empty Latent Image (Big Batch) 🎭🅐🅓

Seeding huge AnimateDiff frame counts

Animate Diff 🎭🅐🅓/extras
Float to Floats 🎭🅐🅓

Turning one number into a list ComfyUI will accept

Animate Diff 🎭🅐🅓/scheduling
🧪Inject I2V into AnimateDiff Model 🎭🅐🅓②

Experimental, and the node's own name tells you

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/AnimateLCM-I2V/🧪experimental
🧪Inject PIA into AnimateDiff Model 🎭🅐🅓②

Turning a motion module into an image animator

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/PIA/🧪experimental
PIA Input [Multival] 🎭🅐🅓②

Hand-tuning how strongly PIA follows your image

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/PIA
PIA Input [Paper Presets] 🎭🅐🅓②

The PIA authors' own tuned motion-strength values

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/PIA
Default Iteration Options 🎭🅐🅓

The plain baseline behind FreeInit

Animate Diff 🎭🅐🅓/iteration opts
FreeInit Iteration Options 🎭🅐🅓

FreeInit for AnimateDiff, and why almost nobody plugs it in

Animate Diff 🎭🅐🅓/iteration opts
Load AnimateDiff Model 🎭🅐🅓②

Just loading the motion module, nothing else yet

Animate Diff 🎭🅐🅓/② Gen2 nodes ②
Load AnimateDiff+CameraCtrl Model 🎭🅐🅓②

Loading the motion module and camera weights together

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl
Load AnimateLCM-I2V Model 🎭🅐🅓②

Loading the fast, image-anchored motion module

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/AnimateLCM-I2V
Load CameraCtrl Poses (File) 🎭🅐🅓②

Reusing a camera trajectory

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl/poses
Load CameraCtrl Poses (Path) 🎭🅐🅓②

Loading a camera trajectory from a file instead of building one by hand

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl/poses
Context Options◆Looped Uniform 🎭🅐🅓

The node for actual seamless loops

Animate Diff 🎭🅐🅓/context opts
View Options◆Looped Uniform 🎭🅐🅓

The view-window setting for clips that need to loop

Animate Diff 🎭🅐🅓/context opts/view opts
LoRA Hook Keyframe 🎭🅐🅓

Hand-placing a step in your LoRA's strength schedule

Animate Diff 🎭🅐🅓/conditioning/schedule lora hooks
LoRA Hook Keyframes From List 🎭🅐🅓

Scheduling a LoRA's strength over time

Animate Diff 🎭🅐🅓/conditioning/schedule lora hooks
LoRA Hook Keyframes Interp. 🎭🅐🅓

A smooth strength ramp instead of hand-placed steps

Animate Diff 🎭🅐🅓/conditioning/schedule lora hooks
Multival to Mask 🎭🅐🅓

Pulling a plain mask back out of the pack's strength type

Animate Diff 🎭🅐🅓/multival
Multival 🎭🅐🅓

The value type behind almost every strength slider in this pack

Animate Diff 🎭🅐🅓/multival
Multival [Float List] 🎭🅐🅓

Building a Multival from a per-frame source

Animate Diff 🎭🅐🅓/multival
Multival [Floats] 🎭🅐🅓

A real per-frame list, driving motion strength over time

Animate Diff 🎭🅐🅓/multival
Multival Scaled Mask 🎭🅐🅓

Remapping a mask's grayscale into a real strength range

Animate Diff 🎭🅐🅓/multival
Image Injection 🎭🅐🅓

Anchoring your animation to a real frame mid-sampling

Animate Diff 🎭🅐🅓/sample settings/image inject
Image Injection Options 🎭🅐🅓

Positioning where an injected image lands

Animate Diff 🎭🅐🅓/sample settings/image inject
Noise Layer [Add] 🎭🅐🅓

Stacking extra noise into specific parts of your frame

Animate Diff 🎭🅐🅓/noise layers
Noise Layer [Add Weighted] 🎭🅐🅓

Blending an extra noise source in at your own ratio

Animate Diff 🎭🅐🅓/noise layers
Noise Layer [Normalized Sum] 🎭🅐🅓

Stacking noise layers without babysitting the balance

Animate Diff 🎭🅐🅓/noise layers
Noise Layer [Replace] 🎭🅐🅓

Overriding noise in a region instead of blending it

Animate Diff 🎭🅐🅓/noise layers
Manual Combine Conds 🎭🅐🅓

Merging two positive/negative pairs in one step

Animate Diff 🎭🅐🅓/conditioning
Set Props on Conds 🎭🅐🅓

Masking a positive/negative pair together

Animate Diff 🎭🅐🅓/conditioning
Set Props and Combine Conds 🎭🅐🅓

Mask, schedule, and fold a pair into your base conditioning in one step

Animate Diff 🎭🅐🅓/conditioning
Set Unmasked Conds 🎭🅐🅓

Filling in what your masked pair didn't cover

Animate Diff 🎭🅐🅓/conditioning
AD Per Block 🎭🅐🅓

Turning motion off in specific parts of the U-Net

Animate Diff 🎭🅐🅓/per block
AD Per Block Floats (SD1.5) 🎭🅐🅓

Scripting all 21 SD1.5 motion blocks from two lists of numbers

Animate Diff 🎭🅐🅓/per block
AD Per Block++ (SD1.5) 🎭🅐🅓

Every one of SD1.5's 21 motion blocks, individually addressable

Animate Diff 🎭🅐🅓/per block
AD Per Block+ (SD1.5) 🎭🅐🅓

One control per SD1.5 UNet stage, instead of 21

Animate Diff 🎭🅐🅓/per block
AD Per Block Floats (SDXL) 🎭🅐🅓

Scripting all 16 SDXL motion blocks from two lists of numbers

Animate Diff 🎭🅐🅓/per block
AD Per Block++ (SDXL) 🎭🅐🅓

Every one of SDXL's 16 motion blocks, individually addressable

Animate Diff 🎭🅐🅓/per block
AD Per Block+ (SDXL) 🎭🅐🅓

One control per SDXL UNet stage, instead of 16

Animate Diff 🎭🅐🅓/per block
PerturbedAttnGuide [Multival] 🎭🅐🅓

PAG as a direct model patch, with maskable strength

Animate Diff 🎭🅐🅓/extras
AnimateDiff-PIA Keyframe 🎭🅐🅓

Scheduling image-conditioned motion in Gen2

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/PIA
Prompt Scheduling 🎭🅐🅓

Prompt travel without installing FizzNodes

Animate Diff 🎭🅐🅓/scheduling
Prompt Scheduling [Latents] 🎭🅐🅓

Prompt travel that actually matches your frame count

Animate Diff 🎭🅐🅓/scheduling
Create Raw Sigma Schedule 🎭🅐🅓

Building a noise schedule from raw beta parameters

Animate Diff 🎭🅐🅓/sample settings/sigma schedule
Register LoRA Hook 🎭🅐🅓

Loading a LoRA that only fires when you tell it to

Animate Diff 🎭🅐🅓/conditioning/register lora hooks
Register LoRA Hook (Model Only) 🎭🅐🅓

Registering a LoRA hook when you don't need CLIP

Animate Diff 🎭🅐🅓/conditioning/register lora hooks
Register Model as LoRA Hook 🎭🅐🅓

Hooking an entire checkpoint in as if it were a LoRA

Animate Diff 🎭🅐🅓/conditioning/register lora hooks
Register Model as LoRA Hook (MO) 🎭🅐🅓

Hooking a checkpoint's UNet weights only

Animate Diff 🎭🅐🅓/conditioning/register lora hooks
Replace Camera Parameters 🎭🅐🅓②

Tuning CameraCtrl's intrinsics

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl/poses
Replace Orig. Pose Aspect Ratio 🎭🅐🅓②

Telling CameraCtrl what resolution a pose was actually built for

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/CameraCtrl/poses
RescaleCFG [Multival] 🎭🅐🅓

RescaleCFG as a direct model patch, with maskable strength

Animate Diff 🎭🅐🅓/extras
Set LoRA Hook Keyframes 🎭🅐🅓

Attaching a built keyframe schedule onto a LoRA hook

Animate Diff 🎭🅐🅓/conditioning
Create Sigma Schedule 🎭🅐🅓

Matching your noise schedule to your motion model

Animate Diff 🎭🅐🅓/sample settings/sigma schedule
Sigma Schedule Split Combine 🎭🅐🅓

Stitching two noise schedules together at a chosen point

Animate Diff 🎭🅐🅓/sample settings/sigma schedule
Sigma Schedule To Sigmas 🎭🅐🅓

Turning an abstract noise schedule into a concrete sigma list

Animate Diff 🎭🅐🅓/sample settings/sigma schedule
Sigma Schedule Weighted Mean 🎭🅐🅓

Blending two noise schedules by weight

Animate Diff 🎭🅐🅓/sample settings/sigma schedule
Sigma Schedule Interp. Mean 🎭🅐🅓

A noise-schedule blend that shifts over the course of sampling

Animate Diff 🎭🅐🅓/sample settings/sigma schedule
Context Options◆Standard Static 🎭🅐🅓

Fixed chunks instead of a sliding window

Animate Diff 🎭🅐🅓/context opts
View Options◆Standard Static 🎭🅐🅓

The simplest of the three view-window nodes

Animate Diff 🎭🅐🅓/context opts/view opts
Context Options◆Standard Uniform 🎭🅐🅓

The node that gave AnimateDiff unlimited length

Animate Diff 🎭🅐🅓/context opts
View Options◆Standard Uniform 🎭🅐🅓

The sliding-window middle ground between the other two View Options

Animate Diff 🎭🅐🅓/context opts/view opts
Timesteps Conditioning 🎭🅐🅓

Packaging a start/end percent window as a reusable object

Animate Diff 🎭🅐🅓/conditioning
Scale Ref Image and VAE Encode 🎭🅐🅓②

Preparing a reference image for AnimateLCM-I2V

Animate Diff 🎭🅐🅓/② Gen2 nodes ②/AnimateLCM-I2V
Use Evolved Sampling 🎭🅐🅓②

The node that actually does the work in a Gen2 chain

Animate Diff 🎭🅐🅓/② Gen2 nodes ②
Value Scheduling 🎭🅐🅓

Scheduling a raw number across your clip, not just a prompt

Animate Diff 🎭🅐🅓/scheduling
Value Scheduling [Latents] 🎭🅐🅓

Value scheduling that tracks your actual batch size

Animate Diff 🎭🅐🅓/scheduling
Add Values Replace 🎭🅐🅓

Giving a numeric schedule a name so Prompt Scheduling can find it

Animate Diff 🎭🅐🅓/scheduling
Context Options◆Views Only [VRAM⇈] 🎭🅐🅓

Sliding windows without the whole-UNet pass

Animate Diff 🎭🅐🅓/context opts
Visualize Context Options (K.) 🎭🅐🅓

See your sliding context windows before you pay for the run

Animate Diff 🎭🅐🅓/context opts/visualize
Visualize Context Options (K.Adv.) 🎭🅐🅓

Previewing context windows for a start/end step range

Animate Diff 🎭🅐🅓/context opts/visualize
Visualize Context Options (S.Cus.) 🎭🅐🅓

Previewing context windows against your own sigma schedule

Animate Diff 🎭🅐🅓/context opts/visualize
🚫AnimateDiff Loader [DEPRECATED] 🎭🅐🅓

The original one-node loader

Load Checkpoint w/ Noise Select 🎭🅐🅓

The checkpoint loader that also fixes your beta schedule

Animate Diff 🎭🅐🅓/extras
Readme

AnimateDiff for ComfyUI

Improved AnimateDiff integration for ComfyUI, as well as advanced sampling options dubbed Evolved Sampling usable outside of AnimateDiff. Please read the AnimateDiff repo README and Wiki for more information about how it works at its core.

AnimateDiff workflows will often make use of these helpful node packs:

  • ComfyUI-Advanced-ControlNet for making ControlNets work with Context Options and controlling which latents should be affected by the ControlNet inputs. Includes SparseCtrl support. Maintained by me.
  • ComfyUI-VideoHelperSuite for loading videos, combining images into videos, and doing various image/latent operations like appending, splitting, duplicating, selecting, or counting. Actively maintained by AustinMroz and I.
  • comfyui_controlnet_aux for ControlNet preprocessors not present in vanilla ComfyUI. Maintained by Fannovel16.
  • ComfyUI_IPAdapter_plus for IPAdapter support. Maintained by cubiq (matt3o).
  • ComfyUI-KJNodes for miscellaneous nodes including selecting coordinates for animated GLIGEN. Maintained by kijai.
  • ComfyUI_FizzNodes for an alternate way to do prompt-travel functionality with the BatchPromptSchedule node. Maintained by FizzleDorf.

Installation

If using ComfyUI Manager:

  1. Look for AnimateDiff Evolved, and be sure the author is Kosinkadink. Install it. image

If installing manually:

  1. Clone this repo into custom_nodes folder.

Model Setup:

  1. Download motion modules. You will need at least 1. Different modules produce different results.
    • Original models mm_sd_v14, mm_sd_v15, mm_sd_v15_v2, v3_sd15_mm: HuggingFace | Google Drive | CivitAI
    • Stabilized finetunes of mm_sd_v14, mm-Stabilized_mid and mm-Stabilized_high, by manshoety: HuggingFace
    • Finetunes of mm_sd_v15_v2, mm-p_0.5.pth and mm-p_0.75.pth, by manshoety: HuggingFace
    • Higher resolution finetune,temporaldiff-v1-animatediff by CiaraRowles: HuggingFace
    • FP16/safetensor versions of vanilla motion models, hosted by continue-revolution (takes up less storage space, but uses up the same amount of VRAM as ComfyUI loads models in fp16 by default): HuffingFace
  2. Place models in one of these locations (you can rename models if you wish):
    • ComfyUI/custom_nodes/ComfyUI-AnimateDiff-Evolved/models
    • ComfyUI/models/animatediff_models
  3. Optionally, you can use Motion LoRAs to influence movement of v2-based motion models like mm_sd_v15_v2.
    • Google Drive | HuggingFace | CivitAI
    • Place Motion LoRAs in one of these locations (you can rename Motion LoRAs if you wish):
      • ComfyUI/custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora
      • ComfyUI/models/animatediff_motion_lora
  4. Get creative! If it works for normal image generation, it (probably) will work for AnimateDiff generations. Latent upscales? Go for it. ControlNets, one or more stacked? You betcha. Masking the conditioning of ControlNets to only affect part of the animation? Sure. Try stuff and you will be surprised by what you can do. Samples with workflows are included below.

NOTE: you can also use custom locations for models/motion loras by making use of the ComfyUI extra_model_paths.yaml file. The id for motion model folder is animatediff_models and the id for motion lora folder is animatediff_motion_lora.

Features

  • Compatible with almost any vanilla or custom KSampler node.
  • ControlNet, SparseCtrl, and IPAdapter support
  • Infinite animation length support via sliding context windows across whole unet (Context Options) and/or within motion module (View Options)
  • Scheduling Context Options to change across different points in the sampling process
  • FreeInit and FreeNoise support (FreeInit is under iteration opts, FreeNoise is in SampleSettings' noise_type dropdown)
  • Mixable Motion LoRAs from original AnimateDiff repository implemented. Caveat: the original loras really only work on v2-based motion models like mm_sd_v15_v2, mm-p_0.5.pth, and mm-p_0.75.pth.
    • UPDATE: New motion LoRAs without the v2 limitation can now be trained via the AnimateDiff-MotionDirector repo. Shoutout to ExponentialML for implementing MotionDirector for AnimateDiff purposes!
  • Prompt travel using built-in Prompt Scheduling nodes, or BatchPromptSchedule node from ComfyUI_FizzNodes
  • Scale and Effect multival inputs to control motion amount and motion model influence on generation.
    • Can be float, list of floats, or masks
  • Custom noise scheduling via Noise Types, Noise Layers, and seed_override/seed_offset/batch_offset in Sample Settings and related nodes
  • AnimateDiff model v1/v2/v3 support
  • Using multiple motion models at once via Gen2 nodes (each supporting
  • HotshotXL support (an SDXL motion module arch), hsxl_temporal_layers.safetensors.
    • NOTE: You will need to use autoselect or linear (HotshotXL/default) beta_schedule, the sweetspot for context_length or total frames (when not using context) is 8 frames, and you will need to use an SDXL checkpoint.
  • AnimateDiff-SDXL support, with corresponding model. Still in beta after several months.
    • NOTE: You will need to use autoselect or linear (AnimateDiff-SDXL) beta_schedule. Other than that, same rules of thumb apply to AnimateDiff-SDXL as AnimateDiff.
  • AnimateLCM support
    • NOTE: You will need to use autoselect or lcm or lcm[100_ots] beta_schedule. To use fully with LCM, be sure to use appropriate LCM lora, use the lcm sampler_name in KSampler nodes, and lower cfg to somewhere around 1.0 to 2.0. Don't forget to decrease steps (minimum = ~4 steps), since LCM converges faster (less steps). Increase step count to increase detail as desired.
  • AnimateLCM-I2V support, big thanks to Fu-Yun Wang for providing me the original diffusers code he created during his work on the paper
    • NOTE: Requires same settings as described for AnimateLCM above. Requires Apply AnimateLCM-I2V Model Gen2 node usage so that ref_latent can be provided; use Scale Ref Image and VAE Encode node to preprocess input images. While this was intended as an img2video model, I found it works best for vid2vid purposes with ref_drift=0.0, and to use it for only at least 1 step before switching over to other models via chaining with toher Apply AnimateDiff Model (Adv.) nodes. The apply_ref_when_disabled can be set to True to allow the img_encoder to do its thing even when the end_percent is reached. AnimateLCM-I2V is also extremely useful for maintaining coherence at higher resolutions (with ControlNet and SD LoRAs active, I could easily upscale from 512x512 source to 1024x1024 in a single pass). TODO: add examples
  • CameraCtrl support, with the pruned model you must use here: CameraCtrl_pruned.safetensors
    • NOTE: Requires AnimateDiff SD1.5 models, and was specifically trained for v3 model. Gen2 only, with helper nodes provided under Gen2/CameraCtrl submenu.
  • PIA support, with the model pia.ckpt
    • NOTE: You will need to use autoselect or sqrt_linear (AnimateDiff) beta_schedule. Requires Apply AnimateDiff-PIA Model Gen2 node usage if you want to actually provide input images. The pia_input can be provided via the paper's presets (PIA Input [Paper Presets]) or by manually entering values (PIA Input [Multival]).
  • AnimateDiff Keyframes to change Scale and Effect at different points in the sampling process.
  • fp8 support; requires newest ComfyUI and torch >= 2.1 (decreases VRAM usage, but changes outputs)
  • Mac M1/M2/M3 support
  • Usage of Context Options and Sample Settings outside of AnimateDiff via Gen2 Use Evolved Sampling node
  • Maskable and Schedulable SD LoRA (and Models as LoRA) for both AnimateDiff and StableDiffusion usage via LoRA Hooks
  • Per-frame GLIGEN coordinates control
    • Currently requires GLIGENTextBoxApplyBatch from KJNodes to do so, but I will add native nodes to do this soon.
  • Image Injection mid-sampling
  • ContextRef and NaiveReuse (novel cross-context consistency techniques)

Upcoming Features

  • Example workflows for every feature in AnimateDiff-Evolved repo, nodes will have usage descriptions (currently Value/Prompt Scheduling nodes have them), and YouTube tutorials/documentation
  • UniCtrl support
  • Unet-Ref support so that a bunch of papers can be ported over
  • StoryDiffusion implementation
  • Merging motion model weights/components, including per block customization
  • Maskable Motion LoRA
  • Timestep schedulable GLIGEN coordinates
  • Dynamic memory management for motion models that load/unload at different start/end_percents
  • Anything else AnimateDiff-related that comes out

Basic Usage and Nodes

Samples

Known Issues

Some motion models have visible watermark on resulting images (especially when using mm_sd_v15)

Training data used by the authors of the AnimateDiff paper contained Shutterstock watermarks. Since mm_sd_v15 was finetuned on finer, less drastic movement, the motion module attempts to replicate the transparency of that watermark and does not get blurred away like mm_sd_v14. Using other motion modules, or combinations of them using Advanced KSamplers should alleviate watermark issues.