Nodes/ComfyUI-H3-Multishot/LTX-2.5 Multishot Sampler (Joy-LTX 2.5)
ComfyUI Node

LTX-2.5 Multishot Sampler (Joy-LTX 2.5)

The LTX-2.5 sampler that makes a take as long as you like

By jlucasmcrell·Created 21 days ago·Updated 2 days ago· 31
LTX-2.5 Multishot Sampler (Joy-LTX 2.5)
  • model
  • clip
  • video_vae
  • audio_vae
  • upscale_model
  • start_image
  • shot_images
  • images
  • audio
  • info
prompts
negativepc game, console game, video game, cartoon, childish, ugly
width960
height544
frames_per_shot193
shot_count0
joincontinue (AV extend: seamless take)
overlap3
seed553010
seed_per_shottrue
sampler_nameeuler_ancestral
sigmas_pass11.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0
two_passtrue
sigmas_pass20.85, 0.7250, 0.4219, 0.0
video_cfg1.00
audio_cfg1.00
frame_rate24
save_every_shotfalse
image_strength1.00

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.

Categoryvideo/ltx

Inputs (26)

NameTypeDefaultDescription
modelMODEL
clipCLIP
video_vaeVAE
audio_vaeVAE
promptsSTRINGThe writer's shot prompts: {"prompts": [...]} JSON or blocks separated by --- (wire the writer here, or paste your own).
negativeSTRINGpc game, console game, video game, cartoon, childish, ugly
widthINT960256–1920
heightINT544256–1920
frames_per_shotINT19325–14418n+1 frames per shot at 24 fps (193 = 8 s).
shot_countINT00–640 = every prompt the writer produced; N = the first N.
joinCOMBOcontinue (AV extend: seamless take)3 options: continue (AV extend: seamless take), cut (voice extends, new picture), fresh (independent shots)
overlapINT31–12Latent 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.
seedINT5530100–18446744073709550000
seed_per_shotBOOLEANtrue
sampler_nameCOMBOeuler_ancestral44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
sigmas_pass1STRING1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0distilled 8-step schedule
two_passBOOLEANtrueUpscale each shot with the latent upsampler and refine (needs upscale_model).
sigmas_pass2STRING0.85, 0.7250, 0.4219, 0.0
video_cfgFLOAT1.000–20
audio_cfgFLOAT1.000–20
frame_rateFLOAT2412–60
save_every_shotBOOLEANfalseAlso write each shot (untrimmed) as output/video/LTX_SHOTS/shot_*.mp4
upscale_modeloptLATENT_UPSCALE_MODEL
start_imageoptIMAGEFirst frame of shot 1 (image-to-video).
shot_imagesoptIMAGEOne image per shot (batch); used as the first frame of each shot in cut/fresh mode (identity carry from your reference plates).
image_strengthoptFLOAT1.000–1

Outputs (3)

NameTypeDescription
imagesIMAGE
audioAUDIO
infoSTRING