Interpolation Wave Controller
Tune how two videos melt into each other
- wave_config
Crossfading two videos with a dissolve node looks like two videos stacked on each other. Morphing them - where the content itself transitions, motion and all - is a different animal, and that's what the Video Interpolate Sampler in this pack is for. Interpolation Wave Controller is the node that decides how the morph happens: how long the overlap is and how aggressively the transition denoises.
It's a three-knob controller, plus a wave type, and it's genuinely the part you'll fiddle with most when a morph looks wrong.
What the knobs do
- overlap_frames - how many frames the two videos share and morph across. This is your morph length. Too short and you get a jump; too long and you get a stretchy, melty middle. 25 is the default and is a sane starting point for most clips.
- denoise_min - the denoise strength at the start and end of the morph. Low, by default (0.1), so the videos hold their own identity at the edges of the transition.
- denoise_max - the peak denoise at the middle of the morph (0.6 by default). More denoise mid-transition = more room for the model to invent the in-between state, which is where the actual morphing happens rather than a lazy crossfade.
- wave_type -
bell_curve(default),triangle,sine,sawtooth,square. The bell curve is the smart default: it eases denoising up to a peak at the center of the overlap and back down, so the transition is calm at both ends and most chaotic exactly where the two videos are fighting for dominance.
How it works
The controller packages controller_type: "interpolation", the overlap length, and the denoise range into a wave_config dict. The sampler then, for each frame inside the overlap zone, computes a denoise value from the chosen wave and builds a crossfaded conditioning between video A and video B at that point. Outside the overlap, the original videos pass through untouched - the morph only "exists" in the zone you define. Output is a single wave_config, wired into the Video Interpolate Sampler.
Where it sits
The README's pattern is: Video A + Video B → Interpolation Wave Controller → Video Interpolate Sampler → VAE Decode → Save. The two video latents and their prompts come from standard ComfyUI loading and text-encoding nodes.
Installing it
Part of kentskooking-nodes: ComfyUI Manager → search kentskooking-nodes → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Kentskooking/kentskooking-nodes
Restart after. No models to download.
Tuning notes
The classic failure modes: a morph that snaps instead of flows means overlap_frames is too short for the motion involved. A morph that dissolves into noise soup means denoise_max is too high - the model can't invent a coherent in-between and starts making up texture; back it off toward 0.4. And if the ends of the transition wobble, your denoise_min is too aggressive. The bell curve hides a lot of sins, which is exactly why it's the default.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| wave_type | COMBO | bell_curve | 5 options: bell_curve, triangle, sine, sawtooth, square |
| overlap_frames | INT | 252–10000 | Number of frames to overlap and morph between videos |
| denoise_min | FLOAT | 0.100–1 | Denoise strength at start/end of morph |
| denoise_max | FLOAT | 0.600–1 | Peak denoise strength at middle of morph |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| wave_config | WAVE_CONFIG | — |