dots.tts SOAR
dots-tts-soarContinuous autoregressive TTS with a 10-step flow-matching solver and classifier-free guidance.
int8 · baseOpen-source audio. Apple Silicon.
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
Lunch plans, courtesy of your GPU.
A real mlx-speech output. View the source example
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.
Built for the way you work
Model inference runs on your Mac through MLX. Download weights once, then work offline with a local checkpoint.
Use a small Python API or the command line. Generate playable waveforms, transcribe recordings, and build your own workflow.
The model library
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.
dots-tts-soarContinuous autoregressive TTS with a 10-step flow-matching solver and classifier-free guidance.
int8 · basedots-tts-mfContinuous autoregressive TTS with a four-step distilled acoustic solver.
int8 · basefish-s2-proDual-AR TTS with voice cloning and inline emotion tags like [excited].
vibevoiceHybrid LLM-plus-diffusion TTS with voice cloning and long-form delivery.
int8longcatFlow-matching diffusion TTS built on a 3.5B audio diffusion transformer.
int8moss-localLocal-attention, multi-VQ TTS with global + local KV cache.
int8moss-ttsdDelay-pattern dialogue TTS for multi-speaker conversation.
int8moss-sound-effectText-to-sound-effect generation. Turn "rolling thunder with rainfall" into a clip.
4-bitstep-audioVoice cloning plus emotion and style edits on existing speech.
int8dramaboxResemble flow-matching diffusion TTS at 48 kHz stereo.
bf16fireredtts3-baseMultilingual zero-shot voice cloning with mono 24 kHz output. Complete BF16 inference bundle. Requires the current GitHub install.
BF16cohere-asrMultilingual ASR with strong long-audio behavior.
int8qwen3-asr-1.7bEnglish, Chinese, and mixed Chinese/English recognition.
int8 · bf16nemotron-asr-streamingCache-aware multilingual streaming ASR with bounded encoder and decoder state.
int8granite-speech-4.0-1bSelective-int8 Granite LM with the acoustic encoder and QFormer retained in BF16.
int8 · BF16Weights 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
Install the library, choose a model, and make something you can hear.
Apple Silicon (M1 or later), Python 3.13+, and enough memory for your chosen model.
pip install mlx-speechWeights 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 quickstartimport 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,
)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,
)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)Open source. Open possibilities.
Built by App Automaton.
For people who like to make things.