Communitygithub.com

wael-wq/natural-voice

Lasse eine ElevenLabs-Sprachausgabe wie ein Mensch klingen statt wie ein Roboter – schreibe das Skript für das Ohr um, füge Audio-Tags hinzu, passe Stabilität und Geschwindigkeit an und wähle aus mehreren Takes den natürlichsten aus.

Was ist natural-voice?

Dieses Skill-Paket hilft Entwicklern und Content-Erstellern, roboterhafte ElevenLabs-Sprachausgaben zu vermeiden, indem es das Skript für das Gehör optimiert. Es enthält drei Python-Skripte: 'speakable.py' prüft, ob ein Text für das Ohr geschrieben ist; 'takes.py' generiert mehrere gesäte Takes auf ElevenLabs (nach vorheriger Kostenwarnung); 'gaps.py' bewertet die Takes anhand von Pausen mitten im Satz. Der Workflow beginnt mit der Diagnose von Lücken über 0,2 Sekunden, gefolgt von der Umschreibung des Skripts (Sätze statt Schlagzeilen, Zahlen als Wörter, Verwendung von Kontraktionen und Konnektoren), der Verwendung von Audio-Tags für die Regie und den richtigen Einstellungen (Stabilität 0,30–0,40, Geschwindigkeit 1,0–1,08). Die Skripte sind reine Python-3.9+-Dateien ohne zusätzliche Pakete; 'gaps.py' benötigt optional ffmpeg. Der gemessene Unterschied: In einem Beispiel stieg der 'speakable.py'-Score von 65 (umzuschreiben) auf 100 (sprechbar), und Satzinterne Lücken sanken von 0,34 s auf null.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wael-wq/natural-voice-skill/tree/HEAD

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht natural-voice?

Die meisten „robotischen“ ElevenLabs-Sprachausgaben sind kein Problem der Stimme. Sie sind ein Problem des Skripts. Das Modell liest genau das, was ihm gegeben wird, und ein für das Auge geschriebenes Skript (Schlagzeilen, Punkt-Fragmente, Ziffern, Gedankenstriche) kommt staccato zurück – egal welche Stimme es liest.

Drei Werkzeuge in diesem Ordner laufen tatsächlich. Verwende sie; beurteile den Fluss nicht nur durch das Lesen des Textes.

python3 speakable.py script.txt                  # ist dies für das Ohr geschrieben?
python3 takes.py script.txt --voice VOICE_ID     # gesäte Takes (kostenpflichtig, fragt vorher)
python3 gaps.py takes/                           # bewerte die Takes nach Satz-internen Lücken

Alle drei sind reines Python 3.9+ ohne Pakete. gaps.py verwendet ffmpeg, falls es im PATH ist, um Lücken anhand der Audiodatei selbst zu bestätigen.

Der Ablauf

1. Diagnostiziere, bevor du etwas änderst. Falls bereits ein Take existiert, führe gaps.py darauf aus. Eine Lücke von über 0,2 s innerhalb eines Satzes (nicht nach einem Komma oder Punkt) ist das, was Menschen als „KI“ hören. In unserem eigenen „Vorher“-Take stoppte die Stimme 0,3 s vor „run“ und erneut vor „Instagram“, mitten im Aufhänger. Nichts in unserer Bearbeitung verursachte es: Die Lücken waren in der Rohdatei.

2. Schreibe für das Ohr um. Führe speakable.py aus und behebe jede Markierung. Die Regeln:

  • Sätze, keine Schlagzeilen. „13 kostenlose Claude-Fähigkeiten betreiben nun dein Instagram.“ ist ein Titel. „Dreizehn kostenlose Claude-Fähigkeiten betreiben dein ganzes Instagram.“ ist etwas, das eine Person sagt.
  • Aufzählungen benötigen Kommas, keine Punkte. „Reels. Bildunterschriften. Karussells.“ bringt das Modell dreimal zum Stoppen. „Reels, Bildunterschriften, Karussells, Geschichten“ fließt.
  • Zahlen als Wörter in der gesprochenen Zeile: „vierundachtzig von hundert“, nicht „84 von 100“. Der Bildschirmtext kann die Ziffern behalten.
  • Verschmelzungen (du hast, es ist, wir werden). Niemand sagt „du hast“ laut.
  • Verbinde die Fragmente mit „also“, „und“, „dann“. Eine Konjunktion ist ein Hinweis für das Modell, weiterzumachen.
  • Keine Gedankenstriche. ElevenLabs behandelt einen Gedankenstrich als kurze Pause und sagt selbst, dass er „weniger konsistent“ ist. Verwende ein Komma, um weiterzumachen, oder Auslassungspunkte für eine Zäsur.
  • Kein SSML. <break time="1s"/> wird auf Eleven v4 oder v3 nicht unterstützt.

3. Führe Regie. Eleven v4 akzeptiert Audio-Tags in eckigen Klammern. Setze einen Tag am Anfang eines Abschnitts, nicht in jeder Zeile, und lass ihn mit dem übereinstimmen, was die Zeile tut. Siehe tags.md für die Liste. speakable.py markiert Tags, die es nicht kennt, denn ein unbekannter Tag kann als Soundeffekt vorgelesen werden.

[aufgeregt] Dreizehn kostenlose Claude-Fähigkeiten betreiben dein ganzes Instagram.
[schelmisch] Also ließen wir es diesen Reel schreiben...

Zeichensetzung ist ebenfalls Regie. Auslassungspunkte fügen eine gewichtete Pause hinzu, ein Ausrufezeichen verleiht Energie, und GROSSBUCHSTABEN betonen (verwende sie einmal, auf dem Wort, das zählt).

4. Einstellungen. Unter eleven_v4:

EinstellungVerwendungGrund
stability0,30 bis 0,40Niedriger ergibt „breiteren emotionalen Bereich“; der Standard 0,5 ist flacher. Unter 0,3 kann ein Take abdriften.
similarity_boost0,75der Standard; behält die Stimme selbst
style0der Standard; alles andere erhöht die Latenz
speed1,0 bis 1,08der erlaubte Bereich ist 0,7 bis 1,2; Social-Voiceover liegt knapp über 1

5. Drei Takes, gleicher Text, verschiedene Seeds. Ein Take ist ein Münzwurf. Führe takes.py mit den Seeds 1, 2 und 3 aus, dann gaps.py, um sie zu bewerten. Höre dir die besten zwei an und wähle nach Gehör. Behalte den Seed: Er sorgt dafür, dass eine erneute Ausführung dem Take nahe kommt (ElevenLabs nennt es „Best Effort“, nicht garantiert).

6. Schneide behutsam. Wenn dein Editor Stille kürzt, lasse etwa eine Sekunde nach Sätzen und den größten Teil einer Sekunde nach Kommas. Auf die gleiche kurze Länge gestutzte Pausen sind das andere, was maschinell klingt.

7. Klingt immer noch generiert? Hör auf, an Reglern zu drehen. Nimm dich selbst auf deinem Telefon auf, während du die Zeile sprichst, und führe sie durch den ElevenLabs Voice Changer (Sprache-zu-Sprache) in die gewünschte Stimme. Dein Timing, deine Betonung und deine Emotionen bleiben erhalten; nur die Stimme ändert sich.

Was wir gemessen haben

Bei einem unserer eigenen Reels (die Dateien sind in examples/):

VorherNachher
SkriptFür das Auge geschrieben: Fragmente, ZiffernFür das Ohr geschrieben: speakable.py sauber
TagsKeine[aufgeregt], [schelmisch]
Einstellungenstability 0,5, speed 1,0stability 0,35, speed 1,05
Takes13 Seeds, ausgewählt durch gaps.py dann nach Gehör
speakable.py65, UMSCHREIBEN (eine Liste in Punkten, Ziffern, keine Tags)100, SPRECHBAR
Lücken in Sätzen0,34 s zwischen „jetzt“ und „laufen“, im Aufhängerkeine

Die Stimme änderte sich ebenfalls (Will zu Chris), also ist dies kein Labortest einer einzelnen Einstellung. Die Skript-Umschreibung machte den größten hörbaren Unterschied.

Regeln

  • Sende niemals eine kostenpflichtige Anfrage, ohne zu sagen, was sie kostet. takes.py gibt die Zeichenanzahl aus und stoppt, es sei denn, du übergibst --yes.
  • Gib niemals den API-Schlüssel aus oder committe ihn. takes.py liest ELEVENLABS_API_KEY aus der Umgebung und sonst nichts.
  • Kennzeichne es. Wenn die Stimme generiert ist, aktiviere das KI-Label der Plattform.

Verwandte Skills