Nodes/kentskooking-nodes/Video Iterative Sampler
ComfyUI Node

Video Iterative Sampler

Wave-driven video

By Kentskooking·Created 10 months ago·Updated 15 days ago· 8
Video Iterative Sampler
  • model
  • positive
  • negative
  • latent_batch
  • wave_config
  • vae
  • checkpoint_config
  • latent_batch
seed0
add_noisetrue
sampler_name
scheduler
cfg1.0
noise_injection_strength0.10
lock_injection_seedfalse
feedback_modenone

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_seed keeps the noise pattern stable.
  • feedback_mode - none or previous_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_plus and 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_mode off with an aggressive wave. Drop noise_injection_strength, or raise step_floor in the controller so every frame gets a sane minimum of denoise steps.
  • Zoom suddenly requires a VAE - zoom_min/zoom_max not equal triggers pixel-space zoom, which needs the vae input 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.

Categorykentskooking/sampling

Inputs (15)

NameTypeDefaultDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
latent_batchLATENT
wave_configWAVE_CONFIG
seedINT00–18446744073709550000
add_noiseBOOLEANtrue
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
cfgFLOAT1.00–100
noise_injection_strengthFLOAT0.100–1
lock_injection_seedBOOLEANfalse
feedback_modeCOMBOnone2 options: none, previous_frame
vaeoptVAE
checkpoint_configoptCHECKPOINT_CONFIG

Outputs (1)

NameTypeDescription
latent_batchLATENT