Apple silicon
An M-series Mac running macOS 15 or newer. Use native arm64 Python, not a Rosetta terminal.
Hy-Nomas / Apple silicon / research preview
Download the optimized MLX runner, install the pinned weights, and generate your first scene. The same implementation tested on our Mac Mini and Mac Studio.
01 / Requirements
An M-series Mac running macOS 15 or newer. Use native arm64 Python, not a Rosetta terminal.
The 3-second path was verified on a 16 GB M4 Mini. Longer continuations need more memory; the camera experiment peaked at 17.84 GB on a 96 GB Studio.
Plan for approximately 27.14 GB of model downloads, the Python environment, caches, and generated video.
Install the native macOS version before setup. The package creates its own environment with pinned dependencies.
02 / First scene
Run these commands in Terminal. Model downloads happen once; generated files stay on your Mac.
Download the ZIP above and double-click it in Finder. In Terminal, open the extracted folder. If you use the default Downloads folder:
cd ~/Downloads/hynomas-mlx-0.1.0The archive contains the runner, example prompts, installation scripts, licence notices, and a file manifest. It contains no model weights.
Check that Python 3.12 is available, then run setup. It creates a local environment, downloads the pinned original model and text encoder, and verifies the checkpoint hashes. The first download takes time.
python3.12 --version
./setup.shIf Python is missing, install Python 3.12 from python.org or use “brew install [email protected]” if you already use Homebrew. Re-running setup can resume the model downloads.
Python for macOS ↗Start with the structured fox prompt used to verify the implementation. It produces 72 frames at 1280 × 704, played at 24 fps, using eight denoising steps.
./run.sh --prompts-file prompts/fox-quality.json --output outputs/fox.mp4
open outputs/fox.mp4Watch the Terminal progress until generation and decoding finish. This is offline generation: a three-second video takes minutes to produce.
Describe one subject, a place, a simple action, and the camera. Keep the default settings for your first comparison.
./run.sh \
--prompt "Gentle waves roll onto a quiet sandy beach in soft morning light. A stationary wide camera, natural colours." \
--seed 42 \
--output outputs/my-scene.mp4Use “./run.sh --help” for all options. “--frames 120” requests five seconds at 24 fps, with higher time and memory requirements. Use “--force” to regenerate an already cached configuration.
03 / Measured performance
1280 × 704, 24 fps, eight diffusion steps, seed 42, original INT8/FP8 source weights. Results depend on hardware, background activity, scene length and cache state. The matched three-second Studio run was 4.63× faster.
| Machine | Memory | Video | Generation |
|---|---|---|---|
| M4 Mac MiniCached text; fresh generation and decoding | 16 GB | 3 sec | 19m 51.41s |
| M3 Ultra Mac StudioSame prompt, seed and cached text as Mini | 96 GB | 3 sec | 4m 17.39s |
| M3 Ultra Mac StudioSeparate run, including fresh text encoding | 96 GB | 5 sec | 7m 57.01s |
The quality path reads the released INT8 generation weights and FP8 decoder weights, reconstructing BF16 matrices when needed. It adds no further 4-bit quantization.
Fused weight reconstruction, compiled normalization and position encoding reduce overhead. Safe attention fast paths and a bounded loader reduce unnecessary work.
Text encoding, video diffusion and pixel decoding run in separate processes. The default lets MLX choose its memory limit. Short clips fit on the tested 16 GB Mini.
The Mini optimization reduced time by 19.04% and produced a byte-identical MP4 in the controlled test. Between Mini and Studio, all latents and 18 saved pre-encoding frames matched exactly; encoded MP4s differed slightly. Motion and prompt following still have model limitations.
04 / Experimental controls
The package includes an experimental camera-conditioning harness. We tested pre-set W then D inputs with a prompt change at three seconds, retaining the scene history. The six-second clip took 10m 41.50s on the Studio. The fox and setting continued coherently, but the requested stop-and-look action was not followed; a distinct D response was not established. Live keypress-to-frame interaction is not implemented.
brew install ffmpeg
ffmpeg -version
ffprobe -version
.venv/bin/python -m pip install --no-deps -r experiments/camera_demo/requirements-camera.txt
.venv/bin/python experiments/camera_demo/run_demo.py \
--frames 72 --keys w,d --label camera-demoRead experiments/camera_demo/README.md first. The optional harness requires FFmpeg and FFprobe on PATH; the commands above use Homebrew. This test peaked at 17.84 GB of MLX memory. Allow 32 GB or more for headroom; it was actually tested on a 96 GB Studio.
See the test in the film ↗05 / Troubleshooting
Install Python 3.12, reopen Terminal, and confirm “python3.12 --version” works before running setup again.
Check free space and connectivity, then run “./setup.sh” again. Keep the models folder so the downloader can reuse completed files.
Close other memory-heavy apps and start with the default 72-frame single segment. Camera continuations retain more state. Keep the models folder; retry with “--force” if you need a fresh run.
Try a single subject and a simple action. The port preserves the tested model path, but motion, fine detail, camera response and prompt following remain imperfect.
06 / Provenance
This is an independent LintLabs MLX port of Tencent Hy-Nomas, distributed as a research preview. The ZIP includes source, modification notes, upstream notices and pinned model revisions. Setup downloads weights from their existing Hugging Face repositories.
Review the bundled licences before use. Tencent’s top-level Apache-2.0 licence includes third-party exceptions. The upstream PixelUMM notice identifies its released weights and derivatives as subject to NVIDIA’s One-Way Noncommercial licence. Code availability does not grant unrestricted commercial use of every model component.