Communitygithub.com

tts

Convertit n'importe quel texte en audio vocal. Prend en charge deux moteurs (Kokoro local, Noiz cloud), deux modes (simple ou synchronisé avec un sous-titrage) et le contrôle de la voix par segment.

Qu'est-ce que tts ?

Cette compétence permet de transformer n'importe quel texte en fichier audio vocal. Elle est idéale pour produire des livres audio (EPUB, PDF), des doublages, des sous-titres audio ou des messages vocaux. Deux moteurs sont disponibles : Kokoro (local, gratuit, sans API) pour la lecture simple et la fusion de voix, et Noiz (cloud, nécessite une clé API) pour les fonctionnalités avancées comme le clonage vocal, le contrôle des émotions et la synchronisation temporelle précise. Deux modes d'utilisation sont proposés : le mode simple (commande `speak`) pour convertir directement un texte en audio, et le mode 'timeline' qui utilise un fichier SRT et un fichier JSON de mapping vocal pour générer un audio synchronisé segment par segment (parfait pour le doublage vidéo). Le script gère automatiquement les modes invité ou complet selon la présence d'une clé API. Plateformes supportées : tout terminal avec Python 3 et `ffmpeg` (mode timeline).

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/noizai/skills/tree/main/skills/tts

Demander à votre IA préférée

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

Documentation

Que fait tts ?

Convertit n'importe quel texte en audio vocal. Prend en charge deux moteurs (Kokoro local, Noiz cloud), deux modes (simple ou synchronisé avec un sous-titrage) et le contrôle de la voix par segment.

Déclencheurs

  • text to speech / tts / speak / say
  • voice clone / dubbing
  • epub to audio / srt to audio / convert to audio
  • 语音 / 说 / 讲 / 说话

Mode simple — texte en audio

speak est la commande par défaut — le sous-commande peut être omis :

# Utilisation de base (speak est implicite)
python3 skills/tts/scripts/tts.py -t "Bonjour le monde"          # ajoutez -o chemin pour sauvegarder
python3 skills/tts/scripts/tts.py -f article.txt -o out.mp3

# Clonage vocal — chemin de fichier local ou URL
python3 skills/tts/scripts/tts.py -t "Bonjour" --ref-audio ./ref.wav
python3 skills/tts/scripts/tts.py -t "Bonjour" --ref-audio https://example.com/ma_voix.wav -o clone.wav

# Format de message vocal
python3 skills/tts/scripts/tts.py -t "Bonjour" --format opus -o voice.opus
python3 skills/tts/scripts/tts.py -t "Bonjour" --format ogg -o voice.ogg

L'intégration tierce (Feishu/Telegram/Discord) est documentée dans ref_3rd_party.md.

Mode Timeline — SRT vers audio synchronisé

Pour un timing précis par segment (doublage, sous-titres, narration vidéo).

Étape 1 : Obtenir ou créer un fichier SRT

Si l'utilisateur n'en a pas, générez-le à partir du texte :

python3 skills/tts/scripts/tts.py to-srt -i article.txt -o article.srt
python3 skills/tts/scripts/tts.py to-srt -i article.txt -o article.srt --cps 15 --gap 500

--cps = caractères par seconde (défaut 4, bon pour le chinois ; ~15 pour l'anglais). L'agent peut aussi écrire manuellement un fichier SRT.

Étape 2 : Créer un fichier de mapping vocal

Fichier JSON contrôlant les paramètres vocaux par défaut + par segment. Les clés segments prennent en charge un index unique "3" ou une plage "5-8".

Fichier de mapping vocal Kokoro :

{
  "default": { "voice": "zf_xiaoni", "lang": "cmn" },
  "segments": {
    "1": { "voice": "zm_yunxi" },
    "5-8": { "voice": "af_sarah", "lang": "en-us", "speed": 0.9 }
  }
}

Fichier de mapping vocal Noiz (ajoute le support de emo, reference_audio). reference_audio peut être un chemin local ou une URL (audio propre à l'utilisateur ; Noiz uniquement) :

{
  "default": { "voice_id": "voice_123", "target_lang": "zh" },
  "segments": {
    "1": { "voice_id": "voice_host", "emo": { "Joy": 0.6 } },
    "2-4": { "reference_audio": "./refs/guest.wav" }
  }
}

Découpage dynamique de l'audio de référence : Si vous traduisez ou doublez une vidéo et souhaitez que chaque phrase utilise automatiquement l'audio de la vidéo originale au même timestamp comme audio de référence, utilisez l'argument --ref-audio-track au lieu de définir reference_audio dans le mapping :

python3 skills/tts/scripts/tts.py render --srt input.srt --voice-map vm.json --ref-audio-track video_originale.mp4 -o output.wav

Voir examples/ pour des exemples complets.

Étape 3 : Rendu

python3 skills/tts/scripts/tts.py render --srt input.srt --voice-map vm.json -o output.wav
python3 skills/tts/scripts/tts.py render --srt input.srt --voice-map vm.json --backend noiz --auto-emotion -o output.wav

Quand choisir quel moteur

BesoinRecommandé
Lire simplement du texte à voix hauteKokoro (défaut)
Livre audio EPUB/PDF avec chapitresKokoro (support natif)
Mélange de voix ("v1:60,v2:40")Kokoro
Clonage vocal à partir d'un audio de référenceNoiz
Contrôle des émotions (paramètre emo)Noiz
Durée exacte par segment côté serveurNoiz

Lorsque l'utilisateur a besoin à la fois du contrôle des émotions, du clonage vocal et d'une durée précise, Noiz est le seul moteur qui supporte les trois.

Mode invité (sans clé API)

Lorsqu'aucune clé API n'est configurée, tts.py bascule automatiquement en mode invité — un endpoint Noiz limité qui ne nécessite pas d'authentification. Le mode invité ne supporte que --voice-id, --speed et --format ; le clonage vocal, les émotions, la durée et le rendu timeline ne sont pas disponibles.

# Mode invité (détecté automatiquement quand aucune clé API n'est définie)
python3 skills/tts/scripts/tts.py -t "Bonjour" --voice-id 883b6b7c -o bonjour.wav

# Forcer le moteur Kokoro à la place
python3 skills/tts/scripts/tts.py -t "Bonjour" --backend kokoro

Voix invitées disponibles (15 voix intégrées) :

voice_idnamelanggendertone
063a4491販売員(なおみ)jaF喜び
4252b9c8落ち着いた女性jaF穏やか
578b4be2熱血漢(たける)jaM怒り
a9249ce7安らぎ(みなと)jaM穏やか
f00e45a1旅人(かいと)jaM穏やか
b4775100悦悦|社交分享zhFJoyful
77e15f2c婉青|情绪抚慰zhFCalm
ac09aeb4阿豪|磁性主持zhMCalm
87cb2405建国|知识科普zhMCalm
3b9f1e27小明|科技达人zhMJoyful
95814addScience NarrationenMCalm
883b6b7cThe Mentor (Alex)enMJoyful
a845c7deThe Naturalist (Silas)enMCalm
5a68d66bThe Healer (Serena)enFCalm
0e4ab6ecThe Mentor (Maya)enFCalm

Sécurité et divulgation des données

Cette compétence effectue les opérations suivantes sur les fichiers et le réseau lors de l'exécution :

  • Stockage des identifiants : Lorsque vous exécutez config --set-api-key, la clé est sauvegardée dans ~/.config/noiz/api_key (permissions 0600). La variable d'environnement NOIZ_API_KEY est également prise en charge comme alternative.
  • Migration de clé héritée : Si ~/.noiz_api_key existe et que ~/.config/noiz/api_key n'existe pas, la clé est copiée (pas supprimée) vers le nouvel emplacement. Un message est affiché ; l'ancien fichier est laissé intact pour que vous le supprimiez manuellement.
  • Appels réseau (moteur Noiz) : Le texte et l'audio de référence optionnel sont téléchargés vers https://noiz.ai/v1/ pour la synthèse. Aucune donnée n'est envoyée sauf si vous invoquez une commande Noiz.
  • Téléchargement de l'audio de référence : Lorsque --ref-audio est une URL, le fichier est téléchargé dans un fichier temporaire, utilisé pour l'appel API, puis supprimé. Si aucun voice-id ou ref-audio n'est fourni, un fichier audio de référence par défaut est téléchargé depuis storage.googleapis.com ou noiz.ai.
  • Fichiers temporaires : Des fichiers audio/texte temporaires peuvent être créés pendant la synthèse et sont nettoyés après utilisation.
  • ffmpeg : Invoqué uniquement en mode render timeline pour assembler l'audio final.

Aucun fichier en dehors du chemin de sortie et de ~/.config/noiz/ n'est modifié. Le moteur Kokoro fonctionne entièrement hors ligne sans accès réseau.

Prérequis

  • ffmpeg dans le PATH (mode timeline uniquement)
  • Paquet requests : uv pip install requests (requis pour le moteur Noiz)
  • Obtenez votre clé API sur Noiz Developer, puis exécutez python3 skills/tts/scripts/tts.py config --set-api-key VOTRE_CLE (le mode invité fonctionne sans clé mais avec des fonctionnalités limitées)
  • Kokoro : si déjà installé, passez --backend kokoro pour utiliser le moteur local

Authentification API Noiz

Utilisez uniquement la clé API encodée en base64 comme Authorization — sans préfixe (par exemple, pas de APIKEY ni Bearer ). Tout préfixe entraîne une erreur 401.

Pour les détails du moteur et la référence complète des arguments, voir reference.md.

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

Skills associés