CommunityCodierung & Entwicklunggithub.com

orange9angel/dula-voice

Spricht jede Zeile eines animierten Kurzfilms mit dem persönlichen Volcano Engine Seed-Audio-Key der Person und sorgt für konsistente Stimmen. Erzeugt auch Atmosphäre und Soundeffekte. Nutzbar für Charakterstimmen, Dialog-Audio, Sprachaufnahmen, Atmosphäre und Soundeffekte.

Was ist dula-voice?

Dieses Skill ermöglicht es, für einen animierten Kurzfilm automatisch Sprachausgabe und Soundeffekte zu erzeugen. Es verwendet den persönlichen Volcano Engine Seed-Audio-Key des Nutzers – die Kosten gehen zu Lasten des eigenen Kontos. Der Workflow ist in vier Schritte unterteilt: Einrichtung des API-Keys, Festlegen der Stimmen für die Charaktere in `config/film.json`, Erzeugung der Sprachausgabe mit dem Skript `speak.py` sowie das Hinzufügen von Soundeffekten und Atmosphäre. Besonders wichtig ist die konsistente Stimmführung: Jede Figur erhält eine einmalige Stimmbeschreibung (`desc`), und die erste generierte Zeile dient als Referenz für alle nachfolgenden Zeilen derselben Figur. Das Skill wird über die Befehlszeile bedient, typischerweise in Claude Code oder einem anderen Terminal. Es kann in beliebigen Filmordnern eingesetzt werden, sofern die Skriptpfade relativ zur SKILL.md-Datei korrekt gesetzt sind. Die Beschreibungen der Stimmen (`desc` und `delivery`) sollen das Stimmprofil (Alter, Spannung, Atem, Tempo, Gewicht) in englischer oder der Sprache der Dialoge enthalten – nicht „glücklich“ allein, sondern detailliert. Es werden nur selbst erstellte oder lizenzrechtlich einwandfreie Referenz-Audiodateien verwendet.

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

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Stimmen

Skriptpfade sind relativ zu dieser SKILL.md-Datei, und speak.py wird aus dem Filmordner heraus ausgeführt. Dieser Schritt ist optional: Auch Aufnahmen oder Audio aus anderen Werkzeugen funktionieren. Lege sie unter audio/voice/<zeilen-id>.wav ab oder setze file in der Zeile.

Sprich mit der Person in ihrer eigenen Sprache.

Den Key einrichten (einmalig)

Die Kosten gehen auf das eigene Konto der Person. Bitte sie, dies in ihrem eigenen Terminal auszuführen:

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

In Claude Code können sie ! python <pfad>/configure.py eingeben.

Frage niemals nach dem Key im Gespräch und lies oder zeige niemals ~/.dula-craft/config.env. Verwende configure.py --status, um zu prüfen, ob einer gesetzt ist. Falls jemand einen Key im Gespräch einfügt, sage ihm, er soll ihn in der Konsole widerrufen und einen neuen erstellen.

Die Stimmen entwerfen

Füge voices auf der obersten Ebene von config/film.json hinzu:

"voices": {
  "mochi": {"desc": "Ein etwa achtjähriger Junge, aufgeweckt und lebhaft, schnelles Tempo, leichter Atem"},
  "gran": {"desc": "Eine Frau von etwa siebzig, warm und leicht heiser, langsam, sehr deutliche Aussprache"}
}

Zeilen können eine delivery haben:

{"id": "l03", "who": "mochi", "text": "W-wirklich?", "delivery": "Überrascht und erfreut, ein Zittern beim ersten Wort, am Ende ansteigend"}

Optionale Stimmenfelder: lang setzt die Sprache (standardmäßig die Sprache der Zeile); speaker setzt eine offizielle Volcano-Stimmen-ID; reference verweist auf Referenz-Audio, für das die Person die Rechte hat.

Schreibe desc und delivery auf Englisch oder in der Sprache der Zeilen. Beschreibe die Stimme selbst: Alter, Spannung, Atem, Tempo und Gewicht. Nur „glücklich“ reicht nicht, um eine Stimme zu verändern. Schreibe nicht „klingt wie ein bestimmter Schauspieler oder Charakter“ und wähle keine Stimmen, die bekannte Figuren oder echte Personen nachahmen. Stimmen bergen ebenfalls Ähnlichkeits- und Urheberrechtsrisiken.

Generieren

python <dieser Ordner>/scripts/speak.py --dry-run   # Sieh die Prompts, ohne etwas auszugeben
python <dieser Ordner>/scripts/speak.py

Die erste Zeile jedes Charakters wird zur Stimmenreferenz für seine späteren Zeilen. Höre dir daher zuerst die erste Zeile an. Wenn sie nicht passt, ändere desc und wiederhole sie. Nachdem du eine erste Zeile geändert hast, verwende --only, um die späteren Zeilen dieses Charakters zu wiederholen, damit sie der neuen Stimme folgen.

Wenn du eine Zeile oder eine Stimme änderst und das Skript erneut ausführst, wird nur das Geänderte neu generiert.

Atmosphäre und Soundeffekte

python <dieser Ordner>/scripts/speak.py --sound "Ein ruhiger alter Raum, ab und zu ein Vogel in der Ferne" --seconds 10 --out audio/sfx/raum.wav

Gib immer --seconds an. Die Abrechnung richtet sich nach der Länge, und ohne Angabe kann ein Clip 30 Sekunden oder länger werden. Es ist ungefähr; sehr kurze Anfragen werden oft länger. Generierte Clips sind oft leise. Gib daher Story-Sounds in film.json einen level_db (siehe film.json-Referenz).

Generiere immer nur eine Sache auf einmal. Bitte nicht in einem Prompt nach Dialog, Effekten und Musik zusammen fragen – sonst kannst du die Lautstärken nicht getrennt anpassen und die Mundbewegungen stimmen nicht.

Das Ergebnis prüfen

  • Höre zu, wenn du kannst. Wenn du es nicht kannst, sag der Person: „Dieses Audio wurde nicht nach Gehör geprüft.“
  • Dinge, die du selbst prüfen kannst: Stelle sicher, dass die Längen sinnvoll sind (5 Sekunden für eine kurze Zeile sind problematisch). Falls ein Transkriptionswerkzeug wie Whisper verfügbar ist, vergleiche seinen Text mit dem Skript. Sehr leise Wörter können fehlen – ein Zeichen, sie zu wiederholen.
  • delivery ist ein Wunsch, keine exakte Steuerung. Besonders Pausenlängen sind nicht zuverlässig. Kürze die Zeile oder generiere neu, wenn das Tempo nicht stimmt.
  • Derselbe Prompt liefert jedes Mal ein anderes Ergebnis. Generiere bei Fehlern einfach neu.

Häufige Probleme

SymptomLösung
Key rejected, or Audio Generation 1.0 is not enabledPrüfe, ob der Dienst aktiviert ist. Der Key muss aus der Sprach-Konsole stammen; Ark-Keys funktionieren nicht
Ein Wort wird falsch gelesenGeneriere neu oder formuliere die Zeile um
Zeilen klingen nicht wie eine PersonStelle sicher, dass die erste Zeile richtig ist, wiederhole dann die späteren mit --only, oder setze einen speaker
Das Ende einer Zeile wird abgeschnittenBitte um eine langsamere delivery oder generiere neu

Individual skills in this repo

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

Verwandte Skills