Skip to main content

qwen3-asr-mlx

PyPI CI License: MIT Platform: macOS Apple Silicon Python 3.10+

Qwen3-ASR speech-to-text inference on Apple Silicon via MLX.

An MLX implementation of the Qwen3-ASR 0.6B and 1.7B pipelines, with no PyTorch or transformers dependency.

This package provides inference code only. Model weights are developed by Qwen Team, Alibaba Cloud under the Apache 2.0 license and downloaded separately from HuggingFace Hub on first use.


Quick Start

Apple Silicon required. macOS 14+, Python 3.10+, MLX 0.31+.

pip install qwen3-asr-mlx
from qwen3_asr_mlx import Qwen3ASR

model = Qwen3ASR.from_pretrained("mlx-community/Qwen3-ASR-1.7B-bf16")
result = model.transcribe(
    "audio.wav",
    context="Vocabulary: Quilter, apostle, gospel.",
)
print(result.text)      # "Hello, world."
print(result.language)  # "English"
print(result.duration)  # 3.2

Model weights download automatically from HuggingFace Hub on first use.

The 1.7B variant gives the best transcription quality and is the recommended default. For lower memory use and latency, load mlx-community/Qwen3-ASR-0.6B-bf16 instead.


Features

  • On-device via MLX. No server, no network during inference.
  • No PyTorch or transformers dependency.
  • Audio formats via soundfile (WAV, FLAC, MP3, etc.)
  • Reference-exact features: the log-mel frontend matches the Whisper feature extractor Qwen3-ASR was trained with.
  • Automatic language detection from model output.
  • Context and hotwords through Qwen3-ASR's official system-prompt format.
  • Greedy and sampling-based decoding with repetition penalty, top-k, and nucleus sampling.
  • Thread-safe with internal lock for concurrent callers.
  • Long audio support with automatic chunking at low-energy boundaries (up to 20 minutes).
  • Context manager for resource cleanup.

API

Qwen3ASR.from_pretrained(model_id_or_path, **kwargs)

Load a model from a local directory or the HuggingFace Hub.

model = Qwen3ASR.from_pretrained("mlx-community/Qwen3-ASR-1.7B-bf16")
# or from a local path
model = Qwen3ASR.from_pretrained("/path/to/model")

model.transcribe(audio, **kwargs) -> TranscriptionResult

Transcribe audio to text.

Parameter Type Default Description
audio str, Path, or np.ndarray required File path or float32 numpy array at 16 kHz mono
language str or None None Optional language hint (ISO 639-1 code or full name). None lets the model detect the language.
context str or None None Free-form context or hotwords, such as Vocabulary: Quilter, apostle, gospel.
temperature float 0.0 Sampling temperature; 0.0 = greedy
top_p float 1.0 Nucleus sampling threshold
top_k int 0 Top-k cutoff (0 = disabled)
repetition_penalty float 1.2 Penalty for repeated tokens
max_tokens int or None None Max output tokens; auto-computed from duration when None
chunk_duration float 1200.0 Max seconds per chunk; longer audio is split automatically

model.warm_up()

Run a short dummy inference to pre-compile the MLX compute graph. Eliminates the latency spike on the first real transcription.

model.close()

Release model weights and free memory. Called automatically when using the context manager.

with Qwen3ASR.from_pretrained("mlx-community/Qwen3-ASR-1.7B-bf16") as model:
    result = model.transcribe("audio.wav")

TranscriptionResult

@dataclass
class TranscriptionResult:
    text: str        # clean transcription
    language: str    # detected language (e.g. "English")
    duration: float  # audio duration in seconds

Architecture

Audio (WAV/FLAC/MP3/ndarray)
  │
  ▼
Mel Spectrogram (128-bin, numpy STFT, Slaney filterbank)
  │
  ▼
Audio Encoder (Conv2D stem → 24-layer transformer → projection)
  │
  ▼
Text Decoder (28-layer Qwen3, GQA 16Q/8KV, QK-norm, SwiGLU, RoPE)
  │
  ▼
TranscriptionResult { text, language, duration }

Requirements

  • Apple Silicon Mac (M1 or later)
  • macOS 14+ (the oldest macOS MLX ships wheels for)
  • Python 3.10+
  • MLX 0.31+

The MLX conversion and this runtime are community maintained; they are not Qwen's official PyTorch/Transformers stack. The 1.7B model generally produces higher-quality transcripts, but needs more unified memory and has higher latency than the 0.6B model.


Development

git clone https://github.com/gabrimatic/qwen3-asr-mlx.git
cd qwen3-asr-mlx
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
python -m pytest -v
ruff check src tests && ruff format --check src tests
mypy

Skip model-loading tests with -m "not slow".


Credits

Qwen3-ASR by Qwen Team, Alibaba Cloud · MLX by Apple · Model weights from mlx-community

Legal notices

Model License

This package provides inference code only. It does not include model weights.

The Qwen3-ASR model weights are developed by Qwen Team, Alibaba Cloud and released under the Apache License 2.0. The 1.7B and 0.6B bf16 MLX conversions are hosted by mlx-community under the same license. By downloading and using the model weights, you agree to the terms of the Apache 2.0 license.

Trademarks

"Qwen" and "Tongyi Qianwen" are trademarks of Alibaba Cloud. "MLX" is a trademark of Apple Inc. "HuggingFace" is a trademark of Hugging Face, Inc.

This project is not affiliated with, endorsed by, or sponsored by Alibaba Cloud, Apple, Hugging Face, or any other trademark holder. All trademark names are used solely to describe compatibility with their respective technologies.

Third-Party Licenses

This project depends on:

Package License
mlx MIT
numpy BSD-3-Clause
tokenizers Apache-2.0
huggingface-hub Apache-2.0
soundfile BSD-3-Clause

License

This inference code is released under the MIT License. See LICENSE for details.

The model weights have their own license (Apache 2.0). See Model License above.


Created by Soroush Yousefpour

"Buy Me A Coffee"

Metadata

Release files for qwen3-asr-mlx 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qwen3-asr-mlx 0.3.0
File Size Uploaded Provenance Actions
qwen3_asr_mlx-0.3.0.tar.gz 43.5 kB With provenance Details for qwen3_asr_mlx-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for qwen3-asr-mlx 0.3.0
File Interpreter ABI Platform Actions
qwen3_asr_mlx-0.3.0-py3-none-any.whl Python 3 none any Details for qwen3_asr_mlx-0.3.0-py3-none-any.whl

Total release size: 72.2 kB

Release files / qwen3_asr_mlx-0.3.0.tar.gz

Download URL qwen3_asr_mlx-0.3.0.tar.gz
Size 43.5 kB
Tags Source
SHA-256 checksum
How to use checksums
7ee33977a2dc2f46bc160c70b9937da83e01d86aec7ac2b242c7cc0170415ff1
BLAKE2b-256 checksum
How to use checksums
4d38638c96e2e7c6824ea365db0d512d5049b2def7596a62c6f916b4b8e9c354
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / qwen3_asr_mlx-0.3.0-py3-none-any.whl

Download URL qwen3_asr_mlx-0.3.0-py3-none-any.whl
Size 28.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cc85dd304e22cd2607f4a42854f03a17501ec8bfac446f8ff4a07301d620d485
BLAKE2b-256 checksum
How to use checksums
a201446c61f0c4110e4c51296f961b0f1bc16e7231d772d65afa2739dd1625d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Security for qwen3-asr-mlx 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for qwen3_asr_mlx-0.3.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page