Guía de TTS local con IA

Ejecuta las voces del chat en tu propio ordenador. A la mayoría de streamers les bastan las voces integradas.

¿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 nadaUsa: voces integradas. La mayoría no necesita más.
Usar un servidor de voz que ya tengo en marchaConectar un servidor.
Una voz clonadaConsulta clonación de voz.
Fish Audio en OBSConsulta: Configuración de Fish Audio.
Voces de pago en la nubeConsulta: Referencia de TTS.
Funciona con cualquier chat que SSN capture. La voz pertenece al reproductor de SSN, no a YouTube ni a Twitch. A diferencia de TTS del sistema, las voces de IA locales generan su propio audio y OBS puede capturarlo. Compara proveedores y escucha muestras.

Voces integradas (sin instalar nada)

Se ejecutan dentro de SSN en tu navegador. Sin servidor, Docker ni clave API.

VozSonidoCarga del equipoValor del enlace
KokoroExcelenteMedio. Más rápido con una GPU.ttsprovider=kokoro
PiperMuy buenaBajo. Solo CPU.ttsprovider=piper
KittenBuenaMuy bajo. Solo CPU.ttsprovider=kitten
eSpeak-NGRobóticoMínimo. Solo CPU.ttsprovider=espeak

Configúralo en 4 pasos

  1. Añade &speech=en-US&ttsprovider=kokoro a tu dock.html (enlace). (O piper, kitten, espeak.)
  2. Añade ese enlace a OBS como Fuente de navegador (Browser Source). Esa es la página que produce el sonido.
  3. En sus propiedades, activa Controlar audio vía OBS (Control audio via OBS).
  4. Envía un mensaje de prueba corto al chat, como Testing local TTS.
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=kokoro
El primer uso es lento. Kokoro y Piper descargan primero sus modelos (unos 50–200 MB). Las siguientes cargas los reutilizan, pero el inicio sigue tardando un momento. OBS guarda su propia copia, independiente de Chrome.

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.

  1. Inicia tu servidor. Kokoro-FastAPI es la opción más sencilla.
  2. En SSN, abre la lista de proveedores TTS y elige Endpoint TTS personalizado / local.
  3. En Endpoint API personalizado/local, introduce la dirección del servidor, como http://127.0.0.1:8880/v1/audio/speech.
  4. Deja vacía la clave API.
  5. Elige una voz que tu servidor reconozca: af_bella para Kokoro, nova para openedai-speech.
  6. Copia el enlace en OBS y envía un mensaje de prueba.
Mapa ilustrado de los campos de TTS local en Social Stream Ninja
El endpoint es el campo importante.
¿OBS está en otro ordenador? Lee la regla de localhost primero. ¿Bloqueado por el navegador? Usa: puente.
ServidorModeloGPUDiscoPuerto
Kokoro-FastAPI (recomendado)Kokoro 82MOpcional~2 GB8880
openedai-speech (Piper)PiperSolo CPU<1 GB8000
kokoro-webKokoro 82MOpcional~2 GB3000

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.
Diagrama que muestra que localhost se refiere a la misma computadora, mientras que otra computadora necesita una dirección IP de la red local
Tu configuraciónUsa esta dirección
OBS y el servidor en el mismo PChttp://127.0.0.1:8880/v1/audio/speech
Servidor en otro PC de casahttp://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 sonidoOBS 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.

  1. 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.
  2. Abrir http://localhost:8880/web/. Debería aparecer una página para probar voces (más de 67 disponibles).
  3. 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
Usa nombres de voces de Kokoro, como 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)

Proyecto archivado. openedai-speech se archivó en enero de 2026 y se describe como obsoleto en su mayor parte. Sigue sirviendo de ejemplo, pero no recibe actualizaciones. Mantenlo en local. Nunca expongas su puerto a Internet; no tiene inicio de sesión.

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
  1. 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, utiliza cp sample.env speech.env. Docker necesita acceso a la GPU. El modelo se descarga en el primer uso.
  2. 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
  3. En config/voice_to_speaker.yaml, añádelo en la sección existente tts-1-hd (conserva las voces que ya haya):
    tts-1-hd:
      me:
        model: xtts
        speaker: voices/me.wav
        language: en
    Cambia me por el nombre que enviará SSN.
  4. 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.

Regla más sencilla: ejecuta el puente en el ordenador de OBS. Así OBS siempre usa http://127.0.0.1:8124/v1/audio/speech, aunque el servidor de voz esté en otro PC.
Diagrama que muestra a OBS comunicándose con el puente local y al puente comunicándose con el servidor TTS
  1. 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, como http://192.168.x.x:8880/v1/audio/speech.
  2. En la carpeta de SSN, ejecuta node scripts/local-tts-bridge.cjs. Déjalo en ejecución.
  3. 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.

  1. Graba un clip limpio de una sola persona hablando, normalmente de 3–30 segundos, con poco ruido de fondo.
  2. Algunos servidores también necesitan las palabras exactas pronunciadas en el clip.
  3. El servidor convierte el clip en un perfil de voz.
  4. SSN envía el texto del chat con ttsprovider=customtts.
  5. El servidor devuelve audio (normalmente WAV o MP3) y SSN lo reproduce.
Clona solo voces que sean tuyas o que tengas permiso para usar.
XTTS-v2 es para uso no comercial de forma predeterminada. Su Coqui Public Model License permite únicamente el uso no comercial. Una emisión monetizada podría no cumplir esta condición. Comprueba primero la licencia u obtén permiso.

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ónClona a partir de¿Cabe en una GPU de 6 GB?Cómo conectarse
XTTS-v2 / openedai-speechClip WAV cortoSí, unos 4 GBDirecto, /v1/audio/speech. El proyecto está archivado.
chatterbox-tts-api / Chatterbox-TTS-ServerClip de referenciaProbablemente con Turbo o fragmentos pequeñosDirecto 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 segundosProbablemente (0.6B Base)Necesita un adaptador compatible con OpenAI.
GPT-SoVITS5 segundos; mejor con 1 minutoProbablemente con fp16 o una instalación ligeraPuente (Bridge) --mode gptsovits.
F5-TTSClip y su transcripciónQuizáUn adaptador o el puente --mode f5 con F5-TTS_server.
MisoTTS 8BAudio de referenciaNo; se recomiendan 24 GBSolo 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ónMínimoCómodo
Voz del sistema / eSpeakCualquier PCCualquier PC
Kitten integradoCPU básica, 4 GB de RAMCPU de portátil, 8 GB de RAM
Piper integradoCPU moderna, 4–8 GB de RAMCPU moderna, 8 GB de RAM
Kokoro integradoCPU moderna, 8 GB de RAMGPU compatible con WebGPU o CPU rápida, 8–16 GB de RAM
Kokoro-FastAPICPU, 8 GB de RAMGPU NVIDIA opcional, 8–16 GB de RAM
openedai-speech PiperCPU, 4–8 GB de RAMCPU, 8 GB de RAM
openedai-speech XTTSGPU NVIDIA de unos 4 GB, 8–16 GB de RAMGPU NVIDIA con 6 GB o más; 16 GB de RAM
ChatterboxCPU en algunas versiones, lentaGPU NVIDIA con 6 GB o más; 16 GB de RAM
GPT-SoVITS / F5-TTS / Qwen3-TTSCPU para pruebas, lentaGPU NVIDIA con 6 GB o más; 16 GB de RAM
MisoTTS 8BNo con 6 GBGPU 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.

  1. Añade un Fuente de navegador (Browser Source) con tu enlace dock.html de TTS.
  2. Activa Controlar audio vía OBS (Control audio via OBS).
  3. 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.

No confundas la prueba de la aplicación con OBS. Pulsar Test en la aplicación hace la prueba desde la aplicación. Con un enlace en OBS, es OBS quien debe acceder al servidor y reproducir 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.

TTS del sistema (&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ónConfiguraciónCalidadPrivadoFunciona en OBSCosto
Kokoro integradoNinguno5/5SíSíGratis
Piper integradoNinguno4/5SíSíGratis
Kitten integradoNinguno3/5SíSíGratis
eSpeak integradoNinguno2/5SíSíGratis
Kokoro-FastAPIDocker5/5SíSíGratis
openedai-speechDocker4/5SíSíGratis
ElevenLabsClave de API5/5NoSíPlanes de pago
TTS del sistemaNinguno2/5SíNecesita enrutamiento de audioGratis

Solucionar problemas

Lista de comprobación ilustrada para resolver problemas de TTS local
¿Funciona en un sitio pero no en otro? Comprueba en este orden: ordenador, dirección, voz, permisos del navegador y audio de OBS.
ProblemaPrueba esto
La prueba de la aplicación funciona, pero OBS no suenaOBS 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 palabrasEliminar (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 respondeComprueba 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 encontradaKokoro-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 capturaActiva 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 DockerLas 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 audioSíLa mejor. audio/mpeg, audio/wav, audio/ogg, audio/aac, o cualquier tipo reproducible por el navegador.
JSON con una URL de audioSíComprobaciones url, audio_url, output_url, data.url, y el primer elemento de data[] .
JSON con audio en base64SíComprobaciones audio, audio_data, audioContent, b64_json, campos anidados como data y URL de datos.
PCM sin procesarSolo si está encapsuladoEnví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
AjusteEjemploQué hace
ttsprovidercustomttsUsa tu propio servidor. (openai también funciona.)
openaiendpointhttp://localhost:8880/v1/audio/speechLa dirección de tu servidor. Cambia el puerto para que coincida.
speechen-USActiva TTS en inglés.
voiceopenaiaf_bellaNombre de la voz. Depende del servidor.
openaimodeltts-1-hdNombre del modelo. Predeterminado: tts-1.
openaiformatmp3mp3, wav, opus o flac.
openaispeed1.0Velocidad 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