Runs Lightricks LTX-2.3 (22B distilled two-stage, synchronized audio+video) natively on Apple Silicon via MLX.
|
"A golden retriever running through a sunny meadow" golden_retriever.mp4 |
"A city street at night with neon lights and rain" cyberpunk_city.mp4 |
|
"A rocket ship launching into space with flames" rocket_launch.mp4 |
"Ocean waves crashing on a beach at sunset" ocean_sunset.mp4 |
768x512, 65 frames (~2.7s at 24fps), 8 steps on Apple Silicon
# 1. Install
curl -LsSf https://astral.sh/uv/install.sh | sh
uv pip install -e .
# 2. Download weights with the HuggingFace CLI. `hf` ships with huggingface_hub
# (`uv pip install huggingface_hub` if you don't have it), or grab the files
# by hand from each model's "Files" tab on huggingface.co. Accept the Gemma
# license first: https://huggingface.co/google/gemma-3-12b-it
hf download Lightricks/LTX-2.3 ltx-2.3-22b-distilled-1.1.safetensors
hf download Lightricks/LTX-2.3 ltx-2.3-spatial-upscaler-x2-1.1.safetensors
hf download Lightricks/LTX-2.3 ltx-2.3-22b-distilled-lora-384-1.1.safetensors
hf download google/gemma-3-12b-it
# 3. Generate (auto-resolves the cached LTX-2.3 + Gemma weights from the HF cache)
ltx2mlx "A golden retriever running through a meadow"All weights live on HuggingFace. Fetch them with the hf CLI (it ships with
huggingface_hub - uv pip install huggingface_hub if you don't have it), or
download any file by hand from the model's "Files" tab. Downloaded files land in
the HuggingFace cache, which ltx2mlx resolves automatically.
LTX-2.3 (recommended) - Lightricks/LTX-2.3
| File | Size | Description |
|---|---|---|
ltx-2.3-22b-distilled-1.1.safetensors |
~46GB | 22B distilled, 8 steps (default) |
ltx-2.3-22b-dev.safetensors |
~46GB | 22B dev, higher quality (more steps) |
ltx-2.3-spatial-upscaler-x2-1.1.safetensors |
~950MB | 2x spatial upscaler (two-stage) |
ltx-2.3-22b-distilled-lora-384-1.1.safetensors |
~1.5GB | distilled two-stage LoRA |
hf download Lightricks/LTX-2.3 ltx-2.3-22b-distilled-1.1.safetensors
hf download Lightricks/LTX-2.3 ltx-2.3-spatial-upscaler-x2-1.1.safetensors
hf download Lightricks/LTX-2.3 ltx-2.3-22b-distilled-lora-384-1.1.safetensorsText Encoder: google/gemma-3-12b-it
(~25GB, gated) - accept the license, then hf download google/gemma-3-12b-it.
| Pipeline | Speed | Quality | Best For |
|---|---|---|---|
text-to-video |
Medium | Good | Basic generation |
distilled |
Fast | Good | No-CFG two-stage quick iteration |
one-stage |
Slow | High | Quality priority or single-pass distilled |
two-stage |
Medium | High | High resolution (512p+) |
# Fast two-stage distilled preview
ltx2mlx "Your prompt" --pipeline distilled
# Existing single-pass distilled path
ltx2mlx "Your prompt" --pipeline one-stage --model-variant distilled
# High quality dev-style sampling
ltx2mlx "Your prompt" --pipeline one-stage --steps 20 --cfg 5.0
# High resolution
ltx2mlx "Your prompt" --pipeline two-stage --height 768 --width 1024See Pipelines Guide for all 6 pipelines and options.
Typical end-to-end times on M1 Max, 64 GB (BF16, distilled two-stage, audio on):
| Resolution | Length | Total |
|---|---|---|
| 768x448 | 2s | ~1.7 min |
| 576x320 | 30s | ~9 min |
| 768x448 | 30s | ~20 min |
| 1024x576 | 20s | ~24 min |
Denoise dominates; VAE decode + encode is the bulk of the rest, and VSR (4x upscale) adds roughly 10-15%. Full per-stage breakdown across resolutions and lengths in docs/PERFORMANCE.md.
- Use default BF16 compute - override with
--dtype float16or--dtype float32only for experiments - Audio follows compute dtype where safe - LTX-2.3 Vocoder+BWE keeps a scoped FP32 island matching Lightricks' precision caution
- VAE decode uses native Conv3d + zero padding -
--vae-tiling autopicks a RAM-aware native tile plan.--vae-tilingremains a user knob (the--vae-decoderflag was removed -- native Conv3d is the only decoder);--vae-spatial-paddingwas retired 2026-05-23 (onlyzerois supported;reflectlost in every A/B and was dropped) - Default canvas is 512x288 - pass
--height/--widthonly when you want to leave the fast 16:9 preview size - Default outputs are timestamped - without
--output, runs save toDIFFUSERS_OUTPUT_DIR, thenOUTPUT_DIR, thenoutputs/asltx_YYYYmmdd_HHMMSS.mp4; use--output-prefixto name a run family - Pick the encode tier by destination -
--encode-tier {web,default,hq,export,reference}(default:default) selects codec/container/audio together.webis libx264 + AAC for universal browser compat;defaultis hardware HEVC + ALAC for Apple/modern browsers;hqis software HEVC 4:4:4;exportandreferenceare ProRes (.mov) for NLE / mastering workflows - Converted-weight cache defaults to auto - the first run builds reusable transformer, connector, video VAE, audio VAE, and vocoder cache files; pass
--weights-cache offonly when you specifically want direct stock-weight loading - Keep
--weightsas the bundle path - advanced runs can override individual subsystems with--transformer-weights,--connector-weights,--vae-weights,--audio-vae-weights,--vocoder-weights, and--config-weights - MLX allocator cache defaults to 1GB - this keeps unified-memory pressure lower without needing a routine
--mlx-cache-limit-gb 1 - Same-math video layouts default on - FF
project_in/project_outand attentionto_outpretranspose are enabled by default; pass--video-ff-layout off --video-attn-layout offfor baseline A/Bs - Use
--stream-transformerfor the block-streaming preset - it expands to 16 resident blocks, resident-group compile, and 4-block compile groups - Save latents for decode-only tests - add
--save-latentsto write an NPZ sidecar next to the requested output; distilled two-stage runs include both stage-1 and stage-2 latents plus the existing final-latent keys - Save text conditioning for denoise A/Bs - add
--save-text-embeddingsto write the positive/negative AV text encoder outputs as an_text.npzsidecar that can be reused with--embedding - Save run metadata for reproducibility - add
--save-run-logto write params, argv, outputs, and timings as an_run.jsonsidecar, starting before the long generation step - Save the lossless audio next to the encoded video - add
--save-audio-sidecarto write the vocoder's raw WAV alongside the output (useful for A/B against the codec-compressed audio inside the container) - Save all reproducibility sidecars - add
--save-all-sidecarsto turn on latents, text conditioning, run metadata, and the audio WAV sidecar together - Use
--pipeline distilled- Fast no-CFG two-stage inference (8+3 steps) - Use
--stream-transformerbefore--low-memory- the streaming preset is the cleaner constrained-memory path for modern distilled runs;--low-memoryremains an emergency fallback - Reduce resolution - Start with
--height 256 --width 384for testing - Research denoise speed carefully -
--video-ff-quantize project_out:mxfp8can A/B weight-only quantized video FF projections, and--video-ff-quantize-layers 40-47narrows it to selected layers; this is non-canonical and needs quality checks - A/B same-math layout baselines - use
--video-ff-layout off --video-attn-layout offwhen you want to compare against untransposed stock weight layout - Track denoise-speed experiments - see Performance Optimization Notes for MLX runtime optimization ideas and benchmark rules
See Usage Guide for memory requirements and benchmarks.
Focus on detailed, chronological descriptions. Include movements, appearances, camera angles, and environment details in a flowing paragraph. Keep under 200 words.
Structure your prompts:
- Main action in a single sentence
- Specific movements and gestures
- Character/object appearances
- Background and environment
- Camera angles and movements
- Lighting and colors
See Lightricks prompting guide for more tips.
- macOS with Apple Silicon (developed and tested on M1 Max, 64 GB)
- ~25GB RAM (64GB recommended for high resolution)
- ffmpeg (optional; only for non-default/software encode tiers):
brew install ffmpeg
- Usage Guide - Options, examples, troubleshooting
- Pipelines - All 6 pipelines explained
- Architecture - Model architecture details
- Performance Optimization Notes - Denoise-speed benchmark ideas and implementation candidates
- Parity Testing - PyTorch/MLX parity verification
Research and educational use. See LTX-2 for model licensing.
- Lightricks for LTX-2
- Apple MLX Team for MLX
- Google for Gemma 3