Communitygithub.com

hmisaki/voicebox

Usa esta skill para añadir un nuevo motor TTS a Voicebox. Guía a través de la investigación de dependencias, implementación del backend, conexión del frontend, empaquetado con PyInstaller y pruebas de compilación congelada. Siempre comienza con la Fase 0 (auditoría de dependencias) antes de escribir cualquier código.

¿Qué es voicebox?

Esta skill automatiza la integración de un nuevo motor de texto a voz (TTS) en la aplicación Voicebox, cubriendo el proceso completo desde la investigación inicial hasta la compilación congelada. Está diseñada para agentes de IA (como Claude Code, Cursor o Codex) que trabajan en el repositorio de Voicebox. La skill impone un flujo de trabajo estricto en fases: comienza con una auditoría obligatoria de dependencias (Fase 0) para evitar errores comunes como los que ocurrieron en la versión v0.2.3, luego procede con la implementación del backend (protocolo TTSBackend), la integración del frontend (5 archivos clave), la actualización de dependencias y finalmente el empaquetado con PyInstaller. Incluye una lista de verificación detallada para cada fase y documenta patrones de fallo típicos en compilaciones congeladas, como problemas con `inspect.getsource()`, paquetes que envían archivos de modelo preentrenados, dependencias nativas con rutas fijas y errores de metadatos. No crea releases ni hace push; su objetivo es producir una compilación lista para pruebas locales.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hmisaki/voicebox/tree/HEAD/.agents/skills/add-tts-engine

Preguntar en tu IA favorita

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

Documentación

Añadir Motor TTS

Objetivo

Integrar un nuevo motor de texto a voz en Voicebox de extremo a extremo: investigación de dependencias, implementación del protocolo backend, conexión de la interfaz de usuario frontend, empaquetado con PyInstaller y verificación de la compilación congelada. El usuario solo debe probar la compilación final localmente.

Documento de referencia

La guía completa por fases se encuentra en docs/content/docs/developer/tts-engines.mdx. Lee este archivo en su totalidad antes de empezar. Contiene:

  • Fase 0: Investigación de dependencias (obligatoria antes de escribir código)
  • Fase 1: Implementación del backend (protocolo TTSBackend)
  • Fase 2: Integración de rutas y servicios (normalmente sin cambios)
  • Fase 3: Integración del frontend (5 archivos)
  • Fase 4: Dependencias (requirements.txt, justfile, CI, Docker)
  • Fase 5: Empaquetado con PyInstaller (build_binary.py + server.py)
  • Fase 6: Soluciones comunes para problemas ascendentes
  • Lista de verificación de implementación (puerta entre fases)

Flujo de trabajo

1. Leer la guía

# Lee el documento completo sobre motores TTS
cat docs/content/docs/developer/tts-engines.mdx

Internaliza todas las fases, especialmente la Fase 0 y la Fase 5. El lanzamiento v0.2.3 tuvo tres parches porque se omitió la Fase 0.

2. Investigación de dependencias (Fase 0)

Clona la biblioteca del modelo en un directorio temporal y audítala. NO la omitas.

mkdir /tmp/engine-research && cd /tmp/engine-research
git clone <model-library-url>

Ejecuta las búsquedas grep de la Fase 0.2 de la guía contra el código clonado y sus dependencias transitivas. Genera una auditoría de dependencias por escrito que cubra:

  1. Paquetes de PyPI vs no PyPI
  2. Directivas de PyInstaller necesarias (--collect-all, --copy-metadata, --hidden-import)
  3. Archivos de datos en tiempo de ejecución que deben incluirse
  4. Rutas de bibliotecas nativas que necesitan anulaciones de variables de entorno en compilaciones congeladas
  5. Parches necesarios (torch.load, float64, MPS, token HF)
  6. Frecuencia de muestreo
  7. Método de descarga del modelo (from_pretrained vs snapshot_download + from_local)

Prueba la carga y generación del modelo en CPU en el entorno virtual temporal antes de continuar.

3. Implementar (Fases 1–4)

Sigue las fases de la guía en orden. Archivos clave a modificar:

Backend (Fase 1):

  • Crear backend/backends/<engine>_backend.py
  • Registrar en backend/backends/__init__.py (ModelConfig + TTS_ENGINES + fábrica)
  • Actualizar la expresión regular en backend/models.py

Frontend (Fase 3):

  • app/src/lib/api/types.ts — tipo unión del motor
  • app/src/lib/constants/languages.ts — ENGINE_LANGUAGES
  • app/src/components/Generation/EngineModelSelector.tsx — ENGINE_OPTIONS, ENGINE_DESCRIPTIONS
  • app/src/lib/hooks/useGenerationForm.ts — esquema Zod, mapeo de nombres de modelo
  • app/src/components/ServerSettings/ModelManagement.tsx — MODEL_DESCRIPTIONS

Dependencias (Fase 4):

  • backend/requirements.txt
  • justfile (objetivos setup-python, setup-python-release)
  • .github/workflows/release.yml
  • Dockerfile (si aplica)

4. Empaquetado con PyInstaller (Fase 5)

Registra el motor en backend/build_binary.py:

  • --hidden-import para el módulo del backend y el paquete del modelo
  • --collect-all para paquetes que usan inspect.getsource, envían archivos de datos o bibliotecas nativas
  • --copy-metadata para paquetes que usan importlib.metadata

Si el motor tiene rutas de datos nativas, añade os.environ.setdefault() en backend/server.py dentro del bloque if getattr(sys, 'frozen', False):.

5. Verificar en modo desarrollo

just dev

Prueba la cadena completa: descarga del modelo → carga → generación → clonación de voz.

6. Usar la lista de verificación

Recorre la Lista de Verificación de Implementación al final de tts-engines.mdx. Cada elemento debe estar marcado antes de entregar la compilación al usuario.

Lecciones clave (de v0.2.3)

Estos son los modos de fallo más comunes. La investigación de la Fase 0 los detecta todos:

PatrónSíntoma en compilación congeladaSolución
@typechecked / inspect.getsource()"could not get source code"--collect-all <paquete>
El paquete incluye archivos de modelo preentrenadosFileNotFoundError para .pth.tar, .yaml--collect-all <paquete>
Biblioteca C con rutas de sistema fijasFileNotFoundError para /usr/share/...--collect-all + variable de entorno en server.py
importlib.metadata.version()"No package metadata found"--copy-metadata <paquete>
torch.load sin map_locationDispositivo CUDA no disponible en compilación CPUParchear torch.load
torch.from_numpy en datos float64RuntimeError por tipo de dato incorrectoConvertir a .float()
token=True en llamadas de descarga HFFallo de autenticación sin token HF almacenadoUsar snapshot_download(token=None) + from_local()

Notas

  • Las capas de ruta y servicio no tienen puntos de envío por motor. main.py no requiere cambios.
  • El registro de configuración de modelos en backends/__init__.py maneja todo el envío automáticamente.
  • Usa get_torch_device() y model_load_progress() de backends/base.py — no reimplementes la detección de dispositivos ni el seguimiento de progreso.
  • Siempre prueba con una caché de HuggingFace limpia (sin modelos descargados previamente del desarrollo).
  • NO hagas push ni crees un lanzamiento. Entrega la compilación al usuario para pruebas locales.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills relacionados