Liquid Transition Warp
Give the glitch wave a refractive, analog-TV push
- images
- transition_edges
- meta_batch
- images
- warp_mask
The Four-Way Undulating Glitch Mixer gives you a glitch boundary, but the pixels on either side stay clean. Liquid Transition Warp is what you add when you want the wave front itself to feel like it's bending the image - a localized refractive glitch where the transition passes. It's the difference between "four clips wiped by a wave" and "four clips distorted by something moving through the frame."
It's a post-process, so it slots in after the mixer and only touches pixels near the active transition. Areas away from the boundary pass through untouched, which is exactly what you want from an effect like this - no global blur washing out the whole composite.
Wiring
Connect both the mixer's images and its transition_edges mask:
Mixer images ──────────────┐
├→ Liquid Transition Warp → VHS Video Combine
Mixer transition_edges ────┘
The node needs both. images is what gets warped; transition_edges tells it where the boundary is and which way it's facing.
How it works
The edge mask's gradient gives a local normal to the wave front. Sampling pixels toward that normal creates a brief lens-like expansion/compression around the boundary, while a tangent component makes smaller ripples crawl along the edge. That's the core - everything else is extras layered on top:
rgb_splitphysically offsets the red and blue channels across the boundary for a chromatic-aberration-style split. Set it to 0 for a purely liquid/refraction look.color_fringeis a separate optical grade: a restrained cyan/magenta bias on the two slopes of the wave, a touch of desaturation, a small contrast lift. It's not the same thing asrgb_split- this is a grade, not a channel offset.water_rippleadds faint alternating compression/expansion bands around the primary front, like a short refractive wake travelling with the wave. Spacing and decay are derived automatically from the mask.
The settings that matter
warp_strength is the main dial (negative reverses the lens direction). warp_width sets how wide the affected band is. ripple_amount/ripple_scale/ripple_speed drive the ripples crawling along the front. The author's suggested starting point:
warp_strength: 12
warp_width: 1.4
ripple_amount: 3
ripple_scale: 3
ripple_speed: 2
rgb_split: 1.5
interpolation: bicubic
color_fringe: off
water_ripple: off
Then taste-test. color_fringe_strength starts at 0.08 and stays subtle up to about 0.15 - above that it's intentionally stylized rather than subtle. water_ripple_strength has a practical range around 0.75–2.5. interpolation (bicubic/bilinear/nearest) affects how the warped pixels resolve.
Outputs
images- the warped composite, into Video Combine.warp_mask- a mask of where the warp actually moved pixels, handy if you want to comp the effect back in at reduced strength or grade only the warped region.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/jsterlingvids/ComfyUI-UndulatingGlitch.git
Restart ComfyUI and search for "Undulating Glitch" (image/video/undulating glitch category). No model downloads, no extra Python packages - just the bundled PyTorch. The pack isn't on the Registry yet, so git clone beats searching by title.
Gotchas
It runs on the same frame timeline as the mixer, and if you're streaming long clips through VHS Meta Batch Manager it carries the same global frame offset, so ripples animate continuously across batch boundaries instead of resetting - connect the meta_batch output there too. Keep rgb_split modest; at high values the red/blue offset stops reading as optical aberration and starts reading as a broken decoder. And as with the whole pack at 0.8.0, the effect is tested and covered, but the author explicitly wants real-world mileage - render a short clip before committing to the full encode.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| transition_edges | MASK | — | |
| warp_strength | FLOAT | 12.0-96–96 | — |
| warp_width | FLOAT | 1.40.1–6 | — |
| ripple_amount | FLOAT | 3.000–48 | — |
| ripple_scale | FLOAT | 3.00.1–20 | — |
| ripple_speed | FLOAT | 2.0-12–12 | — |
| rgb_split | FLOAT | 1.500–24 | — |
| interpolation | COMBO | 3 options: bicubic, bilinear, nearest | |
| color_fringe | BOOLEAN | false | — |
| color_fringe_strength | FLOAT | 0.080–1 | — |
| water_ripple | BOOLEAN | false | — |
| water_ripple_strength | FLOAT | 1.500–24 | — |
| meta_batchopt | VHS_BatchManager | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| warp_mask | MASK | — |