Nodes/msch-comfyui-nodes/WarpWiggle Stylize (1 clip)
ComfyUI Node

WarpWiggle Stylize (1 clip)

The TimeSlice distortion without the transition

By mariobilly·Created a day ago·Updated a day ago· 0
WarpWiggle Stylize (1 clip)
  • images
  • images
warp_patternhorizontal_bands
warp_strength0.05
warp_frequency4.0
wiggle_amplitude0.02
wiggle_frequency6.0
wiggle_axisboth
block_size48
noise_amount0.05
motion_speed0.15
intensity_modeconstant
pulse_count4.0
pulse_depth0.70
chromatic_aberration0.06
edge_modereflection
seed0

Transitions are for joining clips; sometimes you just want one shot to melt. That's the gap WarpWiggle Stylize fills. It's the single-clip sibling of the pack's WarpWiggle Transition - same band-and-wiggle displacement engine, minus the second clip and the wipe. Feed it one video and it applies an animated distortion to every frame, then hands you back the same number of frames at the same timing, ready for an encoder.

That's the @thesystms TimeSlice aesthetic this pack is built on: frames breaking into slices that get shoved sideways, blocks that shift and settle, a slow wave of motion, a hint of RGB split - applied to the whole clip instead of a transition window.

How it actually works

Each frame is warped by a displacement field (an offset for every pixel), sampled with grid_sample in bilinear mode. warp_pattern decides the shape of that field:

  • horizontal_bands - the classic smear: horizontal stripes pushed sideways in a sine wave
  • vertical_bands - same idea, but the stripes run vertically and push up and down
  • blocks - a hard-edged mosaic/stair-step tear, sized by block_size
  • radial - ripples spreading from center, like a shockwave
  • slit_scan - the scanner-bar effect, one slice at a time

Two numbers steer any pattern: warp_frequency (how many bands or waves span the frame) and warp_strength (how far pixels get shoved, as a fraction of the frame). On top sits the "wiggle" - an oscillation added along wiggle_axis (horizontal, vertical, or both) with its own amplitude and frequency, which is what makes the whole thing feel alive rather than like a still filter animated by brute force.

Then motion_speed advances the effect's phase through the batch - this is the single most important knob, because it's literally the animation. Default 0.15 is gentle; push toward 1–2 for frantic. And intensity_mode gives you constant (steady warp the whole clip) or pulse, which breathes: calm → warp → calm, repeating pulse_count times across the clip, with pulse_depth controlling how deep each beat goes. Pulse mode is the one that reads as "musical" if your clip has a beat behind it.

A few finishing touches are worth knowing: chromatic_aberration splits the red/green/blue channels by slightly different amounts during the warp - that's the glitchy RGB-fringe look, and 0 turns it off. edge_mode decides what happens where pixels get pushed past the frame: reflection (default), border, or zeros (black edges - the reference look). And seed reshuffles the underlying noise and block fields that drive blocks and organic melt.

One subtle detail in the code: the stylize node internally scales warp_strength, wiggle_amplitude, and noise_amount down by half relative to the transition node, on purpose. Since this hits every frame rather than just a transition window, full-slider values stay strong but legible instead of destroying the shot. If a setting feels weaker than the same number on the transition node, that's intended.

Where it fits

IMAGE in, IMAGE out, same frame count. The typical graph is: load your clip (VHS Load Video), run it through Stylize, optionally chain the pack's HUD Overlay on after for the full sci-fi operator look, then Video Combine at your fps. Works on AI-generated batches or real footage alike. It won't add or carry audio - connect your soundtrack separately at the encoder - and it won't fix frame-rate mismatches, so keep source fps consistent.

Install

It ships in the same pack as the other two nodes, mariobilly/msch-warp-wiggle:

cd ComfyUI/custom_nodes
git clone https://github.com/mariobilly/msch-warp-wiggle.git

Fully restart ComfyUI afterward (close the server, relaunch, Ctrl+F5 in the browser) and it appears under the WarpWiggle category. No model downloads, no extra pip packages beyond what ComfyUI bundles (numpy, Pillow, torch - INSTALL.txt notes nothing to install). One caveat from the README: this standalone repo is superseded by the unified MSCH Nodes pack (msch-comfyui-nodes), so new installs may want to go there and migrate; just don't run both at once or you'll get duplicate node registrations.

Where people get burned

The usual suspects: node shows UNKNOWN widgets → you didn't restart the server. The clip looks static → check motion_speed, it defaults low enough that a short clip at default settings barely animates; that's a feature (subtle), not a bug. And if you set edge_mode to zeros and see black bars at the edges, that's the intended reference look, not corruption - switch to reflection for cleaner edges.

It's a niche in a niche - a whole-clip stylize for a look most people only reach for in transitions. But when the shot is supposed to be glitching out for its entire runtime, it beats exporting, keying, and compositing the effect by hand.

CategoryWarpWiggle

Inputs (16)

NameTypeDefaultDescription
imagesIMAGE
warp_patternCOMBOhorizontal_bands5 options: horizontal_bands, vertical_bands, blocks, radial, slit_scan
warp_strengthFLOAT0.050–1
warp_frequencyFLOAT4.00.5–60
wiggle_amplitudeFLOAT0.020–1
wiggle_frequencyFLOAT6.00.5–60
wiggle_axisCOMBOboth3 options: horizontal, vertical, both
block_sizeINT484–512
noise_amountFLOAT0.050–1
motion_speedFLOAT0.150–2
intensity_modeCOMBOconstant2 options: constant, pulse
pulse_countFLOAT4.00.1–60
pulse_depthFLOAT0.700–1
chromatic_aberrationFLOAT0.060–1
edge_modeCOMBOreflection3 options: reflection, border, zeros
seedINT00–4294967295

Outputs (1)

NameTypeDescription
imagesIMAGE