Video Stabilizer — Classic (deprecated)
The classic (feature-tracking) stabilizer node, and why it's deprecated
- frames
- stabilized_frames
- padding_mask
- info
Let's get the headline out of the way: VideoStabilizerClassicMEC is deprecated. The pack's own description says "DEPRECATED - use VideoStabilizerMEC (method=classic) instead," and that's the end of the story for new workflows. The old node still runs for backward compatibility - it prints a warning and forwards to the unified VideoStabilizerMEC node - but you shouldn't reach for it fresh.
What made the "classic" backend interesting, and what it's actually good at, is worth understanding even now, because method=classic on the replacement node is the same code.
What the classic backend does
"Classic" here means feature-tracking stabilization: the node finds trackable features in each frame (Good Features To Track), tracks them between frames with Lucas-Kanade optical flow, estimates the camera motion from those point correspondences, and smooths the motion path over time. Then each frame is re-warped so the smoothed path holds still. It's CPU-friendly, fast, and works great on footage with texture - foliage, architecture, faces - because those give the tracker lots of points to lock onto.
Its knobs, for the record:
framing_mode-crop(lose the edges),crop_and_pad(default; crop then fill borders),expand(grow the canvas to fit all motion).transform_mode-translation,similarity(translation + rotation + scale),perspective(full homography; most flexible, most expensive).camera_lock- when on, locks the camera instead of just smoothing it (aggressive).strength(0–1, default 0.7) - how much of the correction to apply.smooth(0–1, default 0.5) - how aggressively the motion path is smoothed.keep_fov(0–1, default 0.6) - how much field of view to preserve when cropping.padding_color- what fills the introduced borders.
Outputs: stabilized_frames, padding_mask (the border regions, so you can feed them to an inpaint node), and info.
Where it falls down
Feature tracking needs features. On texture-poor plates - a blank wall, a clear sky, a clean studio backdrop - there's nothing for Lucas-Kanade to lock onto, and the correction wanders or collapses. That's precisely the case the pack's RAFT-based raft_flow backend was added for: dense optical flow is far more robust on flat, low-texture footage, at the cost of GPU memory and speed.
What to use instead
The unified VideoStabilizerMEC node, with method set to classic for your textured handheld footage or raft_flow for the flat stuff - or auto to let the node pick based on clip length and free VRAM. The presets (handheld_light, handheld_heavy, vehicle, tripod_lock) bundle the knobs above into sensible combos, and preset=manual exposes them all individually if you want the old full control. The padding_mask output contract is unchanged, so the "stabilize then inpaint the borders" pattern works identically.
Installing the pack
cd ComfyUI/custom_nodes
git clone https://github.com/Code2Collapse/ComfyUI-CustomNodePacks.git
restart ComfyUI or use Manager → "CustomNodePacks". The classic backend is pure OpenCV - no models, no downloads.
Bottom line
Legacy node, working code, nothing to love about keeping it around. One method=classic dropdown on the replacement gets you the same behavior without the deprecation warning - and the auto method is a genuine upgrade if you ever stabilize footage with boring backgrounds.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | — | |
| frame_rate | FLOAT | 16.0 | — |
| framing_mode | COMBO | crop_and_pad | 3 options: crop, crop_and_pad, expand |
| transform_mode | COMBO | similarity | 3 options: translation, similarity, perspective |
| camera_lock | BOOLEAN | false | — |
| strength | FLOAT | 0.700–1 | — |
| smooth | FLOAT | 0.500–1 | — |
| keep_fov | FLOAT | 0.600–1 | — |
| padding_color | STRING | 127, 127, 127 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| stabilized_frames | IMAGE | — |
| padding_mask | MASK | — |
| info | STRING | — |