π LTXV Scene Extender ErosDiffusion
Extend LTX-2 clips with synced audio from a shot list β audio included
- model
- video_vae
- sampler
- sigmas
- noise
- guider
- clip
- audio_vae
- latent
- guide_images
- latent
- video_latent
- audio_latent
- positive
- negative
The README for this pack is refreshingly honest, which you should read before installing: pre-alpha, in progress, "not meant for usage," and - at the moment - broken. That's the pack LTXVSceneExtender ships in, and ComfyUI Manager will happily hand it to you and let you find that out yourself. So the real warning is up front: this is a promising idea in a very early shell, not a tool you should build a pipeline on today.
The idea, though, is the right one. LTX-2 (open weights landed January 2026) was the first open-weights model to generate synchronized video and audio in a single pass - 19B parameters, a Gemma 3 text encoder that alone weighs ~22GB, and audio that comes out of the diffusion model instead of being bolted on after the fact. This node is a scene-script-driven extender for exactly that model. You hand it a text file that reads like a shot list, and it generates the whole thing, chunk by chunk, with per-line dialogue, image guides pinned to specific frames, and audio crossfaded at every cut.
How it works
It's not a standalone generator - it's a wrapper around the standard LTX sampling plumbing. You feed it model, video_vae, sampler, sigmas, noise, guider (it expects STGGuiderAdvanced-style guiders), and clip: the same six-way connection every working LTX workflow already has. From there it parses the scene_script into timed chunks, pre-encodes every prompt and guide image so the run doesn't stall mid-generation, then loops through the chunks, stitching each one to the last with a temporal overlap. If the model is an LTXAVModel and you've wired up the audio VAE, each chunk also produces audio, and an internal blender crossfades the mel-spectrogram output at transitions so joins don't click.
The script format is the whole language of the node, and it's genuinely easy to read:
[00:00-00:02] Closeup of woman's face, neutral expression | audio:silent | first:$0 | end:$1
[00:02-00:04] Cowboy shot of woman speaking | audio:"Hello, welcome" | first:$2 | 00:03:$3 | end:$4
Each line is one chunk: a [MM:SS-MM:SS] window, the prompt, an audio spec (audio:silent, audio:ambient, or audio:"dialogue text"), and image guides - first:, end:, or a specific MM:SS: - referencing $0, $1, etc. from the guide_images batch. The default input in the node is a three-scene example, so you can see the format working before you write your own.
The inputs that actually matter
scene_script- the shot list above. This is the node, really; everything else is plumbing.model+audio_vae- wire the LTXAVModel and the audio VAE or you'll silently get video-only output. Thevideo_vaehandles frames, theaudio_vaehandles the sound.guide_images+guide_strength- your reference frames and how hard the model leans on them.enable_cache- chunk caching for faster re-runs. Nice for iterating, but the tooltip's warning is real: it eats extra memory.
The audio knobs (audio_overlap_duration, audio_slope_frames) default to sane values - only touch them if your transitions click or clip.
Outputs
latent (the combined result), plus split video_latent and audio_latent streams you can decode separately, and positive/negative conditioning if you're chaining further. In practice: decode the video latent through the VAE, wire the audio latent to its audio decoder, and you have your scene.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/erosDiffusion/ComfyUI-Erosdiffusion-LTX2
β¦or just search "Erosdiffusion LTX2" in ComfyUI Manager, then restart ComfyUI. No pip dependencies in the repo - but the code uses ComfyUI's newer v3 node API and comfy_extras.nodes_lt, so you need a current ComfyUI. The heavy lift is the models: LTXVideo plus an LTXAVModel (the LTX-2 weights are a ~25GB fp8 file on top of the Gemma text encoder). Official minimum is 32GB VRAM, which nobody actually runs; the realistic setup is 64GB system RAM and ComfyUI started with --reserve-vram 4 - that's how the community squeezed LTX-2 onto 24GB and 16GB cards.
Troubleshooting
The big one isn't technical: the README says it's broken, and it's pre-alpha. Expect rough edges - don't judge a bad run against what Wan-adjacent workflows produce. Common real snags:
- No audio at all - you wired a video-only model, or skipped
audio_vae. Double-check both. - OOM - LTX-2 memory reality, not this node's bug. GGUF quants plus
--reserve-vramare the standard fix. - Script silently ignored - a malformed line (missing pipes, unquoted dialogue with spaces) usually makes a chunk parse wrong or get dropped. The timeline editor sibling in this pack exists precisely because eyeballing pipes is miserable.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | Diffusion model (LTXAVModel for audio-video, or video-only model) | |
| video_vae | VAE | Video VAE for encoding/decoding | |
| sampler | SAMPLER | Sampler to use | |
| sigmas | SIGMAS | Sigma schedule | |
| noise | NOISE | Noise source | |
| guider | GUIDER | Guider (e.g., STGGuiderAdvanced) | |
| clip | CLIP | CLIP model for encoding prompts | |
| overlap_duration | FLOAT | 1.00.5β3 | Overlap between chunks for smooth transitions |
| video_fps | FLOAT | 251β60 | Video frame rate |
| width | INT | 96064β2048 | Output video width |
| height | INT | 51264β2048 | Output video height |
| scene_script | STRING | [00:00-00:01] A woman with short hair speaks to camera | audio:"Hello" | first:$0 | end:$0 [00:01-00:03] A woman with short hair turns around and speaks to camera , camera orbits around | audio:"I like this camera" | first:$0 | end:$1 [00:03-00:06] A woman with short hair opens her arms and tilts head backwards happy | audio: "I feel free" | first:$1 | end:$2 [00:06-00:08] A woman with short hair puts her hands in her hair | first:$2 | Timestamped scene script. Format: [MM:SS-MM:SS] Scene description | audio:spec | first:$0 | MM:SS:$1 | end:$2 Audio specs: audio:silent, audio:ambient, audio:"dialogue text" Guide refs: $0, $1, etc. reference guide_images batch by index |
| guide_strength | FLOAT | 1.000β1 | Strength of image guides |
| audio_overlap_duration | FLOAT | 0.50.1β2 | Audio overlap for smooth blending at transitions |
| audio_slope_frames | INT | 51β20 | Crossfade slope length for seamless audio |
| audio_normalization | STRING | 1,1,0.25,1,1,0.25,1,1 | Per-step audio normalization factors |
| video_overlap_frames | INT | 80β64 | β |
| audio_overlap_frames | INT | 320β256 | β |
| temporal_cond_strength | FLOAT | 1.000β1 | Conditioning strength from previous tile overlap |
| adain_factor | FLOAT | 0.100β1 | AdaIN factor to prevent oversaturation |
| enable_cache | BOOLEAN | false | Enable chunk caching for faster re-runs (can use extra memory) |
| audio_vaeopt | VAE | Audio VAE (required for audio generation) | |
| latentopt | LATENT | Existing video/AV latent to extend (optional for new generation) | |
| guide_imagesopt | IMAGE | Batch of guide images (referenced as $0, $1, etc.) |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | β |
| video_latent | LATENT | β |
| audio_latent | LATENT | β |
| positive | CONDITIONING | β |
| negative | CONDITIONING | β |