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

đź’€Motion Distortion

Waves, vortices, and pincushion warps on your layer

By S4MUEL-404·Created about a year ago·Updated 11 months ago· 4
đź’€Motion Distortion
    • Distortion
    â—„modewaveâ–ş
    â—„duration1.00â–ş
    â—„delay0.00â–ş
    â—„motion_curvelinearâ–ş
    â—„inversefalseâ–ş
    â—„loopfalseâ–ş
    â—„wave_amplitude_default0.0â–ş
    â—„wave_amplitude_target10.0â–ş
    â—„wave_wavelength_default100.0â–ş
    â—„wave_wavelength_target100.0â–ş
    â—„wave_phase_default0â–ş
    â—„wave_phase_target360â–ş
    â—„wave_directionxâ–ş
    â—„vortex_strength_deg_default20â–ş
    â—„vortex_strength_deg_target20â–ş
    â—„vortex_radius_px_default256â–ş
    â—„vortex_radius_px_target256â–ş
    â—„vortex_phase_deg_default0â–ş
    â—„vortex_phase_deg_target360â–ş
    â—„radial_k_default0.000â–ş
    â—„radial_k_target0.200â–ş

    When a logo sliding in isn't enough and you need the layer itself to bend, 💀Motion Distortion is the S4Motion node for it. It's the flashiest of the effectors: three warp styles - wave, vortex, and radial - each animated over time with the pack's standard default→target keyframe pattern.

    It's still an effector, so it only comes alive when its Distortion output (an S4_DISTORTION_EFFECTOR) is wired into the distortion_effector socket on đź’€Motion Config. Motion Config applies the warp to the layer each frame, before rotation and scale - so a distorted layer still slides, spins, and fades like normal.

    The shared timing controls are the usual ones: duration, delay, motion_curve (linear/ease_in/ease_out/ease_in_out), inverse, and loop. What changes per mode is the parameter set, and every parameter comes in a _default/_target pair so you can animate it from one value to another:

    • Wave - wave_amplitude (pixels of displacement, default 0 → 10), wave_wavelength (spacing between ripples, 1–4096), wave_phase (offset in degrees, so animating 0→360 moves the ripple across the image), and wave_direction (x, y, or xy).
    • Vortex - vortex_strength_deg (twist in degrees, -720 to 720), vortex_radius_px (how far from the center the swirl extends), and vortex_phase_deg (spin the swirl itself; 0→360 is a full rotation).
    • Radial - radial_k (a lens-distortion coefficient, -2 to 2). 0 = flat, positive = pincushion (edges pulled outward), negative = barrel (edges bulge in). Default animates 0 → 0.2, which is a subtle barrel warp.

    The way to think about it: the _default value is frame one, the _target is the last frame of the move, and the curve decides the in-between. Animate wave_phase 0→360 with linear for a steady ripple scroll; animate radial_k 0→0.5 with ease_in_out for a lens popping on.

    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

    • Distortion is expensive. Every frame gets a full remap, and a heavy vortex on a big layer at 30fps will noticeably slow a render. Keep layers modestly sized and test one mode at a time.
    • The effect is applied per-layer, not per-background - the background stays static unless you distort it too.
    • The _default/_target pairs can look intimidating, but you almost never touch all of them. Pick a mode, leave the params you don't care about at their defaults, and animate the one that matters (usually phase or amplitude).

    There are example workflows for all three modes in the pack's examples/ folder (Distortion_Wave.json, Distortion_Vortex.json, Distortion_Radial.json) - the pack has no reddit presence, so those files are the documentation. Distortion is the effect that makes S4Motion feel like more than a slide-and-fade toolkit.

    Categoryđź’€S4Motion

    Inputs (21)

    NameTypeDefaultDescription
    modeCOMBOwave3 options: wave, vortex, radial
    durationFLOAT1.000–30—
    delayFLOAT0.000–30—
    motion_curveCOMBOlinear4 options: linear, ease_in_out, ease_in, ease_out
    inverseBOOLEANfalse—
    loopBOOLEANfalse—
    wave_amplitude_defaultFLOAT0.00–1024—
    wave_amplitude_targetFLOAT10.00–1024—
    wave_wavelength_defaultFLOAT100.01–4096—
    wave_wavelength_targetFLOAT100.01–4096—
    wave_phase_defaultFLOAT0-360–360—
    wave_phase_targetFLOAT360-360–360—
    wave_directionCOMBOx3 options: x, y, xy
    vortex_strength_deg_defaultFLOAT20-720–720—
    vortex_strength_deg_targetFLOAT20-720–720—
    vortex_radius_px_defaultFLOAT2561–8192—
    vortex_radius_px_targetFLOAT2561–8192—
    vortex_phase_deg_defaultFLOAT0-3600–3600—
    vortex_phase_deg_targetFLOAT360-3600–3600—
    radial_k_defaultFLOAT0.000-2–2—
    radial_k_targetFLOAT0.200-2–2—

    Outputs (1)

    NameTypeDescription
    DistortionS4_DISTORTION_EFFECTOR—