Nodes/kentskooking-nodes/Interpolation Wave Controller
ComfyUI Node

Interpolation Wave Controller

Tune how two videos melt into each other

By Kentskooking·Created 10 months ago·Updated 15 days ago· 8
Interpolation Wave Controller
    • wave_config
    wave_typebell_curve
    overlap_frames25
    denoise_min0.10
    denoise_max0.60

    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.

    Categorykentskooking/controllers

    Inputs (4)

    NameTypeDefaultDescription
    wave_typeCOMBObell_curve5 options: bell_curve, triangle, sine, sawtooth, square
    overlap_framesINT252–10000Number of frames to overlap and morph between videos
    denoise_minFLOAT0.100–1Denoise strength at start/end of morph
    denoise_maxFLOAT0.600–1Peak denoise strength at middle of morph

    Outputs (1)

    NameTypeDescription
    wave_configWAVE_CONFIG