← TTS Server

API pública · Coqui XTTS-v2

Síntesis de voz en tu servidor

API compatible con el formato de OpenAI Audio Speech. XTTS-v2 corre localmente en esta PC; el túnel de Cloudflare publica este servicio bajo https://tts.ceballosleon.com.

Autenticación

Crea una API key en el panel de administración y envíala como Bearer token. Las claves tienen límites individuales y máximos globales administrados. La colección Postman incluye un ejemplo de respuesta por cada petición.

Authorization: Bearer tts_TU_API_KEY

Generar audio

POST/v1/audio/speech input y voice requeridos
{
  "model": "xtts-v2",
  "input": "Hola, esta es una prueba de voz.",
  "voice": "builtin:NOMBRE_DE_VOZ",
  "language": "es",
  "speed": 1,
  "response_format": "mp3"
}

model: tts-1, tts-1-hd o xtts-v2. speed: 0.5–2. response_format: mp3, wav, opus, aac, flac o pcm (mp3 por defecto). El resultado es audio binario; revisa X-Request-Id para el identificador de la petición.

La voz puede ser builtin:... o cloned:.... El endpoint autenticado GET /v1/voices lista los ids disponibles; cada voz del modelo incluye gender (f, m o u = sin clasificar) para agruparlas en femeninas, masculinas y otras.

Textos largos (async)

XTTS en CPU tarda ~2-3 s por segundo de audio (unas 132 palabras superan los 100 s y Cloudflare corta con 524). Si la estimación supera el presupuesto de respuesta directa (~80 s), o si envías "async": true, el endpoint responde 202 con un status_url en vez de dejar la conexión colgada:

POST /v1/audio/speech {"input": "texto largo…", "voice": "…", "async": true}
→ 202 {"id": "a1b2c3…", "status": "queued", "estimated_seconds": 190,
       "status_url": "/v1/audio/speech/jobs/a1b2c3…"}

GET/v1/audio/speech/jobs/<id> Estado: queued → running → done (incluye audio_url) o error. Requiere Bearer token.

GET/v1/audio/speech/jobs/<id>/audio Descarga el audio cuando status es done (409 si aún no está listo). Requiere Bearer token.

Los trabajos expiran al cabo de 1 h. Si una petición sync se acerca al límite, el servidor la degrada a 202 automáticamente: el audio se sigue generando en segundo plano.

Catálogos y estado

GET/v1/models Modelos disponibles. Requiere Bearer token.

GET/v1/voices Voces precargadas (con gender) y clonadas. Requiere Bearer token.

GET/health Health check sin autenticación.

Ejemplo cURL

curl https://tts.ceballosleon.com/v1/audio/speech \
  -H "Authorization: Bearer tts_TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"xtts-v2","input":"Hola desde TTS","voice":"builtin:NOMBRE_DE_VOZ","language":"es"}' \
  --output speech.mp3