Views
No views yet
A word on expectations. This is a bleeding-edge pipeline — a 22B audio+video model running on consumer hardware. It works, but your first clean render will likely take some tuning to YOUR machine (VRAM, system RAM, which model build). Every setting that matters is documented in note blocks inside the workflow, so the guidance travels with the graph. If you get stuck, open a discussion — I answer.
| symptom | what's actually wrong | fix |
|---|---|---|
| Second shot doesn't lip-sync — voiceover over a barely-moving face | You are on v1.x, which chained shots on shot 1's decoded last frame. That guide is pixel-continuable, so the sampler copies it instead of animating. Structural — no setting fixes it. | Update to v2.0+. Shot 2 is now a true audio+video latent extension. |
LTXVAudioVideoMask node is missing (red) | v2 uses one node from ComfyUI-KJNodes for the extension. | Install ComfyUI-KJNodes. Everything else is core ComfyUI. |
| Burned-in subtitles or captions appear | The graph ships at cfg 1, and at cfg 1 negative prompts are inert on distilled models — your negative is doing nothing. | Raise cfg to about 1.3 on both CFGGuider nodes. |
| Voices come out British or Australian and IGNORE accent wording | Frame rate. LTX-2.3's joint AV prior is 24 fps-native, and this graph shipped at 25 through v2.0 — off-24 fps drifts every voice Commonwealth-ward (25 → southern British, 30 → broad Australian, A/B-verified 2026-07-30) and geometrically overrides accent prose. | Update to v2.1 (ships at 24 fps), or set every fps widget in your graph to 24 — both LTXVConditioning, LTXVPreprocess, LTXVEmptyLatentAudio, all CreateVideo nodes, and the AV-extend mask (fps 24, times 3.04 / 13.04). THEN name the accent in the positive: "in a casual American accent". |
| The model reads your scene description aloud | Nothing told it which words are spoken. | Keep the exclusivity block: "She is the only person speaking, and the only voice on the audio track is hers … nothing else is read aloud." |
| Audio and video durations drift apart after changing length | In v1 the audio latent did not follow the length primitive — a silent desync. | Fixed in v2. Change length, then set the AV-extend node's video_end_time / audio_end_time to (length + 72) / 24. At the shipped 241 that is 13.04; for ~20 s use length 265 and 14.04. |
| Length change errors out | LTX-2.3 hard constraints. | Frames must be 8n+1 (121, 241, 265, 329…) and both dimensions divisible by 32. |
| Output is mush, or the face wanders | Wrong checkpoint class. | This graph's 8-step sigma ladder assumes a distilled LTX-2.x checkpoint. A non-distilled one will not resolve in 8 steps. |
| Out of VRAM, or renders crawl | A bf16 LTX-2.3 checkpoint is ~40 GB of weights. | Pick an fp8 checkpoint in UNETLoader (or set weight_dtype to an fp8 option), and drop resolution before you drop steps. |
LTXVConditioning ×2,
LTXVPreprocess, LTXVEmptyLatentAudio, CreateVideo ×3) and rescales the
AV-extend mask times so the extension window stays on the same latent frames
(73 / 313 → 3.04 s / 13.04 s at 24 fps). Duration math is now length / 24;
the extend end-time formula is (length + 72) / 24.LTXVAddGuide does not "set frame 0" — it appends the guide as a competing
token at the same timestamp and, at strength 1.0, skips its attention
mask entirely. The official Lightricks workflows use 0.7 for exactly this
reason./extend use): the last
~3 s of shot 1 — video AND audio — are encoded as latent context, and the model
generates forward from an ongoing utterance. The voice carries over by
construction (the chained shot no longer needs a reference-audio node at all),
identity holds through the join, and the join is a continuous take instead of
a cut.LTXVAudioVideoMask) ships in
ComfyUI-KJNodes. Everything else is still core. If you work with LTX you
almost certainly have KJNodes already; "no custom nodes at all" is now
"core + one node from KJNodes", and it buys working multishot.strength 0.7 everywhere (official value — 1.0 disables the
guide's attention mask), and every length-dependent value now follows the one
length primitive automatically (negative indexing + clamped trims), so a
20-second render is a one-widget change.img_compression "the motion dial" and told you to raise it to
50-70 for more movement. Both halves were wrong, and here is the measurement:ltx-2.3-22b-distilled-1.1: the audio branch was
bit-identical, but only 2 of 24 sampled video cross-attention tensors were
unchanged. A checkpoint can be excellent at scenery and markedly worse at mouths
with its audio weights untouched.ltx-2.3-22b-distilled-1.1. If your
mouths are poor, A/B a stock checkpoint before touching any widget - and compare
against a distilled build, never -dev, or the 8-step ladder here will
produce garbage and wrongly indict it.strength returns to 1.0. On a healthy checkpoint a fully pinned frame 0
animates fine and gives the tightest identity hold. Needing to drop below ~0.6
to get any movement is a checkpoint symptom, not a strength setting.LTXVPreprocess motion dial (new, per shot). LTX is trained on VIDEO
frames, which always carry codec artifacts. A pristine photo is
out-of-distribution as a "video frame", so the model treats it as a perfect
anchor and barely animates. The guide is now round-tripped through an H.264
encode/decode. img_compression 35 by default; raise for more motion, lower
(20-25) if the result looks soft or stylized.end_percent 0.5).
Guidance amplifies its effect on the WHOLE denoised tensor - audio AND video -
so at full range it restyles the face while it fixes the voice. Identity is
decided early; detail forms late. Gating keeps the voice lock without
touching the detail passes.LoadImage
returns the file's original resolution, not the canvas, so the 1.2x reference
zoom cropped a small patch from the top-left corner of large images instead of
centring on the subject. The guide was effectively meaningless and renders
behaved like text-to-video. Fixed: scale to exactly 1.2x canvas with a centre
crop, then centre-crop back down.LTXVReferenceAudio, which patches the model with an extra forward pass
without the reference and amplifies the speaker difference. The voice no
longer drifts between shots.SETUP → SHOT 1 → [last frame] → SHOT 2 → FINISH (join + refine) → FINALImageFromBatch pulls shot 1's final frame into shot 2's
LTXVAddGuide at frame 0. The shots genuinely continue each other rather
than being two unrelated clips.LoadAudio at 3–5
seconds of clean speech; the character speaks your prompt's quoted line in
that voice.multishot_lite/FINAL.LTX23_Multishot_Lite_v2.0.zip
(or just the workflow JSON) and open it in ComfyUI.ComfyUI/input/.multishot_lite/FINAL.| thing | where |
|---|---|
ltx-2.3-22b-distilled-1.1 (or another distilled LTX-2.x build) | models/diffusion_models/ |
| LTX-2.3 video VAE | models/vae/ |
| LTX-2.3 audio VAE + text projection | models/checkpoints/ |
| Gemma-3-12B text encoder | models/text_encoders/ |
LTX-2.3-ID-LoRA-TalkVid-3K.safetensors | models/loras/ — Mode 1 needs this |
ManualSigmas and ComfySwitchNode in core). Tested on
an RTX 5090; smaller cards should drop resolution before anything else."double quotes" should be spoken,
but the model will happily read your scene description aloud too. The shipped
prompts carry an explicit exclusivity block — "no narration, no voice-over,
nothing else is read aloud". Keep it when you rewrite them.