Files
2026-06-09 18:40:21 +02:00

145 lines
8.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Speaches
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, artificial-intelligence, stt, tts, whisper, openai-compatible, audio, python, mit]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=artificial-intelligence, https://github.com/speaches-ai/speaches]
---
# Speaches 🎙️
> **Le « Ollama du son »** — serveur OpenAI-compatible pour la **transcription vocale (STT)** et la **synthèse vocale (TTS)**, basé sur faster-whisper, Piper et Kokoro, 100 % local et auto-hébergé.
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://speaches.ai/ |
| **GitHub** | https://github.com/speaches-ai/speaches |
| **License** | MIT |
| **Langage** | Python (99 %) |
| **Étoiles** | 399 |
| **Dernière MAJ** | 2025-12-27 (v0.9.0-rc.3) |
| **Catégorie** | [[cat-artificial-intelligence]] |
## 📝 Description
**Speaches** (jeu de mots sur *speech* + *es*) est un **serveur HTTP compatible avec l'API OpenAI Audio** (`/v1/audio/transcriptions`, `/v1/audio/translations`, `/v1/audio/speech`) qui s'installe en une ligne de Docker et accepte n'importe quel client OpenAI existant : **Home Assistant**, **Open WebUI**, **Cody**, **Continue**, **n8n**, scripts Python avec le SDK `openai>=1.0`, applications **ESP32** de transcription, etc. Le slogan officiel est *« Ollama, but for TTS/STT models »* : on télécharge un modèle à la demande, il est **chargé dynamiquement en GPU/CPU/RAM**, utilisé, puis déchargé après inactivité pour libérer la VRAM.
Côté **STT (speech-to-text)**, Speaches utilise **faster-whisper** (le port CTranslate2 de Whisper, 4 à 6× plus rapide que le Python original) avec diarisation **pyannote** (identification du locuteur). Tous les modèles Whisper sont supportés : `tiny`, `base`, `small`, `medium`, `large-v3`, `turbo`, et les **distil-whisper** distillés. Le **streaming SSE** envoie la transcription au fur et à mesure — utile pour sous-titrer un direct ou afficher le live-caption dans un dashboard. Côté **TTS (text-to-speech)**, deux backends au choix : **Piper** (modèles on-device, voix offline très légères, ~15 Mo par voix, multilingue) et **Kokoro-82M** (Rank #1 du TTS Arena HuggingFace, qualité proche de XTTS/OpenAI TTS, modèles EN/ZH/JA/ES/FR/IT/PT/HI).
Le projet est **très actif** : 3 400 ⭐, 740 commits, 35 contributeurs, 9 releases, soutenu par le mainteneur principal **Fedir Zadniprovskyi** (également mainteneur d'`faster-whisper`). Speaches supporte **GPU (CUDA) et CPU**, propose une **Realtime API** pour la conversation bidirectionnelle (micro → STT → LLM → TTS → haut-parleur, façon Voice Mode de ChatGPT), et un **CLI** (`speaches-cli`) avec alias de commandes pour scripter facilement. C'est aujourd'hui la **référence self-hosted** pour remplacer l'audio OpenAI sans payer au token.
## 🚀 Installation
### Option 1 : Docker Compose (recommandé)
```yaml
# docker-compose.yml
services:
speaches:
image: ghcr.io/speaches-ai/speaches:latest
container_name: speaches
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- speaches-models:/root/.cache/huggingface
environment:
- TZ=Europe/Paris
- WHISPER_MODEL=base # tiny/base/small/medium/large-v3/turbo
- WHISPER_COMPUTE_TYPE=int8 # int8/int8_float16/float16/float32
- KOKoro_MODEL=hexgrad/Kokoro-82M
- PIPER_VOICE=en_US-amy-low # voix Piper par défaut
- ENABLE_DIARIZATION=true # nécessite HF_TOKEN + pyannote accept
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu] # commenter pour CPU-only
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8000/health"]
interval: 30s
timeout: 5s
retries: 3
volumes:
speaches-models:
```
Pour CPU uniquement (sans GPU), supprimez le bloc `deploy.resources` — Speaches tournera avec `int8` par défaut et sera ~3× plus lent qu'en CUDA. Le **premier téléchargement** d'un modèle Whisper ou Kokoro prend 30 s à 2 min selon la bande passante.
### Option 2 : Installation manuelle
Prérequis : **Python 3.11+**, **ffmpeg** dans le PATH, **CUDA Toolkit 12.x** (optionnel). Clone, `uv sync` (le projet utilise `uv` au lieu de pip), puis `uv run speaches`. L'image Docker officielle utilise `nvidia/cuda` comme base pour gagner 2-4 Go par rapport à un `pytorch` complet. Voir la [doc d'install](https://speaches.ai/installation/) pour les détails Nix et les configs CDI (Container Device Interface).
## ⚙️ Configuration
Speaches se configure par **variables d'environnement** ou fichier `.env` :
- `WHISPER_MODEL` : nom du modèle (défaut `base`, recommandé `small` ou `turbo` pour un bon compromis vitesse/qualité).
- `WHISPER_COMPUTE_TYPE` : précision (`int8` = CPU-friendly, `float16` = GPU).
- `KOKORO_MODEL` : modèle TTS HuggingFace à précharger.
- `PIPER_VOICE` : voix Piper par défaut (voix FR : `fr_FR-siwis-medium`, voix EN : `en_US-amy-low`).
- `ENABLE_DIARIZATION=true` + `HF_TOKEN` (token HuggingFace + acceptation des conditions **pyannote/speaker-diarization-3.0** sur la page modèle).
- `UVICORN_HOST=0.0.0.0` / `UVICORN_PORT=8000` (rare à changer).
**Test rapide** après install :
```bash
# Transcrire un fichier
curl -X POST http://localhost:8000/v1/audio/transcriptions \
-F file=@podcast.mp3 -F model=base
# Générer de la parole
curl -X POST http://localhost:8000/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"input":"Bonjour le monde","voice":"fr","model":"kokoro"}' \
--output bonjour.wav
```
## 🔄 Alternatives
### Open Source
- **Whisper.cpp** — moteur bas-niveau C++ (utilisé par Speaches en interne via faster-whisper), pas de serveur HTTP out-of-the-box.
- **WhisperX** — Whisper + diarisation + word-level alignment, pas d'API REST propre.
- **Faster-WhisperServer** (fedirz) — ancêtre simplifié de Speaches, sans TTS.
- **Piper** (sans wrapper serveur) — moteur TTS brut, à intégrer manuellement.
- **OpenVoice**, **Coqui TTS (XTTS)** — TTS multi-langue avec clonage de voix, plus lourds.
- **Coqui Studio** — fermé depuis 2024.
- [[app-ollama]] — pour les LLM ; Speaches complète le trio LLM + STT + TTS.
### Propriétaires (ce que Speaches remplace)
- **OpenAI Whisper API** ($0.006/min) — Speaches `large-v3` local est **gratuit et équivalent** qualité.
- **OpenAI TTS API** ($15/1M caractères) — Kokoro-82M est **gratuit** et classé #1 sur le TTS Arena.
- **ElevenLabs** ($5-$330/mois) — clonage de voix excellent, mais cloud et cher.
- **Google Cloud Speech / Azure Speech** — APIs enterprise, facturation à l'usage.
- **AssemblyAI** — diarisation cloud de référence, latence <500 ms.
## 🔐 Sécurité
- **Exposé sans auth par défaut** : Speaches n'a **aucun système d'authentification intégré**. Placez-le **derrière un reverse-proxy authentifié** (Authelia, Authentik, oauth2-proxy) ou un **VPN/Tailscale** — sinon n'importe qui peut l'utiliser (et consommer votre GPU !).
- **Reverse proxy HTTPS** (Caddy/Traefik) — les flux audio sont souvent considérés comme personnels.
- **HF_TOKEN** : si vous activez la diarisation, le token est passé au runtime, **ne le logguez pas** (Speaches ne le fait pas par défaut).
- **Modèles volumineux** : `large-v3` = 3 Go, `Kokoro-82M` = 330 Mo. Prévoyez un volume dédié (`speaches-models` ici) sur un disque rapide (SSD/NVMe), pas sur un partage NFS lent.
- **FFmpeg** : vulnérabilités régulières, gardez l'image Docker à jour (`docker compose pull` mensuel) — Speaches est basé sur `nvidia/cuda` qui reçoit les patchs de sécurité upstream.
## 📚 Ressources
- [GitHub speaches-ai/speaches](https://github.com/speaches-ai/speaches)
- [Site officiel](https://speaches.ai/)
- [Documentation](https://speaches.ai/installation/)
- [Demo Realtime API](https://speaches.ai/usage/realtime-api)
- [Kokoro-82M sur HuggingFace](https://huggingface.co/hexgrad/Kokoro-82M)
- [faster-whisper](https://github.com/SYSTRAN/faster-whisper)
- [Piper TTS](https://github.com/rhasspy/piper)
## Pages Liées
- [[cat-artificial-intelligence]] — Catégorie AI
- [[app-ollama]] — Runtime LLM (équivalent pour le texte)
- [[app-open-webui]] — Interface qui peut utiliser Speaches comme provider STT
- [[app-scriberr]] — Transcription audio concurrente (Whisper-only, plus simple)
- [[recettes-docker-compose]] — Templates Docker
- [[securisation-home-lab]] — Reverse proxy, authentification