Open-source audio. Apple Silicon.

Your voice.
Your Mac.

Speech synthesis, voice cloning, and transcription, running right here on Apple Silicon. Fifteen model variants. One pure-MLX library.

pip install mlx-speech

Python 3.13+ M1 or later No PyTorch

EMBER EDITION
PRERECORDED DEMO24 kHz / mono

Four voices.
One conversation.

Lunch plans, courtesy of your GPU.

SYNTHESIZED ON APPLE SILICON01 / 01

OUTPUT: VIBEVOICE / 4 SPEAKERSDownload audio

A real mlx-speech output. View the source example

Read the transcript

Transcribed locally with Qwen3-ASR.

We need to set a lunch before the next meeting starts. I want ramen, but only if the line is short today. Tacos are faster, and the truck is already parked outside. I brought salad, so I am mainly here to judge the debate. The ramen place was packed yesterday around noon. Then tacos sound safer, and I can still get something spicy. Good tacos, it is, and I am ordering extra chips for the table. Perfect. I will walk with you and keep eating my extremely responsible salad.

Text to speechVoice cloningDialogueSound effectsTranscription

Built for the way you work

The studio is
already on your desk.

01 / LOCAL

Keep your audio close.

Model inference runs on your Mac through MLX. Download weights once, then work offline with a local checkpoint.

02 / OPEN

Make it part of your stack.

Use a small Python API or the command line. Generate playable waveforms, transcribe recordings, and build your own workflow.

The model library

A full palette.
One interface.

Pick a model for the job. Each one comes with a runtime guide, converted weights, and a short selector you can use in your code.

15 model variants

dots.tts SOAR

dots-tts-soar

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

int8 · base

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

int8 · base

Fish S2 Pro

fish-s2-pro

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

int8

MOSS-TTSD

moss-ttsd

Delay-pattern dialogue TTS for multi-speaker conversation.

int8

DramaBox

dramabox

Resemble flow-matching diffusion TTS at 48 kHz stereo.

bf16

FireRedTTS3 Base

fireredtts3-base

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

BF16

Qwen3-ASR-1.7B

qwen3-asr-1.7b

English, Chinese, and mixed Chinese/English recognition.

int8 · bf16

Weights download on first use. Memory needs and model licenses vary; check the linked guide and model card before choosing. Browse all published weights

From an idea to a waveform

A few lines.
Then press play.

Install the library, choose a model, and make something you can hear.

  1. 01
    Bring your Mac.

    Apple Silicon (M1 or later), Python 3.13+, and enough memory for your chosen model.

  2. 02
    Install mlx-speech.pip install mlx-speech
  3. 03
    Run your first example.

    Weights download on first use. Later, pass a local checkpoint path to work offline.

Using FireRedTTS3 Base? It currently needs the GitHub source installation.

Open the full quickstart
YOUR FIRST SESSIONPYTHON

Text to speech

import mlx_speech
from mlx_speech.audio import write_wav

# Pick a voice model.
model = mlx_speech.tts.load("fish-s2-pro")

# Make something you can hear.
result = model.generate(
    "A little less cloud. A little more you."
)

write_wav(
    "hello.wav", result.waveform,
    sample_rate=result.sample_rate,
)
Output file hello.wavWAV

Voice cloning

import mlx_speech
from mlx_speech.audio import write_wav

model = mlx_speech.tts.load("fish-s2-pro")

# Supply a recording you have permission to use.
result = model.generate(
    "This is what local sounds like.",
    reference_audio="reference.wav",
    reference_text="Words spoken in the recording.",
)

write_wav(
    "cloned.wav", result.waveform,
    sample_rate=result.sample_rate,
)
Output file cloned.wavWAV

Speech to text

import mlx_speech

# Choose a speech-recognition model.
model = mlx_speech.asr.load("qwen3-asr-1.7b")

# Use an existing audio recording.
result = model.generate("recording.wav")
print(result.text)
Output transcribed textTEXT
Prefer the terminal?See the CLI examples

Open source. Open possibilities.

Make yourself
heard.

Built by App Automaton.
For people who like to make things.

Get mlx-speech on GitHub