ARK-ASR-0.6B MLX

Native Apple MLX conversion of Audio8/ARK-ASR-0.6B, an automatic speech recognition model supporting 19 languages.

This repository includes the BF16 checkpoint, tokenizer and feature extractor, native MLX Python inference implementation, conversion code, tests, validation results, and licensing information. A separate native MLX Swift implementation is available for macOS apps. Neither runtime requires PyTorch for inference.

This is a community conversion. It is not affiliated with or endorsed by the original ARK-ASR authors or Apple.

Requirements

  • A Mac with Apple silicon
  • macOS with Metal support
  • Conda
  • Approximately 2.7 GB of available unified memory during inference
  • Audio clips no longer than 30 seconds

The Python runtime currently performs single-clip greedy transcription. It is a custom MLX architecture and is not compatible with mlx-lm, mlx-audio, or Transformers AutoModel.

MLX Swift

The Whisper macOS implementation loads this checkpoint directly with MLX Swift 0.31.6 and Swift Transformers 1.3.3. It includes the Whisper-style audio encoder, adapter, Qwen2 decoder, grouped-query attention, KV caching, tokenizer handling, greedy generation, and native 16 kHz log-mel preprocessing.

The Swift port strictly loads all 780 tensors. On the same public LibriSpeech fixture used for Python validation, its prompt token IDs, generated token IDs, and final transcription match the Python implementation exactly; preprocessing maximum absolute error is at most 1e-4, and initial-logit cosine similarity is at least 0.9999.

The example app downloads this pinned model from Hugging Face, verifies its SHA-256 before use, chunks recordings longer than 30 seconds at quiet boundaries, and unloads the model after two idle minutes.

Installation

Download this repository with the Hugging Face CLI:

hf download leope/ark-asr-0.6B-mlx --local-dir ark-asr-0.6B-mlx
cd ark-asr-0.6B-mlx
conda env create -f environment.yml
conda activate ark-asr-mlx

The Conda environment installs this repository as an editable Python package. Inference dependencies are pinned in pyproject.toml.

Transcription

ark-asr-mlx transcribe /path/to/audio.wav --model .

To receive structured output:

ark-asr-mlx transcribe /path/to/audio.wav --model . --json

Python usage:

from ark_asr_mlx import ArkASR

asr = ArkASR.from_pretrained(".")
result = asr.transcribe("/path/to/audio.wav")
print(result.text)

Audio is converted to mono and resampled to 16 kHz. Files longer than 30 seconds are rejected instead of silently truncated.

MLX

  • all 780 retained tensors load as native mlx.core.array values;
  • weights are stored as BF16;
  • Conv1d tensors were transposed from PyTorch [out, in, kernel] layout to MLX [out, kernel, in] layout;
  • the tied lm_head.weight and unused learned Whisper position embedding were intentionally omitted;
  • inference runs through Metal on Apple silicon without importing PyTorch.

Inspect the checkpoint directly:

python - <<'PY'
import mlx.core as mx

weights = mx.load("model.safetensors")
conv = weights["audio_encoder.whisper.conv1.weight"]
print(type(conv))       # <class 'mlx.core.array'>
print(conv.dtype)       # mlx.core.bfloat16
print(conv.shape)       # (1280, 3, 128), native MLX Conv1d layout
print(len(weights))     # 780
print(mx.metal.is_available())
PY

The complete provenance and checksums are recorded in conversion.json.

Conversion provenance

Field Value
Source Audio8/ARK-ASR-0.6B
Source revision 45776b56d58cdfb2e2eb632f7e110f38684633e0
Format Native MLX Safetensors
Precision BF16
Parameter tensors 780
Checkpoint size 2.1 GiB
Source SHA-256 57a86ce1c2f2c2d6ebb7ad9642c9e951a5109625122b48c9180126a28787673d
Output SHA-256 4f17d6fda7be51e489c1819c266ed946b2d3982368f0a231ceb0c1f211a3e56c

To reproduce the conversion from the pinned upstream revision:

pip install -e '.[dev]'
ark-asr-mlx convert --output ./converted-model

PyTorch is only included in the dev extra because it is needed to load and validate the upstream checkpoint, not to run the converted MLX model.

Run the included unit tests and lint checks with:

pytest
ruff check .

PyTorch parity

The pinned original model and this MLX implementation were evaluated on the same public 12.1-second LibriSpeech sample:

Check Result
Prompt token IDs Identical
BF16 input features, max absolute difference 0.0
Adapted audio feature cosine similarity 0.9998097773
Initial decoder logits cosine similarity 0.9999750792
Greedy output token IDs Identical
Final transcription Identical

See VALIDATION.md for the full transcription and benchmark conditions.

Reference benchmark

Measured on an Apple M5 Pro with 24 GB unified memory, macOS 26.6, Python 3.12.13, and MLX 0.32.0:

Measurement Result
Model load 0.362 s
Audio preprocessing 0.396 s
First token 0.110 s
38-token generation 0.384 s
Generation throughput 98.94 tokens/s
MLX peak memory 2.620 GB

These figures describe one machine and one sample; they are not performance guarantees.

Supported languages

Chinese, English, German, Japanese, French, Korean, Spanish, Polish, Italian, Romanian, Hungarian, Czech, Dutch, Finnish, Croatian, Slovak, Slovene, Estonian, and Lithuanian.

Model details and limitations

The base model combines a Whisper-style RoPE audio encoder, an MLP adapter, and a Qwen2 decoder. It was trained by the original authors using teacher-data adaptation and on-policy distillation.

The quality characteristics and limitations of the original checkpoint remain applicable. Transcriptions may contain errors, especially for noisy audio, unseen accents, domain-specific terminology, overlapping speakers, or underrepresented languages. Do not use transcripts as the sole basis for high-impact decisions. Users are responsible for obtaining permission to process recordings and complying with applicable privacy law.

Original model card, evaluation results, and training information: Audio8/ARK-ASR-0.6B.

License and attribution

The converted weights and MLX implementation are distributed under the Apache License 2.0. See LICENSE and NOTICE. ARK-ASR attribution and upstream links are retained. The checkpoint was converted without retraining.

Citation

If you use the model, cite the original ARK-ASR work:

@misc{lin2026dataefficientopd,
  title={Data-Efficient On-Policy Distillation for Automatic Speech Recognition},
  author={Lin, Yu and Wang, Yiming and Cai, Runyuan and Zeng, Xiaodong},
  year={2026},
  eprint={2605.28139},
  archivePrefix={arXiv},
  primaryClass={cs.AI},
  url={https://arxiv.org/abs/2605.28139}
}
Downloads last month
310
Safetensors
Model size
1B params
Tensor type
BF16
·
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for leope/ark-asr-0.6B-mlx

Finetuned
(1)
this model

Paper for leope/ark-asr-0.6B-mlx