Nodes/kentskooking-nodes/Image Wave Controller
ComfyUI Node

Image Wave Controller

Shape your image morph before it burns the GPU

By Kentskooking·Created 10 months ago·Updated 15 days ago· 8
Image Wave Controller
    • wave_config
    cycle_count5
    step_floor5
    start_at_step16
    end_at_step36
    zoom_rate1.00
    clip_strength_min0.00
    clip_strength_max1.00

    Image Wave Controller is the config node that tells the Image Iterative Sampler what kind of morph it's about to run. It doesn't sample anything itself - it just builds a WAVE_CONFIG describing the cycles, the step ramp, and the zoom curve. It's small, it's boring, and it's the difference between "gentle breathing zoom" and "500 frames of violent screaming".

    What the knobs do

    • cycle_count - how many times the whole morph cycle repeats. Each cycle is a pass of the ramp. More cycles, longer animation, more GPU time.
    • step_floor - the minimum denoise steps per iteration. This sets the low end of the ramp; don't go below ~4 or your frames start looking like static.
    • start_at_step / end_at_step - the step scheduler range. The sampler ramps the denoise step count from the low end up to end_at_step across the cycle, which is what gives you the classic deforum "settle down over time" feel: heavy re-noise early, careful refinement late.
    • zoom_rate - exponential zoom multiplier per iteration. The tooltip says it best: 1.05 = 5% zoom per iteration. At 1.0, zoom is off. This is the parameter that defines the whole vibe - a slow push-in is 1.005–1.01, a frenetic plunge is 1.05+.
    • clip_strength_min / clip_strength_max - the range of CLIP/style guidance strength applied across the cycle. This is your style-hold dial: keep it high if you want the subject's identity to stick, let it dip if you want the morph to wander.

    How it works

    The node computes an effective cycle length from your step range and packages everything (cycle count, step ramp, zoom rate, clip strength range) into a wave_config dict. The sampler then reads it per-iteration: exponential zoom chains across cycles (each cycle picks up where the last zoom left off), while the step and clip values ramp within each cycle. That split - zoom accumulates globally, steps reset locally - is why the output has that smooth expanding-motion character instead of a strobe.

    One output: wave_config. It goes to the Image Iterative Sampler, and you can run it through Wave Visualizer first to see the ramp drawn out.

    Where it sits

    Chain: VAE Encode your image → Image Wave ControllerImage Iterative SamplerVAE Decode → save. That's the whole "Image Iteration" pattern from the pack README.

    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, no extra deps.

    The trap

    Remember the VAE rule: the moment zoom_rate is anything but 1.0, the sampler requires a VAE input (pixel-space zooming). So if you set a zoom here and get an error about a missing VAE, that's this controller's setting doing it - connect a VAE or drop zoom to 1.0. And don't sleep on clip_strength_max: at 0 it quietly stops applying CLIP guidance, and your morph turns into pure noise drift.

    Categorykentskooking/controllers

    Inputs (7)

    NameTypeDefaultDescription
    cycle_countINT51–10000Number of times to repeat the morph cycle
    step_floorINT51–10000Minimum steps to run (start of cycle)
    start_at_stepINT160–10000Step scheduler start point
    end_at_stepINT361–10000Step scheduler end point
    zoom_rateFLOAT1.000.1–2Exponential zoom multiplier per iteration (e.g. 1.05 = 5% zoom)
    clip_strength_minFLOAT0.000–2
    clip_strength_maxFLOAT1.000–2

    Outputs (1)

    NameTypeDescription
    wave_configWAVE_CONFIG