π LTX Scheduled Multimodal CFG Guider
LTX-2's audio and video want different CFG β schedule it and save the second pass
- model
- positive
- negative
- GUIDER
LTX-2 is a multimodal model: it generates video and audio in one pass, and it has a dirty secret - the two modalities do not respond to the same CFG. Video, especially on the distilled weights, wants a low CFG in the 1β3 range. Audio wants more, often 7 or higher. Pick one number and one of them is wrong: crank CFG for the audio and the video gets burnt and saturated; drop it for the video and the audio comes out mushy and directionless.
The official Lightricks answer is the Multimodal Guider, which splits prompt adherence, visual stability, and audio-video sync into independently tunable controls. This node is a community implementation of that idea, with one extra trick: it schedules when guidance is active. Guidance isn't needed across the whole denoising schedule - it mostly matters in the early steps while the structure is being decided. Apply it for the first few steps, then drop to CFG 1 for the rest.
How it works
It's a proper GUIDER, a subclass of ComfyUI's own CFGGuider, which means you wire its output into a KSampler's guider input instead of setting a flat CFG on the sampler. Under the hood it unpacks the packed video+audio latents into separate tensors, computes a prediction for each, and applies per-modality CFG - video_cfg to the video chunk, audio_cfg to the audio chunk - then repacks them. It also sets a2v/v2a cross-attention flags in the transformer options so the two modalities can condition on each other.
The scheduling is where it gets clever and cheap. active_steps says how many steps run with full guidance; everything after drops to inactive_cfg. And since inactive_cfg defaults to 1.0, here's the free lunch: at exactly CFG 1, ComfyUI skips the unconditional pass entirely (the disable_cfg1_optimization gate), so the scheduled portion of your sampling is running the model roughly half as often per step. You're not just getting cleaner results - you're getting faster ones, because after the early steps there's no negative prediction being computed at all.
The dials
- video_cfg (3.0) / audio_cfg (7.0) - the per-modality guidance during the active phase. These defaults encode the real asymmetry.
- active_steps (1) - how many steps run with full guidance. "1" sounds tiny but it's the author's default for a reason; the model does most of its structural work early.
- inactive_cfg (1.0) - what guidance drops to after. Keep it at 1 to get the free speed.
- cross_attn (on) - whether video and audio condition on each other. Off if you want them fully independent.
- debug - on by default, which is worth knowing. It prints a per-step schedule line to the console (
step=0/8 ... video_cfg=3.0 audio_cfg=7.0). Great for learning, but turn it off when you stop caring.
Inputs are model, positive, negative, plus those settings. Output is a single GUIDER.
Installing it
In cubicj-comfy-nodes. Manager: search "CubicJ Comfy Nodes" and install. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/cubicj/cubicj-comfy-nodes
# restart ComfyUI
No dependencies. But it's LTX-2-specific - it depends on ComfyUI's packed multimodal latents and the audio/video cross-attention flags, so you need the LTX-2 family of models and a current ComfyUI.
Common issues
If the audio comes out weak, raise audio_cfg before touching the video side. If colors burn or the clip over-saturates, the culprit is video_cfg - drop it toward 1. active_steps = 0 disables guidance entirely, which is a quick way to confirm the node is doing anything at all. And remember the console chatter: with debug on, every step prints schedule info, which people frequently mistake for an error. It isn't - it's the author's built-in tuning aid. If you want quiet logs, that's the debug toggle's job.
Honest caveat, same as the rest of this pack: it's new and barely has a community footprint, so treat the defaults as educated starting points, not gospel. The debug output plus the free-speed trick make it cheap to tune yourself.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | β | |
| positive | CONDITIONING | β | |
| negative | CONDITIONING | β | |
| video_cfg | FLOAT | 3.00β100 | β |
| audio_cfg | FLOAT | 7.00β100 | β |
| inactive_cfg | FLOAT | 1.00β100 | β |
| active_steps | INT | 10β100 | β |
| cross_attn | BOOLEAN | true | β |
| debug | BOOLEAN | true | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| GUIDER | GUIDER | β |