← Hy-Nomas playground & film

Hy-Nomas / Apple silicon / research preview

A world on your Mac.

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

Before you start.

Apple silicon

An M-series Mac running macOS 15 or newer. Use native arm64 Python, not a Rosetta terminal.

16 GB memory or more

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.

60 GB free disk

Plan for approximately 27.14 GB of model downloads, the Python environment, caches, and generated video.

Python 3.12

Install the native macOS version before setup. The package creates its own environment with pinned dependencies.

02 / First scene

From download to video.

Run these commands in Terminal. Model downloads happen once; generated files stay on your Mac.

  1. Download and unpack

    Download the ZIP above and double-click it in Finder. In Terminal, open the extracted folder. If you use the default Downloads folder:

    Terminal
    cd ~/Downloads/hynomas-mlx-0.1.0

    The archive contains the runner, example prompts, installation scripts, licence notices, and a file manifest. It contains no model weights.

  2. Install Python, then set up

    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.

    Terminal
    python3.12 --version
    ./setup.sh

    If 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 ↗
  3. Generate the verified example

    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.

    Terminal
    ./run.sh --prompts-file prompts/fox-quality.json --output outputs/fox.mp4
    open outputs/fox.mp4

    Watch the Terminal progress until generation and decoding finish. This is offline generation: a three-second video takes minutes to produce.

  4. Make your own scene

    Describe one subject, a place, a simple action, and the camera. Keep the default settings for your first comparison.

    Terminal
    ./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.mp4

    Use “./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

Minutes to make.
Seconds to watch.

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.

Measured Hy-Nomas generation time
MachineMemoryVideoGeneration
M4 Mac MiniCached text; fresh generation and decoding16 GB3 sec19m 51.41s
M3 Ultra Mac StudioSame prompt, seed and cached text as Mini96 GB3 sec4m 17.39s
M3 Ultra Mac StudioSeparate run, including fresh text encoding96 GB5 sec7m 57.01s

Released weights, exact reconstruction

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 Metal work

Fused weight reconstruction, compiled normalization and position encoding reduce overhead. Safe attention fast paths and a bounded loader reduce unnecessary work.

Memory-aware stages

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

Can I steer it with WASD?

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.

Optional camera experiment
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-demo

Read 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

When something gets stuck.

“python3.12: command not found”

Install Python 3.12, reopen Terminal, and confirm “python3.12 --version” works before running setup again.

Model download interrupted

Check free space and connectivity, then run “./setup.sh” again. Keep the models folder so the downloader can reuse completed files.

Memory pressure or an interrupted generation

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.

The action does not match the prompt

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

Source, weights & licences.

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.