Extension Firefox et Google Chrome open-source qui rend le Web plus accessible aux personnes sourdes ou malentendantes grâce aux sous-titres enrichis, à la transcription locale et aux alertes visuelles personnalisables.
- Pourquoi SilentWeb ?
- Fonctionnalités clés
- Prérequis
- Installation rapide
- Scripts PNPM utiles
- Tests et qualité
- Charger l’extension dans Firefox
- Structure du projet
- Contribuer
- Ressources
De nombreux contenus vidéo ou audio restent inaccessibles. SilentWeb répond à ce problème avec une approche simple :
- tout fonctionne en local, aucune donnée sensible n’est envoyée vers un serveur ;
- l’extension peut afficher une transcription en direct et générer des alertes visuelles selon le contexte ;
- elle est entièrement open-source, modifiable et vérifiable par la communauté.
- Transcription en temps réel (OCR + audio local selon la page).
- Sous-titres enrichis avec styles, thèmes et taille configurables.
- Alertes visuelles (flash, bannière, overlay) déclenchées par mot-clé ou niveau sonore.
- Panneau d’options pour personnaliser thèmes, raccourcis, langues et stockage.
- Support multi-langues via les fichiers
_locales/et contributions communautaires.
- Node.js 20+ (recommandé)
- pnpm 9+ (le projet utilise un workspace monorepo)
- Firefox Developer Edition pour le mode
web-ext runet Google Chrome 114+ pour valider le build Chromium
Vérifiez vos versions :
node -v
pnpm -vgit clone https://github.com/OpenDeafTech/SilentWeb.git
cd SilentWeb
pnpm install
pnpm run build # construit tous les artefacts dans dist/L’extension prête à être chargée se trouve ensuite dans dist/ (scripts, worker, styles, manifest) et peut être chargée telle quelle dans Firefox ou Chrome.
| Script | Description |
|---|---|
pnpm run dev |
Lance l’extension avec web-ext dans Firefox Dev Edition et rechargements. |
pnpm run build |
Nettoie dist/ puis construit TypeScript, content scripts, overlay et SW. |
pnpm run build:chrome |
Alias de build, pensé pour les pipelines Chrome/Chromium (même bundle). |
pnpm run test |
Exécute la suite Vitest (unitaires, mocks). |
pnpm run test:e2e |
Lance les scénarios Playwright (nécessite Firefox + dépendances). |
pnpm run lint |
Vérifie le code JS/TS via ESLint. |
pnpm run format |
Formate le dépôt avec Prettier. |
pnpm run typecheck |
Vérifie les types TypeScript sans émettre de fichiers. |
Astuce : utilisez
pnpm run test:watchpour un cycle TDD rapide.
- Unitaires (Vitest) : ciblent le code commun (
src/common,packages/core, etc.) et utilisent des mockschrome.*fournis danstests/unit. - End-to-End (Playwright) : vérifient les interactions complètes via des fixtures HTML (
tests/e2e/fixtures/*). Chaque test suppose quepnpm run serve:e2eou le serveur Vite est lancé. - TypeScript :
pnpm run typecheckdétecte les régressions de typage. - Lint/Format : gardez le dépôt propre avec
pnpm run lintpuispnpm run formatavant d’ouvrir une PR.
locales-language-labels.csvest la source de vérité. Utilisezpnpm run locales:pipelinepour exporter les chaînes, générer les CSV “pending” par langue (translations/pipeline/*.pending.csv) et préparer l’ingestion TM/LLM (prompts versionnés danstranslations/prompts/llm-base.md).- Après pré-traduction/revue, exécutez
pnpm run locales:updateafin de réinjecter les messages dans_locales/**en tenant compte du CSV + des overrides (locales-overrides.json). - QA automatisée :
pnpm run locales:lint(placeholders, ICU, longueurs) puispnpm exec vitest run tests/unit/locales.snap.spec.ts --updateet, selon besoin,pnpm run test:e2e --grep "@i18n"pour valider l’affichage réel. - Partagez l’état d’avancement via
pnpm run locales:reportqui génèredocs/locales-status.md(tableau de bord publié sur GitHub Pages avec couverture, reviewer et anomalies). - Connecteur TMS (lecture seule) : configurez
locales-tms.config.jsonpuis lancezpnpm run locales:syncpour tirer les traductions locales depuis Lokalise/Crowdin/Smartling avant de passerlocales:update. - Pour prolonger la mémoire de traduction, recourez à
pnpm run locales:export(produitlocales-language-labels.csv) ou éditez directement les fichierstranslations/pipeline/*.pending.csv. - Les règles complètes (ton, escalade, QA) sont consolidées dans
doc/translation-playbook.md. Merci de suivre ce guide et de ping le reviewer indiqué danslocales-metadata.jsonavant toute fusion.
- Exportez le flag
ENABLE_TELEMETRY=truelorsque vous lancezpnpm run devoupnpm run build. Le bundler injecte alors un mode trace dans le service worker et le worker de transcription. - Les logs apparaissent dans la console du service worker (
[SilentWeb][telemetry] cache.hit|cache.miss|cache.store|cache.fallback) et dans l’inspecteur du worker (caption.durationavec la durée en millisecondes). - Les métriques restent anonymisées : seules des métadonnées génériques (méthode HTTP, type de ressource, durée) sont affichées.
- Vous pouvez aussi activer ponctuellement la télémétrie depuis la console du service worker (
self.ENABLE_TELEMETRY = true) si vous ne souhaitez pas reconstruire l’extension. - Par défaut (flag absent), aucune donnée de télémétrie n’est collectée, ce qui garantit que les utilisateurs finaux ne sont jamais concernés.
- Construisez les assets (
pnpm run build) ou lancezpnpm run devpour un rechargement auto. - Ouvrez
about:debugging#/runtime/this-firefoxdans Firefox. - Cliquez sur Charger un module complémentaire temporaire.
- Sélectionnez
dist/manifest.json. - L’extension apparaît immédiatement dans la barre d’outils. Relancez l’opération pour tester une nouvelle build.
- Construisez les assets (
pnpm run build) ; Chrome charge directement le dossierdist/sans étape supplémentaire. - Ouvrez
chrome://extensions. - Activez le mode développeur en haut à droite.
- Cliquez sur Charger l’extension non empaquetée puis sélectionnez le dossier
dist/. - SilentWeb est immédiatement disponible dans la barre d’extensions (Chrome 114+). Rechargez la page ou appuyez sur Mettre à jour pour tester une nouvelle build.
SilentWeb/
├─ packages/ # Modules partagés (core, UI, extension)
├─ src/ # Code source principal (content scripts, messaging…)
├─ tests/ # Vitest + Playwright + utilitaires
├─ public/ # Manifest et assets distribués
├─ docs/ # Documentation technique additionnelle
└─ tools/ # Scripts internes (copy, build helpers…)
Les fichiers _locales/*/messages.json contiennent les traductions affichées dans l’UI de l’extension.
- Forkez le dépôt puis créez une branche (
git checkout -b feature/ma-fonction). - Développez votre amélioration et ajoutez les tests pertinents.
- Vérifiez que tout passe (
pnpm run lint && pnpm run test). - Commitez (
git commit -m "feat: description"), poussez (git push origin feature/ma-fonction) et ouvrez une Pull Request. - Décrivez clairement le besoin, les changements et comment tester votre contribution.
Pour des idées de tâches, consultez les issues GitHub ou proposez une amélioration via Discussions.
- Documentation interne : dossier
docs/ - Changelog :
CHANGELOG.md - Licence : MIT
- Support / questions : créez une issue GitHub ou contactez les maintainers via les discussions du dépôt.
Merci de contribuer à rendre le Web plus inclusif ✨