Nodes/Symbiotica/Camera Shake
ComfyUI Node

Camera Shake

Camera Shake that reads as handheld, not drunk

By symbiotica-ai·Created 6 months ago·Updated about 12 hours ago· 2
Camera Shake
  • video
  • video
presetAuto
strength1.00
seed0
auto_safety_zoomtrue
motion_blurfalse
blur_strength1.00

You've generated a video and it's too clean. Perfectly locked-off camera, zero life, and everyone who sees it says "that's AI." The cheapest fix in post is a little handheld motion - shake, drift, micro-jitter. Camera Shake is the node from the symbiotica-ai/comfyui-nodes pack that adds exactly that to a VIDEO, and it's a lot more careful about it than the name suggests.

What sold me: it's not a dumb sine-wave wiggle. It's a seeded Perlin-noise rig modeled on the After Effects handheld setup - three wiggle calls on position, rotation and scale, plus an edge guard - except it uses real Perlin (so the motion never visibly loops) and it solves the edge problem instead of nudging it by hand. You never see the black frame edge creep in, which is the thing that gives cheap shake away.

How it works

ffmpeg decodes the video to raw frames, each frame gets an affine warp in Pillow, and it's re-encoded at a fixed CRF 17 - visually transparent on generated footage. Your original audio is carried through the encode untouched, so no re-syncing.

The interesting bit is the Auto preset. It reads the video, finds the cuts, classifies each shot by how much fine detail it has, and picks a motion level per shot - a macro detail barely moves, a wide shot moves freely. So one pass over a multi-shot video gives every shot the amount of handheld it actually needs, instead of one global amount that's wrong for half of it. Change the seed between renders and each cut re-rolls its own motion, so a cut genuinely feels like a new camera setup rather than the same shake continuing.

The inputs that matter

  • preset - Auto is the default and honestly the right answer for most footage. The named presets are for when you want one feel throughout: Micro/Subtle for product macro, Handheld is the everyday pick, Impact hits once and settles.
  • strength - scales the preset up or down, 0–3. 0 passes the video through untouched, which makes it a handy bypass. Don't crank it to 3 and then complain it's violent - that's what it's for.
  • seed - same settings, different number, completely different shake. Change it per shot so a cut doesn't inherit the previous shot's motion.
  • auto_safety_zoom - solves for the smallest zoom that hides the frame edge. Leave it on. Off lets the preset's own zoom show an edge at high strength.
  • motion_blur - smears each frame along the camera's travel path, like a real shutter. Off by default; the cost only lands on frames that actually move. When it's on, blur_strength is your shutter angle: 1.0 is the cinema-standard 180°, 2.0 is a wide-open 360° and smears twice as far.

Output is a single video, same dimensions and duration as the input - wire it into anything that takes a VIDEO.

Install

This ships inside the symbiotica-ai/comfyui-nodes pack (search "Symbiotica" in ComfyUI Manager), or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt

Restart ComfyUI after. One dependency this node leans on that pip won't give you: ffmpeg must be on your PATH (the pack looks at PATH, Homebrew, and /usr/bin). macOS with Homebrew is fine; a barebones Windows or container box will error until you install it.

Where people get burned

The whole clip is re-encoded - a long source takes a while, and there's no frame-tensor shortcut here. Also worth knowing: this is a global handheld pass, not per-object or depth-aware. If you need the background to shake while the subject stays put, that's a different (much harder) tool.

If you're chasing "this doesn't look AI," pair it with the pack's Film Grain and a little motion blur - the community recipe for fake-looking video is literally "motion blur + camera shake + grain + chromatic aberration" (docs/knowledge/post-processing.md). Shake is one ingredient, not the whole meal.

CategorySymbiotica/Video

Inputs (7)

NameTypeDefaultDescription
videoVIDEO
presetCOMBOAutoAuto finds the cuts and picks the right amount of motion for each shot on its own — a macro detail barely moves, a wide shot moves freely. Pick a named preset to use that one throughout: Micro and Subtle suit product macro, Handheld is the everyday one, Impact hits once and settles.
strengthFLOAT1.000–3Scales the preset up or down. 0 passes the video through untouched.
seedINT00–100000Same settings with a different number give a completely different shake. Change it so each shot in a cut moves its own way.
auto_safety_zoomBOOLEANtrueSolve for the smallest zoom that hides the frame edge. Off uses the preset's own zoom, which can let an edge show at high strength.
motion_blurBOOLEANfalseSmear each frame along the path the camera travels while the shutter is open, the way a real one does. Costs render time only on frames that actually move far enough to smear.
blur_strengthFLOAT1.000–2Shutter angle. 1.0 is a 180-degree shutter, the cinema default; 2.0 is a fully open 360-degree shutter and smears twice as far.

Outputs (1)

NameTypeDescription
videoVIDEO