Commit Graph
22 Commits
Author SHA1 Message Date
Claude db7575a8b0 Refonte complète du design (desktop + mobile)
- Nouvelle identité visuelle : thème sombre soigné, dégradés d'accent, cartes,
  ombres, bouton d'enregistrement en pilule avec point animé, badges d'état
- Mise en page responsive mobile-first : la liste des réunions devient un
  tiroir latéral (bouton ☰ + voile), contrôles empilés et tactiles, vumètre
  pleine largeur, bouton Démarrer proéminent
- Page de connexion redessinée dans le même style
- Étiquettes de locuteurs en pastilles colorées
- Cache-busting des assets (?v=2)
Aucun changement de logique : tous les identifiants/hooks JS préservés.

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-13 16:12:50 +00:00
Claude b8018a5eaf iPhone anti-veille renforcé : Wake Lock dès le clic + repli vidéo (canvas)
- keepAwake() appelé au tout début du clic, AVANT getUserMedia : iOS rejette
  sinon la demande Wake Lock (geste utilisateur déjà consommé)
- Repli universel : micro-vidéo muette en boucle alimentée par un canvas
  (playsinline), qui empêche l'extinction d'écran même sur iOS < 16.4
- Anti-veille relâché à l'arrêt et en cas d'échec micro

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-13 16:09:21 +00:00
Claude 872b71dd76 iPhone : verrou d'écran (anti-veille), rafraîchissement de la liste, diarisation rééquilibrée
- Wake Lock pendant l'enregistrement : empêche le téléphone de se mettre en
  veille (qui suspendait micro/WebSocket) ; repris au retour au premier plan
- La liste des réunions se rafraîchit au retour sur l'onglet/fenêtre et toutes
  les 20 s : une réunion faite sur l'iPhone apparaît sur le PC sans recharger
- Diarisation : seuil par défaut rééquilibré (0.40) — avait été rendu trop
  conservateur, ne séparait plus deux personnes ; règle NEW_SPEAKER assouplie

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-13 16:03:39 +00:00
Claude 6f4d15f133 Découpage : ne plus couper les mots en début/fin de phrase
Maintenant que l'amplification ne sert qu'à la détection (l'audio transcrit
reste propre), on peut rendre le VAD bien plus généreux aux bords sans coût
sur la qualité :
- pré-enregistrement 300 ms -> 750 ms (capture l'attaque de la 1re syllabe)
- VAD plus sensible (agressivité 2 -> 1), déclenchement plus rapide (0.6 -> 0.35)
- silence de fin 700 ms -> 950 ms (capture les fins de mots)
Validé : lead-in 0.5 s + trailing 1.1 s capturés, phrases distinctes non fusionnées.

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-13 15:54:09 +00:00
Claude 1e72e82965 Qualité de transcription : audio propre pour le moteur (corrige les erreurs)
L'AGC sur-amplifiait (jusqu'à x60) l'audio envoyé au moteur -> signal
déformé/bruité -> mauvaise reconnaissance. Désormais :
- Le VAD détecte sur l'audio amplifié, mais le segment stocke l'audio BRUT
- Le segment est normalisé proprement (mise à l'échelle linéaire unique vers
  crête ~22000, sans saturation) juste avant le moteur
- Segment max ramené de 25 s à 15 s pour un retour plus rapide
Validé bout en bout : micro faible -> détecté -> audio propre -> transcrit.

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-13 15:45:33 +00:00
Claude 55ccef1340 Fiabilité : la diarisation ne peut plus bloquer ni casser la transcription
- 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
2026-06-13 15:37:23 +00:00
Claude 0fa8455f8f Micro : amplification serveur avant le VAD + diarisation stabilisée
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
2026-06-13 09:30:14 +00:00
Claude 8515315e0b Micro : suppression de la bascule automatique + gain auto renforcé et mémorisé
- L'app ne change plus jamais de micro toute seule : choix manuel dans la
  liste uniquement, simple alerte si aucun son n'est capté
- Gain automatique : seuil d'amplification élargi (signal < 12000), montée
  plus rapide (x1.3/250 ms), plafond x80, et gain mémorisé entre réunions
  pour être efficace dès la première seconde

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-13 01:58:33 +00:00
Claude 8f1ebe5545 La recherche auto de micro ne s'active plus qu'au démarrage
Un silence en cours de réunion (normal) déclenchait des bascules de micro
intempestives qui cassaient la capture. Désormais : recherche uniquement
tant qu'aucun son n'a jamais été capté ; dès qu'un micro a fait ses preuves,
on n'y touche plus (sauf changement manuel).

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-12 18:41:59 +00:00
Claude 13be3030be Gain automatique du micro avant la détection de parole
Les micros faibles (casques) passaient sous le seuil du VAD : la plupart
des phrases n'étaient jamais découpées en segments. Un GainNode adaptatif
(jusqu'à x40, ajusté toutes les 250 ms, repli en cas de saturation) amène
le signal à un niveau exploitable avant le rééchantillonnage et le VAD.

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-12 18:38:36 +00:00
Claude db73e8db02 Diarisation des locuteurs et pause/reprise (intégration des travaux de main)
- 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
2026-06-12 17:50:51 +00:00
Claude 21866ec334 Filtrage des interjections chinoises de Qwen3-ASR (嗯, 咳咳...)
https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-12 17:42:33 +00:00
Claude 9b083579e1 Recherche automatique d'un micro fonctionnel pendant l'enregistrement
Si le micro actif reste muet 5 s, l'app bascule à chaud sur les autres
micros un par un jusqu'à en trouver un qui capte du son, puis le mémorise.
Le sélecteur permet aussi de changer de micro en cours d'enregistrement.

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-12 13:22:42 +00:00
Claude f92e6dd51f Adaptation aux micros instables (Bluetooth) sans changer la config du poste
- 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
2026-06-12 13:12:31 +00:00
Claude b802a3c95f Authentification : login/mot de passe (admin/admin par défaut)
- 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
2026-06-12 12:43:39 +00:00
Claude b32119d5c0 Diagnostic : vumètre micro dans l'interface et logs serveur des segments/transcriptions
https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-12 11:10:47 +00:00
Claude 480a380dde Micro : nouvel essai avec contrainte minimale si getUserMedia échoue
https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-12 11:03:31 +00:00
Claude 80176e9f82 ASR : repli automatique sans le paramètre language refusé par certains moteurs
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
2026-06-12 09:33:40 +00:00
Claude 16f41d6303 Option LIVEFLOW_TLS=off pour servir en HTTP derrière un reverse proxy existant
https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-12 09:01:26 +00:00
Claude 71ee13f845 Frontend : message d'erreur micro détaillé selon la cause (NotReadableError, etc.)
https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-12 09:00:15 +00:00
Claude 3c83b67538 Suppression de Caddy : l'app sert directement le HTTPS auto-signé
Un conteneur de moins. Le HTTPS reste nécessaire pour l'accès micro
(getUserMedia) depuis un autre appareil : certificat auto-signé généré au
démarrage pour LIVEFLOW_HOST, servi par uvicorn.

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-11 22:52:41 +00:00
Claude a8517c3597 Implémentation complète de LiveFlow (proposition 2, moteur Qwen3-ASR)
- docker-compose : Caddy (HTTPS local) + app FastAPI + Qwen3-ASR via vLLM (GPU)
- Backend : WebSocket audio, segmentation VAD (WebRTC), appel ASR compatible
  OpenAI, stockage SQLite, exports TXT/MD/SRT/JSON
- Frontend : capture micro (AudioWorklet, rééchantillonnage 16 kHz),
  transcription live, historique des réunions, copie et téléchargement
- README : démarrage, prérequis GPU, changement de moteur ASR

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
2026-06-11 16:28:17 +00:00