Wave Warp
ComfyTV's heat-haze and VHS-wobble cheat code
- video
- video
Wave Warp is the ComfyTV stage that does sinusoidal displacement - it ripples the whole frame in a wave pattern, like the classic After Effects effect of the same name. Drop it on a clip and you get heat-haze shimmer, liquid-glass distortion, a subtle energy field, or full VHS-style wobble, depending on how far you push the knobs. It's in the ComfyTV/VideoFX group, and it's one of those effects that sounds niche until you realize half the "cinematic atmosphere" shots you've seen are just this with the settings dialed way down.
How it works
It's a per-frame warp, not a filter that tints anything. Each frame, the node builds a displacement map where every pixel's offset is amplitude × envelope × sin(2π × frequency × position + phase). The phase advances by speed each frame, which is what makes the wave travel instead of just pulsing in place. Pixels are then pulled through a bilinear grid sample with reflection padding. It runs on torch (GPU if you have one), previews live in the node, and - like the other ComfyTV FX stages - it returns a packed effect spec that stacks into an FX Chain so you can render several effects in one pass.
The envelope setting is the one most people get wrong. Parabolic (the default) scales the wave down to zero at the frame edges, so the ripples die out at the borders and the frame stays put - this is what you want for subtle heat-haze, because the picture never slides off-canvas. Uniform keeps full amplitude all the way to the edges, so the frame visibly stretches and smears at the borders (the reflection padding keeps it from showing black gaps, but you can see the frame getting tugged). If your warp looks "wrong" or the edges shimmer oddly, check the envelope before anything else.
The inputs that matter
- amplitude - displacement in pixels, 0 to 200, default 16. 0–16 is subtle atmosphere; 50+ is full liquid wobble.
- frequency - wave density, 0.1 to 40, default 3. Low = big lazy waves, high = fine vibration.
- speed - how fast the wave travels, −8 to 8, default 0.5. Negative values reverse direction, which is the cheap trick for "magic energy rising" looks.
- axis -
both/horizontal/vertical. Horizontal alone is the classic VHS line-wobble. - envelope -
parabolic/uniform, as above.
The video input takes a COMFYTV_VIDEO from any upstream stage, and the video output carries the warped clip onward. (The three force_run_token / project_id / parent_output_id inputs are frontend plumbing - don't touch them.) If you set amplitude to 0 the stage just passes your clip through, which is a neat way to keep the node in a chain without it doing anything.
Install and gotchas
Install is the shared ComfyTV story: ComfyUI Manager (search "ComfyTV") or git clone https://github.com/jtydhr88/ComfyTV into ComfyUI/custom_nodes/, then a full restart. No extra Python deps, no model downloads - torch does all the work with what your ComfyUI already has. On Desktop/multi-install setups, clone into the running instance's absolute path (check the startup log) or it won't show up.
The only real failure mode: "This FX stage needs an upstream video", which means you haven't wired anything into the video input. Beyond that, the tuning advice is the same as any displacement effect - start at amplitude 8–16, frequency 3–5, and only touch speed once the look is moving the way you want. Heat-haze is amplitude 10, parabolic, horizontal axis, slow speed. VHS wobble is amplitude 30+, horizontal axis, uniform if you're feeling unhinged. You're welcome.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| amplitude | FLOAT | 160–200 | — |
| frequency | FLOAT | 3.00.1–40 | — |
| speed | FLOAT | 0.50-8–8 | — |
| axis | COMBO | both | 3 options: both, horizontal, vertical |
| envelope | COMBO | parabolic | 2 options: parabolic, uniform |
| videoopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |