Open-source text-to-speech starter inspired by jamiepine/voicebox.
This project gives you a deployable baseline with:
- FastAPI backend
- Studio-grade browser UI with dual generation modes
- Single + batch MP3 generation endpoints
- Voice search/filter (
search,locale,gender,limit) - Preset script templates
- Persistent render history (replay / copy link / delete / clear-all)
- Batch report panel (success/failure per line)
- Batch progress indicator and pass-rate meter
- Realtime waveform visualizer in output player
- Runtime stats panel
- Desktop packaging pipeline for macOS and Windows
- Docker support
- GitHub Actions CI
GET /api/healthhealth checkGET /api/voiceslist voices with filteringGET /api/presetsbuilt-in script presetsGET /api/historylist generation historyDELETE /api/history/{id}delete a history record and audio fileDELETE /api/historyclear all history records and generated filesGET /api/statsaggregate counters for dashboardPOST /api/speaksynthesize speech and store historyPOST /api/speak/batchgenerate up to 20 lines in one request
- Python 3.11
- FastAPI + Uvicorn
- edge-tts
- Plain HTML/CSS/JS frontend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000Open: http://127.0.0.1:8000
curl -X POST http://127.0.0.1:8000/api/speak \
-H "Content-Type: application/json" \
-d '{
"text": "Hello from Voxa Studio",
"voice": "en-US-AriaNeural",
"rate": 0,
"pitch": 0,
"format": "mp3"
}'Response:
{
"id": "...",
"voice": "en-US-AriaNeural",
"locale": "en-US",
"rate": 0,
"pitch": 0,
"format": "mp3",
"audio_url": "/audio/<id>.mp3",
"created_at": "2026-03-02T07:00:00Z",
"characters": 29,
"text_preview": "Hello from Voxa Studio"
}Batch example:
curl -X POST http://127.0.0.1:8000/api/speak/batch \
-H "Content-Type: application/json" \
-d '{
"texts": ["First line", "Second line"],
"voice": "en-US-AriaNeural",
"rate": 0,
"pitch": 0,
"format": "mp3"
}'pytest -qdocker build -t voxa-studio .
docker run --rm -p 8000:8000 voxa-studioOr deploy with Render Blueprint:
render blueprint launchDesktop binaries are published as release assets:
VoxaStudio-macOS-arm64.zipVoxaStudio-windows-x64.zip
When a GitHub release is published, .github/workflows/desktop-release.yml builds both targets and uploads the assets automatically.
Run desktop build locally:
pip install -r requirements-desktop.txt pyinstaller
python desktop/build.py.
├── app/
├── desktop/
├── output/playwright/
├── render.yaml
├── web/
├── tests/
└── .github/workflows/
- Do not use generated audio for impersonation, fraud, or deceptive use.
- Add user consent checks before deploying voice-clone features.
- If you add uploads or auth later, enforce rate limits and storage lifecycle controls.
MIT
