CommunityCodierung & Entwicklunggithub.com

nayem-48ai/tas

Konvertiere Text in gesprochene Audio UND transkribiere Audio-/Video-Dateien zurück in Text und Untertitel mit der Speakee-API. Dieses Skill beherrscht beides: Text-to-Speech (TTS) und Speech-to-Text (STT).

Was ist tas?

Der Skill 'tas' (Text & Speech) bietet eine bidirektionale Schnittstelle zur Speakee-API, die sowohl Text-to-Speech (TTS) als auch Speech-to-Text (STT) umfasst. Er ist als gebündeltes Python-Skript implementiert, das in den Konfigurationsverzeichnissen von OpenCode, Claude Code oder dem Skills-CLI installiert wird. Das Skript erfordert keine zusätzlichen Installationen (kein pip, kein Whisper, kein torch) und arbeitet vollständig mit der Python-Standardbibliothek. Für TTS werden über 40 Sprachen und 100+ Stimmen unterstützt, inklusive benutzerdefinierter Voice-UIDs, Multi-Voice-Konversationsmodus und automatischer Audio-Qualitätssicherung. Für STT können Audio- und Videodateien in Text, SRT- oder WebVTT-Untertitel transkribiert werden, wobei lange Aufnahmen automatisch in Segmente aufgeteilt werden. Das Skill stellt strenge Regeln auf: Es darf niemals durch Ad-hoc-Code oder alternative Bibliotheken ersetzt werden, die Sprachauswahl muss immer vor der Anfrage validiert werden, und die Ergebnisse werden nach Qualitätssicherung (QA) ausgeliefert. Caching beschleunigt Wiederholungen, und Exit-Codes geben detailliertes Feedback über Erfolg oder Fehler.

Funktioniert mit✓Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/nayem-48ai/TAS/tree/HEAD/skills/tas

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

TAS — Text & Speech, in beide Richtungen (Speakee API)

Ein Skript beherrscht beide Richtungen:

  • Text → Sprache (TTS): 40+ Sprachen, 100+ Stimmen, benutzerdefinierte Voice-UID, Aufteilung langer Texte, Multi-Voice-Konversationsmodus, ffmpeg-Zusammenführung, Audio-Qualitätssicherung.
  • Audio → Text (STT): Transkribiere jede Audio-/Videodatei in Text, Wort-Zeitstempel und SRT/WebVTT-Untertitel, mit automatischer Aufteilung langer Aufnahmen.

Alles wird durch das gebündelte Skript erledigt — niemals inline neu implementieren und NIE etwas installieren (kein Whisper, kein Torch, kein Faster-Whisper, kein Pip):

<Skill-Basisverzeichnis>/scripts/tas.py

Typische Installationsorte: ~/.config/opencode/skills/tas/scripts/tas.py (opencode), ~/.claude/skills/tas/scripts/tas.py (Claude Code), und ~/.agents/skills/tas/scripts/tas.py (das skills CLI, npx skills add). Der Skill heißt tas — lade ihn mit dem Namen tas, niemals tts.

Unverhandelbare Regeln (gelten für JEDE Anfrage)

  1. Das gebündelte Skript verwenden. Keine Ad-hoc-Curl-/Python-Schnipsel für TTS oder STT.
  2. NIEMALS etwas installieren. Führe kein pip install faster-whisper, pip install whisper, pip install torch aus und lade kein Modell herunter. Das Skript erledigt STT vollständig über die Speakee API mit der Python-Standardbibliothek — kein lokales Modell, kein lokaler Download, kein Pip.
  3. Vor der Auslieferung überprüfen. tts und conversation führen die Audio-QS automatisch durch; ein QA: FEHLGESCHLAGEN muss korrigiert werden, niemals ausgeliefert werden.
  4. Ergebnis melden: endgültiger Pfad, Dauer, Größe und QS-Status (TTS); endgültiger SRT/VTT/Text-Pfad und Cue-Anzahl (STT).
  5. Immer vorab prüfen. Sprache, Modell und Stimme werden vor jeder Anfrage validiert; niemals eine geratene Stimme senden.
  6. Cache eingeschaltet lassen, es sei denn, der Benutzer wünscht etwas anderes. Er macht Wiederholungen schnell und setzt fehlgeschlagene Konversationen fort.
  7. Niemals einen Stimmnamen erraten. Er wird mit voices/suggest aufgelöst oder die UUID übergeben.
  8. Die kostenlose API respektieren: Standard --workers 4; bei HTTP 429 reduzieren.
  9. Das Skript Text normalisieren lassen. Markdown, URLs, HTML und Emoji werden standardmäßig entfernt; --raw nur verwenden, wenn der Benutzer den wörtlichen Text möchte.
  10. Langen Text niemals vorher aufteilen. Das Skript teilt an Satzgrenzen auf und führt automatisch zusammen.
  11. Für STT immer -l <Code> übergeben, wenn die Sprache bekannt ist. Auto-Erkennung ist unzuverlässig (Whisper verwechselt Bengalisch/Gujarati); -l bn ist für korrektes Bengalisch erforderlich.
  12. --json verwenden, wenn ein anderes Tool oder Skript das Ergebnis verarbeitet.

Befehle

BefehlZweck
ttsSynthetisiere einen Textblock (TTS)
uidSynthetisiere mit einer benutzerdefinierten Voice-UID (language=uid)
conversationMulti-Sprecher-Dialog → eine zusammengefügte, geprüfte MP3
sttTranskribiere eine Audio-/Videodatei → Text (+ optional SRT/VTT)
transcribeAlias für stt
subtitleTranskribiere und schreibe eine SRT
verifyFühre Audio-QS für jede Datei aus
voices -l <Code>Liste Stimmen für eine Sprache auf
suggest -l <Code>Liste Stimmen mit markierten Empfehlungen auf
presetsListe integrierte Stimmvoreinstellungen auf
languagesListe unterstützte Sprachen auf
modelsListe Modelle auf (sonic-3.5 Standard)
cache-clearLösche den Synthese-Cache

Arbeitsablauf A — Text zu Sprache (TTS)

Schritt 1 — Umfang

Identifiziere: Sprache (oder Auto-Erkennung verwenden), Tonfall (Nachrichten / Geschichte / Assistent / Hörbuch), Einzelsprecher oder Dialog, gewünschter Ausgabepfad und ob Untertitel (--srt) oder Metadaten (--title/--artist) benötigt werden.

Schritt 2 — Sprache und Stimme wählen

python3 "$S" languages                 # 43 Codes
python3 "$S" suggest -l bn             # empfohlene Stimmen zuerst
python3 "$S" presets                   # kuratierte Stimmensets

Wenn der Benutzer eine benutzerdefinierte Voice-UID hat, verwende den uid-Modus. Ansonsten bevorzuge eine Voreinstellung oder eine empfohlene Stimme gegenüber der Standardeinstellung.

Schritt 3 — Synthetisieren

Einzelsprecher:

python3 "$S" tts "Ihr Text" -l bn -o out.mp3
python3 "$S" tts --text-file artikel.md -l en --preset news -o artikel.mp3

Dialog:

python3 "$S" conversation dialog.txt -l bn \
  --map "Mensch=Nayem,KI=Pooja - Everyday Assistant" \
  --loudnorm --srt dialog.srt -o dialog.mp3

Bei langen oder teuren Durchläufen zuerst --dry-run verwenden.

Schritt 4 — Überprüfen

Die QS läuft automatisch. Zum erneuten Prüfen einer Datei:

python3 "$S" verify out.mp3

Prüft: Dekodierung, Dauer, integrierte Lautstärke (ebur128), wahrer Spitzenwert/Clipping sowie führende/nachfolgende/interne Stille. Exit-Code 5 bedeutet FEHLGESCHLAGEN.

Schritt 5 — Ausliefern

Melde:

out.mp3 — 2,8s, 0,04 MB, QS BESTANDEN (-18,9 LUFS, Spitze -4,2 dBFS)

Roh-JSON nicht einfügen, es sei denn, es wird danach gefragt.

Schritt 6 — Wiederverwenden

Wiederholungen treffen den Cache (~/.cache/speakee-tas). --force zum Neugenerieren, cache-clear zum Löschen verwenden.


Arbeitsablauf B — Sprache zu Text (STT)

Verwende dies, wenn der Benutzer eine Audio- oder Videodatei hat und ein Transkript, Untertitel, Bildunterschriften oder eine SRT wünscht. Whisper nicht installieren — das gebündelte Skript ruft den Speakee /api/stt-Endpunkt direkt auf.

Schritt 1 — Datei bestätigen

python3 "$S" verify /pfad/zu/audio.mp3   # optional: bestätigt, dass es dekodiert
ls -la /pfad/zu/audio.mp3

Schritt 2 — Sprache wählen

# Auto-Erkennung (unzuverlässig — Whisper verwechselt Bengalisch/Gujarati):
python3 "$S" stt audio.mp3

# IMMER die explizite Sprache bevorzugen, wenn bekannt:
python3 "$S" stt audio.mp3 -l bn

Wichtig: -l <Code> für die korrekte Schrift übergeben. Für Bengalisch -l bn verwenden; Auto-Erkennung gibt Gujarati für bengalisches Audio zurück. Warnungen mit geringer Konfidenz (< 0.5) bedeuten, dass die erkannte Sprache wahrscheinlich falsch ist.

Schritt 3 — Transkribieren + Untertitel erstellen

# SRT + VTT neben der Eingabe schreiben und das Transkript speichern:
python3 "$S" stt audio.mp3 -l bn \
  --srt --srt-path audio.srt --vtt --vtt-path audio.vtt \
  -o audio.txt

# Kurzform: nur die SRT (Untertitel-Befehl):
python3 "$S" subtitle audio.mp3 -l bn -o audio.srt

# Maschinenlesbares JSON (für andere Tools):
python3 "$S" stt audio.mp3 -l bn --json -o ergebnis.json

# Lange Aufnahmen: automatisch in ~120s Chunks aufgeteilt; kleinere Chunks erzwingen oder einen Upload:
python3 "$S" stt audio.mp3 -l bn --chunk-seconds 60
python3 "$S" stt audio.mp3 -l bn --no-chunk     # nur wenn < ~3,5 MB

Schritt 4 — Ausliefern

Melde:

audio.srt — 111 Cues (8,05 Min, Bengalisch)
audio.txt — Transkript gespeichert

STT-Flags: --srt, --srt-path, --vtt, --vtt-path, --no-word-timestamps (schneller, geschätztes Timing), --chunk-seconds, --no-chunk, --workers, --max-chars, --max-line-seconds.


Konversationsmodus (TTS)

Skriptformat, eine Zeile pro Sprecherwechsel:

Die Show beginnt.                <- kein "Sprecher:"-Präfix -> Erzählerstimme
Mensch: Bruder, wie viel ist 2+2?
KI: Ihre Frage wurde angenommen.
  • Sprecherbezeichnungen sind kurze Tokens vor : (≤16 Zeichen, keine Leerzeichen).
  • Zeilen ohne Sprecher:-Präfix sind der Erzähler/Kommentator. Der Erzähler wird mit dem speziellen Schlüssel narrator abgebildet, daher ist eine 3. eigene Stimme --map "narrator=StimmeC,Mensch=StimmeA,KI=StimmeB".
  • --map "sprecher=stimme" akzeptiert einen Stimmnamen (unscharf) oder eine UUID.
  • Ohne --map werden automatisch verschiedene Stimmen zugewiesen.
  • Stimmen müssen sich unterscheiden. Wenn zwei Sprecher zur selben Stimme aufgelöst werden, gibt das Skript eine WARNUNG aus; ordne jedem Sprecher eine andere Stimme zu. Gib der KI und dem Menschen immer unterschiedliche Stimmen (und eine 3. Stimme für den Erzähler, wenn eine Kommentator-/Erzählerzeile vorhanden ist).
  • --silence 0.35 Pause zwischen den Sprecherwechseln; --loudnorm normalisiert auf −16 LUFS.
  • --manifest DATEI zeichnet jedes Segment auf; --srt DATEI schreibt Untertitel.
  • --no-stitch behält einzelne Segmentdateien statt einer einzigen MP3.
  • --workers steuert parallele Anfragen (Standard 4).

Optionen (am häufigsten verwendet)

FlagStandardwertBedeutung
-l, --languageAuto-ErkennungISO-Code oder uid
-m, --modelsonic-3.5sonic-3.5 / sonic-3 / sonic-turbo / sonic-2
-v, --voice_idVoreinstellung/StandardStimmname oder UUID
-o, --outautoAusgabedatei / -verzeichnis (--no-stitch)
-s, --speed1.20,5–2,0
--preset—news, story, assistant, audiobook
--chunk-limit1200Zeichen pro Anfrage
--retries4Wiederholungen mit exponentiellem Backoff
--workers4Parallele Anfragen
--no-cache / --forceausCache umgehen / neu generieren
--no-verifyausAutomatische QS überspringen (nicht empfohlen)
--dry-runausPlan ausgeben, keine Anfragen stellen
--jsonausMaschinenlesbare Ausgabe

STT-Optionen

FlagStandardwertBedeutung
-l, --languageautoISO-Code (für Bengalisch bn verwenden)
--chunk-seconds120Audio-Sekunden pro Upload
--no-chunkausEine Anfrage (max. ~3,5 MB)
--workers2Parallele Uploads
--srt / --srt-pathausSRT schreiben
--vtt / --vtt-pathausWebVTT schreiben
--no-word-timestampsausSchneller; Untertitel-Timing wird geschätzt
--max-chars42Maximale Cue-Zeichen
--max-line-seconds6.0Maximale Cue-Sekunden
--timeout / --retries300 / 3Timeout pro Anfrage / Wiederholungen

Caching und Sicherheit

  • Segmente werden nach Content-Hash in ~/.cache/speakee-tas gecacht; Wiederholungen und erneute Versuche werden automatisch fortgesetzt.
  • Temporäre Concat-Dateien werden immer entfernt; --no-cache-Temp-Verzeichnisse werden beim Beenden bereinigt.
  • Antworten werden validiert (Content-Type: audio/* + MP3-Header), sodass Fehler-JSON niemals als Audio gespeichert wird.
  • HTTP 429 beachtet Retry-After; 5xx/Timeouts wiederholen mit Backoff; permanente 4xx schlagen sofort mit der Servermeldung fehl.
  • STT läuft vollständig prozessintern mit der Python-Standardbibliothek — keine Netzwerkinstallation, kein Modell-Download, kein Pip.
  • Exit-Codes: 0 ok, 1 Fehler, 2 Verwendung, 3 Validierung, 4 Netzwerk/API, 5 Audio-QS fehlgeschlagen.

Referenzdateien

  • references/api.md — Endpunkte, Payload, Validierung, Wiederholungen, Caching.
  • references/voices.md — Sprach-/Stimmkatalog, UID-Modus, Voreinstellungen.
  • references/troubleshooting.md — Symptome, Lösungen, häufige Fehlermodi.
  • assets/presets.json — kuratierte Stimmvoreinstellungen (bearbeiten, um eigene hinzuzufügen).

Verwandte Skills