# LTX-2 Pipelines High-level pipeline implementations for generating audio-video content with Lightricks' **LTX-2** model. This package provides ready-to-use pipelines for text-to-video, image-to-video, video-to-video, and keyframe interpolation tasks. Pipelines are built using building blocks from [`ltx-core`](../ltx-core/) (schedulers, guiders, noisers, patchifiers) and handle the complete inference flow including model loading, encoding, decoding, and file I/O. --- ## 📋 Overview LTX-2 Pipelines provides production-ready implementations that abstract away the complexity of the diffusion process, model loading, and memory management. Each pipeline is optimized for specific use cases and offers different trade-offs between speed, quality, and memory usage. **Key Features:** - 🎬 **Multiple Pipeline Types**: Text-to-video, image-to-video, video-to-video, and keyframe interpolation - ⚡ **Optimized Performance**: Support for FP8 transformers, gradient estimation, and memory optimization - 🎯 **Production Ready**: Two-stage pipelines for best quality output - 🔧 **LoRA Support**: Easy integration with trained LoRA adapters - 📦 **Self-Contained**: Handles model loading, encoding, decoding, and file I/O - 🚀 **CLI Support**: All pipelines can be run as command-line scripts --- ## 🚀 Quick Start `ltx-pipelines` provides ready-made inference pipelines for text-to-video, image-to-video, video-to-video, and keyframe interpolation. Built using building blocks from [`ltx-core`](../ltx-core/), these pipelines handle the complete inference flow including model loading, encoding, decoding, and file I/O. ## 🔧 Installation ```bash # From the repository root uv sync --frozen # Or install as a package pip install -e packages/ltx-pipelines ``` ### Running Pipelines All pipelines can be run directly from the command line. Each pipeline module is executable: ```bash # Run a pipeline (example: two-stage text-to-video) python -m ltx_pipelines.ti2vid_two_stages \ --checkpoint-path path/to/checkpoint.safetensors \ --distilled-lora-path path/to/distilled_lora.safetensors \ --spatial-upsampler-path path/to/upsampler.safetensors \ --gemma-root path/to/gemma \ --prompt "A beautiful sunset over the ocean" \ --output-path output.mp4 # View all available options for any pipeline python -m ltx_pipelines.ti2vid_two_stages --help ``` Available pipeline modules: - `ltx_pipelines.ti2vid_two_stages` - Two-stage text-to-video (recommended) - `ltx_pipelines.ti2vid_one_stage` - Single-stage text-to-video - `ltx_pipelines.distilled` - Fast distilled pipeline - `ltx_pipelines.ic_lora` - Video-to-video with IC-LoRA - `ltx_pipelines.keyframe_interpolation` - Keyframe interpolation Use `--help` with any pipeline module to see all available options and parameters. --- ## 🎯 Pipeline Selection Guide ### Quick Decision Tree ```text Do you need to condition on existing images/videos? ├─ YES → Do you have reference videos for video-to-video? │ ├─ YES → Use ICLoraPipeline │ └─ NO → Do you have keyframe images to interpolate? │ ├─ YES → Use KeyframeInterpolationPipeline │ └─ NO → Use ICLoraPipeline (image conditioning only) │ └─ NO → Text-to-video only ├─ Do you need best quality? │ └─ YES → Use TI2VidTwoStagesPipeline (recommended for production) │ └─ Do you need fastest inference? └─ YES → Use DistilledPipeline (with 8 predefined sigmas) ``` > **Note:** [`TI2VidOneStagePipeline`](src/ltx_pipelines/ti2vid_one_stage.py) is primarily for educational purposes. For best quality, use two-stage pipelines ([`TI2VidTwoStagesPipeline`](src/ltx_pipelines/ti2vid_two_stages.py), [`ICLoraPipeline`](src/ltx_pipelines/ic_lora.py), [`KeyframeInterpolationPipeline`](src/ltx_pipelines/keyframe_interpolation.py), or [`DistilledPipeline`](src/ltx_pipelines/distilled.py)). ### Features Comparison | Pipeline | Stages | CFG | Upsampling | Conditioning | Best For | | -------- | ------ | --- | ---------- | ------------- | -------- | | **TI2VidTwoStagesPipeline** | 2 | ✅ | ✅ | Image | **Production quality** (recommended) | | **TI2VidOneStagePipeline** | 1 | ✅ | ❌ | Image | Educational, prototyping | | **DistilledPipeline** | 2 | ❌ | ✅ | Image | Fastest inference (8 sigmas) | | **ICLoraPipeline** | 2 | ✅ | ✅ | Image + Video | Video-to-video transformations | | **KeyframeInterpolationPipeline** | 2 | ✅ | ✅ | Keyframes | Animation, interpolation | --- ## 📦 Available Pipelines ### 1. TI2VidTwoStagesPipeline **Best for:** High-quality text-to-video generation with upsampling. **Recommended for production use.** **Source**: [`src/ltx_pipelines/ti2vid_two_stages.py`](src/ltx_pipelines/ti2vid_two_stages.py) Two-stage generation: Stage 1 generates low-resolution video with CFG guidance, Stage 2 upsamples to 2x resolution with distilled LoRA refinement. Supports image conditioning. Highest quality output, slower than one-stage but significantly better quality. **Use when:** Production-quality video generation, higher resolution needed, quality over speed, text-to-video with image conditioning. --- ### 2. TI2VidOneStagePipeline **Best for:** Educational purposes and quick prototyping. **Source**: [`src/ltx_pipelines/ti2vid_one_stage.py`](src/ltx_pipelines/ti2vid_one_stage.py) > **⚠️ Important:** This pipeline is primarily for educational purposes. For production-quality results, use `TI2VidTwoStagesPipeline` or other two-stage pipelines. Single-stage generation (no upsampling) with CFG guidance and image conditioning support. Faster inference but lower resolution output (typically 512x768). **Use when:** Learning how the pipeline works, quick prototyping, testing, or when high resolution is not needed. --- ### 3. DistilledPipeline **Best for:** Fastest inference with good quality using a distilled model with predefined sigma schedule. **Source**: [`src/ltx_pipelines/distilled.py`](src/ltx_pipelines/distilled.py) Two-stage generation with 8 predefined sigmas (8 steps in stage 1, 4 steps in stage 2). No CFG guidance required. Fastest inference among all pipelines. Supports image conditioning. Requires spatial upsampler. **Use when:** Fastest inference is critical, batch processing many videos, or when you have a distilled model checkpoint. --- ### 4. ICLoraPipeline **Best for:** Video-to-video and image-to-video transformations using IC-LoRA. **Source**: [`src/ltx_pipelines/ic_lora.py`](src/ltx_pipelines/ic_lora.py) Two-stage generation with IC-LoRA support. Can condition on reference videos (video-to-video) or images at specific frames. CFG guidance in stage 1, upsampling in stage 2. Requires IC-LoRA trained model. **Use when:** Video-to-video transformations, image-to-video with strong control, or when you have reference videos to guide generation. --- ### 5. KeyframeInterpolationPipeline **Best for:** Generating videos by interpolating between keyframe images. **Source**: [`src/ltx_pipelines/keyframe_interpolation.py`](src/ltx_pipelines/keyframe_interpolation.py) Two-stage generation with keyframe interpolation. Uses guiding latents (additive conditioning) instead of replacing latents for smoother transitions. CFG guidance in stage 1, upsampling in stage 2. **Use when:** You have keyframe images and want to interpolate between them, creating smooth transitions, or animation/motion interpolation tasks. --- ## 🎨 Conditioning Types Pipelines use different conditioning methods from [`ltx-core`](../ltx-core/) for controlling generation. See the [ltx-core conditioning documentation](../ltx-core/README.md#conditioning--control) for details. ### Image Conditioning All pipelines support image conditioning, but with different methods: - **Replacing Latents** ([`image_conditionings_by_replacing_latent`](src/ltx_pipelines/utils/helpers.py)): - Used by: `TI2VidOneStagePipeline`, `TI2VidTwoStagesPipeline`, `DistilledPipeline`, `ICLoraPipeline` - Replaces the latent at a specific frame with the encoded image - Strong control over specific frames - **Guiding Latents** ([`image_conditionings_by_adding_guiding_latent`](src/ltx_pipelines/utils/helpers.py)): - Used by: `KeyframeInterpolationPipeline` - Adds the image as a guiding signal rather than replacing - Better for smooth interpolation between keyframes ### Video Conditioning - **Video Conditioning** (ICLoraPipeline only): - Conditions on entire reference videos - Useful for video-to-video transformations - Uses `VideoConditionByKeyframeIndex` from [`ltx-core`](../ltx-core/) --- ## ⚡ Optimization Tips ### Memory Optimization **FP8 Transformer (Lower Memory Footprint):** For smaller GPU memory footprint, use the `enable-fp8` flag and use the `PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True` environment variable. **CLI:** ```bash PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True python -m ltx_pipelines.ti2vid_one_stage --enable-fp8 --checkpoint-path=... ``` **Programmatically:** When authoring custom scripts, pass the `fp8transformer` flag to pipeline classes or construct your own by analogy: ```python pipeline = TI2VidTwoStagesPipeline( checkpoint_path=ltx_model_path, distilled_lora_path=distilled_lora_path, distilled_lora_strength=0.6, spatial_upsampler_path=upsampler_path, gemma_root=gemma_root_path, loras=[], fp8transformer=True, ) pipeline(...) ``` You still need to use `PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True` when launching: ```bash PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True python my_denoising_pipeline.py ``` **Memory Cleanup Between Stages:** By default, pipelines clean GPU memory (especially transformer weights) between stages. If you have enough memory, you can skip this cleanup to reduce running time: ```python # In pipeline implementations, memory cleanup happens automatically # between stages. For custom pipelines, you can skip: # utils.cleanup_memory() # Comment out if you have enough VRAM ``` ### Denoising Loop Optimization **Gradient Estimation Denoising Loop:** Instead of the standard Euler denoising loop, you can use gradient estimation for fewer steps (~20-30 instead of 40): ```python from ltx_pipelines.utils.helpers import gradient_estimating_euler_denoising_loop # Use gradient estimation denoising loop def denoising_loop(sigmas, video_state, audio_state, stepper): return gradient_estimating_euler_denoising_loop( sigmas=sigmas, video_state=video_state, audio_state=audio_state, stepper=stepper, denoise_fn=your_denoise_function, ge_gamma=2.0, # Gradient estimation coefficient ) ``` This allows you to use **20-30 steps instead of 40** while maintaining quality. The gradient estimation function is available in [`pipeline_utils.py`](src/ltx_pipelines/utils/helpers.py). --- ## 🔧 Requirements - **LTX-2 Model Checkpoint** - Local `.safetensors` file - **Gemma Text Encoder** - Local Gemma model directory - **Spatial Upscaler** - Required for two-stage pipelines (except one-stage) - **Distilled LoRA** - Required for two-stage pipelines (except one-stage and distilled) --- ## 📖 Example: Image-to-Video ```python from ltx_pipelines.ti2vid_two_stages import TI2VidTwoStagesPipeline pipeline = TI2VidTwoStagesPipeline( checkpoint_path="/path/to/checkpoint.safetensors", distilled_lora_path="/path/to/distilled_lora.safetensors", spatial_upsampler_path="/path/to/upsampler.safetensors", gemma_root="/path/to/gemma", loras=[], ) # Generate video from image pipeline( prompt="A serene landscape with mountains in the background", output_path="output.mp4", seed=42, height=512, width=768, num_frames=121, frame_rate=25.0, num_inference_steps=40, cfg_guidance_scale=3.0, images=[("input_image.jpg", 0, 1.0)], # Image at frame 0, strength 1.0 ) ``` --- ## 🔗 Related Projects - **[LTX-Core](../ltx-core/)** - Core model implementation and inference components (schedulers, guiders, noisers, patchifiers) - **[LTX-Trainer](../ltx-trainer/)** - Training and fine-tuning tools