orange9angel/dula-voice

Fait parler chaque ligne d'un court animé avec la propre clé Volcano Engine Seed-Audio de la personne, en maintenant la cohérence vocale de chaque personnage. Génère également l'ambiance et les effets sonores.

Qu'est-ce que dula-voice ?

Cette compétence transforme un script de court métrage animé en pistes audio vocales complètes, en utilisant la propre clé Volcano Engine Seed-Audio de l'utilisateur pour garantir une voix cohérente pour chaque personnage tout au long du dialogue. Elle prend en charge la conception vocale détaillée via des champs comme `desc` (description de la voix) et `delivery` (indications de jeu), génère automatiquement des références vocales à partir de la première réplique de chaque personnage, et permet de régénérer sélectivement les lignes ultérieures si la voix de référence change. Au-delà du dialogue, elle peut créer des ambiances et des effets sonores avec une durée contrôlée via le paramètre `--seconds`. La compétence est conçue pour Claude Code et d'autres plateformes Agent, avec des garanties de sécurité intégrées : elle ne demande jamais la clé API dans la conversation et fournit un script de configuration dédié. Le workflow inclut une vérification de qualité recommandée, comme l'écoute des premières répliques et l'utilisation d'outils de transcription pour valider l'exactitude. Très utile pour les cinéastes, les créateurs de contenu et les développeurs d'agents IA qui ont besoin d'une production audio vocale automatisée mais personnalisable pour des animations, des voix off ou des sketchs audio.

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

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Voix

Les chemins de script sont relatifs à ce SKILL.md, et speak.py s'exécute depuis le dossier du film. Cette étape est facultative : des enregistrements ou de l'audio provenant de tout autre outil fonctionnent également. Placez-les dans audio/voice/<id de ligne>.wav, ou définissez file sur la ligne.

Parlez à la personne dans sa propre langue.

Configurer la clé (une fois)

Les coûts sont imputés au compte de la personne. Demandez-lui d'exécuter ceci dans son propre terminal :

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

Dans Claude Code, elle peut taper ! python <chemin>/configure.py.

Ne demandez jamais la clé dans la conversation, et ne lisez ni n'imprimez jamais ~/.dula-craft/config.env. Pour vérifier si une clé est définie, utilisez configure.py --status. Si quelqu'un colle une clé dans la conversation, dites-lui de la révoquer dans la console et d'en créer une nouvelle.

Concevoir les voix

Ajoutez voices au niveau supérieur de config/film.json :

"voices": {
  "mochi": {"desc": "Un garçon d'environ huit ans, vif et animé, rythme rapide, souffle léger"},
  "gran": {"desc": "Une femme de soixante-dix ans, chaleureuse et légèrement rauque, lente, diction très claire"}
}

Les lignes peuvent avoir une delivery :

{"id": "l03", "who": "mochi", "text": "V-vraiment ?", "delivery": "Surprise et ravie, un tremblement sur le premier mot, montant à la fin"}

Champs vocaux facultatifs : lang définit la langue (par défaut, la langue de la ligne) ; speaker définit un identifiant vocal officiel Volcano Engine ; reference pointe vers un audio de référence pour lequel la personne a les droits d'utilisation.

Rédigez desc et delivery en anglais, ou dans la langue des lignes. Décrivez la voix elle-même : âge, tension, souffle, rythme et poids. "Joyeux" seul ne changera pas une voix. N'écrivez pas "ressemble à un certain acteur ou personnage", et ne choisissez pas des voix qui imitent des personnages connus ou des personnes réelles. Les voix comportent également des risques de ressemblance et de droits d'auteur.

Générer

python <ce dossier>/scripts/speak.py --dry-run   # Voir les invites sans rien dépenser
python <ce dossier>/scripts/speak.py

La première ligne de chaque personnage devient la référence vocale pour ses lignes suivantes, donc écoutez d'abord la première ligne. Si elle ne convient pas, modifiez desc et recommencez. Après avoir changé une première ligne, utilisez --only pour refaire les lignes suivantes de ce personnage afin qu'elles suivent la nouvelle voix.

Lorsque vous modifiez une ligne ou une voix et relancez, seul ce qui a changé est régénéré.

Ambiance et effets sonores

python <ce dossier>/scripts/speak.py --sound "Une vieille pièce tranquille, un oiseau au loin de temps en temps" --seconds 10 --out audio/sfx/room.wav

Donnez toujours --seconds. La facturation suit la durée, et sans cela un clip peut durer 30 secondes ou plus. C'est approximatif, et les très courtes demandes ont tendance à revenir plus longues. Les clips générés sont souvent silencieux, alors donnez aux sons narratifs un level_db dans film.json (voir la référence film.json).

Générez une chose à la fois. Ne demandez pas une seule invite pour le dialogue, les effets et la musique ensemble, sinon vous ne pourrez pas régler les niveaux séparément et les lèvres seront décalées.

Vérifier le résultat

  • Écoutez si vous le pouvez. Si vous ne le pouvez pas, dites à la personne "cet audio n'a pas été vérifié à l'oreille".
  • Ce que vous pouvez faire vous-même : vérifiez que les durées ont du sens (5 secondes pour une courte ligne est un problème). Si un outil de transcription comme Whisper est disponible, comparez son texte avec le script. Les mots très silencieux peuvent manquer, ce qui est un signe pour les refaire.
  • delivery est une demande, pas un contrôle exact. Les durées de pause en particulier ne sont pas fiables, alors raccourcissez la ligne ou regénérez si le rythme est mauvais.
  • La même invite donne un résultat différent à chaque fois, donc regénérez en cas d'erreur.

Problèmes courants

SymptômeCorrectif
Clé rejetée, ou Audio Generation 1.0 n'est pas activéVérifiez que le service est activé. La clé doit provenir de la console vocale, et les clés Ark ne fonctionnent pas
Un mot est mal luRégénérez, ou reformulez la ligne
Les lignes ne semblent pas d'une seule personneAssurez-vous que la première ligne est correcte, puis refaites les suivantes avec --only, ou définissez un speaker
La fin d'une ligne est coupéeDemandez une delivery plus lente, ou régénérez

Individual skills in this repo

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

Skills associés