RoomKit possède déjà une grande richesse fonctionnelle. Le prochain progrès consiste à rendre cette richesse compréhensible : des réglages regroupés par intention, une hiérarchie calme et des états explicites.
Base analysée 162d9fd14 rubriques actuelles156 réglages par défautApplication native PySide6
01 / LE DIAGNOSTIC
La complexité du produit apparaît trop tôt.
Les Settings suivent aujourd’hui assez directement les modules techniques : AI Provider, STT, TTS, MCP Servers, CLI Tools, Audio Debug, Telemetry, Components. Ce vocabulaire fonctionne pour quelqu’un qui connaît l’architecture. Il impose davantage d’effort à la personne qui cherche simplement à changer de micro, choisir une voix ou activer une dictée locale.
La modernisation doit donc commencer par l’organisation, puis par les composants visuels. Changer les couleurs sans modifier cette structure laisserait les principaux obstacles en place.
Direction proposée
Une fenêtre de réglages redimensionnable, une navigation par usage, une recherche globale, des réglages essentiels lisibles en premier et des détails techniques accessibles à la demande.
Les bases à conserver
La séparation du code par page, les deux palettes existantes, les options conditionnelles par fournisseur, les sections avancées déjà repliables et les indications de composants absents sont de bons points de départ. Le logo possède aussi un indigo distinctif que les Settings peuvent reprendre avec mesure.
Méthode : lecture du code des Settings, du thème, de la fenêtre principale, de la persistance et des tests ; rendu Qt offscreen de General et AI Provider avec configuration isolée. Aucun compte, secret ou paramètre personnel n’a été chargé. Il s’agit d’une analyse experte, pas d’une étude d’usage mesurée auprès d’utilisateurs.
02 / L’INTERFACE ACTUELLE
Beaucoup de champs, peu de niveaux de lecture.
General · rendu du code actuel, 880 × 680.AI Provider · installation locale avec extras absents.
Dans General, les libellés sont alignés à droite mais les colonnes changent de largeur entre groupes. Le regard se déplace pour retrouver le début des contrôles. Les champs remplissent presque toute la largeur disponible, même pour des choix courts. Les titres de groupe existent, mais leur taille et leur contraste leur donnent peu de poids.
La capture de AI Provider montre un problème de parcours : un même écran demande de comprendre le mode de conversation, un fournisseur, son installation, une clé, un modèle, une voix et les instructions. Ces concepts n’ont ni la même fréquence d’usage ni les mêmes prérequis.
Ces captures représentent une configuration de démonstration sans modèles ni clés personnels. Elles ne montrent pas l’état réel de votre installation. Le rendu offscreen ne reproduit pas exactement le chrome natif de macOS.
03 / LES PROBLÈMES PRIORITAIRES
Ce qui mérite de changer, et pourquoi.
P1 · STRUCTURE01
Quatorze destinations au même niveau
Constat. La barre latérale de 150 px présente General, AI Provider, Attitudes, Speakers, Dictation, Wake Word, AI Models, Skills, MCP Servers, CLI Tools, Audio Debug, Telemetry, Components et About sans groupes ni recherche.
Impact probable. Il faut lire toute la liste et connaître la destination avant de trouver un réglage.
Proposition. Trois groupes stables : Workspace, Capabilities, System. Neuf entrées principales et About en pied de barre. Regrouper les pages proches derrière des sous-sections nommées clairement.
Source : panel.py, construction de la sidebar et de _pages.
P1 · ORGANISATION02
General est devenu une page de débordement
Constat. La page réunit thème, raccourci, mémoire, périphériques, AEC, réduction du bruit, VAD, détection de fin de tour et moteur d’inférence. La mémoire se trouve dans le formulaire du raccourci.
Proposition. General conserve apparence et raccourcis. Audio & voice reçoit les périphériques et le traitement du son. Privacy & memory reçoit l’historique et les enregistrements. Les options de fin de tour retrouvent leur contexte dans Conversation.
Constat. Le choix « Speech-to-Speech (Realtime) » / « Voice Channel (STT → LLM → TTS) » est un menu, puis Voice Channel introduit des onglets STT, LLM, TTS et Agent.
Proposition. Deux choix visibles et expliqués. Realtime : un fournisseur pour une conversation vocale directe. Voice Channel : trois étapes, « Transcription → Intelligence → Speech », avec le fournisseur choisi sous chaque étape. Garder les acronymes dans les détails pour les utilisateurs expérimentés.
Attention. Les fonctions ne sont pas interchangeables : interruptions, détection des tours, débruitage et identification des voix dépendent du chemin audio et du fournisseur.
Constat.SettingsPanel.done() enregistre toutes les pages lorsque la fenêtre se ferme. Échap conserve également les modifications. Il n’y a pas de bouton Save ni d’état global indiquant ce comportement.
Proposition. À court terme, expliciter « Changes are saved when you close Settings ». À terme, un modèle de modifications validées avec retour « Saved » et indication de prise d’effet, notamment à la prochaine session pour le moteur.
Décision de prototype. L’artefact simule une sauvegarde immédiate en mémoire. Ce comportement est une proposition : il n’est pas celui de l’application actuelle. La migration doit traiter ensemble persistance, annulation éventuelle, validation et notifications du moteur.
Sources : panel.py, test_settings_panel.py, tests test_escape_keeps_the_changes et test_every_way_out_saves_exactly_once.
P1 · CONNEXIONS05
Les clés sont répétées dans plusieurs contextes
Constat. Une même clé apparaît dans Realtime, Voice Channel et Dictation. Le code synchronise correctement ces copies avec _link_api_key_fields(), mais la duplication demeure dans l’interface.
Proposition. Providers & keys devient le point d’entrée unique, avec des liens directs depuis les pages concernées. Montrer séparément « component installed », « key added » et « connection tested ». Une clé présente ne prouve pas son fonctionnement.
Contrainte. Ne pas promettre systématiquement « sécurisé dans le trousseau » : SecretStore possède un repli QSettings. Le texte de l’interface doit refléter le backend réellement actif.
Constat. AI Models gère les fichiers de modèles ; Components gère les dépendances. Un utilisateur peut voir un fournisseur sélectionnable mais absent, ou une liste de modèles vide. Les indications et boutons d’installation existants sont utiles.
Proposition. Une destination Models & components, deux sous-sections clairement expliquées. Un message d’absence doit proposer l’action précise qui manque : télécharger un modèle, installer un composant, ou renseigner une clé. Conserver le choix initial lors de ce détour.
Contrainte. L’action dépend de la distribution : installation automatique, commande à copier ou limitation du bundle. Conserver les conflits entre extras et le besoin éventuel de redémarrage.
Constat. Titres à 18 px, formulaires à 14 px et indications souvent à 11–12 px ; les contrôles, les sélecteurs longs et les textes techniques occupent une grande partie de la fenêtre. Des styles locaux répètent les mêmes décisions visuelles.
Proposition. Un titre de page plus marqué, un sous-titre qui explique l’objectif, des sections espacées, des lignes avec intitulé et aide à gauche, des contrôles de largeur adaptée à droite. Les bordures fines délimitent les groupes ; l’accent indigo signale les choix et les actions.
À éviter. Ajouter une carte autour de chaque champ. La carte doit représenter une unité de sens, par exemple « Audio devices ».
Sources : theme.py et styles locaux des pages Settings.
P2 · ACCESSIBILITÉ08
Une fenêtre fixe et des contrôles parfois peu explicites
Constat. Les Settings sont fixés à 880 × 680. Certaines actions d’ajout et retrait utilisent uniquement « + » / « − ». Les indicateurs des cases cochées sont des carrés colorés dans le QSS, sans coche dessinée.
Proposition. Fenêtre redimensionnable avec taille mémorisée, contenu qui s’adapte sans défilement horizontal, noms accessibles pour les boutons, état des interrupteurs annoncé et focus visible. Utiliser des verbes pour les actions importantes : « Add server », « Download », « Configure ».
Limite de l’analyse. Aucun audit VoiceOver/NVDA de l’application native n’a été exécuté. Les risques d’accessibilité sont inférés du code et du rendu ; ils restent à vérifier avec les technologies d’assistance.
La mémoire, les enregistrements et les traces sont dispersés
Constat. La mémoire est dans General ; les enregistrements et captures dans Audio Debug ; les exports dans Telemetry. Ces fonctions répondent aussi à une question commune : qu’est-ce qui est conservé, et où ?
Proposition. Privacy & memory rassemble les décisions de conservation et renvoie vers Diagnostics pour les détails techniques. Toujours distinguer historique texte, audio enregistré et traces exportées. Préciser qu’un historique local n’empêche pas l’envoi de contenu au fournisseur cloud choisi.
Les réglages suivent parfois l’implémentation plutôt que l’usage
Constat. Attitudes est une page séparée alors que le choix actif est dans AI Provider. Speakers ressemble au périphérique de sortie audio, mais gère l’identité des interlocuteurs. Wake Word contient aussi une fin automatique qui s’applique aux sessions démarrées manuellement.
Proposition. « Personality & instructions » dans Conversation ; « Speaker recognition » dans Audio & voice ; « Wake word & sessions » dans Dictation & wake word. La recherche reconnaît aussi les anciens libellés pour faciliter la transition.
La proposition conserve la profondeur du produit. Elle réduit le nombre de choix simultanés et fait apparaître les options avancées au moment où elles deviennent utiles.
Rubrique actuelle
Destination proposée
Ce qui change
General
General / Audio & voice / Privacy & memory
Répartir par usage ; garder thème et raccourcis dans General.
AI Provider
Conversation + Providers & keys
Séparer le comportement de l’assistant de ses connexions.
Attitudes
Conversation → Personality & instructions
Réunir le choix du ton et sa configuration.
Speakers
Audio & voice → Speaker recognition
Distinguer interlocuteurs et haut-parleurs.
Dictation
Dictation & wake word → Dictation
Conserver un accès direct à la transcription globale.
Wake Word
Dictation & wake word → Wake word & sessions
Expliquer activation locale et fin de session.
AI Models
Models & components → Local models
Rapprocher modèles et dépendances.
Skills
Integrations → Skills
Regrouper les capacités ajoutées à l’assistant.
MCP Servers
Integrations → MCP servers
Conserver le terme MCP et rendre les états lisibles.
CLI Tools
Integrations → CLI tools
Conserver commande, environnement et portée d’exécution.
Audio Debug
Diagnostics + Privacy & memory
Séparer diagnostic audio et choix de conservation.
Telemetry
Diagnostics → Telemetry
Regrouper les fonctions de diagnostic avancées.
Components
Models & components → Components
Montrer ce qui manque sans faire changer de contexte.
About
About RoomKit en pied de navigation
Libérer la liste des réglages quotidiens.
Providers & keys est une nouvelle destination, mais ses données existent déjà. Les identifiants de stockage et les identifiants de fournisseurs peuvent être conservés. Un écran reste la source d’édition de chaque champ ; les autres affichent un résumé et un lien.
05 / LES PARCOURS
Partir d’une tâche concrète.
01
« Je veux que mon micro fonctionne. »
Audio & voice → choisir le microphone → tester → voir le signal → ajuster l’annulation d’écho si nécessaire. VAD et inférence restent repliés. Le test natif devra afficher permission refusée, appareil absent, silence et signal détecté comme des états distincts.
02
« Je veux une dictée locale. »
Dictation → Local → modèle téléchargé ou action de téléchargement → langue → raccourci. Si le composant manque, l’interface indique ce prérequis avant de promettre une dictée opérationnelle. Le choix doit survivre aux allers-retours vers la bibliothèque.
03
« Je veux changer d’assistant. »
Conversation → mode → fournisseur → modèle et voix → état de la connexion. Le mode Voice Channel montre les trois étapes en même temps pour expliquer ce qui peut être remplacé indépendamment.
04
« Où est le réglage que j’utilisais avant ? »
Recherche globale → libellé ou synonyme → destination et sous-section → réglage surligné. Les alias STT, LLM, TTS, Attitudes, VAD et AEC restent trouvables.
06 / LE LANGAGE VISUEL
Un outil de bureau calme et précis.
Surface #FFFFFF
Navigation #F9F9FB
Texte #262633
Accent #6652BD
Sélection #EFEBFA
Typographie : police système, titre de page à 30 px, hiérarchie par taille, poids et espacement. Les tailles compactes de la maquette sont une direction visuelle ; vérifier les équivalents natifs en points et à fort facteur d’échelle.
Géométrie : grille de 4/8 px, groupes espacés de 28 px, rayons de 7 à 12 px. Une largeur de lecture limitée empêche les formulaires de s’étirer indéfiniment.
Couleurs : indigo dérivé du logo, utilisé pour sélection, focus et action principale. Le vert accompagne un état écrit ; la couleur ne porte pas seule l’information.
Contrôles : thèmes montrés par des aperçus, interrupteurs pour les décisions binaires, sélecteurs pour les choix, boutons avec verbes pour les actions.
Adaptation : panneau de résumé secondaire sur grand écran ; il disparaît quand l’espace manque. Navigation mobile repliable dans l’artefact, sans supposer qu’une application mobile est prévue.
Les textes de l’interface restent en anglais pour correspondre au produit actuel. L’analyse est en français pour la revue de design.
Progression et annulation simulées ; aucun fichier téléchargé.
Audio
Périphérique → permission → signal → résultat.
Animation explicite de signal simulé.
Option indisponible
Expliquer le prérequis et proposer une action pertinente.
Exemple : débruitage réservé à Voice Channel.
Navigation
Conserver les valeurs et les choix lors des allers-retours.
État partagé pour les pages, thèmes et sous-sections.
Confidentialité
Distinguer mémoire texte, fichiers audio et export de traces.
Écrans séparés avec renvois explicites.
Une fonctionnalité avancée ne doit pas disparaître simplement parce qu’elle manque sur la machine. Elle doit rester découvrable, avec son état et la marche à suivre. Inversement, ne pas présenter un fournisseur comme « Connected » à partir de la seule présence d’une clé.
08 / LE PASSAGE À PYSIDE6
Une évolution native, en étapes vérifiables.
L’HTML sert à explorer le design. L’application peut conserver PySide6, QStackedWidget et son moteur actuel. Ce travail ne nécessite pas une réécriture en application web.
Une structure déclarative pour les pages. Remplacer les listes et constantes d’index parallèles par un registre PageSpec avec identifiant stable, groupe, titre, icône, constructeur et hook de rafraîchissement. Les tests actuels signalent précisément le risque d’alignement des indices.
Des composants de Settings partagés. Introduire SettingsSection, SettingRow, StatusBadge, AdvancedSection et des tokens de thème. Réduire les styles locaux, conserver la police native et gérer les changements de palette pour les widgets déjà ouverts.
Une première tranche limitée. Mettre en place la coque redimensionnable et refondre General. Déplacer audio et mémoire en gardant les mêmes clés. Vérifier ouverture, fermeture, raccourcis et conservation des réglages avant de migrer AI Provider.
Un modèle d’édition commun. Centraliser les valeurs partagées et les secrets. Si l’enregistrement immédiat est retenu, définir validation, regroupement des écritures et notification de l’application. Ne pas écrire une valeur invalide à chaque caractère saisi.
Une recherche fondée sur les métadonnées. Indexer libellés, descriptions, alias et destination de focus. Ouvrir la bonne sous-section ou section avancée avant de placer le focus sur le contrôle.
Les connexions et la bibliothèque. Déplacer les clés sans dupliquer leur stockage ; conserver SecretStore. Unifier visuellement modèles et composants tout en gardant leurs opérations et leurs cycles de vie distincts.
Les états asynchrones. Conserver les téléchargements et installations qui survivent à la fermeture. Respecter les protections de durée de vie des widgets, le flux OAuth et les annulations. Un nouveau rendu ne doit pas créer une seconde opération.
Les comportements sensibles à protéger
Échap et fermeture, synchronisation des secrets, choix de modèle non affiché, rafraîchissement des listes, compatibilités des fournisseurs, conflits d’extras, ressources audio et tâches qui continuent hors du dialogue. La modernisation visuelle ne doit pas changer ces règles implicitement.
Avant d’étendre le redesign à la conversation principale, faire tester les parcours essentiels sur les Settings. Les critères ci-dessous sont des objectifs proposés, pas des résultats mesurés.
Repérage : trouver micro, voix, clé API et mémoire sans parcourir plusieurs pages au hasard ; mesurer temps et erreurs avec l’ancienne et la nouvelle interface.
Compréhension : expliquer la différence entre Realtime et Voice Channel après lecture, sans aide extérieure.
Configuration : partir d’un fournisseur absent ou d’un modèle non téléchargé et arriver à un état utilisable sans perdre le contexte.
Confiance : savoir si un réglage est enregistré, s’il est déjà actif et si une connexion a réellement été testée.
Accessibilité : clavier intégral, focus visible, noms et états annoncés, contraste mesuré, texte agrandi à 200 %, thèmes clair/sombre. Tester la fenêtre Qt sur macOS, Windows et Linux.
Régression : conserver les tests de persistance, secrets, modèles et durée de vie. Ajouter seulement les tests utiles aux nouveaux comportements.
Le prototype permet de vérifier navigation, recherche, changements de thème, configuration des modes et retours d’état. Il ne permet pas de valider les performances audio ou les différences réelles entre fournisseurs.
10 / PÉRIMÈTRE DE L’ARTEFACT
Une proposition à explorer.
Réalisé : dix destinations dont About, thèmes clair/sombre, recherche avec synonymes français et anglais, navigation clavier, aperçu des deux modes de conversation, personnalité et instructions, choix audio et signal simulé, raccourcis enregistrés dans l’aperçu, dictée, wake word, exemples de clés, téléchargement annulable simulé, composants, création et retrait d’intégrations fictives, confidentialité et diagnostics.
Vérifié dans Chrome : les dix destinations aux largeurs 390, 600, 880, 1024 et 1400 px, sans débordement horizontal ; recherche, changement de sous-section, conservation des valeurs, raccourcis, annulation et fin du téléchargement simulé, intégrations et prérequis du wake word. Commande-K, Entrée et Échap ont été vérifiés par événements clavier. Aucun appel réseau ni exception JavaScript durant les parcours de test. Les cinq combinaisons principales de texte et de fond mesurées ont des contrastes de 4,89:1 à 14,92:1 ; cela ne constitue pas un audit complet de conformité.
Échantillonné : les listes de fournisseurs, modèles, voix et réglages avancés représentent les patterns de design. Elles ne couvrent pas les 156 réglages ni les combinaisons de production. Les personnalisations complètes d’attitudes, les formulaires MCP/OAuth/CLI, le marketplace de skills et tous les profils de fournisseurs restent à détailler lors de l’intégration native.
Isolation : aucune dépendance JavaScript, police externe ou requête réseau. Aucune lecture des réglages de RoomKit, aucune persistance navigateur, aucun accès au microphone, aucun appel IA ou lancement de commande. Les valeurs sont des exemples et sont réinitialisées au rechargement.
Portée globale : le code de la fenêtre principale confirme une largeur fixe de 420 px. Une revue ultérieure pourra traiter la lisibilité des conversations longues, les états de session et les outils intégrés. Ce premier livrable se concentre sur les Settings.