Nodes/ComfyUI-MotionCtrl-SVD/Motionctrl-SVD Sample Simple
ComfyUI Node

Motionctrl-SVD Sample Simple

Make a video where the camera does exactly what you told it

By chaojie·Created 3 years ago·Updated 2 years ago· 84
Motionctrl-SVD Sample Simple
  • model
  • image
  • IMAGE
camera[[1,0,0,0,0,1,0,0,0,0,1,0.2]]
resize_mode
seed1234
fps_id6
frame_length14

This is the node you've been looking for if plain SVD drives you mad. Stable Video Diffusion's image-to-video base is genuinely good at something moving, but the "something" is basically whatever the sampler's motion bucket happened to roll. This node replaces that roulette with explicit camera poses: you tell it the camera pans left, it pans left. Fourteen frames of it, in one shot.

It's the payoff node of the whole pack. The other two nodes exist to feed it - the checkpoint loader gives it the model, the camera preset gives it the moves - and what comes out the other end is a batch of video frames you can actually use.

How it works

The model underneath is MotionCtrl, a TencentARC paper from late 2023 that adds separate control channels for camera motion and object motion on top of a video diffusion base. This pack is the SVD flavor: it trains a lightweight adapter over SVD's UNet so that generation is conditioned on per-frame camera poses. The clever part is that a camera pose is appearance-free - just rotation and translation numbers - so steering the camera doesn't smear or rewrite your subject the way an image condition would.

The node does the plumbing: it takes your still, resizes or crops it, parses the camera string into per-frame poses, and denoises. What comes back is an IMAGE tensor - actually a batch of frames, one per frame_length step, ready to feed into Video Helper Suite's Video Combine.

The inputs that matter

There are seven, and a beginner really only touches these:

  • camera - a JSON string, one 12-number row per frame. Each row is a 3×4 camera pose: a 3×3 rotation matrix plus a 3-number translation. The default [[1,0,0,0, 0,1,0,0, 0,0,1,0.2]] is a slight drift along the camera's z-axis - a barely-there zoom. Don't hand-type these - paste the output of Load Motionctrl-SVD Camera Preset in, or nudge one of its presets. Give it fewer rows than frames and the last pose just holds; give it more and extras get chopped.
  • resize_mode - "Center Crop To 576x1024" is the model's native resolution; start there. "Keep original spatial ratio" resizes without cropping, which changes your output dimensions and is mostly for the video-frames exploration workflow the author ships.
  • frame_length - number of frames. 14 is the sweet spot this model was trained around. You can push higher, but quality erodes and VRAM climbs fast.
  • fps_id - default 6. This is conditioning telling the model how fast the motion should read, not the fps of your final file (set that when you encode). If the camera crawl feels stiff, raise it.
  • seed - the usual.

The model input is a MOTIONCTRLSVD object that only the pack's checkpoint loader produces, and image takes one still from LoadImage (only the first image in a batch is used).

Installing it

Same story as the whole pack - in ComfyUI Manager, search ComfyUI-MotionCtrl-SVD, or:

cd ComfyUI/custom_nodes
git clone https://github.com/chaojie/ComfyUI-MotionCtrl-SVD
cd ComfyUI-MotionCtrl-SVD
pip install -r requirements.txt

Then grab the ~9.6GB motionctrl_svd.ckpt into ComfyUI/models/checkpoints (the loader node will even try to download it for you, but doing it yourself is saner - details in that article). Restart ComfyUI.

Where people get burned

  • Weak motion - the default pose is timid. If the camera barely moves, bump the translation value in the camera string (0.2 → 0.5) or pick a faster preset.
  • Wobbly, distorted output - ease off the motion or raise fps_id, per the author's own demo tips.
  • VRAM. This is a 14-frame, 576×1024 diffusion model with an extra adapter on top. On an 8GB card you're going to have a bad time; 12GB+ is the comfortable zone.
  • Model/frame mismatch - keep frame_length in this node in lockstep with the one on the checkpoint loader, or the run fails before it starts.
Categorymotionctrl

Inputs (7)

NameTypeDefaultDescription
modelMOTIONCTRLSVD
cameraSTRING[[1,0,0,0,0,1,0,0,0,0,1,0.2]]
imageIMAGE
resize_modeCOMBO2 options: Center Crop To 576x1024, Keep original spatial ratio
seedINT1234
fps_idINT65–30
frame_lengthINT14

Outputs (1)

NameTypeDescription
IMAGEIMAGE