¿Necesito esto?
«Local» significa una de dos cosas: una voz integrada en SSN que se ejecuta en el navegador, o un servidor de voz que ejecutas por tu cuenta.
| Quiero… | Haz esto |
|---|---|
| Voces gratuitas sin instalar nada | Usa: voces integradas. La mayoría no necesita más. |
| Usar un servidor de voz que ya tengo en marcha | Conectar un servidor. |
| Una voz clonada | Consulta clonación de voz. |
| Fish Audio en OBS | Consulta: Configuración de Fish Audio. |
| Voces de pago en la nube | Consulta: Referencia de TTS. |
Voces integradas (sin instalar nada)
Se ejecutan dentro de SSN en tu navegador. Sin servidor, Docker ni clave API.
| Voz | Sonido | Carga del equipo | Valor del enlace |
|---|---|---|---|
| Kokoro | Excelente | Medio. Más rápido con una GPU. | ttsprovider=kokoro |
| Piper | Muy buena | Bajo. Solo CPU. | ttsprovider=piper |
| Kitten | Buena | Muy bajo. Solo CPU. | ttsprovider=kitten |
| eSpeak-NG | Robótico | Mínimo. Solo CPU. | ttsprovider=espeak |
Configúralo en 4 pasos
- Añade
&speech=en-US&ttsprovider=kokoroa tudock.html(enlace). (Opiper,kitten,espeak.) - Añade ese enlace a OBS como Fuente de navegador (Browser Source). Esa es la página que produce el sonido.
- En sus propiedades, activa Controlar audio vía OBS (Control audio via OBS).
- Envía un mensaje de prueba corto al chat, como
Testing local TTS.
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=kokoro
Voces, velocidad y otros idiomas: ajustes del proveedor. ¿Prefieres hacer clic? Usa la guía de configuración.
Conecta tu propio servidor TTS
Un servidor ofrece más voces, clonación o una voz reutilizable entre herramientas. SSN se comunica con él como con un servidor de voz Compatible con OpenAI . No hace falta clave API.
- Inicia tu servidor. Kokoro-FastAPI es la opción más sencilla.
- En SSN, abre la lista de proveedores TTS y elige Endpoint TTS personalizado / local.
- En Endpoint API personalizado/local, introduce la dirección del servidor, como
http://127.0.0.1:8880/v1/audio/speech. - Deja vacía la clave API.
- Elige una voz que tu servidor reconozca:
af_bellapara Kokoro,novapara openedai-speech. - Copia el enlace en OBS y envía un mensaje de prueba.
| Servidor | Modelo | GPU | Disco | Puerto |
|---|---|---|---|---|
| Kokoro-FastAPI (recomendado) | Kokoro 82M | Opcional | ~2 GB | 8880 |
| openedai-speech (Piper) | Piper | Solo CPU | <1 GB | 8000 |
| kokoro-web | Kokoro 82M | Opcional | ~2 GB | 3000 |
Necesitan Docker Desktop instalado y en ejecución. Es gratuito para uso personal.
La regla de localhost
Este es el error más común.
localhost y 127.0.0.1 siempre significan «este mismo ordenador». Si OBS está en un PC y el servidor de voz en otro, 127.0.0.1 en OBS apunta al PC donde está OBS.
| Tu configuración | Usa esta dirección |
|---|---|
| OBS y el servidor en el mismo PC | http://127.0.0.1:8880/v1/audio/speech |
| Servidor en otro PC de casa | http://192.168.x.x:8880/v1/audio/speech, con la IP local de ese PC |
| La prueba de la aplicación SSN funciona, pero OBS no emite sonido | OBS necesita su propia dirección accesible. La prueba de la aplicación no demuestra que OBS pueda acceder al servidor. |
Comprueba también que el firewall permita el puerto y que Docker lo haya publicado (-p 8880:8880).
Kokoro-FastAPI
Kokoro-FastAPI ejecuta Kokoro como servidor local. Funciona con CPU; no necesita GPU.
- Abre un terminal (Símbolo del sistema, PowerShell o Terminal) y ejecuta una de estas opciones:
docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2
GPU NVIDIA (más rápido):
docker run --gpus all -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-gpu:v0.2.0post4
La primera ejecución descarga unos 1,5–2 GB, una sola vez. - Abrir
http://localhost:8880/web/. Debería aparecer una página para probar voces (más de 67 disponibles). - Usa este enlace (cambia la dirección si el servidor está en otro PC):
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8880/v1/audio/speech&voiceopenai=af_bella
af_bella, af_sarah, am_adam o bf_emma. Los nombres de OpenAI como nova o alloy podrían no funcionar.Inícialo automáticamente con Docker:
docker run -d --restart unless-stopped -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2
openedai-speech (Piper y XTTS-v2)
Opción A: servidor ligero de Piper (CPU)
Menos de 1 GB. Sin clonación de voz.
docker run -d --restart unless-stopped -p 8000:8000 ghcr.io/matatonic/openedai-speech-min
Voces: alloy, echo, fable, onyx, nova, shimmer.
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=openai&openaiendpoint=http://localhost:8000/v1/audio/speech&voiceopenai=nova
Ejecución desde el código fuente en Windows (errores HTTP 500)
Añade la carpeta Scripts de su entorno virtual a PATH primero. De lo contrario, no puede encontrar piper.exe o ffmpeg.exe.
cd openedai-speech $env:Path = "$PWD\.venv\Scripts;$env:Path" .\.venv\Scripts\python.exe speech.py --xtts_device none -H 127.0.0.1 -P 8000
Opción B: clonación de voz con XTTS-v2 (GPU)
Necesita el servidor completo, no openedai-speech-min. Prevé unos 4 GB de memoria GPU. La CPU funciona, pero es lenta.
Configura XTTS-v2 en 4 pasos
- Descarga el servidor y arráncalo:
git clone https://github.com/matatonic/openedai-speech.git cd openedai-speech Copy-Item sample.env speech.env docker compose up -d
En macOS o Linux, utilizacp sample.env speech.env. Docker necesita acceso a la GPU. El modelo se descarga en el primer uso. - Crea un clip de referencia limpio de una voz que tengas permiso para usar. Mono, 22050 Hz, 6–30 segundos:
ffmpeg -i input.mp3 -ac 1 -ar 22050 -t 6 -y voices/me.wav
- En
config/voice_to_speaker.yaml, añádelo en la sección existentetts-1-hd(conserva las voces que ya haya):tts-1-hd: me: model: xtts speaker: voices/me.wav language: enCambiamepor el nombre que enviará SSN. - Ejecuta
docker compose restart, y luego usa:dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8000/v1/audio/speech&openaimodel=tts-1-hd&voiceopenai=me&openaiformat=wav
openaimodel=tts-1-hd es obligatorio. Sin él, SSN envía tts-1, y el servidor usa Piper en su lugar. voiceopenai debe coincidir con el nombre de tu voz en el archivo YAML.¿Bloqueado por el navegador? Ejecuta el puente y cambia solo openaiendpoint a http://127.0.0.1:8124/v1/audio/speech.
El puente local de TTS
Un pequeño auxiliar de SSN. Recibe la solicitud de SSN, la pasa al servidor de voz y devuelve el audio de una forma que aceptan los navegadores. Necesita Node.js.
http://127.0.0.1:8124/v1/audio/speech, aunque el servidor de voz esté en otro PC.
- Indica al puente dónde está tu servidor. PowerShell:
$env:SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech"
¿El servidor está en otro PC? Usa su IP local, comohttp://192.168.x.x:8880/v1/audio/speech. - En la carpeta de SSN, ejecuta
node scripts/local-tts-bridge.cjs. Déjalo en ejecución. - Conecta SSN al puente:
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&voiceopenai=af_bella
macOS/Linux, en una sola línea: SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech" node scripts/local-tts-bridge.cjs. Dentro de la carpeta local-tts-bridge , node server.cjs hace lo mismo. Cambia el puerto con SSN_TTS_BRIDGE_PORT=8125. Todas las opciones: README del puente.
Modo GPT-SoVITS
GPT-SoVITS utiliza su propio formato JSON para /tts . El puente adapta las solicitudes a ese formato.
$env:SSN_TTS_REF_AUDIO_PATH="C:\voices\speaker.wav" $env:SSN_TTS_REF_TEXT="Reference audio transcript here." $env:SSN_TTS_TARGET="http://127.0.0.1:9880/tts" node scripts/local-tts-bridge.cjs --mode gptsovits
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&openaiformat=wav
Modo de servidor F5-TTS
Algunos adaptadores de F5-TTS usan /synthesize_speech/?text=...&voice=.... El puente adapta las solicitudes.
$env:SSN_TTS_TARGET="http://127.0.0.1:7860/synthesize_speech/" node scripts/local-tts-bridge.cjs --mode f5
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&voiceopenai=default_en&openaiformat=wav
Clonación de voz
La clonación no es un ajuste de SSN, sino una función de algunos servidores de voz. SSN envía el texto del chat; el servidor elige la voz clonada.
- Graba un clip limpio de una sola persona hablando, normalmente de 3–30 segundos, con poco ruido de fondo.
- Algunos servidores también necesitan las palabras exactas pronunciadas en el clip.
- El servidor convierte el clip en un perfil de voz.
- SSN envía el texto del chat con
ttsprovider=customtts. - El servidor devuelve audio (normalmente WAV o MP3) y SSN lo reproduce.
Con 6 GB de memoria de GPU o menos, empieza por modelos pequeños en servidores compatibles con OpenAI. Los modelos más grandes también funcionan si se alojan en otro equipo.
| Opción | Clona a partir de | ¿Cabe en una GPU de 6 GB? | Cómo conectarse |
|---|---|---|---|
| XTTS-v2 / openedai-speech | Clip WAV corto | Sí, unos 4 GB | Directo, /v1/audio/speech. El proyecto está archivado. |
| chatterbox-tts-api / Chatterbox-TTS-Server | Clip de referencia | Probablemente con Turbo o fragmentos pequeños | Directo o mediante puente. La GPU es más fluida que la CPU. La configuración varía según el fork. |
| Qwen3-TTS (0.6B / 1.7B) | Clip de 3 segundos | Probablemente (0.6B Base) | Necesita un adaptador compatible con OpenAI. |
| GPT-SoVITS | 5 segundos; mejor con 1 minuto | Probablemente con fp16 o una instalación ligera | Puente (Bridge) --mode gptsovits. |
| F5-TTS | Clip y su transcripción | Quizá | Un adaptador o el puente --mode f5 con F5-TTS_server. |
| MisoTTS 8B | Audio de referencia | No; se recomiendan 24 GB | Solo alojamiento remoto. El repositorio no incluye un endpoint REST local. |
Kokoro integrado y Kokoro-FastAPI no clonan voces.
Qué se probó con SSN
Comprobado con dock.html y featured.html:
- openedai-speech (Piper): voz real por CPU, directa y mediante el puente.
- Chatterbox-TTS-Server: voz real por CPU con
Emily.wav, directamente y a través del puente. - chatterbox-tts-api: formato de solicitud probado, directo y mediante el puente.
- GPT-SoVITS y F5-TTS_server: solo mediante modos del puente.
- F5-TTS oficial y Qwen3-TTS: necesitan antes un adaptador (solo CLI, Gradio o biblioteca).
¿Qué ordenador necesito?
Son orientaciones iniciales, no garantías. El tamaño del modelo, la longitud del texto y las demás aplicaciones influyen en el uso de memoria.
| Opción | Mínimo | Cómodo |
|---|---|---|
| Voz del sistema / eSpeak | Cualquier PC | Cualquier PC |
| Kitten integrado | CPU básica, 4 GB de RAM | CPU de portátil, 8 GB de RAM |
| Piper integrado | CPU moderna, 4–8 GB de RAM | CPU moderna, 8 GB de RAM |
| Kokoro integrado | CPU moderna, 8 GB de RAM | GPU compatible con WebGPU o CPU rápida, 8–16 GB de RAM |
| Kokoro-FastAPI | CPU, 8 GB de RAM | GPU NVIDIA opcional, 8–16 GB de RAM |
| openedai-speech Piper | CPU, 4–8 GB de RAM | CPU, 8 GB de RAM |
| openedai-speech XTTS | GPU NVIDIA de unos 4 GB, 8–16 GB de RAM | GPU NVIDIA con 6 GB o más; 16 GB de RAM |
| Chatterbox | CPU en algunas versiones, lenta | GPU NVIDIA con 6 GB o más; 16 GB de RAM |
| GPT-SoVITS / F5-TTS / Qwen3-TTS | CPU para pruebas, lenta | GPU NVIDIA con 6 GB o más; 16 GB de RAM |
| MisoTTS 8B | No con 6 GB | GPU de 24 GB o servidor remoto |
Lleva el audio a OBS
Fuente de navegador de OBS (recomendada)
Funciona con las voces integradas y con tu propio servidor.
- Añade un Fuente de navegador (Browser Source) con tu enlace
dock.htmlde TTS. - Activa Controlar audio vía OBS (Control audio via OBS).
- Haz clic en Aceptar (OK). TTS ya aparece en el mezclador de OBS.
Aplicación de escritorio de SSN
La aplicación de escritorio usa los mismos parámetros del enlace. Pero el sonido se reproduce desde la aplicación, no desde OBS. Captúralo con Audio de escritorio o Captura de entrada de audio (Audio Input Capture). Para separar TTS de otros sonidos, envía la aplicación a un cable virtual: pasos para enrutar el audio.
Más información sobre la aplicación de escritorio
Las ventanas de la aplicación son menos estrictas que Chrome con los permisos del navegador (CORS). El puente sigue siendo la opción más segura para servidores que rechazan solicitudes del navegador. Para Kokoro integrado, la aplicación puede usar su propia ruta ninjafy.tts en lugar de cargar el modelo en el navegador.
&speech=en-US sin proveedor) depende de las voces disponibles en OBS. A menudo no hay ninguna, o no producen sonido que se pueda capturar. Usa uno de los proveedores anteriores.Comparativa
| Opción | Configuración | Calidad | Privado | Funciona en OBS | Costo |
|---|---|---|---|---|---|
| Kokoro integrado | Ninguno | 5/5 | Sí | Sí | Gratis |
| Piper integrado | Ninguno | 4/5 | Sí | Sí | Gratis |
| Kitten integrado | Ninguno | 3/5 | Sí | Sí | Gratis |
| eSpeak integrado | Ninguno | 2/5 | Sí | Sí | Gratis |
| Kokoro-FastAPI | Docker | 5/5 | Sí | Sí | Gratis |
| openedai-speech | Docker | 4/5 | Sí | Sí | Gratis |
| ElevenLabs | Clave de API | 5/5 | No | Sí | Planes de pago |
| TTS del sistema | Ninguno | 2/5 | Sí | Necesita enrutamiento de audio | Gratis |
Solucionar problemas
| Problema | Prueba esto |
|---|---|
| La prueba de la aplicación funciona, pero OBS no suena | OBS debe poder acceder al servidor por sí mismo. ¿El servidor está en otro PC? Sustituye 127.0.0.1 por su IP local. Activa Controlar audio vía OBS (Control audio via OBS). ¿Sigue bloqueado? Ejecuta el puente en el PC de OBS. |
| Solo se lee la primera letra o las primeras palabras | Eliminar (Remove) ttsquick del enlace de OBS (por ejemplo, &ttsquick=14) y actualiza. Durante las pruebas, quita también typewriter= para descartar problemas de sincronización. |
| El servidor no responde | Comprueba que Docker y el contenedor estén activos. En el PC del servidor, abre http://127.0.0.1:8880/web/ (Kokoro-FastAPI, o el puerto de tu servidor). Desde el PC de OBS, abre http://SERVER_LAN_IP:8880/web/. Si falla, OBS tampoco podrá acceder. Comprueba el firewall del servidor. |
| «Blocked by CORS», «private network» o «failed fetch» | El navegador lo bloqueó antes de que llegara al servidor. Ejecuta node scripts/local-tts-bridge.cjs en el PC de OBS y usa http://127.0.0.1:8124/v1/audio/speech. La página del dock beta alojada tiene más probabilidades de bloquearse; el puente o una ventana local de la aplicación es más sencillo. |
| Voz incorrecta o no encontrada | Kokoro-FastAPI: af_bella, af_sarah, am_adam, o una de su página web. openedai-speech: nova, echo, alloy. Algunos servidores distinguen mayúsculas y minúsculas. |
| Se reproduce, pero OBS no lo captura | Activa Controlar audio vía OBS (Control audio via OBS). Observa el medidor del mezclador de OBS durante la prueba. Asegúrate de configurar &ttsprovider=; el TTS del sistema puede necesitar audio de escritorio o un cable virtual. |
| No se encontró la imagen de Docker | Las etiquetas de las imágenes cambian. Consulta la etiqueta actual en Kokoro-FastAPI o openedai-speech. |
Para quienes crean servidores
Cómo se comunica SSN con un servidor personalizado. Solo necesitas esto si estás creando o depurando uno.
chat text -> SSN -> your endpoint (or the bridge) -> TTS server -> audio -> SSN plays it
Qué envía SSN
Con ttsprovider=customtts, localtts o openai, SSN envía un POST JSON:
POST /v1/audio/speech
{
"model": "tts-1",
"input": "Chat message text",
"voice": "af_bella",
"response_format": "mp3",
"speed": 1.0
}
Sin una clave API configurada, SSN no envía la cabecera Authorization.
Qué puede reproducir SSN
| Respuesta | ¿Funciona? | Notas |
|---|---|---|
| Archivo de audio | Sí | La mejor. audio/mpeg, audio/wav, audio/ogg, audio/aac, o cualquier tipo reproducible por el navegador. |
| JSON con una URL de audio | Sí | Comprobaciones url, audio_url, output_url, data.url, y el primer elemento de data[] . |
| JSON con audio en base64 | Sí | Comprobaciones audio, audio_data, audioContent, b64_json, campos anidados como data y URL de datos. |
| PCM sin procesar | Solo si está encapsulado | Envíalo como archivo WAV o WAV en base64. |
Formatos: mp3 ocupa poco y es ampliamente compatible. wav es adecuado para servidores de clonación y pruebas del puente. Usa opus solo si tanto el servidor como el navegador lo admiten.
Aún no hay reproducción en streaming. SSN espera a recibir toda la respuesta y después la reproduce. Mantén cortos los mensajes del chat.
Parámetros del enlace para tu propio servidor
| Ajuste | Ejemplo | Qué hace |
|---|---|---|
ttsprovider | customtts | Usa tu propio servidor. (openai también funciona.) |
openaiendpoint | http://localhost:8880/v1/audio/speech | La dirección de tu servidor. Cambia el puerto para que coincida. |
speech | en-US | Activa TTS en inglés. |
voiceopenai | af_bella | Nombre de la voz. Depende del servidor. |
openaimodel | tts-1-hd | Nombre del modelo. Predeterminado: tts-1. |
openaiformat | mp3 | mp3, wav, opus o flac. |
openaispeed | 1.0 | Velocidad de habla (0.5–2.0). |
También se acepta: customttsendpoint, localttsendpoint, customttsvoice, localttsvoice, customttsmodel, localttsmodel, customttsformat, localttsformat. Las opciones de lectura como simpletts, skipmessages y ttsquick funcionan con cualquier proveedor: todos los parámetros del enlace.
Enlaces de ejemplo:
Kokoro-FastAPI: dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:8880/v1/audio/speech&voiceopenai=af_bella&openaispeed=1.1 openedai-speech: dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:8000/v1/audio/speech&voiceopenai=nova kokoro-web: dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:3000/api/v1/audio/speech&voiceopenai=af_bella