GU Motion Lora Stack
Stack AnimateDiff motion LoRAs without the spaghetti
- prev_motion_lora
- new_motion_lora
- lora_list
GU Motion Lora Stack is purpose-built for AnimateDiff's motion LoRAs - the small files that bend the motion module toward zoom, pan, tilt, and roll instead of generic drift. If you've built AnimateDiff workflows, you know the pattern: several motion LoRAs chained, each needing its own loader, strengths tuned per clip, and the list of what you used stuck somewhere you'll never find it. This node stacks up to six of them in one place and hands you the applied stack plus the names for your records.
Context first, because it matters here: the KB's AnimateDiff essay is blunt that the model line itself is frozen - the surviving community use is a specific aesthetic, and Wan/LTX took the general video work. If you're still doing AnimateDiff for its look (audio-reactive work, that distinctive morph), motion LoRAs are the vocabulary of that look, and this node is comfortable plumbing for it.
What it does
Six slots, each with nameN (the motion LoRA dropdown), strengthN (0 to 10), and enableN. The dropdown is populated from the __animatediff_motion_lora__ folder inside your ComfyUI tree - that's where AnimateDiff motion LoRAs conventionally live, so the pack reads it directly.
- prev_motion_lora - optional. Connect a
MOTION_LORAstack to continue building on top of it rather than starting fresh. That's how you chain this node, or wire one in front of an AnimateDiff loader that already has a motion model.
Outputs:
- new_motion_lora - the combined
MOTION_LORAstack, wired into the motion module input of your AnimateDiff setup. - lora_list - the names of every enabled LoRA (extensions stripped) as a string list, for injecting into an info file or an output video filename.
Mechanically it's a thin wrapper: it builds a MotionLoraList, adds each enabled LoRA's info from the __animatediff_motion_lora__ folder, and raises a clear FileNotFoundError if you select something that's gone missing - no silent skips.
Why you'd reach for it
Stacking motion LoRAs in raw AnimateDiff means chaining nodes and re-reading each one to remember what you used. This collapses that to one node with enable checkboxes (same trick as the GU LoRA stack - disable without losing settings) and the lora_list output means your saved filenames can carry _zoom-pan at a glance. If you're doing camera-move tests across several clips, the enable flags make the A/B instant.
Install
ComfyUI Manager → search "GU Nodepack" → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/alexguryev/ComfyUI-GU_Nodepack
cd ComfyUI-GU_Nodepack
pip install -r requirements.txt
The pack itself downloads no models - your motion LoRAs are already in models/animatediff_motion_lora (the pack reads __animatediff_motion_lora__). Deps: psutil, requests, gu-funclib>=1.9.0. Windows-tested, single-user design.
The honest caveats
Motion LoRA strength is a subtle knob - values around 1.0 are typical and the range goes to 10, but cranking it high produces stutter and warping, not "more zoom." And before you build an AnimateDiff pipeline around this, reread the KB's current-state verdict: for new video projects the community moved to Wan/LTX, and this node's MOTION_LORA type only plugs into the AnimateDiff ecosystem. It's a tool for the people already in that niche, not a reason to join it.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| name1 | COMBO | 1 options: None | |
| strength1 | FLOAT | 1.0000–10 | — |
| enable1 | BOOLEAN | true | — |
| s1 | STRING | — | |
| name2 | COMBO | 1 options: None | |
| strength2 | FLOAT | 1.0000–10 | — |
| enable2 | BOOLEAN | true | — |
| s2 | STRING | — | |
| name3 | COMBO | 1 options: None | |
| strength3 | FLOAT | 1.0000–10 | — |
| enable3 | BOOLEAN | true | — |
| s3 | STRING | — | |
| name4 | COMBO | 1 options: None | |
| strength4 | FLOAT | 1.0000–10 | — |
| enable4 | BOOLEAN | true | — |
| s4 | STRING | — | |
| name5 | COMBO | 1 options: None | |
| strength5 | FLOAT | 1.0000–10 | — |
| enable5 | BOOLEAN | true | — |
| s5 | STRING | — | |
| name6 | COMBO | 1 options: None | |
| strength6 | FLOAT | 1.0000–10 | — |
| enable6 | BOOLEAN | true | — |
| prev_motion_loraopt | MOTION_LORA | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| new_motion_lora | MOTION_LORA | — |
| lora_list | STRING | list of used lora names w/o extension |