Stable Video Diffusion Sampler
Where Stable Video Diffusion actually turns your image into motion
- image
- model
- LATENT
This is the engine of the pack. SVDModelLoader just reads weights off disk and SVDDecoder just converts the result to pictures - SVDSampler is the node that does the actual work of turning a still image into motion. It's the middle stage of the split pipeline (SVDModelLoader → SVDSampler → SVDDecoder), and it's where all the interesting knobs live. If you want to control how your clip moves, you're spending your time here.
For context: Stable Video Diffusion is Stability AI's November 2023 image-to-video model, their first video release. It was ahead of its time then and behind the times now - Wan 2.2 and LTX have long since eclipsed it. But if you're running SVD, this is the node that decides what you get.
How it works
The sampler takes your input image plus the loaded MODEL and runs the diffusion process that hallucinates a short video out of the single frame. Crucially, there is no text prompt - SVD is image-only conditioning. The model looks at your picture and invents plausible motion; you don't tell it "the clouds drift left," you can only turn a couple of global dials that bias how much and what kind of motion it dreams up. Output is a LATENT, the compressed video representation, which you hand to SVDDecoder to get viewable frames. You never look at the latent directly; it just travels down the wire.
The inputs that matter
The two required connections are image (your starting frame) and model (the MODEL from SVDModelLoader). Then the dials that actually change your output:
motion_bucket_id(default 127) - the big one. It runs 0–255 and controls how much motion the model adds. The community figured this out the hard way back in 2023: low values give you a barely-moving clip, high values crank everything up, and 127 sits deliberately in the middle of the range. This is your primary creative lever. If your video is too static or too frantic, this is the first thing to touch.cond_aug(default 0.02) - conditioning augmentation, i.e. how much noise gets mixed into your source image before sampling. Low keeps the clip faithful to your input; raise it and the model takes more liberties (more motion and variation, less fidelity). Small changes go a long way - think 0.02 to 0.1, not 0.02 to 1.fps_id(default 6) - the frame-rate the model conditions on. It's a conditioning signal baked into how SVD was trained, not literally your export FPS, and it interacts with perceived motion. The default is a sane starting point.seed(default 23) - same story as image generation. SVD gives you no fine control over content, so the seed is genuinely how you roll the dice for a better take. Re-roll it when a generation looks wrong rather than assuming your settings are broken.
There's also device (cuda), which you leave on GPU. The single output is LATENT → straight into SVDDecoder.
How to install it
- ComfyUI Manager - search ComfyUI Stable Video Diffusion (author thecooltechguy, of comfyworkflows.com), install, restart.
- Manual -
cd ComfyUI/custom_nodes && git clone https://github.com/thecooltechguy/ComfyUI-Stable-Video-Diffusion, thencd ComfyUI-Stable-Video-Diffusion && python install.py, and restart.
The manual install.py is a custom installer that pulls Stability's dependency stack, so it's slower than a typical pack. And the sampler needs a loaded model, which needs weights: download the SVD checkpoints from HuggingFace into ComfyUI/models/svd/. Multi-gigabyte files - plan for the wait.
Common issues & troubleshooting
The clip barely moves, or thrashes around. motion_bucket_id, every time. It's the single biggest control over motion, and the extremes (near 0 or near 255) tend to fall apart. Work in the middle of the range and adjust in decent-sized steps.
It ignores what you typed. There's nowhere to type. SVD has no prompt input - the sampler conditions on your image alone. If you're coming from Wan or Hunyuan and expecting to describe the motion, that expectation doesn't map onto this model. Change the input image or the seed instead.
Same settings, wildly different results. That's the seed doing its job. Because you can't steer content directly, re-rolling seed is the intended way to fish for a good generation. Lock a seed you like before you start tweaking the other dials, so you're changing one thing at a time.
Raising cond_aug wrecked the likeness. Expected. More conditioning augmentation buys motion at the cost of faithfulness to your source frame. If the subject is drifting away from your input, pull cond_aug back down toward the 0.02 default.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| model | MODEL | — | |
| motion_bucket_id | INT | 127 | — |
| fps_id | INT | 6 | — |
| cond_aug | FLOAT | 0.02 | — |
| seed | INT | 23 | — |
| device | COMBO | 2 options: cuda, cpu |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |