API de synthèse vocale auto-hébergée dans Docker
Une API de synthèse vocale sur votre propre serveur transforme du texte en audio pour tout programme capable d’envoyer une requête HTTP : un site, un bot, un backend de jeu ou un script dans n’importe quel langage. Le texte ne quitte pas votre machine, et rien n’est facturé au caractère.
Ce guide montre comment faire tourner le moteur SuperClonica, fondé sur le modèle ouvert Supertonic 3, comme serveur HTTP dans Docker : le démarrage sur CPU ou GPU NVIDIA, les requêtes avec les voix intégrées et personnalisées, et la préparation à un usage réel. L’image et le moteur sont les nôtres, nous le signalons donc quand il est question de nous.
Pourquoi héberger la synthèse vocale soi-même
Les API vocales dans le cloud sont faciles à prendre en main, mais chaque requête envoie votre texte au fournisseur et se paie au caractère. Une API auto-hébergée échange cela contre un serveur que vous gérez.
- Confidentialité : textes et audio restent sur votre matériel, ce qui compte pour les documents internes, les messages et les données des utilisateurs.
- Coût : une fois le matériel payé, la parole est gratuite ; les textes longs et les gros volumes n’augmentent pas la facture.
- N’importe quel client : un seul point d’accès HTTP sert aussi bien Python, JavaScript, Go, PHP, C# qu’un script shell.
- Hors ligne : une fois le modèle téléchargé, le serveur n’a plus besoin d’Internet.
Démarrer le serveur
Sur n’importe quel CPU : docker run -d --name tts -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. Sur un GPU NVIDIA, installez le NVIDIA Container Toolkit et lancez docker run -d --name tts --gpus all -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cuda ; l’image apporte CUDA et cuDNN, l’hôte n’a besoin que du pilote.
Au premier démarrage, le modèle Supertonic 3, environ 385 Mo, se télécharge dans le volume superclonica-models ; les démarrages suivants le réutilisent. Le serveur est prêt quand GET http://localhost:8000/health répond avec son état, sa version et le périphérique utilisé. L’image a son propre contrôle de santé : docker ps indique quand elle est prête.
Envoyer une requête
POST /synthesize reçoit du JSON et répond par un fichier WAV mono 16 bits : curl -X POST http://localhost:8000/synthesize -H "Content-Type: application/json" -d '{"text": "Bonjour depuis mon serveur.", "voice": "F1", "lang": "fr"}' -o bonjour.wav. Les en-têtes X-Sample-Rate et X-Duration-Seconds décrivent l’audio.
Les champs sont text, voice, lang, seed et normalize. voice est l’une des dix voix intégrées, de M1 à M5 et de F1 à F5, ou une voix personnalisée ; lang est la langue du texte, l’une des 31 langues du modèle (le chinois n’en fait pas partie). Une graine fixe redonne le même audio pour le même texte, et normalize égalise le volume. GET /voices liste les voix intégrées et les langues, et /docs affiche la documentation interactive de l’API.
Utiliser des voix personnalisées
Une voix Supertonic 3 est un fichier JSON d’environ 0,3 Mo. Des voix gratuites avec extraits audio se trouvent dans le dépôt superclonica/supertonic-voices sur GitHub, et le catalogue SuperClonica en propose plus de 170 autres, chacune avec une démo en ligne gratuite.
La voix entre dans la requête comme objet JSON lui-même, dans le champ voice : le serveur ne garde aucun fichier de voix. L’objet étant volumineux, construisez la requête dans un fichier et envoyez-la avec curl -d @request.json, ou dans votre code : chargez la voix avec json.load en Python ou JSON.parse en JavaScript et envoyez-la avec le texte. Le corps d’une requête peut atteindre 2 Mo.
Réglages
Le serveur lit ses réglages dans des variables d’environnement, passées avec -e dans docker run ou dans un fichier Compose.
- SUPERCLONICA_API_KEY : si elle est définie, /synthesize et /voices exigent l’en-tête Authorization: Bearer suivi de la clé.
- SUPERCLONICA_LANES : copies du modèle, de 1 à 8 (1 par défaut) ; chacune traite une requête à la fois et demande sa propre mémoire.
- SUPERCLONICA_DEVICE : auto, cuda ou cpu (auto par défaut : le GPU s’il y en a un).
- SUPERCLONICA_THREADS : threads du CPU (par défaut un par cœur physique).
- SUPERCLONICA_MAX_TEXT : le texte le plus long en caractères (5000 par défaut).
Avant la mise en production
Quelques habitudes gardent une API vocale auto-hébergée rapide et sûre.
- Conservez le volume /models pour que les redémarrages ne retéléchargent pas le modèle, et lancez le conteneur avec --restart unless-stopped.
- N’exposez pas le port 8000 tel quel sur Internet : définissez une clé d’API et placez le serveur derrière un proxy inverse en HTTPS, ou gardez-le sur un réseau privé.
- Découpez vous-même les textes longs en paragraphes si vous avez besoin de progression ou de streaming ; le moteur fait déjà parler un texte long par morceaux naturels de 160 caractères au plus.
- Mettez en cache l’audio des textes qui reviennent, comme les phrases d’interface : le même texte, la même voix et la même graine donnent toujours le même fichier.
- Mesurez sur votre matériel : dans nos tests, une phrase courte a pris 0,12 s sur une RTX 5070 Ti et 0,43 s sur quatre threads d’un Ryzen 7 5800X.
Licences
Le moteur SuperClonica et l’image sont publiés sous Apache License 2.0. Le modèle Supertonic 3 est sous OpenRAIL-M, une licence libre de redevances avec une liste d’usages interdits plutôt qu’une clause non commerciale : n’utilisez pas la parole pour vous faire passer pour quelqu’un sans son consentement, pour tromper ou pour harceler, et indiquez que l’audio est généré par machine quand cela compte.