mlx-speech
Pure MLX · Apple Silicon · No PyTorch

Speech, rendered on the metal.

An open-source, MLX-native speech library for Apple Silicon. Local text-to-speech, voice cloning, dialogue, sound effects, and automatic speech recognition (ASR), with MLX inference on the Apple GPU. Weights download on first use. Load any model by a short alias.

$ pip install mlx-speech
View on GitHub
15
Speech models
2
Tasks · TTS & ASR
48kHz
Stereo · DramaBox
0
PyTorch at runtime
01 Why pure MLX

The laptop is the whole runtime.

Model inference runs locally through MLX on the Apple GPU, with audio preparation on the CPU where needed. TTS produces playable waveforms. ASR returns text. No PyTorch or cloud inference service is required.

Pure MLX runtime

No torch-backed inference under an MLX label. Weights ship as .safetensors with explicit remapping. Model computation uses the Apple GPU through MLX.

Local & private

Converted weights download once, then run fully offline. Aliases and local checkpoint paths are interchangeable.

One clean interface

tts.load() / asr.load() in Python, or the mlx-speech CLI. Per-family scripts expose the full surface.

02 The catalog

Fifteen models. One loader.

Synthesis, cloning, dialogue, editing, sound effects, and recognition. Every catalog entry links to its converted weights and model-family guide.

Text-to-speech11 modules
T01

dots.tts SOAR

int8 · base

Continuous autoregressive TTS with a 10-step flow-matching solver and classifier-free guidance.

T02

dots.tts MeanFlow

int8 · base

Continuous autoregressive TTS with a four-step distilled acoustic solver.

T03

Fish S2 Pro

int8

Dual-AR TTS with voice cloning and inline emotion tags like [excited].

T04

VibeVoice Large

int8

Hybrid LLM-plus-diffusion TTS with voice cloning and long-form delivery.

T05

LongCat AudioDiT

int8

Flow-matching diffusion TTS built on a 3.5B audio diffusion transformer.

T06

OpenMOSS TTS Local

int8

Local-attention, multi-VQ TTS with global + local KV cache.

T07

MOSS-TTSD

int8

Delay-pattern dialogue TTS for multi-speaker conversation.

T08

OpenMOSS Sound Effect

4-bit

Text-to-sound-effect generation. Turn "rolling thunder with rainfall" into a clip.

T09

Step-Audio-EditX

int8

Voice cloning plus emotion and style edits on existing speech.

T10

DramaBox

bf16

Resemble flow-matching diffusion TTS at 48 kHz stereo.

T11

FireRedTTS3 Base

BF16

Multilingual zero-shot voice cloning with mono 24 kHz output. Complete BF16 inference bundle. Requires the current GitHub install.

Speech-to-text04 modules
A01

Cohere Transcribe

int8

Multilingual ASR with strong long-audio behavior.

A02

Qwen3-ASR-1.7B

int8 · bf16

English, Chinese, and mixed Chinese/English recognition.

A03

Nemotron 3.5 ASR Streaming

int8

Cache-aware multilingual streaming ASR with bounded encoder and decoder state.

A04

IBM Granite Speech 4.0 1B

int8 · BF16

Selective-int8 Granite LM with the acoustic encoder and QFormer retained in BF16.

Published weights live under appautomaton on Hugging Face and load by alias or full repo id, with an artifact subdirectory where required. Original checkpoints can also be loaded from local paths when a family guide documents that path.

03 Quickstart

Install. Load. Generate.

Requires an Apple Silicon Mac (M1 or later) and Python 3.13+. Weights download on first use. FireRedTTS3 Base currently requires the GitHub installation.

mlx-speech
import mlx_speech
 
# Text-to-speech
model = mlx_speech.tts.load("fish-s2-pro")
result = model.generate("Hello from mlx-speech!")
# result.waveform: mx.array · result.sample_rate: int
 
# Voice cloning with emotion tags
result = model.generate(
  "[excited] This is amazing!",
  reference_audio="reference.wav",
  reference_text="Transcript of the reference.",
)
 
# Speech-to-text
asr = mlx_speech.asr.load("qwen3-asr-1.7b")
print(asr.generate("audio.wav").text)
$ pip install mlx-speech
 
$ mlx-speech tts --model fish-s2-pro --text "Hello!" -o out.wav
  ✓ out.wav
 
$ mlx-speech asr --model qwen3-asr-1.7b --audio speech.wav
 
$ mlx-speech tts --list-models