- Timeout de 5 s sur l'identification du locuteur (asyncio.wait_for) : si le
modèle ECAPA tarde ou se bloque sur CPU, on ignore le locuteur mais le
texte est transcrit et affiché quand même
- AGC du segmenteur protégé : une trame problématique renvoie l'audio brut
au lieu d'interrompre le découpage
Testé : texte transcrit malgré un diariseur qui se bloque indéfiniment.
https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
Captation micro :
- Plus AUCUN test/bascule de micro automatique (choix manuel uniquement)
- Amplification adaptative (AGC) déplacée dans le segmenteur, AVANT la
détection de parole : un micro faible (casque) était sous le seuil du VAD,
aucune phrase n'était détectée. Validé : signal crête 1473 -> 16600, capté.
- Le client envoie l'audio brut (plus de gain navigateur qui se battait avec) ;
vumètre affiché amplifié pour rester lisible
Diarisation (locuteurs éclatés en 3, 4, 5... pour une même personne) :
- Seuil abaissé (0.70 -> 0.35) + zone morte large : un nouveau locuteur n'est
créé que si le score est nettement bas ET le segment assez long (>=1.2s)
- Centroïde plus stable (EMA alpha 0.15) + adhérence au dernier locuteur
- Validé : 1 personne reste 1 locuteur même très bruitée ; 2-3 voix séparées
https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
- diarizer.py (ECAPA-TDNN + clustering incrémental) repris tel quel de main
- Hooks dans le pipeline : colonne speaker, identification par segment dans
un thread, locuteur dans l'interface (étiquettes colorées) et les exports
- Pause/reprise : bouton ⏸, le client coupe l'envoi, le serveur clôt le
segment en cours
- Case « Locuteurs » pour désactiver la diarisation par réunion
- DIARIZATION=on par défaut dans les compose, PyTorch CPU dans l'image
https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
- Sélecteur de micro intégré à l'interface (persisté, deviceId exact)
- Amplification serveur des segments trop faibles (mode mains-libres BT)
- Alerte visible si aucun son n'est capté pendant 5 s
- Niveau crête de chaque segment dans les logs
- Cache-Control: no-cache sur les fichiers statiques (fini le vieux JS en cache)
https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
- Page de connexion, session 7 jours par cookie HMAC signé (secret persisté)
- Protection de l'API (401) et du WebSocket (code 4401), / redirige vers /login
- Bouton de déconnexion, redirection automatique à l'expiration de session
- Identifiants configurables via LIVEFLOW_USER / LIVEFLOW_PASSWORD
https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
vLLM avec Qwen3-ASR peut répondre 400 quand 'language' est fourni. L'app
retente alors en détection automatique, et les erreurs ASR remontent
désormais avec le corps de la réponse pour faciliter le diagnostic.
Ajout du favicon (404 dans la console).
https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe