Nodes/ComfyUI-Video-Stabilizer/Video Stabilizer Motion Apply
ComfyUI Node

Video Stabilizer Motion Apply

Put the camera work back on AI video with Motion Apply

By nomadoor·Created 10 months ago·Updated 2 months ago· 89
Video Stabilizer Motion Apply
  • frames
  • motion_meta
  • padding_color
  • Frames
  • Padding Mask
  • Meta
framing_modecrop_and_pad
interpolationbilinear
motion_blur0.00
motion_blur_qualityStandard

Every stabilizer has the same dirty secret: once you smooth the camera path, the motion you removed is gone. This node is how you get it back. Video Stabilizer Motion Apply is the consumer half of the ComfyUI-Video-Stabilizer pack - it takes the motion_meta JSON that the stabilizer nodes emit and warps a video with it. Same motion, reapplied to whatever frames you feed it.

That unlocks the workflow the pack was built for. You stabilize footage to make it easy to edit or regenerate, run it through a video-generation AI, then plug Motion Apply back in with the saved meta. Result: generated frames that carry the original, natural camera work instead of that telltale AI stillness. It's also how you add artificial shake from the Shake Generator nodes - they only produce metadata, and this is the thing that actually moves the pixels.

How it works

The motion_meta JSON is just a list of 3×3 transform matrices, one per frame, plus the source resolution, fps, and frame count. Motion Apply warps each input frame with its matrix (inverse perspective warp under the hood), then handles the borders depending on framing_mode, and emits a mask of the areas where warping exposed empty pixels. That mask is the same outpainting hook the stabilizers use, so you can clean up the padding with a VACE model rather than living with grey bars.

The inputs that matter

  • frames - the video to warp.
  • motion_meta - the JSON from a stabilizer's Motion Meta output, or from a shake generator's single output.
  • framing_mode - crop_and_pad (default), crop, or expand. crop will center-crop away any pixels that never have valid content across the whole clip.
  • motion_blur - a shutter fraction from 0 to 1; 0 disables it. This is the interesting one: it adds real motion blur by sampling intermediate positions of the warp, which is what makes re-applied or generated shake read as "camera motion" instead of "the image jumped around."
  • motion_blur_quality - Draft / Standard / High / Ultra. These map to how many shutter samples get averaged (roughly 5 to 33); the tooltip puts it plainly: Draft is faster, Ultra is smoother.

interpolation (bilinear vs bicubic) and padding_color (hex fill for exposed pixels) are the usual suspects. Outputs are Frames, Padding Mask, and Meta (the metadata echoed back, handy for chaining).

Install and gotchas

Same as the rest of the pack - ComfyUI Manager → "ComfyUI-Video-Stabilizer", or:

cd ComfyUI/custom_nodes
git clone https://github.com/nomadoor/ComfyUI-Video-Stabilizer

Restart, and keep in mind there are no model downloads and the only dependency is opencv-python-headless. It needs a recent ComfyUI (V3 node API).

Three things to watch. Motion blur multiplies the work per frame - at Ultra quality on a long clip, the progress bar moves a lot slower, so start with 0 and only add blur where the shake actually needs it. Second, if your motion_meta came from a stabilizer that used crop framing, the meta's matrices assume that crop, and the two have to agree on resolution or the warp will look wrong. Third, this node is the direct replacement for the pack's deprecated Video Stabilizer Inverse - if you loaded an old workflow, it should migrate automatically, but new graphs should just use Motion Apply.

CategoryVideo/Stabilization

Inputs (7)

NameTypeDefaultDescription
framesIMAGE
motion_metaJSON
framing_modeCOMBOcrop_and_pad3 options: crop_and_pad, crop, expand
interpolationCOMBObilinear2 options: bilinear, bicubic
padding_colorCOLOR#7F7F7FHEX padding color used where warping exposes empty pixels.
motion_blurFLOAT0.000–1Shutter fraction for matrix-sampled motion blur. 0 disables blur.
motion_blur_qualityCOMBOStandardDraft is faster. High and Ultra average more shutter samples for smoother blur.

Outputs (3)

NameTypeDescription
FramesIMAGE
Padding MaskMASK
MetaJSON