Skip to main content

MLX-native speech library for Apple Silicon.

Project description

mlx-speech

License: MIT Python 3.13+ Platform

[!NOTE] This project wouldn't exist without the inspiration and generous support of the incredible community at linux.do.

Local speech synthesis, editing, and transcription on Apple Silicon, running pure MLX. No cloud, no PyTorch.

Alias Type Description
fish-s2-pro TTS Fish S2 Pro — dual-AR TTS, voice cloning, emotion tags
vibevoice TTS VibeVoice Large — hybrid LLM+diffusion TTS, voice cloning
longcat TTS LongCat AudioDiT — flow-matching diffusion TTS
moss-local TTS OpenMOSS TTS Local — local-attention multi-VQ TTS
moss-ttsd TTS OpenMOSS TTS Delay — delay-pattern dialogue TTS
moss-sound-effect TTS OpenMOSS Sound Effect — text-to-sound-effect generation
step-audio TTS Step-Audio-EditX — voice cloning + audio editing
dramabox TTS DramaBox — Resemble flow-matching diffusion TTS (48 kHz stereo, LTX-2 derived)
cohere-asr ASR Cohere Transcribe — multilingual ASR
local Granite Speech path ASR IBM Granite Speech 4.0 1B — local-path ASR
local Qwen3-ASR path ASR Qwen3-ASR-1.7B — English, Chinese, and mixed Chinese/English local-path ASR

Requirements

  • Apple Silicon Mac (M1 or later)
  • Python 3.13+

Installation

pip install mlx-speech

Quick Start

Models download automatically from HuggingFace on first use.

Python API:

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 audio.",
)

# Speech-to-text
asr = mlx_speech.asr.load("cohere-asr")
result = asr.generate("audio.wav")
print(result.text)

# Local Granite Speech checkpoint
granite = mlx_speech.asr.load("models/ibm/granite_4_0_1b_speech/original")
print(granite.generate("audio.wav").text)

# Local Qwen3-ASR BF16 checkpoint
qwen = mlx_speech.asr.load("models/Qwen3-ASR-1.7B-MLX-BF16")
print(qwen.generate("audio.wav").text)

# List available models
mlx_speech.tts.list_models()
mlx_speech.asr.list_models()

CLI:

# Generate speech
mlx-speech tts --model fish-s2-pro --text "Hello!" -o output.wav

# Voice cloning with emotion tags
mlx-speech tts --model fish-s2-pro \
  --text "[whisper] Just between us..." \
  --reference-audio ref.wav \
  --reference-text "Transcript of reference." \
  -o cloned.wav

# Step Audio emotion editing
mlx-speech tts --model step-audio \
  --reference-audio input.wav \
  --reference-text "Transcript." \
  --edit-type emotion --edit-info happy \
  -o happy.wav

# Sound effect generation
mlx-speech tts --model moss-sound-effect \
  --text "rolling thunder with rainfall" \
  --duration-seconds 8 \
  -o thunder.wav

# Transcribe audio
mlx-speech asr --model cohere-asr --audio speech.wav
mlx-speech asr --model models/ibm/granite_4_0_1b_speech/original --audio speech.wav
mlx-speech asr --model models/Qwen3-ASR-1.7B-MLX-BF16 --audio speech.wav
mlx-speech asr --model models/Qwen3-ASR-1.7B-MLX-BF16 --audio speech.wav --language Chinese

# Discover models
mlx-speech tts --list-models
mlx-speech asr --list-models
mlx-speech --help

Local model paths work too:

mlx-speech tts --model models/fish_s2_pro/mlx-int8 --text "Hello!" -o output.wav

Note: The mlx-speech CLI covers the common path — basic generation, voice cloning, and editing. For advanced controls (sampling temperature, top-p/k, diffusion steps, batch JSONL, duration tuning, etc.) use the scripts in scripts/ directly. Each model family has a corresponding script with the full inference surface documented in docs/.

Models

Pre-converted MLX weights are on Hugging Face under appautomaton. Use mlx_speech.tts.load("alias") or mlx_speech.tts.load("appautomaton/repo-name") to load them.

Alias HF Repo Quant
fish-s2-pro fishaudio-s2-pro-8bit-mlx int8
vibevoice vibevoice-mlx int8
longcat longcat-audiodit-3.5b-8bit-mlx int8
moss-local openmoss-tts-local-mlx int8
moss-ttsd openmoss-ttsd-mlx int8
moss-sound-effect openmoss-sound-effect-mlx 4-bit
step-audio step-audio-editx-8bit-mlx int8
cohere-asr cohere-asr-mlx int8

Conversion

Convert from upstream source weights:

python scripts/convert/fish_s2_pro.py
python scripts/convert/longcat_audiodit.py
python scripts/convert/vibevoice.py
python scripts/convert/moss_local.py
python scripts/convert/moss_ttsd.py
python scripts/convert/cohere_asr.py
python scripts/convert/qwen3_asr.py

Model Guides

Each family has a doc covering behavior, flags, and known limitations:

Development

git clone https://github.com/appautomaton/mlx-speech.git
cd mlx-speech
uv sync
uv run pytest tests/unit/
uv run ruff check .
mlx-speech/
  src/mlx_speech/    library code
  scripts/           conversion, generation, eval, and audit entry points
  models/            local checkpoints (not in git)
  tests/             unit, checkpoint, runtime, integration tests
  docs/              model-family behavior guides

License

MIT — see LICENSE

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mlx_speech-0.4.1.tar.gz (289.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mlx_speech-0.4.1-py3-none-any.whl (392.9 kB view details)

Uploaded Python 3

File details

Details for the file mlx_speech-0.4.1.tar.gz.

File metadata

  • Download URL: mlx_speech-0.4.1.tar.gz
  • Upload date:
  • Size: 289.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mlx_speech-0.4.1.tar.gz
Algorithm Hash digest
SHA256 6ae492afd3259edb923f64535f786825cfd81df6552ab4cfe9747c26f8c3841c
MD5 871744037ef6d2f31ea1db654a458f0e
BLAKE2b-256 f0cb98f2ccb65c47515cf3ddb7483a21d3d7febcd6e8cb97f313cef76fff1b23

See more details on using hashes here.

Provenance

The following attestation bundles were made for mlx_speech-0.4.1.tar.gz:

Publisher: publish.yml on appautomaton/mlx-speech

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mlx_speech-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: mlx_speech-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 392.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mlx_speech-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b8474b3f23674359e77126ad58c7f6c6e522cf0659e5a65731a9dc129a302303
MD5 584b697166c80cc1b7545c7742af5496
BLAKE2b-256 ee7ab0f8112d3709fb65e881d5f0c5e4bb8417c2f507a1b6cd5307617ff1552d

See more details on using hashes here.

Provenance

The following attestation bundles were made for mlx_speech-0.4.1-py3-none-any.whl:

Publisher: publish.yml on appautomaton/mlx-speech

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page