Nodes/ComfyUI-Koolook/LTX A/V Bind Schedule (Koolook)
ComfyUI Node

LTX A/V Bind Schedule (Koolook)

LTX 2.3 keeps jumping when a beat lands on your cut — this is the fix

By malkuthro·Created 11 months ago·Updated a day ago· 8
LTX A/V Bind Schedule (Koolook)
  • model
  • model
early_gain0.00
bind_start0.55
bind_end0.75
transition_frames
total_frames0
transition_window8

LTX 2.3's party trick is synced audio-plus-video in a single generation pass - lipsync nobody else in open weights matches. But that coupling has a known failure mode: when one of your hard keyframe cuts lands on an audio peak, the video jumps - the audio→video attention is fighting the pose change you just pinned. The fix isn't a new seed or a longer clip. It's LTXAVBindSchedule, a small model-patch node from Koolook that schedules how much audio drives video at each denoise step. One pass, no re-noise.

What it actually does

It slots into the MODEL stream between your LTX 2.3 AV model and the sampler. You don't touch the prompt or the audio - the node changes how strongly the audio conditions the video over the course of denoising. Early steps are where coarse motion resolves and pose transitions settle; late steps are where lips lock to the waveform. Koolook's own tuning docs describe the whole thing as a single trade axis: audio full-on from step 0 gives you great lipsync and jumping cuts; audio off early gives you smooth motion and mouths that never sync.

How it works

In the LTX 2.3 AV transformer, the audio→video coupling is one gated cross-attention per block (audio_to_video_attn). Left at full strength every step, it holds the video hard to the audio timeline, so a keyframe transition that coincides with an audio peak gets yanked into a jump. The node patches each block's attention to scale its output by a gain that ramps from early_gain at high sigma up to full strength by low sigma. Set early_gain to 1.0 and you've reproduced stock behavior exactly - handy as a sanity check when you're A/B-ing.

The inputs that matter

  • early_gain - audio→video strength in the early high-sigma steps. 0 = audio-blind motion, 1 = stock. This is the main knob.
  • bind_start / bind_end - denoise progress (0=start, 1=end) where audio begins ramping in and where it reaches full.

The optional trio - transition_frames, total_frames, transition_window - enables a windowed mode that only gates audio around keyframe transitions and leaves lips fully synced everywhere else. Worth a try, but keep your expectations in check: Koolook's own findings note that on the AV model the windowed path can fall back to a plain scalar ramp when grid_sizes isn't available at the attention call, so the global ramp is the reliable lever.

The single output, model, is the patched model - wire it straight into your sampler in place of the stock one.

The setting people actually use

From the pack's render logs: early_gain 0.35, bind_start 0.25, bind_end 0.55 on an 8-step pass gives almost-perfect lipsync and smooth motion, no jumps on a four-keyframe clip. That ~35% audio floor from step 0 is enough to time the lips without letting early audio fight pose changes. If lips look soft, raise early_gain or lower bind_start; if motion still jumps, go the other way.

Installing it

This node ships inside the ComfyUI-Koolook pack. Easiest route is ComfyUI Manager → Install Custom Nodes → search "ComfyUI-Koolook" (or install by Git URL), then restart. Manual, same result:

cd ComfyUI/custom_nodes
git clone https://github.com/malkuthro/ComfyUI-Koolook.git

Restart ComfyUI after. These LTX nodes need no extra Python deps beyond what the LTX 2.3 ecosystem already brings - you do need an LTX 2.3 audio-video model loaded, and the "one install at a time" rule from the README: if you already have Koolook via Manager (it installs to custom_nodes/koolook/), don't also clone it manually, or ComfyUI loads both and the workflow store can corrupt on restart.

CategoryKoolook/LTX

Inputs (7)

NameTypeDefaultDescription
modelMODELLTX 2.3 audio-video model.
early_gainFLOAT0.000–1Audio->video strength in the early (high-sigma) steps where big motion resolves. 0 = audio-blind motion; 1 = stock. In windowed mode this is the floor INSIDE the transition bands only.
bind_startFLOAT0.550–1Denoise progress (0=start,1=end) where audio begins ramping in.
bind_endFLOAT0.750–1Denoise progress where audio binding reaches full.
transition_framesoptSTRINGComma-separated keyframe transition frames (timeline frames, e.g. '34,63,93'). Empty = global ramp (audio gated everywhere). Set = WINDOWED: audio binds fully everywhere except a band around these frames.
total_framesoptINT00–100000Clip length in timeline frames (e.g. 146). Required for windowed mode to map frames -> latent grid.
transition_windowoptINT80–100000Half-width (timeline frames) of the audio-protected band around each transition.

Outputs (1)

NameTypeDescription
modelMODEL