Spaces:
Running on Zero
Running on Zero
| title: LTX-2.5 | |
| emoji: ⚗️ | |
| colorFrom: green | |
| colorTo: blue | |
| sdk: gradio | |
| sdk_version: 6.13.0 | |
| app_file: app.py | |
| python_version: "3.12" | |
| pinned: false | |
| private: true | |
| short_description: LTX-2.5 distilled two-stage | |
| models: | |
| - Lightricks/LTX-2.5-Diffusers | |
| # LTX-2.5 · distilled two-stage · **diffusers** | |
| LTX-2.5 distilled, run end to end through **upstream `diffusers`** (merged in | |
| [PR #14447](https://github.com/huggingface/diffusers/pull/14447); this Space pins the merge commit). | |
| The recipe follows the code snippets on | |
| [`Lightricks/LTX-2.5-Diffusers`](https://huggingface.co/Lightricks/LTX-2.5-Diffusers), which are the | |
| source of truth for this demo. | |
| ## What it runs | |
| | | | | |
| |---|---| | |
| | **Weights** | [`Lightricks/LTX-2.5-Diffusers`](https://huggingface.co/Lightricks/LTX-2.5-Diffusers) — LTX-2.5 distilled in diffusers format. `transformer/` is the distilled DiT (`transformer_full/` in the same repo is SFT and excluded from the snapshot). Override with the `LTX25_MODEL_ID` variable | | |
| | **Code** | `diffusers` main @ `7564fb01` (the PR #14447 merge commit). Not a PyPI release | | |
| | **Video decoder** | conv VAE decoder by default; switchable to LTX-2.5's own diffusion decoder (`LTX2VideoDiffusionDecodePipeline` + the Hub-fetched NATTEN kernel, tiled) | | |
| | **Upsampler** | `ltx-2.3-spatial-upscaler-x2-1.1`, in the model repo's `latent_upsampler/` subfolder | | |
| | **Prompt enhancer** | the shared [`LTX-2.4-Prompt-Enhancer`](https://huggingface.co/spaces/diffusers-internal-dev/LTX-2.4-Prompt-Enhancer) Space over `gradio_client`, keeping the 12B enhancer off this Space's memory budget | | |
| ## The recipe | |
| Two-stage distilled generation, exactly as on the model card: | |
| 1. **Stage 1** — `LTX2Pipeline` at **half** the target resolution, 8 steps on | |
| `DISTILLED_SIGMA_VALUES`, unguided, `output_type="latent"`. | |
| 2. **Upsample** — `LTX2LatentUpsamplePipeline`, ×2 spatial, no temporal. | |
| 3. **Stage 2** — 3 steps on `STAGE_2_DISTILLED_SIGMA_VALUES`, seeded from the upsampled video latent | |
| *and* the stage-1 audio latent at `noise_scale = STAGE_2_DISTILLED_SIGMA_VALUES[0]`; size taken | |
| from the latents. | |
| 4. **Decode** — conv VAE (tiled) by default, or `LTX2VideoDiffusionDecodePipeline(denormalize=False)` | |
| plus a by-hand `audio_vae` + `vocoder` audio finish. | |
| Unguided throughout (`guidance_scale = audio_guidance_scale = 1.0`): distillation folds guidance into | |
| the weights. One `torch.Generator` threads through both stages so stage 2 continues the noise stream. | |
| Image conditioning is center-cropped to the target aspect (smaller side 832) and re-compressed by the | |
| pipeline's built-in `image_crf` (18 for LTX-2.5). Auto length uses the merged `num_frames=None` + | |
| `max_seconds` duration-head API, capped at 15 s for ZeroGPU quota reasons. | |