Skip to content

Add FastH3 Preview v1 Dense-DataFree MLX to Apple Silicon video gen #5860

Description

@atomanticagent

Context

FastVideo shipped packed MLX DiT checkpoints for FastH3 Preview v1 Dense / Data-Free on 2026-09-01. These skip scripts/checkpoint_conversion/convert_minimax_h3_mlx.py. Hugging Face cards say they "avoid the local conversion step."

This is not the VSA-DataFree CUDA checkpoint tracked in #5351. That watch stays CUDA/VSA. This issue is the Dense MLX packed path that now runs on Apple Silicon.

Default for a 128 GB MacBook Pro: INT6 (~15.41 GiB DiT). INT8 and INT4 are optional. Upstream validated on an M4 Max with 36 GB; 128 GB has headroom.

Caveats to keep explicit in catalog copy and disclosures:

  • Dense / Data-Free Preview v1 only. No --vsa.
  • The Apple Silicon install guide still documents the old convert path. HF cards are the no-convert recipe.
  • Two downloads: shared H3 components (tokenizer, Qwen3-VL, VAEs) plus the MLX DiT pack.

Decision

Extend the existing fastvideo BYOV runtime (do not add a new runtime, and do not reuse minimax_h3 / PipeNetwork or minimax_h3_cuda). Add FastH3 Dense-DataFree MLX as catalog entries in the MLX video bucket, same shape as FastMetal in migration 314.

Recommended default row: INT6. Also ship INT8 and INT4. Text-to-video-with-audio (T2VA). Opt-in --fast / --fast-spatial later if the UI already has a speed/quality toggle; do not block first ship on that.

Install stays user-triggered (INSTALL_FASTVIDEO). No cold-bootstrap downloads. Cache-only once weights are on disk.

Weights

Upstream run (INT6):

python examples/inference/basic/mlx_fasth3.py \
  --model-root ./FastH3-Preview-v1-Dense-DataFree \
  --mlx-checkpoint ./FastH3-MLX-INT6 \
  --prompt '(S1) A presenter says <d>[English] Fast H3 runs on Apple silicon.</d>' \
  --height 480 --width 832 --num-frames 124 --steps 4 --seed 2026 \
  --output-path ./outputs/fasth3_int6.mp4

Implementation seams

Follow the FastMetal pattern (scripts/migrations/314-fastvideo-mlx-models.js, runtime: 'fastvideo'):

  • scripts/generate_fastvideo.py — teach it FastH3: call mlx_fasth3.py with --model-root + --mlx-checkpoint (two local dirs), 4-step schedule, 480×832 / 124 frames defaults. Keep FastMetal on mlx_wan_prompt_to_video.py / mlx_wan22_generate.py.
  • server/services/videoGen/renderArgs.js — argv for the new model ids.
  • server/services/videoGen/runtimes.js — keep using fastvideo; FastH3 is another model on that runtime, not a new BYOV id.
  • data.reference/media-models.json + a new migration (next id after the current last) seeding MLX-bucket rows (fasth3_dense_datafree_mlx_int6 etc.).
  • server/lib/mediaModels.js, server/lib/videoDisclosure.js, server/lib/huggingfaceModel.js — license, T2VA disclosure, HF auto-detect for the two-repo layout.
  • scripts/setup-image-video.sh — only if the FastVideo install block needs another extra; otherwise leave install as-is.

Do not invoke convert_minimax_h3_mlx.py in PortOS. Do not add these rows to the CUDA bucket. Do not claim VSA or FL2VA/Ref2VA.

Acceptance

  • Video Gen on Apple Silicon lists FastH3 Dense-DataFree MLX (INT6 default; INT8/INT4 available).
  • Install/download is explicit; first render does not convert DiT locally.
  • A 4-step T2VA render writes a muxed mp4 via the existing FastVideo venv.
  • FastMetal rows and MiniMax H3 runtimes are unchanged.
  • Catalog copy states Dense-only / no VSA, MiniMax H3 Community License, and the two-download layout.
  • Tests: migration idempotency + argv builder for the new ids (same style as 314).

References

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions