145 lines
8.4 KiB
Markdown
145 lines
8.4 KiB
Markdown
---
|
||
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
|