Download
1 variant available
**v2.0 — the chained shot is now a true audio+video extension. If you used v1.x for two-shot work, please re-download: the second shot was structurally broken and no setting could fix it.**
**What was wrong.** v1 chained shots by feeding shot 1's decoded last frame into shot 2 as a guide. Three problems compounded:
- `LTXVAddGuide` does not "set frame 0" — it **appends** the guide as a competing token at the same timestamp, and at `strength 1.0` it skips its attention mask entirely. Every official Lightricks workflow uses 0.7.
- That guide was shot 1's own output at *exactly* the render size: VAE round-tripped, on-manifold, **pixel-continuable**. Reproducing it verbatim is a cheaper solution for the sampler than lip-syncing — which is why chained shots came out as "voiceover over a barely-moving face", and why it got **worse** on more strongly distilled checkpoints.
- Shot 2's audio restarted from pure noise mid-sentence while its video was pinned to a frozen frame — two contradictory anchors, every render.
**What v2 does instead.** The last ~3 seconds of shot 1 — video **and audio** — are encoded as latent context, and the model generates forward from an ongoing utterance. This is the pattern community extend workflows and Lightricks' own hosted `/extend` endpoint use. Consequences:
- The voice carries over by construction. The chained shot needs **no reference-audio node at all**.
- Identity holds through the join, and the join is a continuous take rather than a cut.
- Measured on the shipped demo config, chained-shot audio/mouth correlation went from ~0.1–0.4 (wildly unstable) to **0.64** — and the second shot now syncs *better* than the first.
**Also in v2.0**
- Guide strength is **0.7** everywhere (the official value; 1.0 silently disables the guide's attention mask).
- Every length-dependent value now follows the single `length` primitive automatically — negative indexing for the last frame, clamped trims — so changing duration is a one-widget edit instead of seven. (In v1 the audio latent did *not* follow `length`, so anyone who changed duration silently desynced audio from video.)
- Notes inside the graph rewritten to match the new architecture.
**One dependency change.** The extension node (`LTXVAudioVideoMask`) ships in **ComfyUI-KJNodes**. Everything else is still core ComfyUI. v1's "no custom nodes at all" claim is retired — if you work with LTX you almost certainly have KJNodes already, and it buys working multishot.
**Requirements unchanged otherwise:** a *distilled* LTX-2.x checkpoint, the LTX-2.3 VAEs and Gemma text encoder, and the ID-LoRA for reference-voice mode.
*Note: the workflow ships at cfg 1, which makes negative prompts inert on distilled models. If you need a negative to take effect — for example to suppress burned-in subtitles — raise it to about 1.3.*
Show more

310 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9
770 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9

License:
LTXV2Two-shot talking-character video on LTX-2.3 — shot 2 is a TRUE audio+video extension of shot 1, not a cut. The last ~3 seconds of shot 1's video and audio become latent context, so the model generates forward from an ongoing utterance: the voice carries over by construction, identity holds, and the join is a continuous take. The character speaks in a reference voice you supply.
Core ComfyUI nodes plus one node from ComfyUI-KJNodes (LTXVAudioVideoMask), which powers the extension.
A word on expectations. This is a bleeding-edge pipeline — a 22B audio+video model on consumer hardware. It works, but your first clean render will likely take some tuning to YOUR machine. Every setting that matters is documented in note blocks inside the workflow, so the guidance travels with the graph. If you get stuck, comment here or open a GitHub issue — I answer.
Quick fixes — read this first
Nearly every problem reported with this workflow is one of these.
Second shot doesn't lip-sync — voiceover over a barely-moving face
Why: 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.
Fix: Update to v2.0+. Shot 2 is now a true audio+video latent extension.LTXVAudioVideoMasknode is missing (red)
Why: v2 uses one node from ComfyUI-KJNodes for the extension.
Fix: Install ComfyUI-KJNodes. Everything else is core ComfyUI.Burned-in subtitles or captions appear
Why: The graph ships at cfg 1, and at cfg 1 negative prompts are inert on distilled models — your negative is doing nothing.
Fix: Raise cfg to about 1.3 on both CFGGuider nodes.The voice comes out British
Why: LTX drifts to a British accent unless told otherwise.
Fix: Name it affirmatively in the positive prompt: “in a casual American accent”.The model reads your scene description aloud
Why: Nothing told it which words are spoken.
Fix: 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
Why: In v1 the audio latent did not follow thelengthprimitive — a silent desync.
Fix: Fixed in v2. Changelength, then set the AV-extend node'svideo_end_time/audio_end_timeto(length + 72) / 25. At the shipped 241 that is 12.52; for ~20 s use length 265 and 13.48.Length change errors out
Why: LTX-2.3 hard constraints.
Fix: Frames must be 8n+1 (121, 241, 265, 329…) and both dimensions divisible by 32.Output is mush, or the face wanders
Why: Wrong checkpoint class.
Fix: 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
Why: A bf16 LTX-2.3 checkpoint is ~40 GB of weights.
Fix: Pick an fp8 checkpoint inUNETLoader, and drop resolution before you drop steps.
The one people miss most: cfg 1 makes your negative prompt do nothing. If you are fighting burned-in text, that is why.
What you get
SETUP -> SHOT 1 -> [last ~3s of video AND audio as latent context]
-> SHOT 2 (extends it) -> FINISH (join + refine) -> FINALWhat you need
A distilled LTX-2.x checkpoint
The LTX-2.3 VAEs and a Gemma-3-12B text encoder
The TalkVid ID-LoRA for reference-voice mode
Two settings worth knowing
cfg ships at 1, which makes negative prompts inert. Raise to ~1.3 if you need one.
length drives everything except the AV-extend end times, which are
(length + 72) / 25. At 241 that is 12.52; for ~20 s use 265 and 13.48.
Everything else I've published
JoyAI-Echo multishot patch — nodes, releases, issues
LTX-2.3 Multishot Lite — the core-node workflow
Support this work
Everything I publish — workflows, merges, quants, patches — is free and stays free. The models are non-commercial by license and I have no plans to change that.
If something here saved you an evening:
GitHub Sponsors — recurring, no platform cut
Ko-fi — one-off, no account needed
Liberapay — recurring, open-source and non-profit
Bug reports are worth as much as money. Most of the fixes in these packages exist because somebody posted a log.