Nodes/kentskooking-nodes/Wave ControlNet Apply
ComfyUI Node

Wave ControlNet Apply

Attach a ControlNet to a wave run (it doesn't apply it yet)

By Kentskooking·Created 10 months ago·Updated 15 days ago· 8
Wave ControlNet Apply
  • positive
  • negative
  • control_net
  • image
  • wave_config
  • vae
  • positive
  • negative
  • wave_config

ControlNet's normal ComfyUI role is a one-shot apply: give it conditioning, an image, and a controlnet, and the conditioning comes back steered. That doesn't work for animation, because animation wants the steering to change per frame. Wave ControlNet Apply is the wave-aware version - and the most important thing to understand about it is what it doesn't do: it does not apply the ControlNet. It attaches the ControlNet data to the conditioning and to the wave_config, and the Video Iterative Sampler (or Video Interpolate Sampler) actually applies it per-frame, with strength modulated along the wave.

How it works

The node copies your wave_config, converts the hint image to the format ControlNet expects, and packages everything - controlnet model, hint, optional VAE, and the wave config - into a "packet." It attaches that packet to the conditioning dictionaries it receives, then returns the conditioning unchanged for chaining. That's the key design: the positive/negative outputs are passthroughs, with the control data riding along in metadata.

The payoff shows in Video Interpolate Sampler, which supports stream-specific ControlNets: attach one ControlNet to video A's conditioning and another to video B's, and each side of the morph keeps its own structural control. That's a genuinely useful capability for interpolation, where a single global ControlNet would fight whichever video it wasn't built for.

Inputs

  • positive / negative - the conditioning streams; you typically chain the standard text-encode → this node.
  • control_net - a loaded ControlNet model (standard ControlNet Loader).
  • image - the conditioning image: edges, depth, pose, whatever your controlnet eats. A batch is fine; it cycles per cycle.
  • wave_config - required, from a wave controller.
  • vae (optional) - some ControlNets need it; pass it if your setup does.

Outputs: positive, negative (with control attached), and the enriched wave_config.

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. You supply your own ControlNet models - the pack downloads nothing.

Common issues

  • The control does nothing - the usual cause. If the sampler never receives the enriched wave config (you branched it off or forgot to keep threading it), the ControlNet data is present but never read. The wave_config line must run from controller → this node → Wave ControlNet Controller (if used) → sampler.
  • "ControlNet import" errors - this node is pure orchestration; it doesn't import third-party packs. But if you use the IPAdapter path too, remember that pack needs ComfyUI_IPAdapter_plus.
  • Strength swings too violently - the base strength comes from this node, but the Wave ControlNet Controller is what ramps it. If you want the pump, chain the controller after this; if you want constant steering, skip it entirely.

One mental model note: think of this node as "staple the ControlNet to the wave," and the Wave ControlNet Controller as "decide how hard it pulls per frame."

Categorykentskooking/controllers

Inputs (6)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
control_netCONTROL_NET
imageIMAGE
wave_configWAVE_CONFIG
vaeoptVAE

Outputs (3)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
wave_configWAVE_CONFIG