The Problem
Building speech applications on Apple Silicon typically means juggling separate model families for TTS, STT, and speech enhancement, each with its own inference stack and format handling. mlx-audio consolidates these into a single MLX-native library, removing the need to bridge PyTorch models or manage multiple runtime dependencies on M-series hardware.
What This Does
mlx-audio is a Python library covering TTS, STT, and speech-to-speech (STS) pipelines, all optimized for Apple's MLX framework. The mlxaudio/ package is organized by capability: stt/ (e.g., canary, cohereasr, fireredasr2), tts/ (e.g., kokoro, qwen3tts, csm), and sts/ (e.g., moshi, deepfilternet, mossformer2se). Each model directory contains its own config, model definition, and tests.
The library also includes a codec layer (mlxaudio/codec/) with implementations like encodec, mimi, and snac for audio compression, plus utilities for audio I/O (audioio.py), DSP (dsp.py), and conversion (convert.py). A REST server (mlxaudio/server.py) exposes an OpenAI-compatible API, and a Swift package enables iOS/macOS integration. An example project (examples/bible-audiobook/) demonstrates a full TTS pipeline with TypeScript tooling.
How To Use It
Setup: Install via pip (pip install mlx-audio) or, for CLI tools, uv tool install mlx-audio. Development setup uses pip install -e ".[dev]". The examples/bible-audiobook/ project uses bun (a bun.lock is present) and TypeScript.
Configuration: Model weights are pulled from Hugging Face Hub (e.g., mlx-community/Kokoro-82M-bf16). No environment variables are required for basic use.
Running it: The primary interface is the CLI, e.g.:
mlxaudio.tts.generate --model mlx-community/Kokoro-82M-bf16 --text 'Hello, world!' --langcode a
Or via Python:
from mlxaudio.tts.utils import loadmodel model = loadmodel("mlx-community/Kokoro-82M-bf16") for result in model.generate("Hello from MLX-Audio!", voice="afheart"): print(f"Generated {result.audio.shape[0]} samples")
Real-World Use
A typical use case: an audiobook generation pipeline on a Mac Studio. The examples/bible-audiobook/ project does exactly this—it reads a text file (bibles/bible-akjv.txt), generates per-verse WAV files using afheart and ammichael voices, then converts them to MP3 via a TypeScript script (src/convert-to-mp3.ts). The same pattern applies to podcast production, voice cloning demos, or real-time speech-to-speech translation using the moshi model.
Code Health & Issues
Med - Large monorepo with mixed concerns: 169 Python files in mlxaudio/ mixing model implementations, DSP, server, and CLI. The sts/models/mossformer2_se/ directory alone has 20+ files. This makes maintenance and onboarding harder than a flatter structure. Low - Missing lockfile for npm example: examples/bible-audiobook/package.json declares dependencies but only a bun.lock is present, not a package-lock.json. Reproducibility depends on the toolchain. Low - Test coverage is uneven: 21 test files exist, but they are concentrated in codec/ and sts/. The stt/ and tts/ directories have few or no test files, despite being the primary user-facing APIs. Low - No explicit license in repo root: A LICENSE file is present at the root, but its contents are not described in the analysis. Verify it matches the original Blaizzy/mlx-audio license. Med - Heuristic issue only: The analysis flags a dependency-without-lockfile issue, but bun.lock is present, so this is likely a false positive for the bible-audiobook example.
The Bottom Line
This is a serious, well-organized library for Apple Silicon speech work, with a broad model catalog and a functional CLI/server. The main caveat is its scope—169 Python files across TTS, STT, STS, and codecs means a steep learning curve for contributors. It's best suited for teams already committed to MLX and needing a single speech toolkit, not for someone looking for a minimal, focused TTS library.