🎙️ LiveFlow

Transcription de réunions en direct, 100 % locale, dans Docker. Capture du micro depuis un navigateur (PC ou téléphone), transcription par Qwen3-ASR sur GPU NVIDIA, affichage du texte au fil de l'eau, historique et export (TXT, Markdown, SRT, JSON).

Architecture détaillée : voir ARCHITECTURE.md (proposition 2 retenue, sans reverse proxy : l'app sert directement le HTTPS).

Navigateur (micro, HTTPS/WebSocket)
   → app FastAPI (HTTPS auto-signé + VAD + segments + SQLite + interface web)
   → conteneur ASR Qwen3-ASR via vLLM (API compatible OpenAI)

Prérequis

  • Docker + Docker Compose
  • GPU NVIDIA avec pilotes récents et le NVIDIA Container Toolkit (nvidia-ctk runtime configure --runtime=docker)
  • ~6 Go de VRAM libres pour Qwen3-ASR-1.7B (ajuster --gpu-memory-utilization)

Démarrage

docker compose up -d --build

Au premier lancement, le conteneur asr télécharge le modèle depuis Hugging Face (quelques Go, mis en cache dans un volume). Suivre avec :

docker compose logs -f asr

Puis ouvrir https://<ip-du-serveur>:8443 depuis un PC ou un téléphone du réseau local, accepter l'avertissement de certificat, autoriser le micro, et cliquer sur Démarrer.

⚠️ Le HTTPS est obligatoire : les navigateurs n'autorisent l'accès au micro (getUserMedia) qu'en HTTPS (ou sur localhost). L'app génère elle-même un certificat auto-signé au premier démarrage pour l'adresse LIVEFLOW_HOST (stocké dans le volume de données ; supprimez data/certs/ pour le régénérer après un changement d'adresse).

Unraid

Un compose dédié est fourni : docker-compose.unraid.yml (chemins appdata, GPU via runtime: nvidia, port 8443). Prérequis : plugins Nvidia Driver et Docker Compose Manager. Extraire le dépôt dans /mnt/user/appdata/liveflow, renseigner LIVEFLOW_HOST (IP du serveur) dans le compose, créer une stack pointant sur ce fichier, puis ouvrir https://<ip-unraid>:8443.

Configuration

Variables d'environnement (fichier .env à la racine, voir .env.example) :

Variable Défaut Rôle
ASR_LANGUAGE (vide) Code langue forcé (fr, en…) ; vide = détection auto
ASR_API_KEY sk-local Clé envoyée au moteur ASR (inutile en local)
HF_TOKEN (vide) Jeton Hugging Face si nécessaire au téléchargement

Changer de moteur de transcription

L'app ne parle au moteur que via l'API OpenAI (/v1/audio/transcriptions). Pour changer de moteur, remplacer le service asr dans docker-compose.yml et ajuster ASR_MODEL. Exemples :

# CPU uniquement — Parakeet-TDT-0.6B-v3 (rapide, 25 langues dont FR)
asr:
  image: ghcr.io/groxaxo/parakeet-tdt-0.6b-v3-fastapi-openai:latest

# Écosystème Whisper — Speaches (faster-whisper, CPU/GPU)
asr:
  image: ghcr.io/speaches-ai/speaches:latest-cuda

Récupérer une transcription

Depuis l'interface (boutons TXT / MD / SRT / JSON / Copier) ou en direct via l'API :

curl -k https://<ip>/api/meetings                      # liste des réunions
curl -k https://<ip>/api/meetings/1/export?format=txt  # export texte
S
Description
No description provided
Readme
165 KiB
0 Stars 1 Watchers 0 Forks
Languages
Python 45.6%
JavaScript 27.4%
CSS 15.3%
HTML 9.1%
Shell 1.9%
Other 0.7%