No description
  • Python 73%
  • Shell 27%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-14 16:56:11 +02:00
installer.sh v0.1.1 : serveur de voix Piper pour YunoHost 2026-10-14 16:56:11 +02:00
LICENSE v0.1.1 : serveur de voix Piper pour YunoHost 2026-10-14 16:56:11 +02:00
origines.conf v0.1.1 : serveur de voix Piper pour YunoHost 2026-10-14 16:56:11 +02:00
README.md v0.1.1 : serveur de voix Piper pour YunoHost 2026-10-14 16:56:11 +02:00
serveur-voix.service v0.1.1 : serveur de voix Piper pour YunoHost 2026-10-14 16:56:11 +02:00
serveur.py v0.1.1 : serveur de voix Piper pour YunoHost 2026-10-14 16:56:11 +02:00

Serveur de voix

Synthèse vocale Piper installée sur un serveur YunoHost, pour donner une belle voix française (Siwis, Tom) à des applications web : TBScreen, Hello!, etc.

  • Hors des grands services en ligne : le texte va de votre application à votre serveur, nulle part ailleurs.
  • Aucun texte n'est écrit dans les journaux.
  • Seuls les sites listés dans /etc/serveur-voix/origines.conf peuvent l'utiliser.
  • Limites : 1 200 caractères par demande, 60 demandes par minute et par adresse.
  • Licence : GPL v3. Piper (piper-tts) est sous GPL v3, et les voix Siwis et Tom ont leurs propres licences, indiquées dans leurs fichiers .onnx.json.

Version : 0.1.1

Fonctionnement

Application (navigateur)  ──HTTPS──▶  tts.toutalamaison.ynh.fr  (YunoHost, application « Redirect » en proxy inverse)
                                              │
                                              ▼
                                   127.0.0.1:5005  serveur.py  ──▶  Piper (voix .onnx)
Point d'accès Rôle
GET /sante {"ok": true, "voix": 2}
GET /voix liste des voix : [{"id": "fr_FR-siwis-medium", "nom": "Siwis", "langue": "fr-FR", "qualite": "medium"}, …]
POST /lire corps JSON {"texte": "…", "voix": "fr_FR-siwis-medium", "vitesse": 1} → son audio/wav

vitesse va de 0,5 (lent) à 2 (rapide). Les dernières phrases lues sont gardées en mémoire, si bien qu'une phrase relue repart immédiatement.

Installation sur le YunoHost

1. Copier le dossier sur le serveur

Depuis votre ordinateur :

# Copie l'archive sur le serveur (VOTRE_UTILISATEUR : le compte administrateur de votre YunoHost)
scp serveur-voix-0.1.1.zip VOTRE_UTILISATEUR@toutalamaison.ynh.fr:~

2. Installer Piper, les voix et le service

Sur le serveur (ssh VOTRE_UTILISATEUR@toutalamaison.ynh.fr) :

# Décompresse et lance l'installation (10 à 15 minutes sur un Raspberry Pi, voix comprises)
unzip -o serveur-voix-0.1.1.zip && cd serveur-voix
sudo bash installer.sh

À la fin, le script fait lire une phrase d'essai et affiche le temps qu'il a fallu.

3. Publier le service sur tts.toutalamaison.ynh.fr

# Ajoute le sous-domaine (les sous-domaines d'un domaine .ynh.fr sont pris en charge par YunoHost)
sudo yunohost domain add tts.toutalamaison.ynh.fr
# Certificat HTTPS Let's Encrypt (attendre une à deux minutes après l'ajout du domaine si la commande échoue)
sudo yunohost domain cert install tts.toutalamaison.ynh.fr
# Proxy inverse public vers le serveur de voix (application officielle « Redirect »)
sudo yunohost app install redirect -a "domain=tts.toutalamaison.ynh.fr&path=/&redirect_type=reverseproxy&target=http://127.0.0.1:5005&init_main_permission=visitors"

4. Vérifier depuis votre ordinateur

# Doit répondre {"ok": true, "voix": 2}
curl -H "Origin: https://tbscreen.toutalamaison.eu" https://tts.toutalamaison.ynh.fr/sante
# Doit être refusé (403) : ce site n'est pas dans la liste
curl -s -o /dev/null -w "%{http_code}\n" -H "Origin: https://exemple.org" https://tts.toutalamaison.ynh.fr/sante

Autoriser une autre application

Ajoutez son adresse (par exemple https://hello.toutalamaison.ynh.fr) dans /etc/serveur-voix/origines.conf, puis :

# Prend en compte la nouvelle liste
sudo systemctl restart serveur-voix

Ajouter une voix

Déposez le fichier .onnx et son .onnx.json (depuis rhasspy/piper-voices) dans /opt/serveur-voix/voix, puis redémarrez le service.

Utilisation depuis une application

// Demande le son d'une phrase au serveur de voix puis le joue
const reponse = await fetch('https://tts.toutalamaison.ynh.fr/lire', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ texte: 'Bonjour !', voix: 'fr_FR-siwis-medium', vitesse: 1 })
});
new Audio(URL.createObjectURL(await reponse.blob())).play();

Pensez à autoriser le serveur dans la CSP de l'application : connect-src 'self' https://tts.toutalamaison.ynh.fr (et media-src … blob: pour jouer le son).

Entretien

Besoin Commande
État systemctl status serveur-voix
Journal journalctl -u serveur-voix -f
Mettre à jour Piper relancer sudo bash installer.sh (les voix et la liste des sites sont conservées)
Désinstaller sudo yunohost app remove redirect puis sudo systemctl disable --now serveur-voix && sudo rm -r /opt/serveur-voix /etc/serveur-voix /etc/systemd/system/serveur-voix.service && sudo userdel serveur-voix

Tester sans Piper

# Faux moteur (une seconde de silence) pour vérifier le serveur, les sites autorisés et les limites
python3 serveur.py --essai --port 5099 --origines origines.conf

Historique

  • 0.1.1 : TBScreen autorisé à son adresse tbscreen.toutalamaison.eu.
  • 0.1.0 : première version (Siwis et Tom, sites autorisés, limites, cache, service systemd durci).