| --- |
| title: CPU OpenAI-Compatible TTS |
| sdk: docker |
| app_port: 7860 |
| pinned: false |
| --- |
| |
| # CPU OpenAI-Compatible TTS for Hugging Face Spaces |
|
|
| This directory is a Hugging Face Docker Space variant of the project. |
|
|
| ## What changed |
|
|
| - Runs as a Docker Space on port `7860` |
| - Uses `/tmp/tts-server` for temporary job state and SQLite metadata |
| - Stages merged MP3s under `/tmp/tts-server` first, then moves them to `/store` only if that mount is writable |
| - Deletes temporary source, normalized, and chunk files after a successful merge |
| - Keeps auth disabled by default so the public Space UI works immediately |
| - Includes Kitten TTS alongside Supertonic and Kokoro, all running CPU-only |
|
|
| ## Persistent storage behavior |
|
|
| - `/store` is used for final MP3 outputs when writable |
| - if the mounted `/store` volume is not writable at runtime, final MP3s fall back to `/tmp/tts-server/final-outputs` |
| - Temporary files are written outside `/store` |
| - Deleting a job also deletes the persisted MP3 |
|
|
| ## Optional environment variables |
|
|
| See `.env.example`. |
|
|
| Most important overrides: |
|
|
| - `REQUIRE_AUTH=true` to re-enable bearer auth |
| - `API_KEY=...` when auth is enabled |
| - `PERSISTENT_OUTPUT_DIR=/store` |
| - `WORKSPACE_DIR=/tmp/tts-server` |
| - `KITTEN_MODEL_NAME=KittenML/kitten-tts-micro-0.8` |
| - `KITTEN_CACHE_DIR=/app/models/hf-cache` |
| - `ENABLE_MELO_TTS=true` (MeloTTS is installed and enabled in the image by default) |
|
|
| ## Local run |
|
|
| ```bash |
| docker build -t tts-hf-space . |
| docker run --rm -p 7860:7860 -v $(pwd)/.local-store:/store tts-hf-space |
| ``` |
|
|
| Then open `http://localhost:7860`. |
|
|
| ## API |
|
|
| - `POST /v1/audio/speech` |
| - `GET /v1/models` |
| - `GET /v1/voices` |
| - `POST /jobs` |
| - `GET /jobs/{job_id}` |
| - `GET /jobs/{job_id}/download` |
|
|
| ## Notes |
|
|
| - Build-time model downloads stay inside the image under `/app/models` |
| - Kitten TTS caches Hugging Face assets under `/app/models/hf-cache` |
| - Runtime final MP3s are staged in the workspace first, then promoted to `/store` when possible |
| - ffmpeg is required for MP3 encoding and merging |
|
|
| ## MeloTTS EN-only scaffold |
|
|
| - The repo includes a `melo-en` engine scaffold. |
| - MeloTTS is installed in the default Space image from the official GitHub repo at build time. |
| - The model is enabled by default in the Space image via `ENABLE_MELO_TTS=true`. |
|
|