What Are Sigma Schedules and Step Counts per Pipeline in LTX‑2?
Sigma schedules in LTX‑2 are 1‑D tensors of noise levels (σ values) that guide the diffusion process from noisy to clean latent representations, with step counts determining how many denoising iterations each pipeline performs.
In the Lightricks/LTX‑2 video generation framework, understanding sigma schedules and step counts is essential for tuning inference quality and speed. The codebase implements multiple schedule types tailored to different pipelines, from the adaptive LTX2Scheduler to handcrafted distilled schedules for accelerated generation.
How Sigma Schedules Work in LTX‑2
A sigma schedule defines the noise level at each step of the diffusion process. LTX‑2 uses σ (sigma) to represent the standard deviation of the noise added to latents. Higher σ means more noise; lower σ approaches a clean sample.
The framework provides three core schedule implementations as defined in ltx_core/components/schedulers.py:
- LTX2Scheduler – Linear-to-exponential schedule that adapts to token count
- LinearQuadraticScheduler – Alternative interpolation-based schedule
- BetaScheduler – Beta-distributed noise scheduling
Default LTX2 Schedule: Adaptive Noise Injection
The LTX2Scheduler.execute() method in ltx_core/components/schedulers.py generates the primary schedule used by most pipelines.
Key characteristics:
- Computes a linear-to-exponential decay curve
- Adapts schedule length based on latent tensor token count
- Optionally stretches final σ to match a configurable terminal value (default 0.1)
from ltx_core.components.schedulers import LTX2Scheduler
scheduler = LTX2Scheduler()
sigmas = scheduler.execute(
steps=30, # num_inference_steps
terminal_sigma=0.1 # final noise level
)
# Returns: 1-D tensor of 30+1 sigma values (including σ=0)
When no custom sigmas argument is provided, pipelines automatically invoke self._scheduler.execute(steps=num_inference_steps).
Distilled Sigma Schedules: Fixed 9-Step Acceleration
For distilled LoRA models, LTX‑2 provides hand-tuned sigma sequences in ltx_pipelines/utils/constants.py. These schedules trade some quality for dramatically faster inference.
Available distilled schedules
| Schedule | Source constant | Step count | Use case |
|---|---|---|---|
| Full distilled schedule | DISTILLED_SIGMAS |
9 | Standard distilled inference |
| Stage‑2 distilled schedule | STAGE_2_DISTILLED_SIGMAS |
Subset of 9 | Two-stage pipeline refinement |
| TDP distilled schedule | TDP_DISTILLED_SIGMAS |
3 | Multi-GPU tiled parallel inference |
# From ltx_pipelines/utils/constants.py
DISTILLED_SIGMAS = torch.tensor([
1.0, # Step 0: maximum noise
0.99375,
0.9875,
0.98125,
0.975,
0.909375,
0.725,
0.421875,
0.0 # Step 8: no noise (clean sample)
])
These values were empirically tuned for the distilled model checkpoints and typically override user-supplied step counts.
Step Count Defaults by Pipeline Configuration
The num_inference_steps parameter controls schedule length. LTX‑2 defines version-specific defaults in ltx_pipelines/utils/constants.py:
| Configuration | Default steps | Applies to |
|---|---|---|
PipelineParams (LTX‑2.0) |
40 | Legacy checkpoints |
LTX_2_3_PARAMS |
30 | LTX‑2.3 generation |
LTX_2_3_HQ_PARAMS |
15 | High-quality preset |
| Distilled pipelines | 9 (fixed schedule) | When distilled=True |
from dataclasses import dataclass, replace
from ltx_pipelines.utils.constants import PipelineParams, LTX_2_3_PARAMS
@dataclass(frozen=True)
class PipelineParams:
num_inference_steps: int = 40
# ... other params
# LTX-2.3 reduces steps for faster inference
LTX_2_3_PARAMS = replace(LTX_2_PARAMS, num_inference_steps=30)
# HQ preset uses even fewer steps
LTX_2_3_HQ_PARAMS = PipelineParams(num_inference_steps=15, ...)
Users override via --num_inference_steps CLI argument processed through resolve_cli_params().
Sigma Schedule Selection per Pipeline
Each pipeline in packages/ltx-pipelines/src/ltx_pipelines/ implements specific schedule selection logic:
TI2VidOneStagePipeline (single-stage text-to-video)
File: ltx_pipelines/ti2vid_one_stage.py
# Default behavior: LTX2Scheduler with user-specified steps
pipeline = TI2VidOneStagePipeline(model_paths=..., device='cuda')
video = pipeline(
prompt="A mountain landscape",
num_inference_steps=30, # Uses LTX2Scheduler.execute(steps=30)
)
# Override with custom schedule
video = pipeline(
prompt="A mountain landscape",
sigmas=torch.linspace(1.0, 0.0, 50), # Custom 50-step linear schedule
)
TI2VidTwoStagesPipeline (coarse-then-refine)
File: ltx_pipelines/ti2vid_two_stages.py
Two-stage pipelines allow independent schedule control:
| Stage | Default schedule | Override parameter |
|---|---|---|
| Stage 1 (coarse generation) | LTX2Scheduler.execute(steps=num_inference_steps) |
stage_1_sigmas |
| Stage 2 (distilled refinement) | STAGE_2_DISTILLED_SIGMAS |
stage_2_sigmas |
from ltx_pipelines.ti2vid_two_stages import TI2VidTwoStagesPipeline
from ltx_pipelines.utils.constants import DISTILLED_SIGMAS
pipeline = TI2VidTwoStagesPipeline(
model_paths=...,
distilled_lora=..., # Enables stage-2 distillation
device='cuda'
)
video = pipeline(
prompt="A futuristic robot",
num_inference_steps=40, # Stage 1: 40 steps with LTX2Scheduler
stage_1_sigmas=None, # Use default scheduler
stage_2_sigmas=DISTILLED_SIGMAS, # Stage 2: 9-step distilled schedule
)
Other Pipelines
- RetakePipeline, A2VidTwoStagePipeline, KeyframeInterpolationPipeline, HDRICLoraPipeline, DistilledPipeline – All follow the same pattern: use
LTX2Schedulerby default or switch toDISTILLED_SIGMASwhendistilled=Trueor customsigmasprovided.
Complete Usage Examples
Standard LTX‑2.3 generation with default schedule
from ltx_pipelines.ti2vid_one_stage import TI2VidOneStagePipeline
from ltx_pipelines.utils.constants import LTX_2_3_PARAMS
pipeline = TI2VidOneStagePipeline(
model_paths="/path/to/ltx-2.3",
loras=[],
device="cuda"
)
video, audio, tiling = pipeline(
prompt="A serene lake at dawn",
negative_prompt="blur, low quality",
seed=42,
height=720,
width=1280,
frame_rate=24.0,
num_inference_steps=LTX_2_3_PARAMS.num_inference_steps, # 30 steps
# No sigmas argument: uses LTX2Scheduler.execute(steps=30)
images=[],
)
Maximum quality with HQ preset (15 steps)
from ltx_pipelines.utils.constants import LTX_2_3_HQ_PARAMS
video = pipeline(
prompt="Crystal-clear ocean waves",
num_inference_steps=LTX_2_3_HQ_PARAMS.num_inference_steps, # 15 steps
# Optimized sigmas for quality at reduced step count
)
Two-stage with distilled acceleration
from ltx_pipelines.ti2vid_two_stages import TI2VidTwoStagesPipeline
from ltx_pipelines.utils.constants import DISTILLED_SIGMAS
pipeline = TI2VidTwoStagesPipeline(
model_paths=...,
distilled_lora="/path/to/distilled_lora.safetensors",
spatial_upsampler_path=...,
device="cuda"
)
video, audio, _, tiling = pipeline(
prompt="A cyberpunk street scene",
num_inference_steps=40, # Stage 1 steps
stage_2_sigmas=DISTILLED_SIGMAS, # Fixed 9-step stage 2
height=1080,
width=1920,
)
Key Source Files
| File | Purpose |
|---|---|
ltx_core/components/schedulers.py |
LTX2Scheduler, LinearQuadraticScheduler, BetaScheduler implementations |
ltx_pipelines/utils/constants.py |
DISTILLED_SIGMAS, STAGE_2_DISTILLED_SIGMAS, TDP_DISTILLED_SIGMAS, PipelineParams defaults |
ltx_pipelines/ti2vid_one_stage.py |
Single-stage pipeline schedule selection |
ltx_pipelines/ti2vid_two_stages.py |
Two-stage pipeline with independent stage schedules |
Summary
- Sigma schedules are 1-D tensors defining noise levels (σ) across diffusion steps, implemented in
ltx_core/components/schedulers.py - LTX2Scheduler provides adaptive linear-to-exponential schedules; distilled schedules in
ltx_pipelines/utils/constants.pyoffer fixed 9-step acceleration - Step counts default to 40 (LTX‑2.0), 30 (LTX‑2.3), or 15 (HQ preset), overridable via
num_inference_steps - Single-stage pipelines use
LTX2Schedulerunless customsigmasprovided - Two-stage pipelines support independent schedules: adaptive for stage 1, distilled for stage 2
Frequently Asked Questions
How do I use the 9-step distilled schedule in LTX‑2?
Pass DISTILLED_SIGMAS from ltx_pipelines/utils/constants.py to the sigmas or stage_2_sigmas parameter. For single-stage pipelines: pipeline(prompt=..., sigmas=DISTILLED_SIGMAS). For two-stage pipelines, this applies to stage 2 via stage_2_sigmas=DISTILLED_SIGMAS.
What happens if I set num_inference_steps=50 with a distilled model?
The distilled schedule (DISTILLED_SIGMAS) contains exactly 9 values. If you request 50 steps, LTX‑2 either stretches the 9-step schedule to 50 points or ignores num_inference_steps depending on the pipeline implementation. For true 50-step generation, omit distilled flags and use LTX2Scheduler with custom num_inference_steps.
Where does the terminal_sigma parameter affect generation?
terminal_sigma (default 0.1) controls the final noise level in LTX2Scheduler.execute(). It appears in ltx_core/components/schedulers.py and ensures the schedule terminates at the desired cleanliness rather than exactly zero, providing subtle control over generation fidelity.
Can I mix different schedules across pipeline stages?
Yes. TI2VidTwoStagesPipeline explicitly supports this via stage_1_sigmas and stage_2_sigmas parameters. Common configurations use the full LTX2Scheduler for coarse generation (stage 1) and STAGE_2_DISTILLED_SIGMAS or DISTILLED_SIGMAS for fast refinement (stage 2).
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →