Ripple Warp
The radial distortion node that's easy to overdo and hard to resist
- image
- mask
- image
- mask
- ripple_info
x1RippleWarp sends a ripple distortion through your image - concentric waves that radiate from a point and bend the pixels as they travel. It's the classic "water hit by a stone" warp, and in a still image it reads as motion, heat, or intentional weirdness depending on how hard you push it. It's from MKRShift Nodes' VFX/Play branch, the pack's effects playground, and like its sibling x1PrismEcho, it compresses what would be a multi-node shift-and-blend chain into one settings string.
Honest positioning: this is a play node. You're not going to use it on every render, but when you need a ripple - a shockwave frame, a heat-haze accent, a logo that wants to feel alive - it's the fastest path.
How it works
The warp is a radial displacement: each pixel is displaced based on its distance from a center, modulated by a sine wave in frequency, scaled by amplitude, and offset by phase. The controls:
amplitude(28) - how far pixels get pushed. This is your "how strong is the earthquake"frequency(6) - how many ripple rings fit across the imagephase(0) - animates the ripple. Wire this to a timer or step it between frames and you get real motiontwist(0.35) - adds a rotational swirl to the displacement, so the waves spiral as they radiatecenter_x/center_y(0.5) - where the ripple originates. Off-center = a ripple coming from a specific point on screenfalloff(0.45) - how quickly the effect dies with distance from center, so the edges of your frame stay calmmix(1.0) - wet-dry blend with the original
All in a settings_json string, per the pack's house style.
Inputs and outputs
Required: image and settings_json. Optional: mask to restrict the warp to part of the frame - ripple the background but keep the subject steady, which is how you get the "shockwave behind a still hero" look.
image- the warped resultmask- the effective influence maskripple_info- summary string of resolved settings
Where it fits
Three honest use cases. First, shockwave/impact frames - a still that wants to feel like a moment caught mid-blast. Second, animated ripples: phase stepping is the entire effect in motion, and it pairs with the pack's frame-sequence nodes if you're doing video frames. Third, subtle surface break-up - a small amplitude with mix pulled to 0.3 adds organic movement to an otherwise flat render.
It's a sibling of x1PrismEcho in the same branch, and they stack well: ripple for the displacement, prism echo for the chromatic trail, and you've got a poster that looks like it cost more than it did.
Installing it
ComfyUI Manager (search "MKRShift Nodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Restart, no requirements, no model downloads, no ffmpeg. Like all the VFX/Play nodes, this is a "you're already using the pack" tool, not a reason to install it - but it's a nice freebie once you're in.
Where people get burned
Amplitude. The default 28 is a deliberate ripple; people immediately crank it to 100, and the image turns to liquid spaghetti that's impossible to read. If you want it loud, raise mix instead - that keeps the structure and just adds more warped frame. And at high resolutions, remember amplitude is in pixels, so the same number reads weaker on a 4K frame than a 512px one. Scale it up if your ripples look anemic.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| settings_json | STRING | {"amplitude":28.0,"frequency":6.0,"phase":0.0,"twist":0.35,"center_x":0.5,"center_y":0.5,"falloff":0.45,"mix":1.0,"mask_feather":12.0,"invert_mask":false} | — |
| maskopt | MASK | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| ripple_info | STRING | — |