FastAPI wrapper around the local Echo-TTS code at ~/dev/echo-tts.
- Python 3.10+
- CUDA GPU recommended (same requirements as Echo-TTS)
- Local Echo-TTS checkout (default path:
~/dev/echo-tts)
cd ~/dev/echo-tts-api
python -m venv .venv
source .venv/bin/activate
pip install -r ~/dev/echo-tts/requirements.txt
pip install -r requirements.txtThis API uses voice reference files from ./voices by default.
If you do not upload speaker_audio and do not pass a specific voice, it will use the first audio file in ./voices (sorted by filename).
Supported voice file extensions: .wav, .mp3, .flac, .ogg, .m4a, .aac, .opus
export ECHO_TTS_ROOT=~/dev/echo-tts
uvicorn app.main:app --host 0.0.0.0 --port 8000Model weights are loaded during startup.
GET /healthzGET /v1/voicesPOST /v1/generatereturnsaudio/wavPOST /v1/generate/jsonreturns base64 audio + metadata
POST /v1/audio/speech- Accepts OpenAI-like JSON fields (
model,input,voice,response_format,speed) response_formatsupported:mp3,wav,flac,pcm
- Accepts OpenAI-like JSON fields (
POST /v1/text-to-speech/{voice_id}POST /v1/text-to-speech/{voice_id}/stream- Accepts ElevenLabs-like JSON fields (
text,model_id,output_format,seed,voice_settings) output_formatsupported:mp3_...,ogg_...,pcm_...,mp3,wav,flac,oggogg/ogg_...is encoded asOgg Opus(Telegram voice-note compatible)
- Accepts ElevenLabs-like JSON fields (
curl -X POST http://localhost:8000/v1/generate \
-F 'text_prompt=[S1] Hello from Echo-TTS API.' \
-F 'num_steps=40' \
-F 'rng_seed=0' \
-o output.wavcurl -X POST http://localhost:8000/v1/generate \
-F 'text_prompt=[S1] This uses the voice file named scarlett.wav.' \
-F 'voice=scarlett' \
-o output.wavcurl -X POST http://localhost:8000/v1/audio/speech \
-H 'Content-Type: application/json' \
-d '{
"model": "gpt-4o-mini-tts",
"input": "Hello from OpenAI-compatible Echo TTS",
"voice": "scarlett",
"response_format": "mp3"
}' \
-o speech.mp3curl -X POST http://localhost:8000/v1/text-to-speech/scarlett \
-H 'Content-Type: application/json' \
-d '{
"text": "Hello from ElevenLabs-compatible Echo TTS",
"output_format": "mp3_44100_128"
}' \
-o speech.mp3Use voice_id=default (or first) to force the first file in ./voices.
ECHO_TTS_ROOT(default:~/dev/echo-tts)ECHO_TTS_DEVICE(default:cudaif available, otherwisecpu)ECHO_TTS_MODEL_DTYPE(bfloat16,float16,float32)ECHO_TTS_FISH_AE_DTYPE(bfloat16,float16,float32)ECHO_TTS_USE_COMPILE(trueorfalse)ECHO_TTS_VOICES_DIR(default:./voices)HF_TOKEN(optional; needed for private/gated repos)