LTX-2.5 Multishot Sampler (Joy-LTX 2.5)
The LTX-2.5 sampler that makes a take as long as you like
- model
- clip
- video_vae
- audio_vae
- upscale_model
- start_image
- shot_images
- images
- audio
- info
The LTX-2.5 Multishot Sampler is this pack's other engine lane: it runs the LTX-2.5 two-pass pipeline once per shot and joins the shots with an AV-extend - the previous shot's tail pinned as raw latents at the head of the next - so a take can be as long as you like, and even a hard cut keeps the voice. It's the whole "multishot" idea applied to Lightricks' speed-first video family rather than to MiniMax H3.
LTX's role in the ecosystem is speed: where H3 (and Wan, for that matter) are minutes-per-clip affairs, LTX drafts in seconds. That makes it the right tool when you're iterating on a long scene or want a fast version of a take before committing to the H3 render. The node is a self-contained sampler - model, clip, both VAEs, prompts, and all the dials are on the node itself - so you can build an LTX lane without any of the H3 chain machinery.
How it works
For each shot it runs LTX's two-pass pipeline: pass one at the requested resolution, then (with two_pass on and an upscale_model connected) an upscaled refine pass on the output grid. Then it joins:
continue(default) - AV-extend: the previous shot's tail (video and audio, raw latents) is pinned at the head of the next via a noise mask, so the take reads as one continuous shot and the voice carries across.cut- the voice extends but the picture is fresh, like a hard cut in a scene where the dialogue continues.fresh- independent shots, no carryover.
The overlap input (default 3, i.e. 17 pixel frames ≈ 0.7 s) sets how much of the previous tail gets pinned - more overlap means a smoother join but less new content per shot.
The inputs that matter beyond those: prompts (the writer's {"prompts":[...]} JSON or ----separated blocks), frames_per_shot (8n+1 at 24 fps; 193 = 8 s), shot_count (0 = every prompt the writer produced), the two sigmas_pass1/sigmas_pass2 schedules (the distilled 8-step defaults are the measured recipe), and video_cfg/audio_cfg (1.0 is the LTX norm). Optional inputs include start_image for I2V on shot 1 and shot_images - one image per shot used as the first frame in cut/fresh mode, which is how you carry identity from your reference plates.
Outputs are images, audio, and an info string.
Installing it
Part of the ComfyUI-H3-Multishot pack:
cd ComfyUI/custom_nodes
git clone https://github.com/jlucasmcrell/ComfyUI-H3-Multishot
Or search H3 Multishot in ComfyUI Manager. Requires ComfyUI v0.30.0+. You'll need the LTX-2.5 model, its text encoder, and the video/audio VAEs; two_pass also needs a latent upscale model. The pack itself adds no Python dependencies.
Gotchas
Two honest warnings. First, LTX's cost model is tokens = (W/32)(H/32) × latent frames, and pass two runs on the output grid - so the upscale factor decides how much a take costs: x2 = 4x the pixels of pass one, x1.5 = 2.25x. The pack's own measurements: 960x544 → x2 → 1920x1088 at 193 frames renders on 24 GB, while 481 frames hangs a 32 GB card fully offloaded. Keep shots short for long takes. Second, the join modes are not quality-neutral - continue is the seamless mode but spends content on the overlap; if a shot feels like it's rehashing the previous one, lower overlap. And as with everything LTX, it loses to H3 on faces and complex motion - use it for speed and iteration, and don't expect the facial fidelity H3's reference rows give you.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| video_vae | VAE | — | |
| audio_vae | VAE | — | |
| prompts | STRING | The writer's shot prompts: {"prompts": [...]} JSON or blocks separated by --- (wire the writer here, or paste your own). | |
| negative | STRING | pc game, console game, video game, cartoon, childish, ugly | — |
| width | INT | 960256–1920 | — |
| height | INT | 544256–1920 | — |
| frames_per_shot | INT | 19325–1441 | 8n+1 frames per shot at 24 fps (193 = 8 s). |
| shot_count | INT | 00–64 | 0 = every prompt the writer produced; N = the first N. |
| join | COMBO | continue (AV extend: seamless take) | 3 options: continue (AV extend: seamless take), cut (voice extends, new picture), fresh (independent shots) |
| overlap | INT | 31–12 | Latent frames of the previous shot pinned at the head of the next one (3 = 17 pixel frames = 0.7 s). More = smoother join, less new content per shot. |
| seed | INT | 5530100–18446744073709550000 | — |
| seed_per_shot | BOOLEAN | true | — |
| sampler_name | COMBO | euler_ancestral | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| sigmas_pass1 | STRING | 1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0 | distilled 8-step schedule |
| two_pass | BOOLEAN | true | Upscale each shot with the latent upsampler and refine (needs upscale_model). |
| sigmas_pass2 | STRING | 0.85, 0.7250, 0.4219, 0.0 | — |
| video_cfg | FLOAT | 1.000–20 | — |
| audio_cfg | FLOAT | 1.000–20 | — |
| frame_rate | FLOAT | 2412–60 | — |
| save_every_shot | BOOLEAN | false | Also write each shot (untrimmed) as output/video/LTX_SHOTS/shot_*.mp4 |
| upscale_modelopt | LATENT_UPSCALE_MODEL | — | |
| start_imageopt | IMAGE | First frame of shot 1 (image-to-video). | |
| shot_imagesopt | IMAGE | One image per shot (batch); used as the first frame of each shot in cut/fresh mode (identity carry from your reference plates). | |
| image_strengthopt | FLOAT | 1.000–1 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| info | STRING | — |