LTX-2.5 text-to-video locally on Apple Silicon in one command — with audio, no ComfyUI/CUDA. 16x faster than PyTorch-on-MPS (53s vs 853s) via macOS 26 watchdog + eval-guard fixes. A developer has released a clone-and-run launcher that runs LTX-2.5 text-to-video generation locally on Apple Silicon in a single command, with audio support and no need for ComfyUI or CUDA. The launcher achieves a 16x speedup over PyTorch-on-MPS (53 seconds vs 853 seconds) by applying macOS 26 watchdog and eval-guard fixes. It bootstraps a pinned MLX runtime and downloads a ~36 GiB quantized weight subset from HuggingFace. | /bin/zsh | | LTX-2.5 text-to-video on Apple Silicon — clone-and-run launcher. | | | | First run bootstraps everything: clones the pinned MLX runtime, lets uv | | create the Python env, and downloads the ~36 GiB q8 weight subset from | | HuggingFace ungated, no login . Subsequent runs go straight to generation. | | | | Usage: | | ./generate "A sailboat crossing a calm sea at golden hour" | | ./generate "prompt" --width 768 --height 512 --frames 121 --output clip.mp4 | | | | Constraints: width/height divisible by 32, frames = 8n+1 33, 65, 97, 121... . | | set -euo pipefail | | | | ROOT="$ cd "$ dirname "$0" " && pwd " | | RUNTIME="$ROOT/.runtime" | | WEIGHTS="$ROOT/models/ltx-2.5-mlx-q8" | | | | PROMPT="${1:?usage: generate \"prompt\" ltx-2-mlx args... }" | | shift | | | | The MLX runtime with LTX-2.5 support, pinned to a validated commit. | | RUNTIME REPO="https://github.com/MrMoferFRAN/ltx-2-mlx.git" | | RUNTIME COMMIT="57952288076766abe27dda3a774b2c24f7346977" | | WEIGHTS REPO="MrMofer/ltx-2.5-mlx-q8" | | | | for tool in git uv ffmpeg; do | | command -v "$tool" /dev/null || { echo "error: '$tool' is required — install it with: brew install $tool" &2; exit 1; } | | done | | | | if -d "$RUNTIME" ; then | | echo " bootstrap Cloning MLX runtime pinned $RUNTIME COMMIT ..." | | git clone --quiet "$RUNTIME REPO" "$RUNTIME" | | git -C "$RUNTIME" checkout --quiet "$RUNTIME COMMIT" | | fi | | | | if -f "$WEIGHTS/transformer-distilled.safetensors" ; then | | echo " bootstrap Downloading LTX-2.5 q8 weights ~36 GiB, one time ..." | | echo " License: LTX-2.x Community License — https://huggingface.co/$WEIGHTS REPO" | | uv run --project "$RUNTIME" python - "$WEIGHTS REPO" "$WEIGHTS" <<'PY' | | import sys | | from huggingface hub import snapshot download | | | | repo, dest = sys.argv 1 , sys.argv 2 | | Distilled-pipeline subset only: skips the dev transformer and the stage-2 | | LoRA needed only for CFG modes , saving ~27 GiB. | | snapshot download | | repo, | | local dir=dest, | | allow patterns= | | "transformer-distilled.safetensors", | | "connector.safetensors", | | "text encoder/ ", | | "vae encoder.safetensors", | | "vae decoder.safetensors", | | "audio vae.safetensors", | | "vocoder.safetensors", | | "spatial upscaler x2.safetensors", | | "temporal upscaler x2.safetensors", | | "duration head.safetensors", | | " .json", | | "LICENSE.md", | | , | | | | PY | | fi | | | | AGX RELAX CDM CTXSTORE TIMEOUT works around the macOS 26 + MLX 0.31 GPU | | watchdog stall dgrauet/ltx-2-mlx 75 ; the per-step cost is otherwise | | 25-130x higher. With the watchdog relaxed, the runtime's per-block eval | | guards are redundant on =32 GB machines, so they are disabled too. | | exec env \ | | AGX RELAX CDM CTXSTORE TIMEOUT=1 \ | | LTX2 DIT EVAL EVERY=0 \ | | LTX2 GEMMA EVAL EVERY=0 \ | | uv run --project "$RUNTIME" ltx-2-mlx generate \ | | --model "$WEIGHTS" \ | | --distilled --frame-rate 24 \ | | --prompt "$PROMPT" \ | | "$@" |