Nodes/DJZ-Nodes/Jitter Effect
ComfyUI Node

Jitter Effect

Handheld camera shake that doesn't look like a seizure

By MushroomFleet·Created 2 years ago·Updated 5 months ago· 78
Jitter Effect
  • images
  • IMAGE
x_amplitude3
y_amplitude3
rotation_angle0.0
frame_coherence0.50
border_modeREPLICATE
seed0

Every AI-video project hits the same wall: the output is smooth, clean, and too steady - like it was shot on a tripod that didn't exist. JitterEffect adds realistic camera shake to a batch of frames, with the one control that separates "handheld" from "epileptic fit": frame_coherence. It's the difference between a filmic wobble and a strobe, and this node gets it right by smoothing the random offsets between frames instead of rolling fresh dice every frame.

The inputs that matter

  • x_amplitude / y_amplitude (0–50, defaults 3) - maximum horizontal/vertical shift in pixels. Realistic handheld lives at 2–5px; 10+ starts reading as glitch or earthquake.
  • rotation_angle (0–5, default 0) - max rotation in degrees. This is the secret to selling handheld: a real camera rotates slightly as it shakes, and 0.1–0.5° of rotation plus a couple px of translation reads far more "organic" than pure translation ever does. Keep it small.
  • frame_coherence (0–1, default 0.5) - the smoothing dial. At 0, every frame gets an independent random offset (strobe-like, jarring); at 1, offsets transition almost smoothly (butter-smooth, barely reads as shake). 0.6–0.8 is the realistic band.
  • border_mode - REPLICATE (extends edge pixels, default, best for most shots), REFLECT (mirrors), or CONSTANT (black bars). If you're shaking a shot you care about, REPLICATE hides the movement best; CONSTANT shows the black edges, which is a look in itself.
  • seed - makes the shake reproducible. Same seed, same wobble. Handy when you're iterating on everything else and don't want the shake changing under you.

Input images, output IMAGE - batch in, batch out, processed with warpAffine per frame.

How it works

Each frame gets a translation + rotation offset; the offsets are then smoothed across frames by the coherence value so the camera doesn't teleport. Because it's per-frame affine warps, it's cheap, deterministic per seed, and keeps your batch dimensions intact - it slots anywhere in a video pipeline.

The honest take

The trap with every jitter node is turning the amplitude up to see it, and then it's ruined - real camera shake is something you barely notice frame to frame and only register in aggregate. So start small: 2–4px, 0.2° rotation, coherence 0.7. It's also a quiet MVP for "glitch" if you drop coherence to ~0.1 and push amplitude, which is a fun two-minute experiment even if it's not why you installed it. For the classic job - making AI-generated footage stop feeling weightless - pair it with FilmGateWeave or grain from the same pack and you've got a motion layer that finally feels shot rather than rendered.

Categoryimage/effects

Inputs (7)

NameTypeDefaultDescription
imagesIMAGE
x_amplitudeINT30–50
y_amplitudeINT30–50
rotation_angleFLOAT0.00–5
frame_coherenceFLOAT0.500–1
border_modeCOMBOREPLICATE3 options: CONSTANT, REPLICATE, REFLECT
seedINT00–2147483647

Outputs (1)

NameTypeDescription
IMAGEIMAGE