Communitygithub.com

tts

Convierte cualquier texto en audio de voz. Soporta dos motores (Kokoro local, Noiz en la nube), dos modos (simple o con sincronización de tiempos) y control de voz por segmento.

¿Qué es tts?

Esta habilidad permite a un agente de IA convertir texto a voz (TTS) utilizando dos motores backend: Kokoro (local, sin conexión a internet) y Noiz (en la nube, con más opciones). Ofrece dos modos de funcionamiento: un modo simple para convertir texto directamente a audio con parámetros básicos (voz, velocidad, formato) y un modo de línea de tiempo (timeline) que procesa archivos SRT para generar audio sincronizado con tiempos precisos, ideal para doblaje, subtítulos o narración de videos. Además, permite control granular de la voz por segmento mediante un archivo JSON de mapa de voces, soporta clonación de voz a partir de un archivo de audio de referencia, control de emociones (solo en Noiz) y un modo invitado que funciona sin necesidad de clave API pero con funcionalidades limitadas. Está diseñada para integrarse fácilmente con plataformas externas como Feishu, Telegram o Discord, y maneja la seguridad de datos al almacenar credenciales de forma segura y limpiar archivos temporales.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/noizai/skills/tree/main/skills/tts

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace tts?

Convierte cualquier texto en audio de voz. Soporta dos motores backend (Kokoro local, Noiz en la nube), dos modos (simple o con sincronización de tiempos) y control de voz por segmento.

Disparadores

  • text to speech / tts / speak / say
  • voice clone / dubbing (clonación de voz / doblaje)
  • epub to audio / srt to audio / convert to audio (epub a audio / srt a audio / convertir a audio)
  • 语音 / 说 / 讲 / 说话

Modo Simple — texto a audio

speak es el modo predeterminado; el subcomando se puede omitir:

# Uso básico (speak está implícito)
python3 skills/tts/scripts/tts.py -t "Hola mundo"          # añade -o ruta para guardar
python3 skills/tts/scripts/tts.py -f articulo.txt -o salida.mp3

# Clonación de voz — ruta de archivo local o URL
python3 skills/tts/scripts/tts.py -t "Hola" --ref-audio ./ref.wav
python3 skills/tts/scripts/tts.py -t "Hola" --ref-audio https://ejemplo.com/mi_voz.wav -o clon.wav

# Formato de mensaje de voz
python3 skills/tts/scripts/tts.py -t "Hola" --format opus -o voz.opus
python3 skills/tts/scripts/tts.py -t "Hola" --format ogg -o voz.ogg

La integración con terceros (Feishu/Telegram/Discord) está documentada en ref_3rd_party.md.

Modo de Línea de Tiempo — SRT a audio con tiempos sincronizados

Para sincronización precisa por segmento (doblaje, subtítulos, narración de videos).

Paso 1: Obtener o crear un archivo SRT

Si el usuario no tiene uno, generarlo a partir del texto:

python3 skills/tts/scripts/tts.py to-srt -i articulo.txt -o articulo.srt
python3 skills/tts/scripts/tts.py to-srt -i articulo.txt -o articulo.srt --cps 15 --gap 500

--cps = caracteres por segundo (por defecto 4, bueno para chino; ~15 para inglés). El agente también puede escribir el SRT manualmente.

Paso 2: Crear un mapa de voces

Archivo JSON que controla la configuración de voz predeterminada y por segmento. Las claves segments soportan un índice único "3" o un rango "5-8".

Mapa de voces para Kokoro:

{
  "default": { "voice": "zf_xiaoni", "lang": "cmn" },
  "segments": {
    "1": { "voice": "zm_yunxi" },
    "5-8": { "voice": "af_sarah", "lang": "en-us", "speed": 0.9 }
  }
}

Mapa de voces para Noiz (añade soporte para emo, reference_audio). reference_audio puede ser una ruta local o una URL (audio propio del usuario; solo Noiz):

{
  "default": { "voice_id": "voice_123", "target_lang": "zh" },
  "segments": {
    "1": { "voice_id": "voice_host", "emo": { "Joy": 0.6 } },
    "2-4": { "reference_audio": "./refs/invitado.wav" }
  }
}

Segmentación Dinámica de Audio de Referencia: Si estás traduciendo o doblando un video y deseas que cada oración use automáticamente el audio del video original en la misma marca de tiempo como su audio de referencia, usa el argumento --ref-audio-track en lugar de configurar reference_audio en el mapa:

python3 skills/tts/scripts/tts.py render --srt entrada.srt --voice-map vm.json --ref-audio-track video_original.mp4 -o salida.wav

Consulta examples/ para ejemplos completos.

Paso 3: Renderizar

python3 skills/tts/scripts/tts.py render --srt entrada.srt --voice-map vm.json -o salida.wav
python3 skills/tts/scripts/tts.py render --srt entrada.srt --voice-map vm.json --backend noiz --auto-emotion -o salida.wav

Cuándo Elegir Cuál

NecesidadRecomendado
Simplemente leer texto en voz alta, sin complicacionesKokoro (predeterminado)
Audiolibro EPUB/PDF con capítulosKokoro (soporte nativo)
Mezcla de voces ("v1:60,v2:40")Kokoro
Clonación de voz desde audio de referenciaNoiz
Control de emociones (parámetro emo)Noiz
Duración exacta por segmento en el servidorNoiz

Cuando el usuario necesita control de emociones + clonación de voz + duración precisa juntos, Noiz es el único backend que soporta los tres.

Modo Invitado (sin clave API)

Cuando no hay una clave API configurada, tts.py cae automáticamente en modo invitado — un endpoint limitado de Noiz que no requiere autenticación. El modo invitado solo soporta --voice-id, --speed y --format; no están disponibles la clonación de voz, emociones, duración ni renderizado de línea de tiempo.

# Modo invitado (detectado automáticamente cuando no hay clave API)
python3 skills/tts/scripts/tts.py -t "Hola" --voice-id 883b6b7c -o hola.wav

# Sobrescribir explícitamente el backend para usar kokoro en su lugar
python3 skills/tts/scripts/tts.py -t "Hola" --backend kokoro

Voces de invitado disponibles (15 incorporadas):

voice_idnombreidiomagénerotono
063a4491販売員(なおみ)jaM喜び
4252b9c8落ち着いた女性jaF穏やか
578b4be2熱血漢(たける)jaH怒り
a9249ce7安らぎ(みなと)jaH穏やか
f00e45a1旅人(かいと)jaH穏やか
b4775100悦悦|社交分享zhFAlegre
77e15f2c婉青|情绪抚慰zhFCalmada
ac09aeb4阿豪|磁性主持zhHCalmado
87cb2405建国|知识科普zhHCalmado
3b9f1e27小明|科技达人zhHAlegre
95814addScience Narration (Narración Científica)enHCalmado
883b6b7cThe Mentor (Alex)enHAlegre
a845c7deThe Naturalist (Silas)enHCalmado
5a68d66bThe Healer (Serena)enFCalmada
0e4ab6ecThe Mentor (Maya)enFCalmada

Seguridad y divulgación de datos

Esta habilidad realiza las siguientes operaciones de archivos y red en tiempo de ejecución:

  • Almacenamiento de credenciales: Cuando ejecutas config --set-api-key, la clave se guarda en ~/.config/noiz/api_key (permisos 0600). La variable de entorno NOIZ_API_KEY también es compatible como alternativa.
  • Migración de clave heredada: Si ~/.noiz_api_key existe y ~/.config/noiz/api_key no existe, la clave se copia (no se elimina) a la nueva ubicación. Se imprime un mensaje; el archivo antiguo no se modifica para que lo elimines manualmente.
  • Llamadas de red (backend Noiz): El texto y el audio de referencia opcional se cargan a https://noiz.ai/v1/ para la síntesis. No se envían datos a menos que invoques un comando de Noiz.
  • Descarga de audio de referencia: Cuando --ref-audio es una URL, el archivo se descarga en un archivo temporal, se utiliza para la llamada API y luego se elimina. Si no se proporciona voice-id ni ref-audio, se descarga un audio de referencia predeterminado desde storage.googleapis.com o noiz.ai.
  • Archivos temporales: Se pueden crear archivos temporales de audio/texto durante la síntesis y se limpian después de su uso.
  • ffmpeg: Se invoca solo en el modo de renderizado de línea de tiempo para ensamblar el audio final.

No se modifican archivos fuera de la ruta de salida y ~/.config/noiz/. El backend Kokoro funciona completamente sin conexión, sin acceso a la red.

Requisitos

  • ffmpeg en PATH (solo para modo de línea de tiempo)
  • Paquete requests: uv pip install requests (necesario para el backend Noiz)
  • Obtén tu clave API en Noiz Developer, luego ejecuta python3 skills/tts/scripts/tts.py config --set-api-key TU_CLAVE (el modo invitado funciona sin clave pero tiene funciones limitadas)
  • Kokoro: si ya está instalado, pasa --backend kokoro para usar el backend local

Autenticación de la API de Noiz

Usa solamente la clave API codificada en base64 como Authorization—sin prefijo (por ejemplo, sin APIKEY ni Bearer ). Cualquier prefijo resulta en un error 401.

Para detalles del backend y la referencia completa de argumentos, consulta reference.md.

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

Skills relacionados