[UI][Quickshell] Repenser le retour de dictee dans la barre : etats, vumetre et silence #51

Closed
opened 2026-09-09 01:52:34 +00:00 by silex · 1 comment
Owner

Besoin

L'UI Murmur actuelle fonctionne, mais Mathieu n'en est pas satisfait. Explorer un indicateur integre a la barre Quickshell, avec niveau micro reel, detection de silence et etats de traitement lisibles. Ticket de conception a reprendre plus tard : ne pas remplacer automatiquement l'OSD existant ni figer le dessin avant essai.

Base actuelle et chemins a retrouver

Murmur revu sur f48f1bd4a6db1c488b8ccc0a87fefb547101db2b ; racine locale /home/mathieu/Projets/murmur/.

Dotfiles inspectes en lecture seule le 8 septembre 2026, HEAD c67d13f ; pas de reference Murmur dans les QML actuels. La configuration deployee ~/.config/quickshell/mathieu pointe vers /home/mathieu/dotfiles/quickshell/mathieu.

  • /home/mathieu/dotfiles/quickshell/mathieu/shell.qml : point d'entree, etats/sondes partages, une barre par ecran ; emplacement possible du consommateur Murmur unique.
  • /home/mathieu/dotfiles/quickshell/mathieu/Bar.qml : composition des indicateurs et visibilite de barre.
  • /home/mathieu/dotfiles/quickshell/mathieu/Chip.qml : composant et infobulles, style existant a conserver.
  • /home/mathieu/dotfiles/hypr/modules/bindings-common.lua:72 et suivantes : toggle, toggle --clipboard-only, cancel (Super+M, Super+Shift+M, Super+Echap).
  • /home/mathieu/dotfiles/hypr/sessions/quickshell/autostart.lua:26 : lancement du shell.

L'implementation deployee devra rester dans les dotfiles, pas en snapshot duplique dans Clankers. Les capacites generiques de mesure/IPC appartiennent a Murmur ; le rendu de barre appartient a Quickshell.

References Voxtype / Omarchy

  • Voxtype v1.0.1 (dda37ca72b71294d08b0c5bb49c5b24ca590d847) : niveaux audio, OSD, VAD, MPRIS.
  • L'OSD Voxtype est desactivable, active dans les defauts runtime, disponibilite du frontend selon build. VAD desactive par defaut, filtre batch apres stop ; ce n'est pas un arret automatique sur silence.
  • Omarchy v4.0.3 : flux d'etat, indicateur Dictation.qml, composant parent, configuration.
  • Omarchy utilise un flux JSON suivi, pas un sondage periodique. Attention a ne pas copier son indicateur sans examen : active ne couvre que recording, ce qui semble masquer le sablier prepare pour transcribing dans le composant parent (constat statique, non teste visuellement).

Questions de conception

  • Distinguer starting, micro reellement pret, parole/silence, stopping, transcription, cleanup, livraison, annulation et erreur. Ne jamais afficher micro actif apres son arret physique ni masquer le traitement en cours.
  • Vumetre RMS/peak reel, lissage et clipping ; signaler micro muet/absent ou absence prolongee de signal. Un niveau sonore n'est pas une preuve de parole : bruit et parole sont distincts.
  • Separer trois fonctions : visualisation du niveau, detection parole/silence, arret automatique. L'auto-stop eventuel est une option explicite avec delai configurable, pas une consequence implicite du vumetre.
  • Choisir entre mesure du flux deja capture et autre source fiable de metriques ; eviter un second recorder, une seconde copie audio ou la transmission de PCM au shell sans necessite.
  • Etendre minimalement le flux d'etat avec metriques bornees et cadence limitee ; ne jamais bloquer capture/STT sur une UI lente, absente ou redemarree. Aucune transcription/audio dans les logs UI.
  • Prevoir un consommateur partage pour plusieurs ecrans, reconnexion apres redemarrage du shell et affichage coherent avec barre auto-masquee/plein ecran. Aucun vol de focus.
  • Tester les interactions start/stop/cancel et acces aux erreurs, sans multiplier les actions accidentelles ; garder les raccourcis existants.
  • Decider de la coexistence ou du remplacement OSD/notifications/sons, avec fallback hors Quickshell. Evaluer pause/reprise MPRIS sans reprendre un lecteur que Murmur n'a pas lui-meme mis en pause.

Criteres de validation

Prototype conforme au style Nord existant ; captures/screenshots des etats puis essai reel sur plusieurs ecrans. Scenarios : silence, bruit, clipping, micro muet/debranche, demarrage lent, erreur STT, cleanup long, cancel, shell absent/restart, barre cachee. Mesurer cadence et charge CPU. Confirmer que panne/surcharge UI n'affecte ni capture ni livraison et que les etats terminaux restent visibles assez longtemps.

Connexes deja ouverts : #29 (framing JSONL/HUP), #30 (supervision des helpers), #31 (notification persistante), #32 (budgets UI). Les correctifs existants restent utiles meme si un nouveau frontend est retenu. La segmentation et les mesures de latence relevent du ticket performance distinct.

## Besoin L'UI Murmur actuelle fonctionne, mais Mathieu n'en est pas satisfait. Explorer un indicateur integre a la barre Quickshell, avec niveau micro reel, detection de silence et etats de traitement lisibles. Ticket de conception a reprendre plus tard : ne pas remplacer automatiquement l'OSD existant ni figer le dessin avant essai. ## Base actuelle et chemins a retrouver Murmur revu sur `f48f1bd4a6db1c488b8ccc0a87fefb547101db2b` ; racine locale `/home/mathieu/Projets/murmur/`. - [helpers/osd-gtk/murmur-osd.py:71-86](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/helpers/osd-gtk/murmur-osd.py#L71-L86) : overlay GTK sans focus clavier. - [helpers/osd-gtk/murmur-osd.py:231-240](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/helpers/osd-gtk/murmur-osd.py#L231-L240) : pulse visuel, pas un vumetre ; il confirme un etat logiciel, pas un signal audio utile. - [Worker OSD](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/internal/ui/osd.go), [evenements](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/internal/events), [IPC](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/internal/ipc), [capture pw-record](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/internal/audio/pwrecord/pwrecord.go). - Les evenements actuels exposent etats/progression sans transcript ; pas de mesure acoustique locale/VAD dans la capture actuelle. Dotfiles inspectes en lecture seule le 8 septembre 2026, HEAD `c67d13f` ; pas de reference Murmur dans les QML actuels. La configuration deployee `~/.config/quickshell/mathieu` pointe vers `/home/mathieu/dotfiles/quickshell/mathieu`. - `/home/mathieu/dotfiles/quickshell/mathieu/shell.qml` : point d'entree, etats/sondes partages, une barre par ecran ; emplacement possible du consommateur Murmur unique. - `/home/mathieu/dotfiles/quickshell/mathieu/Bar.qml` : composition des indicateurs et visibilite de barre. - `/home/mathieu/dotfiles/quickshell/mathieu/Chip.qml` : composant et infobulles, style existant a conserver. - `/home/mathieu/dotfiles/hypr/modules/bindings-common.lua:72` et suivantes : `toggle`, `toggle --clipboard-only`, `cancel` (Super+M, Super+Shift+M, Super+Echap). - `/home/mathieu/dotfiles/hypr/sessions/quickshell/autostart.lua:26` : lancement du shell. L'implementation deployee devra rester dans les dotfiles, pas en snapshot duplique dans Clankers. Les capacites generiques de mesure/IPC appartiennent a Murmur ; le rendu de barre appartient a Quickshell. ## References Voxtype / Omarchy - Voxtype **v1.0.1** (`dda37ca72b71294d08b0c5bb49c5b24ca590d847`) : [niveaux audio](https://github.com/peteonrails/voxtype/blob/dda37ca72b71294d08b0c5bb49c5b24ca590d847/src/audio/levels.rs), [OSD](https://github.com/peteonrails/voxtype/blob/dda37ca72b71294d08b0c5bb49c5b24ca590d847/src/osd/config.rs), [VAD](https://github.com/peteonrails/voxtype/blob/dda37ca72b71294d08b0c5bb49c5b24ca590d847/src/config/vad.rs), [MPRIS](https://github.com/peteonrails/voxtype/blob/dda37ca72b71294d08b0c5bb49c5b24ca590d847/src/audio/media.rs). - L'OSD Voxtype est desactivable, active dans les defauts runtime, disponibilite du frontend selon build. VAD desactive par defaut, filtre batch apres stop ; ce n'est pas un arret automatique sur silence. - Omarchy **v4.0.3** : [flux d'etat](https://github.com/basecamp/omarchy/blob/0534987009061cbe2dacdde4ad564092ab698d12/bin/omarchy-voxtype-status), [indicateur Dictation.qml](https://github.com/basecamp/omarchy/blob/0534987009061cbe2dacdde4ad564092ab698d12/shell/plugins/bar/indicators/Dictation.qml), [composant parent](https://github.com/basecamp/omarchy/blob/0534987009061cbe2dacdde4ad564092ab698d12/shell/Ui/BarIndicator.qml), [configuration](https://github.com/basecamp/omarchy/blob/0534987009061cbe2dacdde4ad564092ab698d12/default/voxtype/config.toml). - Omarchy utilise un flux JSON suivi, pas un sondage periodique. Attention a ne pas copier son indicateur sans examen : `active` ne couvre que `recording`, ce qui semble masquer le sablier prepare pour `transcribing` dans le composant parent (constat statique, non teste visuellement). ## Questions de conception - [ ] Distinguer `starting`, micro reellement pret, parole/silence, `stopping`, transcription, cleanup, livraison, annulation et erreur. Ne jamais afficher micro actif apres son arret physique ni masquer le traitement en cours. - [ ] Vumetre RMS/peak reel, lissage et clipping ; signaler micro muet/absent ou absence prolongee de signal. Un niveau sonore n'est pas une preuve de parole : bruit et parole sont distincts. - [ ] Separer trois fonctions : visualisation du niveau, detection parole/silence, arret automatique. L'auto-stop eventuel est une option explicite avec delai configurable, pas une consequence implicite du vumetre. - [ ] Choisir entre mesure du flux deja capture et autre source fiable de metriques ; eviter un second recorder, une seconde copie audio ou la transmission de PCM au shell sans necessite. - [ ] Etendre minimalement le flux d'etat avec metriques bornees et cadence limitee ; ne jamais bloquer capture/STT sur une UI lente, absente ou redemarree. Aucune transcription/audio dans les logs UI. - [ ] Prevoir un consommateur partage pour plusieurs ecrans, reconnexion apres redemarrage du shell et affichage coherent avec barre auto-masquee/plein ecran. Aucun vol de focus. - [ ] Tester les interactions start/stop/cancel et acces aux erreurs, sans multiplier les actions accidentelles ; garder les raccourcis existants. - [ ] Decider de la coexistence ou du remplacement OSD/notifications/sons, avec fallback hors Quickshell. Evaluer pause/reprise MPRIS sans reprendre un lecteur que Murmur n'a pas lui-meme mis en pause. ## Criteres de validation Prototype conforme au style Nord existant ; captures/screenshots des etats puis essai reel sur plusieurs ecrans. Scenarios : silence, bruit, clipping, micro muet/debranche, demarrage lent, erreur STT, cleanup long, cancel, shell absent/restart, barre cachee. Mesurer cadence et charge CPU. Confirmer que panne/surcharge UI n'affecte ni capture ni livraison et que les etats terminaux restent visibles assez longtemps. Connexes deja ouverts : #29 (framing JSONL/HUP), #30 (supervision des helpers), #31 (notification persistante), #32 (budgets UI). Les correctifs existants restent utiles meme si un nouveau frontend est retenu. La segmentation et les mesures de latence relevent du ticket performance distinct.
Owner

Livraison et validation

Interface implémentée, déployée et validée en usage réel par Mathieu. Clôture à sa demande après les derniers ajustements.

  • Indicateur Nord intégré au cartouche de barre, à gauche du quota Codex et après le tiroir optionnel. Bleu habituel pendant l’écoute; largeur adaptée au contenu.
  • Historique RMS/crêtes réel sur le WAV déjà capturé, saturation, signal faible et données périmées distingués. Aucun second recorder ni audio/transcript transmis au shell.
  • États de démarrage, écoute, arrêt, transcription, correction, livraison et résultat; animation limitée à 20 Hz, erreurs consultables, aucun vol de focus.
  • Modes auto, quickshell et notify; détection par acquittement QML, repli notifications, reprise après reload et consommateur partagé entre écrans.
  • Configuration locale active : ui.mode="auto", ui.sound=true. Binaire et module installés; murmur doctor --json de nouveau positif, y compris le check QuickShell.

Références poussées

  • Murmur : 52cd5d0 (implémentation), ca57d5f (ajustements documentés), 3c53180 (validation et documentation de clôture).
  • Dotfiles : d1cb4b5 (intégration), 29a3765 (couleur, position et largeur).
  • Documentation : quickshell.md, état d’implémentation, checklist desktop, cycle de session et IPC actualisés.

Vérifications et périmètre

Tests Go sous -race, lint/build/installcheck, lint QML et tests du modèle visuel passés. Prévisualisation sur deux écrans, capture PipeWire réelle, barre masquée, suspension/reprise du pont et reload pendant la capture vérifiés. Mathieu confirme le bon fonctionnement après essais des états.

Le ticket a servi de cadre de conception : VAD, auto-stop et contrôle MPRIS ne font pas partie de cette livraison. Les essais physiques de débranchement micro/écran et le plein écran restent explicitement indiqués dans la documentation, sans être présentés comme validés. L’échec intermittent observé une fois sur un ancien test de drainage live est également consigné, avec les réexécutions réussies.

## Livraison et validation Interface implémentée, déployée et validée en usage réel par Mathieu. Clôture à sa demande après les derniers ajustements. - Indicateur Nord intégré au cartouche de barre, à gauche du quota Codex et après le tiroir optionnel. Bleu habituel pendant l’écoute; largeur adaptée au contenu. - Historique RMS/crêtes réel sur le WAV déjà capturé, saturation, signal faible et données périmées distingués. Aucun second recorder ni audio/transcript transmis au shell. - États de démarrage, écoute, arrêt, transcription, correction, livraison et résultat; animation limitée à 20 Hz, erreurs consultables, aucun vol de focus. - Modes `auto`, `quickshell` et `notify`; détection par acquittement QML, repli notifications, reprise après reload et consommateur partagé entre écrans. - Configuration locale active : `ui.mode="auto"`, `ui.sound=true`. Binaire et module installés; `murmur doctor --json` de nouveau positif, y compris le check QuickShell. ### Références poussées - Murmur : 52cd5d0 (implémentation), ca57d5f (ajustements documentés), 3c53180 (validation et documentation de clôture). - Dotfiles : d1cb4b5 (intégration), 29a3765 (couleur, position et largeur). - Documentation : [quickshell.md](https://git.2027a.net/2027a/murmur/src/branch/main/docs/quickshell.md), état d’implémentation, checklist desktop, cycle de session et IPC actualisés. ### Vérifications et périmètre Tests Go sous `-race`, lint/build/installcheck, lint QML et tests du modèle visuel passés. Prévisualisation sur deux écrans, capture PipeWire réelle, barre masquée, suspension/reprise du pont et reload pendant la capture vérifiés. Mathieu confirme le bon fonctionnement après essais des états. Le ticket a servi de cadre de conception : VAD, auto-stop et contrôle MPRIS ne font pas partie de cette livraison. Les essais physiques de débranchement micro/écran et le plein écran restent explicitement indiqués dans la documentation, sans être présentés comme validés. L’échec intermittent observé une fois sur un ancien test de drainage live est également consigné, avec les réexécutions réussies.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
2027a/murmur#51
No description provided.