Felix Brener

Models on Apple Silicon

Open-weight MLX releases of Qwen3.8-27B, Ideogram 4, FLUX 3 Klein and MOSS-Image: ported, quantized, distilled and checked against the official pipelines on one Mac.

Role
Independent (porting, distillation, quantization, benchmarking)
Year
July–October 2026
Status
Released
Outcome
6.2× faster MOSS-Image, in 4× less memory · 2.9× faster Ideogram 4 · 7.7K downloads of a 27B model
felix-ab/ideogram4-mlx-distillAn empty desert road at dusk under a teal sky with an ember band on the horizon: an old sedan with its headlights on, a lone figure standing a few steps away.

Benchmarks

Ideogram 4, one 800×992 image on an M4 Pro2.9× faster
  • Stock, 12 steps, two branches~250 s
  • Guidance folded, 12 steps~135 s
  • Guidance folded, 6 steps~86 s

ideogram4-mlx-distill, BENCHMARKS.md

Qwen3.8-27B decode on coding prompts1.89× faster
  • 6-bit MLX11.4 tokens/s
  • With the MTP drafter21.5 tokens/s

MTP drafter model card, Hugging Face

Ideogram 4 release on a 48 GB Mac18.6 GB
  • Quantized weights, of 48 GB18.6 GB

ideogram-4-mlx-distilled, Hugging Face

MOSS-Image, one ~1 MP image on an M4 Pro6.2× faster
  • Official, 50 steps with CFG (100 passes)~743 s
  • Few-step mode (15 passes)~119 s

moss-image-mlx, research/turbo

MOSS-Image, peak memory for one 1024² image4× less
  • mlx-vlm’s port (bf16)38.7 GB
  • This port, 8-bit9.3 GB
  • This port, compact7.4 GB

moss-image-mlx README

FLUX 3 Klein VAE, decoding one 1024² image3.7× less
  • Full-tensor decode+14.3 GB
  • Strips with a halo (same output)+3.9 GB

flux3-mlx README

Problem

Large open-weight image and language models are too slow, or too big, to run well on a Mac, and a quick port can quietly change what they draw.

What I shipped

Distilled Ideogram 4 for MLX by folding classifier-free guidance into a single branch and cutting sampling steps from 12 to 6. At 800×992 on an M4 Pro, an image takes ~86 s instead of ~250 s (2.9× faster). Quantized to 18.6 GB, it runs on a 48 GB Mac.

Extracted Qwen3.8-27B’s multi-token-prediction head as a speculative-decoding drafter. On coding prompts, decode goes from 11.4 to 21.5 tokens/s (up to 1.89× faster). Released 6-bit MLX weights with a full-precision vision tower. The two Qwen releases have 7.7K downloads on Hugging Face, for a model whose ~21 GB of weights need a Mac with 36 GB or more: desktop machines, not phones or base laptops.

Ported FLUX 3 Image Klein to MLX and released it the day Black Forest Labs did. At 1024², the port’s render of BFL’s own example matches BFL’s published image at 35.9 dB, visually indistinguishable; the 8-bit tier stays at 34.2 dB. It covers text-to-image, editing with up to 10 references and bounding-box layout, and the 6-bit tier runs in 9.6 GB.

Solved the VAE’s memory without tiling seams: the decoder runs its convolutions in row strips with a one-row halo, over whole-image GroupNorm statistics, and its attention in query chunks. The output is identical to a full-tensor decode, but a 1024² image needs 3.9 GB instead of 14 GB, and a 2048² decode needs 10.4 GB.

Ported MOSS-Image, OpenMOSS’s bilingual text-rendering model, exactly: 69.7 dB against the official PyTorch pipeline in fp32, with the sampler and seed noise matched bit for bit, so the official seeds redraw the official gallery. The 8-bit tier peaks at 9.3 GB for a 1024² image, against 38.7 GB for mlx-vlm’s port on the same Mac, and its OCR matches the unquantized model on every text prompt.

Trained a few-step mode for MOSS-Image. A small student, trained on the full model’s own 50-step trajectories, draws the composition half; one guided step from the original model sets the lettering, and the original model finishes the detail. A ~1 MP image takes about 2 minutes instead of 12½ (15 network passes instead of 100, 6.2× faster), and English OCR recall holds (0.947 against the full model’s 0.934).

Found why the community’s few-step MOSS-Image adapters paint organic surfaces with copies of one motif (lichen as identical rosettes, pebbles as beads), and why the released mode doesn’t. A pre-registered test on SDXL, Qwen-Image and FLUX.1-dev showed the defect does not generalize to other distilled models.

Agent lane: a serving recipe, a thinking-budget proxy and four patches to run Qwen3.8-27B as a local agent backend, at 15–19 tokens/s end to end with 24–27k tokens of context.

Architecture

  1. Open-weight checkpoint
  2. MLX port
  3. Parity with the official pipeline
  4. Distill · quantize
  5. Few-step student
  6. Speculative decoding
  7. Benchmark on one machine
  8. Release on Hugging Face

Tradeoffs

  1. Report speedups as ratios, not raw tokens/s: absolute throughput depends on the Mac, the ratio transfers.
  2. Benchmark everything on one machine (Mac mini, M4 Pro, 48 GB) and ship the setup and known limitations with each release.
  3. Fold classifier-free guidance into one branch before step-distilling 12 → 6.
  4. Distil only the composition half of MOSS-Image’s trajectory and let the original model finish the detail: each distilled step in the mid-noise band added repeated texture.
  5. Prove a port exact before quantizing it: fp32 parity with the official pipeline and the official seeds, then each tier gated on OCR and added grain.
  6. Decode in strips with a halo, not tiles: the same pixels as a full decode, at a quarter of the memory.
  7. Ship no 4-bit image tier that adds grain or garbles text, even where it would save memory.

Results

  • 6.2× fasterMOSS-Image, ~1 MP on an M4 Pro: the trained few-step mode vs the official 50 steps (~743 s → ~119 s)moss-image-mlx README and research/turbo
  • 1.89× fasterQwen3.8-27B coding decode with the MTP drafter (11.4 → 21.5 tokens/s)MTP drafter model card, Hugging Face
  • 2.9× fasterIdeogram 4 at 800×992, 6-step release vs stock (~250 s → ~86 s)ideogram4-mlx-distill, BENCHMARKS.md
  • 4× less memoryMOSS-Image, one 1024² image: 9.3 GB peak for the 8-bit port vs 38.7 GB for mlx-vlm’smoss-image-mlx README, same Mac
  • 35.9 dBFLUX 3 Klein port vs Black Forest Labs’ published render, 1024²: visually indistinguishableflux3-mlx README
  • 7.7Kdownloads of the two Qwen3.8-27B releases, a model that needs a 36 GB+ MacHugging Face API, all-time downloads, read at build; model card (memory)

Figures

felix-ab/ideogram4-mlx-distillA young woman with long dark hair and a fringe looks back over her shoulder in a garden at golden hour, backlit so her hair glows red-orange, washing on a line behind her; a film frame with a black border.
fig. 1 12-step release at 1472×816.
felix-ab/ideogram4-mlx-distillThe same prompt from the 6-step release: the woman in the garden, backlit hair, a navy coat.
fig. 2 The same prompt from the 6-step release.

Stack

MLX, mflux, mlx-vlm, Python, Distillation, LoRA training, Quantization, Speculative decoding, Parity testing, OCR evals