LICENSE..safetensors per component) rather than a single monolith. Point each CLI flag / loader at the file below.| File | Notes |
|---|---|
diffusion_models/ltx-2.5-22b-distilled-transformer-bf16.safetensors | Distilled DiT (bf16). Fixed 8-step schedule, CFG=1. |
diffusion_models/ltx-2.5-22b-dev-transformer-bf16.safetensors | Full / trainable DiT (bf16). |
diffusion_models/ltx-2.5-22b-distilled-transformer-comfy-int8-convrot.safetensors | Distilled DiT (Comfy int8 + convrot). ComfyUI only — not for ltx-pipelines / PyTorch. |
diffusion_models/ltx-2.5-22b-dev-transformer-comfy-int8-convrot.safetensors | Full DiT (Comfy int8 + convrot). ComfyUI only — not for ltx-pipelines / PyTorch. |
diffusion_models/ltx-2.5-22b-distilled-transformer-nvfp4.safetensors | Distilled DiT (NVFP4). ComfyUI, or ltx-pipelines with --quantization nvfp4-prequant (Blackwell / ltx-kernels). |
| File | Notes |
|---|---|
text_encoders/gemma4-12b-with-proj-ltx-2.5-bf16.safetensors | Gemma4 TE + projections (bf16) |
text_encoders/gemma4-12b-with-proj-ltx-2.5-comfy-int8-convrot.safetensors | Same TE, Comfy int8 — ComfyUI only |
vae/ltx-2.5-video-vae-bf16.safetensors | DiffVAE — higher quality, heavier |
vae/ltx-2.5-video-vae-conv-bf16.safetensors | Conv VAE — faster, lighter |
vae/ltx-2.5-audio-vae-bf16.safetensors | Audio VAE + vocoder |
loras/ltx-2.5-22b-distilled-lora-450-bf16.safetensors | Distilled LoRA (dev-transformer workflows) |
model_patches/ltx-2.5-duration-head-bf16.safetensors | Auto duration when --num-frames omitted |
latent_upscale_models/ltx-2.5-latent-spatial-upscaler-x2-bf16-1.0.safetensors | x2 spatial upscaler required for multi-stage pipeline |
latent_upscale_models/ltx-2.5-latent-temporal-upscaler-x2-bf16-1.0.safetensors | x2 temporal upscaler |
ltx-pipelines)ltx-pipelines package loads them via --transformer-path, --text-encoder-path, etc.1git clone https://github.com/Lightricks/LTX-2.git
2cd LTX-2
3uv sync
4source .venv/bin/activate1hf auth login
2
3# LTX-2.5 distilled split pack
4hf download Lightricks/LTX-2.5 \
5 diffusion_models/ltx-2.5-22b-distilled-transformer-bf16.safetensors \
6 text_encoders/gemma4-12b-with-proj-ltx-2.5-bf16.safetensors \
7 vae/ltx-2.5-video-vae-bf16.safetensors \
8 vae/ltx-2.5-audio-vae-bf16.safetensors \
9 model_patches/ltx-2.5-duration-head-bf16.safetensors \
10 --local-dir models/ltx-2.5
11
12# Spatial upscaler (still hosted on LTX-2.3; required by the distilled pipeline)
13hf download Lightricks/LTX-2.3 \
14 ltx-2.3-spatial-upscaler-x2-1.1.safetensors \
15 --local-dir models/ltx-2.31uv run python -m ltx_pipelines.distilled \
2 --transformer-path models/ltx-2.5/diffusion_models/ltx-2.5-22b-distilled-transformer-bf16.safetensors \
3 --text-encoder-path models/ltx-2.5/text_encoders/gemma4-12b-with-proj-ltx-2.5-bf16.safetensors \
4 --video-vae-path models/ltx-2.5/vae/ltx-2.5-video-vae-bf16.safetensors \
5 --audio-vae-path models/ltx-2.5/vae/ltx-2.5-audio-vae-bf16.safetensors \
6 --duration-head-path models/ltx-2.5/model_patches/ltx-2.5-duration-head-bf16.safetensors \
7 --spatial-upsampler-path models/ltx-2.3/ltx-2.3-spatial-upscaler-x2-1.1.safetensors \
8 --prompt "A golden retriever running through a sunny meadow, cinematic lighting" \
9 --seed 42 \
10 --output-path output_distilled.mp4--num-frames to let the duration head pick a length from the prompt (LTX-2.5+). Or set e.g. --num-frames 121 (must satisfy frames % 8 == 1). Width/height must be divisible by 32.--image PATH FRAME_IDX STRENGTH flags (frame 0 = first frame conditioning):1uv run python -m ltx_pipelines.distilled \
2 --transformer-path models/ltx-2.5/diffusion_models/ltx-2.5-22b-distilled-transformer-bf16.safetensors \
3 --text-encoder-path models/ltx-2.5/text_encoders/gemma4-12b-with-proj-ltx-2.5-bf16.safetensors \
4 --video-vae-path models/ltx-2.5/vae/ltx-2.5-video-vae-bf16.safetensors \
5 --audio-vae-path models/ltx-2.5/vae/ltx-2.5-audio-vae-bf16.safetensors \
6 --duration-head-path models/ltx-2.5/model_patches/ltx-2.5-duration-head-bf16.safetensors \
7 --spatial-upsampler-path models/ltx-2.3/ltx-2.3-spatial-upscaler-x2-1.1.safetensors \
8 --image path/to/first_frame.jpg 0 1.0 \
9 --prompt "The camera slowly dollies out as wind moves through the grass" \
10 --seed 42 \
11 --output-path output_i2v.mp41# Downcast bf16 transformer on the fly + CPU offload
2 ...existing flags... \
3 --quantization fp8-cast \
4 --offload cpultx-pipelines. The *-comfy-int8-convrot.safetensors files are ComfyUI-only and are not loaded by this PyTorch path.1from ltx_pipelines.distilled import DistilledPipeline
2from ltx_pipelines.utils.model_paths import ModelPaths
3
4model_paths = ModelPaths.from_split(
5 transformer_path="models/ltx-2.5/diffusion_models/ltx-2.5-22b-distilled-transformer-bf16.safetensors",
6 text_encoder_path="models/ltx-2.5/text_encoders/gemma4-12b-with-proj-ltx-2.5-bf16.safetensors",
7 video_vae_path="models/ltx-2.5/vae/ltx-2.5-video-vae-bf16.safetensors",
8 audio_vae_path="models/ltx-2.5/vae/ltx-2.5-audio-vae-bf16.safetensors",
9 duration_head_path="models/ltx-2.5/model_patches/ltx-2.5-duration-head-bf16.safetensors",
10)
11
12pipe = DistilledPipeline(
13 model_paths=model_paths,
14 spatial_upsampler_path="models/ltx-2.3/ltx-2.3-spatial-upscaler-x2-1.1.safetensors",
15)
16# See packages/ltx-pipelines for __call__ args (prompt, seed, num_frames, images, ...).uv run python -m ltx_pipelines.distilled --helpLightricks/LTX-2.5-Diffusers — same model, Diffusers-friendly packaging.diffusers release yet, so install from main:pip install git+https://github.com/huggingface/diffusers1import torch
2from diffusers import LTX2ImageToVideoPipeline, LTX2LatentUpsamplePipeline
3from diffusers.pipelines.ltx2.latent_upsampler import LTX2LatentUpsamplerModel
4from diffusers.pipelines.ltx2.utils import (
5 DEFAULT_NEGATIVE_PROMPT,
6 DISTILLED_SIGMA_VALUES,
7 STAGE_2_DISTILLED_SIGMA_VALUES,
8)
9from diffusers.utils import encode_video, load_image
10
11MODEL_ID = "Lightricks/LTX-2.5-Diffusers"
12# Stage 1 resolution; stage 2 runs at 2x this.
13HEIGHT, WIDTH, NUM_FRAMES, FRAME_RATE = 544, 960, 121, 24.0
14
15pipe = LTX2ImageToVideoPipeline.from_pretrained(MODEL_ID, dtype=torch.bfloat16)
16pipe.enable_model_cpu_offload()
17pipe.vae.enable_tiling() # stage 2 decodes at 2x
18
19latent_upsampler = LTX2LatentUpsamplerModel.from_pretrained(
20 MODEL_ID, subfolder="latent_upsampler", dtype=torch.bfloat16
21).to("cuda")
22upsample_pipe = LTX2LatentUpsamplePipeline(vae=pipe.vae, latent_upsampler=latent_upsampler)
23
24generator = torch.Generator("cuda").manual_seed(42)
25shared = dict(
26 image=load_image("path/to/first_frame.jpg"),
27 prompt="The camera slowly dollies out as wind moves through the grass",
28 negative_prompt=DEFAULT_NEGATIVE_PROMPT,
29 frame_rate=FRAME_RATE,
30 guidance_scale=1.0,
31 audio_guidance_scale=1.0,
32 stg_scale=0.0,
33 audio_stg_scale=0.0,
34 modality_scale=1.0,
35 audio_modality_scale=1.0,
36 generator=generator,
37 return_dict=False,
38)
39
40stage_1_latents, audio_latents = pipe(
41 height=HEIGHT, width=WIDTH, num_frames=NUM_FRAMES,
42 sigmas=DISTILLED_SIGMA_VALUES, output_type="latent", **shared,
43)
44
45upsampled_latents = upsample_pipe(
46 latents=stage_1_latents, output_type="latent", return_dict=False
47)[0]
48
49# Stage 2 takes its size from the upsampled latents, so pass no height/width.
50video, audio = pipe(
51 num_frames=NUM_FRAMES,
52 sigmas=STAGE_2_DISTILLED_SIGMA_VALUES,
53 latents=upsampled_latents,
54 audio_latents=audio_latents,
55 noise_scale=STAGE_2_DISTILLED_SIGMA_VALUES[0],
56 output_type="np",
57 **shared,
58)
59
60encode_video(
61 video[0],
62 fps=int(FRAME_RATE),
63 output_path="output_i2v_two_stage.mp4",
64 audio=audio[0].float().cpu(),
65 audio_sample_rate=pipe.vocoder.config.output_sampling_rate,
66)num_frames % 8 == 1 (1, 9, 17, …, 121, …)1@article{hacohen2025ltx2,
2 title={LTX-2: Efficient Joint Audio-Visual Foundation Model},
3 author={HaCohen, Yoav and Brazowski, Benny and Chiprut, Nisan and Bitterman, Yaki and Kvochko, Andrew and Berkowitz, Avishai and Shalem, Daniel and Lifschitz, Daphna and Moshe, Dudu and Porat, Eitan and Richardson, Eitan and Guy Shiran and Itay Chachy and Jonathan Chetboun and Michael Finkelson and Michael Kupchick and Nir Zabari and Nitzan Guetta and Noa Kotler and Ofir Bibi and Ori Gordon and Poriya Panet and Roi Benita and Shahar Armon and Victor Kulikov and Yaron Inger and Yonatan Shiftan and Zeev Melumian and Zeev Farbman},
4 journal={arXiv preprint arXiv:2601.03233},
5 year={2026}
6}