Video Iterative Sampler
Wave-driven video
- model
- positive
- negative
- latent_batch
- wave_config
- vae
- checkpoint_config
- latent_batch
This is the flagship of kentskooking-nodes - the node the whole pack is built around. Video Iterative Sampler takes a batch of video latents and re-samples them frame by frame, using a wave to modulate how much denoising, zoom, and guidance each frame gets. The result is that classic deforum motion language: a scene that pulses, zooms, and drifts over time instead of sitting still, with the texture of the video evolving as it goes.
How it works
For every frame it computes a position in the wave cycle and derives three values from the Video Wave Controller's config: the denoise step range (the wave oscillates the end step between a floor and a ceiling), the zoom factor, and the CLIP guidance strength. Then it runs a KSampler pass on that frame with those settings. Frame by frame that produces the push-pull rhythm - some frames get careful refinement, others get heavy re-noise, and the whole thing breathes.
The real power is what it lets you stack on top. The sampler reads the wave_config it's given, so anything you've attached along the chain gets applied per-frame with wave-modulated strength:
- IPAdapter (via Wave IPAdapter Advanced) - weight, start/end positions wobble along the wave, so style or identity influence waxes and wanes.
- ControlNet (via Wave ControlNet Apply + Wave ControlNet Controller) - structure strength pumps through the cycle.
- Style models (via Wave Style Model Apply) - CLIP-guidance strength oscillates, letting the stylization take turns with raw content.
And two mechanisms keep the motion alive: noise_injection_strength adds fresh noise per frame so the video doesn't lock onto itself, and feedback_mode set to previous_frame feeds each output back as the next input for tighter temporal chaining.
Inputs that matter
- latent_batch - your video, VAE-encoded into a batch of latent frames.
- wave_config - from the Video Wave Controller; required. No controller, no run.
- noise_injection_strength - per-frame chaos. 0.1 is the gentle-drift default; raise it for more aggressive motion, and
lock_injection_seedkeeps the noise pattern stable. - feedback_mode -
noneorprevious_frame. - cfg - defaults to 1.0, which is a Flux-friendly setting; SDXL users will want their usual 4–7.
- vae (optional) - used by the zoom/noise/checkpoint-preview paths.
- checkpoint_config (optional) - from Iterative Checkpoint Controller, for long renders.
Standard sampler dials (model, positive, negative, seed, add_noise, sampler_name, scheduler) fill out the rest. Output is latent_batch - VAE-decode it to video.
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; only the IPAdapter extras need ComfyUI_IPAdapter_plus if you use those nodes. The FLUX workflow (FLUX Video Iterative WF_kentskooking-nodes.json) in examples/workflows/ is the fastest way to see it working.
Common issues
- "Warning: IPAdapter import failed" on startup - the sampler tried to load
ComfyUI_IPAdapter_plusand couldn't find it. It degrades gracefully (the pack just disables IPAdapter), so it's only a problem if you actually attach an IPAdapter node. - Video that flickers - noise injection too high or
feedback_modeoff with an aggressive wave. Dropnoise_injection_strength, or raisestep_floorin the controller so every frame gets a sane minimum of denoise steps. - Zoom suddenly requires a VAE -
zoom_min/zoom_maxnot equal triggers pixel-space zoom, which needs thevaeinput connected.
The trap for newcomers: this sampler is a re-sampler. Feed it a real video's latents, not an empty latent. The whole point is transforming existing footage, and an empty latent gives you an empty video.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_batch | LATENT | — | |
| wave_config | WAVE_CONFIG | — | |
| seed | INT | 00–18446744073709550000 | — |
| add_noise | BOOLEAN | true | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| cfg | FLOAT | 1.00–100 | — |
| noise_injection_strength | FLOAT | 0.100–1 | — |
| lock_injection_seed | BOOLEAN | false | — |
| feedback_mode | COMBO | none | 2 options: none, previous_frame |
| vaeopt | VAE | — | |
| checkpoint_configopt | CHECKPOINT_CONFIG | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| latent_batch | LATENT | — |