CommunityProgramación y desarrollogithub.com

orange9angel/dula-voice

Haz que cada línea de un corto animado suene con la propia clave Volcano Engine Seed-Audio de la persona, manteniendo la coherencia de cada personaje. También genera ambiente y efectos de sonido. Útil para voces de personajes, audio de diálogos, actuación de voz, ambiente y efectos de sonido.

¿Qué es dula-voice?

Esta habilidad te permite generar voces consistentes para personajes en cortos animados utilizando la propia clave Volcano Engine Seed-Audio de la persona, evitando costos adicionales. El flujo de trabajo incluye la configuración inicial de la clave (una vez), el diseño de voces mediante descripciones textuales en el archivo `config/film.json`, y la generación de audio con el script `speak.py`. Además, permite crear ambiente y efectos de sonido a partir de descripciones en lenguaje natural. La herramienta está optimizada para uso en Claude Code, Cursor u otros entornos de línea de comandos, y maneja automáticamente la regeneración solo de las líneas modificadas. Es importante escuchar la primera línea de cada personaje para verificar la voz antes de generar el resto, ya que esa primera línea sirve como referencia. También se incluyen consejos para depuración y solución de problemas comunes como claves rechazadas o palabras mal interpretadas.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/orange9angel/dula-craft/tree/HEAD/skills/dula-voice

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

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

Documentación

Voces

Las rutas de los scripts son relativas a este SKILL.md, y speak.py se ejecuta desde la carpeta de la película. Este paso es opcional: también funcionan grabaciones o audio de cualquier otra herramienta. Colócalos en audio/voice/<id de línea>.wav, o establece file en la línea.

Háblale a la persona en su propio idioma.

Configurar la clave (una vez)

Los costos corren por cuenta de la persona. Pídele que ejecute esto en su propia terminal:

python <carpeta-dula-start>/scripts/configure.py

En Claude Code, pueden escribir ! python <ruta>/configure.py.

Nunca pidas la clave en la conversación, y nunca leas ni imprimas ~/.dula-craft/config.env. Para comprobar si hay una configurada, usa configure.py --status. Si alguien pega una clave en la conversación, indícale que la revoque en la consola y cree una nueva.

Diseñar las voces

Agrega voices al nivel superior de config/film.json:

"voices": {
  "mochi": {"desc": "Un niño de unos ocho años, vivaz y animado, ritmo rápido, respiración ligera"},
  "gran": {"desc": "Una mujer de setenta, cálida y ligeramente ronca, lenta, dicción muy clara"}
}

Las líneas pueden tener un delivery:

{"id": "l03", "who": "mochi", "text": "¿De-de verdad?", "delivery": "Sorprendido y encantado, un temblor en la primera palabra, subiendo al final"}

Campos opcionales de voz: lang establece el idioma (por defecto, el idioma de la línea); speaker establece un ID de voz oficial de Volcano; reference apunta a audio de referencia que la persona tenga derechos de uso.

Escribe desc y delivery en inglés, o en el idioma de las líneas. Describe la voz en sí misma: edad, tensión, respiración, ritmo y peso. "Feliz" por sí solo no cambiará una voz. No escribas "suena como tal actor o personaje", ni elijas voces que imiten personajes conocidos o personas reales. Las voces también conllevan riesgos de parecido y derechos de autor.

Generar

python <carpeta de este>/scripts/speak.py --dry-run   # Ver las indicaciones sin gastar nada
python <carpeta de este>/scripts/speak.py

La primera línea de cada personaje se convierte en la referencia de voz para sus líneas posteriores, por lo que escucha la primera línea primero. Si no es correcta, cambia desc y repítela. Después de cambiar una primera línea, usa --only para rehacer las líneas posteriores de ese personaje y que sigan la nueva voz.

Cuando cambias una línea o una voz y vuelves a ejecutarlo, solo se regenera lo que ha cambiado.

Ambiente y efectos de sonido

python <carpeta de este>/scripts/speak.py --sound "Una habitación vieja y tranquila, un pájaro a lo lejos de vez en cuando" --seconds 10 --out audio/sfx/habitacion.wav

Siempre indica --seconds. La facturación sigue la duración, y sin él un clip puede durar 30 segundos o más. Es aproximado, y las solicitudes muy cortas tienden a volverse más largas. Los clips generados suelen ser bajos, así que asigna un level_db a los sonidos de la historia en film.json (consulta la referencia de film.json).

Genera una cosa a la vez. No pidas una sola indicación para diálogos, efectos y música juntos, o no podrás ajustar los niveles por separado y las bocas estarán mal.

Verificar el resultado

  • Escucha si puedes. Si no puedes, dile a la persona "este audio no ha sido verificado al oído".
  • Cosas que puedes hacer tú mismo: comprobar que las duraciones tengan sentido (5 segundos para una línea corta es un problema). Si hay disponible una herramienta de transcripción como Whisper, compara su texto con el guion. Pueden faltar palabras muy bajas, lo que es señal de repetirlas.
  • delivery es una solicitud, no un control exacto. Las pausas en particular no son fiables, así que acorta la línea o regenérala si el ritmo es incorrecto.
  • La misma indicación da un resultado diferente cada vez, así que regenera en caso de errores.

Problemas comunes

SíntomaSolución
Clave rechazada, o Audio Generation 1.0 no está habilitadoVerifica que el servicio esté habilitado. La clave debe venir de la consola de voz, y las claves Ark no funcionan
Una palabra se lee malRegenera, o reformula la línea
Las líneas no suenan como una sola personaAsegúrate de que la primera línea sea correcta, luego repite las posteriores con --only, o establece un speaker
El final de una línea se cortaPide una delivery más lenta, o regenera

Individual skills in this repo

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

Skills relacionados