Nodes/ComfyUI S4Motion/đź’€Motion Shake
ComfyUI Node

đź’€Motion Shake

Handheld shake, camera jitter, or a nervous twitch — animated

By S4MUEL-404·Created about a year ago·Updated 11 months ago· 4
đź’€Motion Shake
    • Shake
    â—„modehorizontalâ–ş
    â—„duration1.00â–ş
    â—„delay0.00â–ş
    â—„motion_curvelinearâ–ş
    â—„inversefalseâ–ş
    â—„loopfalseâ–ş
    â—„amplitude_px_default5.0â–ş
    â—„amplitude_px_target5.0â–ş
    â—„frequency_hz_default4.0â–ş
    â—„frequency_hz_target8.0â–ş
    â—„randomness0.15â–ş

    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, or signal. The first two shake along one axis; signal is 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.
    • signal mode 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.

    Categoryđź’€S4Motion

    Inputs (11)

    NameTypeDefaultDescription
    modeCOMBOhorizontal3 options: horizontal, vertical, signal
    durationFLOAT1.000–30—
    delayFLOAT0.000–30—
    motion_curveCOMBOlinear4 options: linear, ease_in_out, ease_in, ease_out
    inverseBOOLEANfalse—
    loopBOOLEANfalse—
    amplitude_px_defaultFLOAT5.00–512—
    amplitude_px_targetFLOAT5.00–512—
    frequency_hz_defaultFLOAT4.00–60—
    frequency_hz_targetFLOAT8.00–60—
    randomnessFLOAT0.150–1—

    Outputs (1)

    NameTypeDescription
    ShakeS4_SHAKE_EFFECTOR—