Multi-engine, offline audio hub (Speech, Music, SFX, STT) on your Mac. No cloud. No API keys. No one listening.
Runs on MLX and ONNX Runtime — Apple Silicon for MLX engines, any platform for ONNX engines (Kokoro, Piper).
About the name: Sonus is Latin for "sound" (/ˈsoː.nus/). Felt right for a project about making machines talk.
ℹ️ Not affiliated with any company, service, or organization named Sonus. Just a coincidence. We're an independent open-source thing.
Opencode — vibecoded by AI, tested by humans.
Sonus turns text into speech/music/SFX (and speech into text) using whatever engine you throw at it. Multiple engines, one unified API. Run it locally, hit the endpoint, get audio back. Zero data leaves your machine.
Think of it as a local audio hub — TTS via Qwen3, Kokoro, Piper, Chatterbox, CosyVoice, and Fish Speech; Speech-to-Music/SFX via MusicGen, Riffusion, and Stable Audio Open; and STT via Whisper. All offline, all local.
No Mac? No problem. Kokoro and Piper (ONNX engines) work on any platform. Click a badge to open a pre-configured notebook — it installs everything, downloads models, starts the server, and gives you a public URL.
| Engine | Framework | Type / Modality | Vibe / Capabilities |
|---|---|---|---|
| Qwen3 | MLX | TTS | Premium quality. Sounds almost human. 🍎 Apple Silicon only. |
| Kokoro | ONNX | TTS | The multilingual workhorse. Fast, reliable. ✅ Cross-platform. |
| Piper | ONNX | TTS | The speed demon. 100+ languages, tiny footprint. ✅ Cross-platform. |
| Chatterbox Turbo | MLX | TTS | Best-in-class cloning. Feed it a WAV, get a twin. 🍎 Apple Silicon only. |
| CosyVoice2 | PyTorch | TTS | Zero-shot TTS, emotion/prosody control. ✅ Cross-platform. |
| Fish Speech | PyTorch / MLX | TTS | Multilingual TTS with voice cloning. ✅ Cross-platform / 🍎. |
| MusicGen / AudioGen | MLX | Music / SFX | Text-to-music & text-to-sfx on GPU. 🍎 Apple Silicon only. |
| Riffusion | Diffusers (PyTorch) | Music | Fast text-to-music via spectrogram diffusion. ✅ Cross-platform. |
| Stable Audio Open | Diffusers (PyTorch) | Music / SFX | High-quality stereo audio, up to 47 seconds. ✅ Cross-platform. |
| Whisper MLX | MLX | STT | Speech-to-text. Transcribe anything. 🍎 Apple Silicon only. |
More on each engine:
Local (macOS Apple Silicon):
brew install python@3.13)brew install ffmpegRunning in Docker? Only Kokoro and Piper work there. Qwen3 and Chatterbox need the Metal GPU backend. See each engine's doc for details.
git clone https://github.com/YOUR_USERNAME/sonus.git
cd sonus
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
brew install ffmpeg
Download models for at least one engine (check the engine docs above), then:
source venv/bin/activate
python server.py
# Listening on http://0.0.0.0:8000
Interactive API docs: http://localhost:8000/api-docs
curl -X POST http://localhost:8000/tts \
-H "Content-Type: application/json" \
-d '{"text": "Hello world", "model": "kokoro-v1.0", "speaker_name": "af_heart"}' \
--output hello.mp3
curl -X POST http://localhost:8000/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "kokoro", "input": "Hello world", "voice": "af_bella"}' \
--output hello.mp3
Drop-in replacement for POST /v1/audio/speech. Your existing OpenAI TTS code works without changes — just point it at http://localhost:8000.
curl -X POST http://localhost:8000/v1/audio/transcriptions \
-F "file=@speech.mp3" \
-F "model=whisper-base" \
-F "language=en" \
-F "temperature=0.0"
{"text": "Hello world, this was transcribed locally."}
| Resource | What's inside |
|---|---|
| API Reference | Every endpoint, schema, curl example |
| Docs Home | Full docs index |
| Development Guide | Setup, linting, testing, Docker |
| Contributing | Adding engines, code style, PRs |
server.py # FastAPI — the brain
src/
engines/
base.py # The contract every TTS/generation engine signs
qwen.py # Qwen3 (MLX)
chatterbox.py # Chatterbox Turbo (MLX)
kokoro.py # Kokoro (ONNX)
piper.py # Piper (ONNX)
cosyvoice.py # CosyVoice2 (PyTorch)
fish_speech.py # Fish Speech (PyTorch/MLX)
musicgen.py # MusicGen & AudioGen (MLX)
riffusion.py # Riffusion (PyTorch/Diffusers)
stable_audio.py # Stable Audio Open (PyTorch/Diffusers)
stt/
base.py # The contract every STT engine signs
whisper_mlx.py # Whisper via MLX (Apple Silicon)
static/ # Web UI — Vue 3 (CDN), no build step
docs/ # API, engine, development, and MCP docs
models/ # Downloaded models (gitignored)
voices/ # WAVs for voice cloning
sfx/ # Sound effects database
outputs/ # Generated audio files
| Tool | Role | How we use it |
|---|---|---|
| Opencode | AI pair programmer | Vibecoded most of this thing |
| VS Code | Editor | Where the magic happens |
| FastAPI | Web framework | Routes, validation, docs |
| Uvicorn | ASGI server | Serves it all up |
| MLX | ML framework | Apple Silicon superpowers |
| mlx-audio | Audio model loader | Loads Qwen3, Chatterbox models |
| pydub | Audio conversion | WAV ↔ MP3 magic |
| soundfile | WAV I/O | Reads and writes WAVs |
| Piper | TTS engine | Speed king, ONNX-powered |
| Kokoro | TTS engine | Multilingual, ONNX-powered |
| Qwen3-TTS | TTS engine | Premium quality, MLX-powered |
| Chatterbox Turbo | TTS engine | Cloning specialist, MLX-powered |
| CosyVoice | TTS engine | Zero-shot multilingual TTS |
| Fish Speech | TTS engine | Multilingual TTS and voice cloning |
| mlx-audiocraft | Music/SFX engine | Loads MusicGen & AudioGen models |
| diffusers | Audio diffusion | Powers Riffusion and Stable Audio Open |
| torch | ML framework | Backend for PyTorch engines (CosyVoice, Fish Speech, Diffusers) |
| librosa | Audio processing | Mel spectrogram conversion for Riffusion |
| accelerate | PyTorch hardware acceleration | Speeds up diffusion model inference |
| mlx-whisper | STT engine | Speech-to-text, MLX-powered |
| Whisper | STT model | OpenAI's transcription model |
Yes, this thing can make audio that sounds like real people. You're responsible for what you do with it.
Use it wisely. Or don't — but that's on you.
MIT — do what you want with it, just keep the notice.
61 commits
Python
45.7%
JavaScript
22.6%
HTML
16.7%
CSS
9.5%
Jupyter Notebook
4.3%
Multi-engine, offline audio hub (Speech, Music, SFX, STT) on your Mac. No cloud. No API keys. No one listening.
Runs on MLX and ONNX Runtime — Apple Silicon for MLX engines, any platform for ONNX engines (Kokoro, Piper).
About the name: Sonus is Latin for "sound" (/ˈsoː.nus/). Felt right for a project about making machines talk.
ℹ️ Not affiliated with any company, service, or organization named Sonus. Just a coincidence. We're an independent open-source thing.
Opencode — vibecoded by AI, tested by humans.
Sonus turns text into speech/music/SFX (and speech into text) using whatever engine you throw at it. Multiple engines, one unified API. Run it locally, hit the endpoint, get audio back. Zero data leaves your machine.
Think of it as a local audio hub — TTS via Qwen3, Kokoro, Piper, Chatterbox, CosyVoice, and Fish Speech; Speech-to-Music/SFX via MusicGen, Riffusion, and Stable Audio Open; and STT via Whisper. All offline, all local.
No Mac? No problem. Kokoro and Piper (ONNX engines) work on any platform. Click a badge to open a pre-configured notebook — it installs everything, downloads models, starts the server, and gives you a public URL.
| Engine | Framework | Type / Modality | Vibe / Capabilities |
|---|---|---|---|
| Qwen3 | MLX | TTS | Premium quality. Sounds almost human. 🍎 Apple Silicon only. |
| Kokoro | ONNX | TTS | The multilingual workhorse. Fast, reliable. ✅ Cross-platform. |
| Piper | ONNX | TTS | The speed demon. 100+ languages, tiny footprint. ✅ Cross-platform. |
| Chatterbox Turbo | MLX | TTS | Best-in-class cloning. Feed it a WAV, get a twin. 🍎 Apple Silicon only. |
| CosyVoice2 | PyTorch | TTS | Zero-shot TTS, emotion/prosody control. ✅ Cross-platform. |
| Fish Speech | PyTorch / MLX | TTS | Multilingual TTS with voice cloning. ✅ Cross-platform / 🍎. |
| MusicGen / AudioGen | MLX | Music / SFX | Text-to-music & text-to-sfx on GPU. 🍎 Apple Silicon only. |
| Riffusion | Diffusers (PyTorch) | Music | Fast text-to-music via spectrogram diffusion. ✅ Cross-platform. |
| Stable Audio Open | Diffusers (PyTorch) | Music / SFX | High-quality stereo audio, up to 47 seconds. ✅ Cross-platform. |
| Whisper MLX | MLX | STT | Speech-to-text. Transcribe anything. 🍎 Apple Silicon only. |
More on each engine:
Local (macOS Apple Silicon):
brew install python@3.13)brew install ffmpegRunning in Docker? Only Kokoro and Piper work there. Qwen3 and Chatterbox need the Metal GPU backend. See each engine's doc for details.
git clone https://github.com/YOUR_USERNAME/sonus.git
cd sonus
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
brew install ffmpeg
Download models for at least one engine (check the engine docs above), then:
source venv/bin/activate
python server.py
# Listening on http://0.0.0.0:8000
Interactive API docs: http://localhost:8000/api-docs
curl -X POST http://localhost:8000/tts \
-H "Content-Type: application/json" \
-d '{"text": "Hello world", "model": "kokoro-v1.0", "speaker_name": "af_heart"}' \
--output hello.mp3
curl -X POST http://localhost:8000/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "kokoro", "input": "Hello world", "voice": "af_bella"}' \
--output hello.mp3
Drop-in replacement for POST /v1/audio/speech. Your existing OpenAI TTS code works without changes — just point it at http://localhost:8000.
curl -X POST http://localhost:8000/v1/audio/transcriptions \
-F "file=@speech.mp3" \
-F "model=whisper-base" \
-F "language=en" \
-F "temperature=0.0"
{"text": "Hello world, this was transcribed locally."}
| Resource | What's inside |
|---|---|
| API Reference | Every endpoint, schema, curl example |
| Docs Home | Full docs index |
| Development Guide | Setup, linting, testing, Docker |
| Contributing | Adding engines, code style, PRs |
server.py # FastAPI — the brain
src/
engines/
base.py # The contract every TTS/generation engine signs
qwen.py # Qwen3 (MLX)
chatterbox.py # Chatterbox Turbo (MLX)
kokoro.py # Kokoro (ONNX)
piper.py # Piper (ONNX)
cosyvoice.py # CosyVoice2 (PyTorch)
fish_speech.py # Fish Speech (PyTorch/MLX)
musicgen.py # MusicGen & AudioGen (MLX)
riffusion.py # Riffusion (PyTorch/Diffusers)
stable_audio.py # Stable Audio Open (PyTorch/Diffusers)
stt/
base.py # The contract every STT engine signs
whisper_mlx.py # Whisper via MLX (Apple Silicon)
static/ # Web UI — Vue 3 (CDN), no build step
docs/ # API, engine, development, and MCP docs
models/ # Downloaded models (gitignored)
voices/ # WAVs for voice cloning
sfx/ # Sound effects database
outputs/ # Generated audio files
| Tool | Role | How we use it |
|---|---|---|
| Opencode | AI pair programmer | Vibecoded most of this thing |
| VS Code | Editor | Where the magic happens |
| FastAPI | Web framework | Routes, validation, docs |
| Uvicorn | ASGI server | Serves it all up |
| MLX | ML framework | Apple Silicon superpowers |
| mlx-audio | Audio model loader | Loads Qwen3, Chatterbox models |
| pydub | Audio conversion | WAV ↔ MP3 magic |
| soundfile | WAV I/O | Reads and writes WAVs |
| Piper | TTS engine | Speed king, ONNX-powered |
| Kokoro | TTS engine | Multilingual, ONNX-powered |
| Qwen3-TTS | TTS engine | Premium quality, MLX-powered |
| Chatterbox Turbo | TTS engine | Cloning specialist, MLX-powered |
| CosyVoice | TTS engine | Zero-shot multilingual TTS |
| Fish Speech | TTS engine | Multilingual TTS and voice cloning |
| mlx-audiocraft | Music/SFX engine | Loads MusicGen & AudioGen models |
| diffusers | Audio diffusion | Powers Riffusion and Stable Audio Open |
| torch | ML framework | Backend for PyTorch engines (CosyVoice, Fish Speech, Diffusers) |
| librosa | Audio processing | Mel spectrogram conversion for Riffusion |
| accelerate | PyTorch hardware acceleration | Speeds up diffusion model inference |
| mlx-whisper | STT engine | Speech-to-text, MLX-powered |
| Whisper | STT model | OpenAI's transcription model |
Yes, this thing can make audio that sounds like real people. You're responsible for what you do with it.
Use it wisely. Or don't — but that's on you.
MIT — do what you want with it, just keep the notice.
61 commits
Python
45.7%
JavaScript
22.6%
HTML
16.7%
CSS
9.5%
Jupyter Notebook
4.3%