Mage-VL on Apple Silicon
Mage-VL is Microsoft's 5B vision-language model that reads still images and video. It pairs a from-scratch Mage-ViT visual encoder with a Qwen3-4B language model. It is the first video model in the OptiQ lineup, and the quant runs entirely on Apple Silicon with no PyTorch.
mlx-lm has no mage_vl class, so OptiQ ships a vendored, mlx-native port of the vision tower that registers with mlx-lm on import optiq and loads the bf16 vision sidecar. This is the same vendored approach used for dhara and nanbeige. Run pip install "mlx-optiq>=0.4.8", then import optiq before mlx_lm.load. For image and video input, serve it with optiq serve.
The quant
OptiQ quantizes only the language tower and keeps the vision tower at bf16 in a sidecar, so one checkpoint does text, image, and video.
| Property | Value |
|---|---|
| Model | Mage-VL-OptiQ-4bit · base microsoft/Mage-VL |
| Architecture | Mage-ViT vision encoder + Qwen3-4B language model, ~5B params |
| Language tower | mixed 4/8-bit · 164 layers at 4-bit, 90 at 8-bit · 5.90 bpw |
| Vision tower | bf16, kept in optiq/optiq_vision.safetensors (297 tensors) |
| On disk | 3.7 GB (3.0 GB language + 0.63 GB vision) |
It reads images and video
Both of these ran through the quantized model on Apple Silicon, MLX only. The input is shown, and the quote below each one is what the model returned.
A dog is sitting on a rug in front of a patterned rug.
A man is reporting on a soccer game.
Capability Score
The standard OptiQ six-metric text eval. Strong for a 4B language tower, and it does function calling well once the tools are in the prompt. Long-context multi-hop retrieval (HashHop) is the weak spot.
| Metric | Score |
|---|---|
| MMLU (5-shot, 969 samples) | 74.6% |
| GSM8K (1000 samples) | 88.7% |
| IFEval (full set, strict) | 68.6% |
| BFCL-V3 simple (200 calls) | 88.5% |
| HumanEval (164 problems, pass@1) | 76.2% |
| HashHop (long-context retrieval) | 25.0% |
| Capability Score (mean of 6) | 70.27 |
Hello world
Text-only generation loads directly through mlx-lm once OptiQ has registered the architecture.
import optiq # registers the mage_vl arch + vision sidecar from mlx_lm import load, generate model, tok = load("mlx-community/Mage-VL-OptiQ-4bit") print(generate(model, tok, prompt="Hello", max_tokens=100))
Image and video input
For pixels, serve the model over the OpenAI and Anthropic compatible endpoint, then send an image (or sampled video frames) as image_url content.
$ optiq serve --model mlx-community/Mage-VL-OptiQ-4bit
Video is handled as sampled frames. The DCVC neural codec in the base repo is an optional efficiency path and is not needed here.
optiq/optiq_vision.safetensors. mlx-lm globs model*.safetensors, so it ignores the sidecar, and the same published repo loads text-only under stock mlx-lm and full VLM under OptiQ. The vision tower was reimplemented in MLX and checked bit-exact against the reference, with a max absolute difference of 1.7e-3 in float32.