Système d'extensions
Les extensions apportent de nouvelles actions, de nouvelles pages, et — surtout — de nouveaux outils que l'assistant de lecture peut utiliser. Une extension est un petit module JavaScript ; son interface est toujours rendue par le système de design de l'application elle-même, donc la fonctionnalité d'une extension ressemble et se comporte comme le natif.
Ce que les extensions peuvent contribuer
- Actions de sélection — des entrées dans le menu de sélection de texte du lecteur. Envoyez un mot dans Anki, traduisez un paragraphe, enregistrez un extrait n'importe où.
- Boutons d'en-tête— un bouton icône dans l'en-tête du lecteur ou de la bibliothèque : cliquez pour ouvrir un panneau flottant, ou (dans la bibliothèque) une page complète.
- Commandes— des entrées dans la palette de commandes. Chaque action d'extension y apparaît automatiquement ; les commandes explicites complètent les actions sans bouton.
- Outils de l'assistant— des fonctions que l'assistant de lecture peut appeler pendant une conversation. C'est le point de montage au plafond le plus élevé : une extension peut permettre à l'assistant d'interroger votre collection Anki, votre file RSS, ou n'importe quel service que vous utilisez.
- Fournisseurs de contenu — des livres virtuels dont les chapitres sont fournis par l'extension à la demande. Un flux RSS peut résider sur votre étagère, être lu, annoté et discuté comme n'importe quel livre.
- Voix de lecture à haute voix — connecte des moteurs TTS à la fonction de lecture à voix haute de la page de lecture. L'extension synthétise l'audio, l'application le lit, et si une seule phrase échoue, elle revient à la voix système.
- Paramètres et tâches planifiées — les paramètres déclaratifs deviennent la propre section de l'extension dans Réglages (y compris les clés API, stockées chiffrées) ; les tâches périodiques déclarées s'exécutent pendant que l'application est ouverte.
Apparence native, construite
Les extensions ne rendent jamais leur propre HTML. Elles déclarent des vues avec un petit vocabulaire — markdown, listes, formulaires et quelques blocs structurés — et l'application les rend avec ses propres composants. Les auteurs d'extensions abandonnent le contrôle des pixels en échange de zéro travail de design et d'une application qui reste toujours cohérente.
Modèle de confiance
Les extensions s'exécutent à l'intérieur de l'application, partageant le même contexte JavaScript que l'application — comme Obsidian, et contrairement au sandbox des extensions de navigateur. Il y a deux couches de protection pragmatique :
- Permissions — le manifest de l'extension déclare ce qu'elle veut utiliser (réseau, lecture des données, IA, presse-papiers…), et l'API expose uniquement la partie déclarée. Cela protège contre le dépassement involontaire.
- L'installation elle-même est cette décision de confiance.Avant que tout fichier ne soit copié ou exécuté, l'application affiche chaque permission demandée par l'extension en langage clair et attend votre consentement. Traitez l'installation d'extension comme l'installation d'un logiciel.
L'architecture de l'application elle-même limite également la portée : le stockage des extensions est isolé par espace de noms dans le répertoire de données de l'application, et le shell de bureau n'accorde pas d'accès arbitraire au système de fichiers.
Installer des extensions
- Marché d'extensions — « Réglages → Extensions → Marché d'extensions » liste les extensions communautaires du dépôt d'extensions public ; installation en un clic, après avoir montré un résumé des permissions.
- Installer depuis un dossier — « Réglages → Extensions » peut installer n'importe quel dossier d'extension local. C'est la boucle de développement : pointez-la vers votre répertoire de travail, et réinstallez après chaque modification.
La disposition est à vous
Les extensions contribuent des capacités ; où vont les boutons, c'est vous qui décidez. « Réglages → Personnaliser » vous permet d'organiser chaque surface (en-tête de la bibliothèque, en-tête du lecteur, menu de sélection) : glissez des éléments entre la zone affichée et le menu de débordement, réorganisez, ou restaurez les valeurs par défaut. Les nouvelles actions d'extension atterrissent discrètement dans le menu de débordement, et tout reste accessible depuis la palette de commandes.
Lire à haute voix avec n'importe quelle voix TTS
L'extension intégrée TTS Voices connecte la lecture à haute voix au moteur de votre choix — ElevenLabs, Fish Audio, OpenAI, ou n'importe quel point de terminaison compatible OpenAI (Kokoro, LocalAI, pont Edge TTS…). Tout se passe dans Réglages → TTS Voices : choisissez un fournisseur, ses champs apparaissent — la clé API va directement dans le stockage de clés chiffré ; quand le fournisseur peut énumérer les voix, le champ de voix devient un menu déroulant (sinon, vous pouvez toujours saisir manuellement un nom).
Une solution gratuite populaire est d'utiliser les voix neuronales de Microsoft Edge via openai-edge-tts — un petit service local qui parle l'API audio OpenAI :
- Lancez le service localement — par exemple
docker run -d -p 5050:5050 travisvn/openai-edge-tts(pas besoin de clé API par défaut). - Dans « Réglages → TTS Voices », réglez le fournisseur sur Personnalisé / Local (compatible OpenAI), et le point de terminaison sur
http://127.0.0.1:5050/v1/audio/speech. - Choisissez une voix dans la liste — l'application lit le catalogue du serveur, les voix Edge complètes (telles que
zh-CN-XiaoxiaoNeural,en-US-AriaNeural) apparaissent aux côtés des alias de style OpenAI.
Puis ouvrez un livre et commencez à lire : les phrases sont prononcées par votre voix choisie, la phrase suivante est pré-chargée pendant la lecture de la phrase actuelle ; si une seule synthèse échoue, elle revient à la voix système, sans interrompre la lecture.
Écrire la vôtre
Une extension est un dossier contenant un manifest.json et un seul fichier main.js. La référence de l'API couvre le contrat complet, et Publication et distribution explique comment la soumettre au marché d'extensions.