đź’€Motion Shake
Handheld shake, camera jitter, or a nervous twitch — animated
- Shake
Sometimes you don't want smooth motion - you want the layer to vibrate like it's being filmed by someone who skipped coffee. đź’€Motion Shake adds precisely controlled jitter to your layer: horizontal, vertical, or a "signal" mode with randomized amplitude. It's the S4Motion effector for everything from subtle handheld feel to violent tremors.
As with all the effectors, its Shake output (an S4_SHAKE_EFFECTOR) does nothing until you plug it into the shake_effector socket on đź’€Motion Config. Config applies the shake per frame - after distortion, per the render order - so you can combine a warp and a shake on the same layer.
The controls:
- mode -
horizontal,vertical, orsignal. The first two shake along one axis;signalis the one that mixes directions and randomness into something that reads as organic rather than mechanical. - amplitude_px_default / amplitude_px_target - how far the layer jumps, in pixels (0–512). Animate 0→5 for a shake that ramps in, or just set both to the same value for constant tremble.
- frequency_hz_default / frequency_hz_target - how many oscillations per second (0–60). 4 Hz is a slow rumble; 8+ starts to read as vibration. The default animates 4→8 Hz, which is a shake building intensity.
- randomness - 0 to 1, how much the jitter deviates from a pure sine wave. Default 0.15 keeps it subtle; crank toward 1 for chaotic twitching.
- Plus the standard
duration,delay,motion_curve,inverse,loop.
The _default/_target pairs follow the same rule as the rest of the pack: default is frame one, target is the end of the move, curve shapes the in-between. The amplitude and frequency animating independently is what lets you do "small fast tremble settling into slow big sway" in one node.
Install
cd ComfyUI/custom_nodes/
git clone https://github.com/S4MUEL-404/ComfyUI-S4Motion.git
pip install -r ComfyUI-S4Motion/requirements.txt
or ComfyUI Manager → "S4Motion" → install → restart.
Gotchas
- The shake moves the layer, not the camera. If you want the whole scene to jitter - background and all - you'd need to shake every layer, or post-process the final frame sequence separately. The node only affects the layer it's attached to via Config.
- High frequency + high amplitude + high fps = expensive and easy to overshoot. At 30fps, a 30 Hz shake is literally one full oscillation per frame; it'll look like strobe. Start around 4–8 Hz and go up only if it reads too calm.
signalmode is the one that looks "real," but it's also the least predictable - tune randomness before amplitude when it feels off.
No community discussion exists for this pack (zero reddit hits), so the examples/Shake.json workflow is the reference wiring. It's a fun node to play with - five minutes of amplitude sweeps and you'll know exactly what every slider does.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | horizontal | 3 options: horizontal, vertical, signal |
| duration | FLOAT | 1.000–30 | — |
| delay | FLOAT | 0.000–30 | — |
| motion_curve | COMBO | linear | 4 options: linear, ease_in_out, ease_in, ease_out |
| inverse | BOOLEAN | false | — |
| loop | BOOLEAN | false | — |
| amplitude_px_default | FLOAT | 5.00–512 | — |
| amplitude_px_target | FLOAT | 5.00–512 | — |
| frequency_hz_default | FLOAT | 4.00–60 | — |
| frequency_hz_target | FLOAT | 8.00–60 | — |
| randomness | FLOAT | 0.150–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Shake | S4_SHAKE_EFFECTOR | — |