- La génération vocale en local peut désormais offrir une qualité tout à fait réaliste même sans GPU dédié ; dans l’environnement d’exemple, le GPU est réservé à l’inférence du LLM tandis que le TTS est traité par le CPU
- Kokoro est un modèle de 82M de paramètres, mais il prend en charge plusieurs langues comme l’anglais, le chinois et l’hindi, propose environ 50 voix, et est surtout optimisé pour l’anglais
- La configuration la plus simple consiste à exécuter le conteneur Kokoro-FastAPI, avec les modèles vocaux déjà inclus, ce qui porte la taille de l’image à environ 5 Go
- Il fournit une interface compatible avec l’API speech d’OpenAI, ce qui permet de remplacer assez facilement un programme existant basé sur une API vocale par un TTS local
- Pour la synthèse de courts paragraphes, on obtient environ 4,7 s sur un Intel Core i7-4770K, 4,5 s sur un Apple M2 Pro et 1,5 s sur un AMD Ryzen 7 8745HS, ce qui rend possible un usage où l’on écoute les réponses d’un LLM local au lieu de les lire
Kokoro TTS fonctionnant uniquement sur CPU
- Il y a encore quelques années, générer de la voix réaliste en local était difficile, mais il est désormais possible de produire une voix de haute qualité sans confier ses données privées à un service externe
- L’exemple est exécuté sur une machine GTX 1080 Ti déjà utilisée auparavant pour des LLM locaux
- Le GPU dédié de cette machine est réservé à l’inférence du LLM
- La synthèse vocale n’utilise que le CPU
- Le modèle utilisé est Kokoro
- Il s’agit d’un modèle à 82M de paramètres
- Il génère des voix réalistes dans plusieurs langues, dont l’anglais, le chinois et l’hindi
- Il propose environ 50 voix, principalement optimisées pour l’anglais
- La configuration serveur la plus simple consiste à utiliser l’image de conteneur Kokoro-FastAPI
- Elle inclut des modèles vocaux pré-téléchargés
- C’est pourquoi l’image du conteneur pèse environ 5 Go
- Commande de lancement avec Docker ou Podman :
podman run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu - Après le lancement, l’interface web est accessible à
localhost:8880/web; on peut y saisir du texte, générer de l’audio et le lire automatiquement
API compatible OpenAI et exemples d’exécution
- En plus de l’interface web, le conteneur Kokoro-FastAPI fournit une interface TTS compatible avec l’API speech d’OpenAI
- Il est donc facile d’adapter des programmes existants utilisant l’API speech d’OpenAI
- Des exemples de code en JavaScript et Python sont disponibles sur github.com/remotebrowser/speak
- Exemple d’exécution en JavaScript :
export TTS_API_BASE_URL=http://127.0.0.1:8880/v1 ./speak.js "Good morning! How are you today?" - Exemple d’exécution en Python :
export TTS_API_BASE_URL=http://127.0.0.1:8880/v1 ./speak.py "Good morning! How are you today?" - L’audio généré est enregistré sous forme de fichier MP3
- Si SoX ou Sound eXchange est installé, l’audio est lu automatiquement
- Les informations sur SoX sont disponibles sur sox.sf.net
- Pour choisir une autre voix, il faut définir la variable d’environnement
TTS_VOICEexport TTS_API_BASE_URL=http://127.0.0.1:8880/v1 export TTS_VOICE="am_eric" ./speak.js "Good morning! How are you today?" - La liste complète des voix disponibles se trouve dans Kokoro VOICES.md
Temps de synthèse selon le CPU et alternatives
- Avec la voix
am_eric, en synthétisant un court paragraphe de test, les meilleurs temps obtenus sur 3 exécutions sont les suivants- Intel Core i7-4770K : 4,7 s
- Apple M2 Pro : 4,5 s
- AMD Ryzen 7 8745HS : 1,5 s
- Le premier CPU de la liste est un modèle sorti il y a 12 ans, ce qui montre que la tâche reste faisable même sur du matériel ancien
- Il existe aussi Speaches comme alternative TTS en conteneur compatible OpenAI
- Contrairement à Kokoro-FastAPI, les poids vocaux ne sont pas inclus dans l’image du conteneur et doivent être téléchargés explicitement via l’API
- Il fournit aussi une fonctionnalité STT de haute qualité, notamment avec Whisper
- Si une application a besoin à la fois de TTS et de STT, cela peut constituer une option centralisée
- Combiné à un LLM local, cela permet d’écouter les réponses du LLM au lieu de les lire
1 commentaires
Avis sur Hacker News
J’ai pas mal utilisé Kokoro dans des produits d’accessibilité, et c’était agréable de travailler avec, car il ne nécessite pas de GPU NVidia comme plusieurs TTS de qualité comparable
J’apprécie particulièrement le fait de pouvoir ajouter manuellement des guides de prononciation IPA. Il m’est arrivé que Kokoro prononce mal des mots importants qui étaient des homographes
En revanche, il est moins bon quand on lui fait dire seulement un ou deux mots. Par exemple, si on lui fait dire uniquement « six », il le prononce presque toujours comme « ah-six-ah ». À la place, si on lui donne une phrase plus longue comme « The word is: six », il la lit correctement, et comme l’API Kokoro fournit les timestamps de chaque mot dans la phrase, on peut découper uniquement le mot voulu avec un script Python. L’intonation est un peu plate, mais c’est très stable
En posant la question sur Discord, on m’a dit que c’était une limite liée à la petite taille du modèle en nombre de paramètres ; pour défendre Kokoro, les voix d’eleven-labs ont parfois le même genre de problème
Dans mon cas d’usage, il s’agit presque toujours de mots isolés, donc ça ne me convient pas, car je ne veux pas avoir à gérer des traitements pour concaténer ou découper les entrées et les sorties
C’est amusant, car c’est un sujet qui m’intéresse vraiment
Avant, je maintenais whisperx séparément, parce qu’au-delà de la simple transcription, je considère que le timing et l’identification des locuteurs sont importants pour des usages comme les sous-titres. Mais il dépend de pyannote, et sa licence est ambiguë, ce qui rend aussi l’automatisation de l’installation plus compliquée
J’ai donc cherché quelque chose qui fournisse une meilleure transcription tout en prenant en charge la diarisation des locuteurs, et j’ai retenu parakeet pour la transcription et softformer pour la diarisation. Mais la plupart des moteurs disponibles n’incluent pas softformer
J’ai créé un serveur compatible OpenAI pour parakeet-rs qui prend en charge softformer (https://github.com/altunenes/parakeet-rs), et je l’utilise avec OpenWhispr, une application desktop de transcription qui gère plusieurs fonctions pratiques
Comme j’utilise mon GPU pour autre chose, je n’ai pas encore ajouté le chemin GPU, et pour l’instant je fais la transcription uniquement sur CPU ; mais le fait de pouvoir lancer des transcriptions localement quand je veux me paraît très puissant
Pour ce que vous voulez faire, Senko avec parakeet donne une très bonne diarisation. Sur mon MacBook, c’était plus rapide et plus précis que Pyannote et whisper
Ce modèle est vraiment bon. Je regrettais de ne presque pas pouvoir jouer avec des modèles locaux par manque de GPU, mais il y a environ un mois, j’ai installé Kokoro sur une GTX1650 pour créer un TTS destiné à lire des textes
Dans une WebUI simple, je colle une URL ou un bloc de texte copié ; Python le nettoie, l’envoie à Kokoro pour générer le TTS, puis sert le résultat sous forme de RSS pour Apple Podcasts. Je m’en sers pour rattraper des articles mis de côté ou des billets de blog pendant mon trajet du matin
Un jour, j’aimerais aussi faire quelque chose à la NotebookLM, avec plusieurs voix réparties, qui lirait mes articles d’actualité sauvegardés comme une émission de radio matinale
Il y a quelques mois, j’ai créé une extension Chrome qui fait ça sur n’importe quelle page web, tout en surlignant simultanément la phrase en cours de lecture
Comme elle permet de sauter à la fois l’étape de lancement d’un conteneur et celle du copier-coller du contenu du site, elle peut être utile à ceux qui veulent utiliser Kokoro plus facilement
https://chromewebstore.google.com/detail/local-reader-ai-on-...
Le TTS a vraiment beaucoup progressé et les options sont nombreuses. Il y a Kokoro, et Pocket TTS, un petit modèle de 100M qui permet aussi le clonage vocal
Chatterbox Turbo est un peu plus gros, mais prend mieux en charge le contrôle des émotions de la voix, et Fish Audio S2 est plus gros encore, mais permet un contrôle beaucoup plus fin, quasiment sans limites, du ton et des émotions. Tout cela tourne facilement sur un MacBook
Un bon dépôt pour commencer à comparer les modèles TTS est https://github.com/5uck1ess/tts-bench
Kokoro est vraiment un bon modèle si l’on tient compte du fait qu’il a été publié il y a 1,5 an, et ses performances sont excellentes pour sa taille : https://5uck1ess.github.io/tts-bench/scores.html
J’avais déjà essayé Piper pour du TTS local, et Kokoro a l’air intéressant aussi
Très impressionnant. Comme j’utilise Linux, je ne peux pas utiliser Aqua, Whipsrflow, etc., donc depuis janvier j’utilise ma propre solution
Je l’ai récemment remise en ordre pour la rendre facile à installer. Si ça vous intéresse, vous pouvez la voir ici : https://github.com/Hugo0/voiceio
Elle s’améliore avec le temps, tourne sur la machine locale et, globalement, c’est un logiciel utilisable. Aujourd’hui, 60 % de mes interactions avec mon PC passent uniquement par la saisie vocale
J’aime beaucoup Kokoro. Je l’utilise pour faire lire des ebooks qui n’ont pas de version audio, et il fonctionne plutôt bien pour cet usage
J’ai écrit un script Python qui lit l’epub/html, lance le modèle puis écrit des mp3
Le nombre de langues prises en charge par Kokoro est limité, donc j’ai dû utiliser un autre modèle pour la prise en charge du néerlandais, mais la qualité n’est pas aussi bonne. En général, ces modèles sont beaucoup plus lents et aussi plus gros, donc trop lourds pour 8 Go de VRAM
J’ai même fini par essayer le TTS intégré à Windows : il ne sonne pas naturel, mais au moins il peut prononcer la plupart des mots et il est très rapide
J’ai passé une journée à bricoler avec l’IA et à retirer des couches coûteuses de Kokoro ; il tourne 3 fois plus vite sur le CPU d’un téléphone et avec MNN
La qualité est très similaire. Cela peut dépendre de l’environnement, mais le script est ici : https://github.com/DavidVentura/translator-rs/blob/master/sc...