1. Model Introduction
LTX-2.5 is an open world model from Lightricks, built for local execution and fine-tuning. Its established use is generating synchronized, high-fidelity video and audio from text, image and video inputs. It is a 22B DiT paired with a Gemma-4-12B text encoder, separate video and audio VAEs, and a vocoder that outputs 48 kHz stereo. Video and audio are denoised jointly in one pass rather than dubbed afterwards, so they stay in sync. UseLightricks/LTX-2.5-Diffusers as --model-path.
1.1 New in LTX-2.5
Two capabilities have no equivalent in LTX-2 / LTX-2.3:Auto-duration
A duration head predicts how long the shot the caption implies should run,
and picks the frame count for you. Pass
--auto-duration instead of
--num-frames.Diffusion decoder
A diffusion model replaces the convolutional VAE decoder for the
latent-to-pixel step. Enable with
--use-diffusion-decoder.1.2 Components
Encoding always uses
vae/, and both decoders consume the same latents, so the
decoder choice does not change anything upstream of it.
2. SGLang-diffusion Installation
3. Model Deployment
3.1 Basic Configuration
sglang serve, while per-request choices (auto-duration,
diffusion decoder, resolution) are listed separately, since they belong on the
sglang generate call or the request body.
3.2 Configuration Tips
Choose the pipeline class based on the quality and latency target:
There is no HQ pipeline class for LTX-2.5, and no
--distilled-lora-path for
either weights variant: LTX-2.5 distils the weights themselves rather than
merging a LoRA per stage, so --ltx2-two-stage-device-mode (which governs that
swap) does not apply either.
Every feature on this page — text-to-video, image conditioning, auto-duration,
the diffusion decoder, and either weights variant — works with both pipeline
classes.
Selecting weights:
--model-variant devserves the full / SFT DiT fromtransformer_full/; the default is the distilled one. See section 4.5.
3.3 Multi-GPU presets
3.4 fp8 quantization
--quantization fp8 quantizes the DiT’s linear layers as it loads them, so it
needs no pre-quantized checkpoint:
4. Model Invocation
4.1 Text-to-video with audio
--num-inference-steps and --guidance-scale have no effect
here. Use --model-variant dev when you want
control over either.
4.2 Image-to-video
4.3 Auto-duration
NEW LTX-2.5 ships a duration head — a small module that reads the encoded caption and regresses the natural length of the shot it describes. Use it when the prompt implies a duration (“a quick glance” vs “a slow pan across the valley”) and you would rather not guess a frame count:--auto-duration-min-seconds /
--auto-duration-max-seconds (default 1–20 s) and snapped to the VAE’s temporal
grid, so the result is always a valid frame count. It overrides --num-frames.
4.4 Two-stage (higher quality)
Stage 1 runs at half the requested resolution, the latents are upsampled 2x, and a short sigma tail refines at full resolution. Pass the final size:--distilled-lora-path
is needed: the LTX-2.5 transformer is already distilled.
4.5 The dev transformer
LTX-2.5 ships two DiTs.model_index.json points at the distilled one; the
full / SFT weights live in transformer_full/ and are deliberately left out of
the index. Select them with --model-variant dev:
scheduler/
turns off for the distilled DiT. Unlike the distilled path it is driven by a
step count and does want CFG, so pass --num-inference-steps and
--guidance-scale yourself.
Note that from_pretrained only fetches what model_index.json lists, so a
partial snapshot download will not include transformer_full/ (another 38 GB).
4.6 Diffusion decoder
NEW LTX-2.5 adds a diffusion-based video decoder as an alternative to the convolutional VAE decoder. Rather than deconvolving the latent it denoises pixels conditioned on a context volume built from it, which recovers detail a convolutional decoder tends to smooth away:LTX2Pipeline also
decodes with the VAE. The offline generate command loads the optional decoder
automatically when --use-diffusion-decoder is present.
For an online server, opt into loading the decoder at startup, then select it per
request with use_diffusion_decoder: true:
--cpu-offload-components diffusion_decoder keeps the optional decoder on CPU
between uses.
