Local TTS router — multi-backend (MLX, VibeVoice), DashScope + OpenAI compatible
Project description
tts-router
Local TTS router for Apple Silicon — multi-backend, OpenAI-compatible API.
Pull models, serve an API, or synthesize speech directly from the command line.
Install
# Recommended (isolated, no venv needed)
uvx --prerelease=allow tts-router list
# Or install globally
pip install tts-router
Note:
uvxrequires--prerelease=allowbecausemlx-audiocurrently depends on a pre-release version oftransformers.
Requires Python 3.11+ and macOS with Apple Silicon (M1/M2/M3/M4).
Quick Start
# List available models
tts-router list
# Download a model
tts-router pull qwen3-tts
# Synthesize speech
tts-router say "Hello world" -o hello.wav
# Start the API server (OpenAI-compatible)
tts-router serve
Commands
| Command | Description |
|---|---|
tts-router list |
List available models and download status |
tts-router pull <model> |
Download model weights from HuggingFace |
tts-router say <text> |
Synthesize speech from the command line |
tts-router serve |
Start the TTS API server with web playground |
Models
Supports multiple TTS models through a unified interface:
- Qwen3-TTS — Multi-speaker with emotion control and voice cloning (MLX)
- Kokoro — Fast, lightweight TTS with many voices (MLX)
- Dia — Dialogue generation with speaker tags (MLX)
- Orpheus — Expressive speech with emotion tags (MLX)
- Chatterbox — Voice cloning with emotion exaggeration (MLX)
- VibeVoice — Microsoft's multi-speaker long-form TTS (PyTorch, optional)
Run tts-router list to see all available models.
Voice Cloning
# Clone a voice from a reference audio clip
tts-router say "Text to speak" --ref-audio reference.wav -o output.wav
The model automatically switches to a clone-capable variant when --ref-audio is provided.
API Server
tts-router serve --port 8091
Starts an OpenAI-compatible /v1/audio/speech endpoint with a built-in web playground at http://localhost:8091/.
Options
tts-router say --help
Key options: --voice, --model, --format (wav/mp3/flac/aac/opus), --speed, --instruct, --ref-audio, --ref-text, --temperature, --exaggeration.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tts_router-0.1.1.tar.gz.
File metadata
- Download URL: tts_router-0.1.1.tar.gz
- Upload date:
- Size: 166.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3083fa528d62bf1cfd2d2d69f7c0c215f737b324d370b807fc07e812987644b
|
|
| MD5 |
b8284e9620b08a7bcfeb1de22ba817f1
|
|
| BLAKE2b-256 |
e00ff487c8dda8c225bc2b4054dd1e67bed5ea5cbbb7200c9f3827c18e2e321d
|
Provenance
The following attestation bundles were made for tts_router-0.1.1.tar.gz:
Publisher:
publish.yml on hrhrng/tts-router
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tts_router-0.1.1.tar.gz -
Subject digest:
a3083fa528d62bf1cfd2d2d69f7c0c215f737b324d370b807fc07e812987644b - Sigstore transparency entry: 1077724085
- Sigstore integration time:
-
Permalink:
hrhrng/tts-router@304381ca23b3db7f1d245a8aaf0c0b985f2e167c -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/hrhrng
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@304381ca23b3db7f1d245a8aaf0c0b985f2e167c -
Trigger Event:
release
-
Statement type:
File details
Details for the file tts_router-0.1.1-py3-none-any.whl.
File metadata
- Download URL: tts_router-0.1.1-py3-none-any.whl
- Upload date:
- Size: 48.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc5072a21fecb2288e56e2a9f7680640755137961d7e8758ef936cf7e2be7aba
|
|
| MD5 |
aaab1d4da22c50b352d580150e889ccb
|
|
| BLAKE2b-256 |
6982ae1de88ffaac819ce132f6a8b7e5b71ea40d13adbace8d6d72027a43e61a
|
Provenance
The following attestation bundles were made for tts_router-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on hrhrng/tts-router
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tts_router-0.1.1-py3-none-any.whl -
Subject digest:
cc5072a21fecb2288e56e2a9f7680640755137961d7e8758ef936cf7e2be7aba - Sigstore transparency entry: 1077724119
- Sigstore integration time:
-
Permalink:
hrhrng/tts-router@304381ca23b3db7f1d245a8aaf0c0b985f2e167c -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/hrhrng
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@304381ca23b3db7f1d245a8aaf0c0b985f2e167c -
Trigger Event:
release
-
Statement type: