LTX Infinite Director Sampler V7 (Ref-Frame Lock)
The V7 Sampler That Turned LTX 2.3 Chunking Into a Single Pass
- model
- clip
- audio_vae
- vae
- spatial_upscaler
- bg_audio
- last_chunk_frames
- audio
- stage1_frames
LTX 2.3 is fast - fast enough that the moment it got open weights in March 2026, people stopped waiting ten minutes per clip and started wanting long clips. That's the problem this node exists for. LTX caps a single generation at a fairly small number of frames, so anything past thirty seconds or so has to be stitched from overlapping chunks, and naive stitching looks like you stitched it. LTXInfiniteDirectorSamplerV7 is Muse Collective's answer: a chunked sampler that carries the tail of each chunk into the next one as locked reference frames, so the model extends its own real output instead of guessing a fresh scene each time.
The name is a bit of a mouthful and "Infinite" is doing some marketing work - it's not infinite, it's "however long your VRAM and patience survive." But the approach is sound and it's the same trick Kijai's NativeLooping and the standard LTX "extend" workflows use.
How it works
The mechanism is simpler than the settings panel suggests. Each chunk after the first takes the last carry_frames pixel frames from the previous chunk (73 frames ≈ 3 seconds at 24fps by default), VAE-encodes them, and writes them into the start of the next chunk's latent with noise_mask=0 - meaning "frozen, do not touch." The sampler then only generates the new region (noise_mask=1), anchored to content that actually exists instead of to a noise field that merely shares a seed number.
That's the key distinction from the older overlap-regen approach (V4-style, where the overlap gets re-generated and trimmed). V7 locks real pixels in and generates only the fresh frames in a single pass, then trims the overlap region off the output so you don't get duplicated motion. Continuity comes from the locked reference, not from hoping two seeds happen to line up.
The inputs that actually matter
The node is a director-style widget monster, but most of the inputs are hidden timeline state managed by the JS panel. The ones you'll touch:
carry_frames(default 73) - how many reference frames get locked into the next chunk. More = stronger continuity but a bigger latent and more VRAM. The tooltip's "73 ≈ 3s at 24fps" is a good rule of thumb.chunk_duration_seconds(default 17) andauto_chunk_threshold(default 20) - chunk length, and the duration at which automatic chunking kicks in.stage1_steps/stage2_steps/stage2_denoise(8 / 4 / 0.42) - the two-stage LTX flow: draft at half res, then the spatial upscaler refines. The 0.42 denoise is the community-tuned sweet spot.cfg(default 1) - this is a distilled flow-matching model. CFG 7 is an SDXL habit; leave it at 1.
The three outputs are what you wire onward: last_chunk_frames (the tail frames, useful for feeding the next generation or preview), audio, and stage1_frames (the pre-upscale draft, handy for debugging).
Installing it
The pack is muse-collective-26/muse-ltx-timeline, installed like any ComfyUI custom node:
cd ComfyUI/custom_nodes
git clone https://github.com/muse-collective-26/muse-ltx-timeline
Then restart ComfyUI. The Python side needs av, torchaudio, and soundfile:
pip install av torchaudio soundfile
You'll also want VideoHelperSuite for video preview/save. And this is an LTX 2.3 node, so it needs the full 2.3 stack: the 22B distilled transformer (mxfp8 block32), the audio VAE, the video VAE, the Gemma 3 12B fp4 text encoder, and the spatial upscaler. The README has each file and its target folder. None of that is optional - this node is a thin sampler over a big model, and the big model is most of your disk budget.
Gotchas
- Resolution rules are hard. LTX 2.3 requires width and height divisible by 32 and frame counts that are (multiple of 8) + 1. The node's
divisible_bydefault of 32 handles it, but if you override dimensions, off-grid values fail rather than round. - The module docstring in older commits describes a "WAN-style overlap carry" - the shipped behavior is the reference-frame lock described here. If you see conflicting descriptions floating around, trust the tooltip on
carry_frames. - This is the previous-generation sampler without the timeline UI. If you want the drag-and-drop timeline editor and Seed Hunt, that's the
MuseDirectorSamplerV2line, which ships in the same pack.
One honest caveat: chunked long-form generation still drifts. The reference lock keeps identity and layout from collapsing, but characters will subtly mutate over ninety seconds, and that's an LTX weakness, not a bug in this node.
Inputs (42)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| audio_vae | VAE | — | |
| start_second | FLOAT | 0.000–3600 | — |
| end_second | FLOAT | 85.000–3600 | Total video length in seconds. |
| duration_seconds | FLOAT | 85.000–3600 | — |
| start_frame | INT | 00–86400 | — |
| end_frame | INT | 20400–86400 | — |
| duration_frames | INT | 20400–86400 | — |
| timeline_data | STRING | {} | — |
| local_prompts | STRING | — | |
| segment_lengths | STRING | — | |
| global_prompt | STRING | — | |
| guide_strength | STRING | — | |
| epsilon | FLOAT | 0.00100–1 | — |
| frame_rate | FLOAT | 24.001–120 | — |
| display_mode | COMBO | seconds | 2 options: seconds, frames |
| custom_width | INT | 72064–4096 | — |
| custom_height | INT | 128064–4096 | — |
| resize_method | COMBO | maintain aspect ratio | 4 options: maintain aspect ratio, stretch to fit, crop, pad |
| divisible_by | INT | 321–256 | — |
| img_compression | INT | 00–51 | — |
| generate_audio | BOOLEAN | true | LTX generates audio from [SOUNDS] prompts. Can be combined with BG Audio. |
| custom_audio_on | BOOLEAN | false | Use audio file from the timeline AUDIO track. Can be combined with Generate Audio. |
| motion_guide_on | BOOLEAN | true | Use motion guide segments from the timeline. |
| vae | VAE | — | |
| spatial_upscaler | LATENT_UPSCALE_MODEL | — | |
| chunk_duration_seconds | FLOAT | 17.02–120 | — |
| auto_chunk_threshold | FLOAT | 20.00–3600 | — |
| carry_frames | INT | 731–240 | Reference frames from previous chunk to lock at the start of each new chunk. More = stronger continuity, bigger latent. 73 ≈ 3s at 24fps. |
| carry_strength | FLOAT | 1.000–1 | Unused in V4 (kept for workflow compatibility). |
| crossfade_frames | INT | 00–120 | — |
| ic_lora_name | COMBO | None | 1 options: None |
| ic_lora_strength | FLOAT | 1.00-10–10 | — |
| stage1_steps | INT | 81–50 | — |
| stage2_steps | INT | 41–50 | — |
| stage2_denoise | FLOAT | 0.420–1 | — |
| cfg | FLOAT | 1.00–20 | — |
| seed | INT | 10000–18446744073709550000 | — |
| filename_prefix | STRING | muse | — |
| bg_volume | FLOAT | 1.000–2 | — |
| bg_audioopt | AUDIO | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| last_chunk_frames | IMAGE | — |
| audio | AUDIO | — |
| stage1_frames | IMAGE | — |