Extension Chromium (MV3) qui enrichit les sites dâanime, de streaming et quelques usages du quotidien.
« EuhhâŻ! On a pas beaucoup dâargent ^^ »
- Installation
- Fonctionnalités
- Interfaces
- Configuration
- Raccourcis clavier
- Architecture
- Développement
- Licence
Lâextension nâest pas publiĂ©e sur le Chrome Web Store â elle se charge en mode dĂ©veloppeur.
git clone https://github.com/pedrokarim/SorryIDHMoney.git
cd SorryIDHMoney
cp manifest.example.json manifest.jsonPuis dans le navigateur :
- Ouvrir
chrome://extensions(oubrave://extensions,edge://extensions) - Activer Mode développeur
- Charger lâextension non empaquetĂ©e â sĂ©lectionner le dossier du dĂ©pĂŽt
manifest.jsonest gitignored : câest ta copie locale, libre de diverger.manifest.example.jsonest la rĂ©fĂ©rence versionnĂ©e â aprĂšs ungit pull, compare les deux et reporte les nouvelles entrĂ©es (permissions, content scripts). Recharge lâextension aprĂšs tout changement de permissions, Chrome ne les prend pas Ă chaud.
Sur une page dâanime, trois boutons flottants apparaissent :
| Bouton | Action |
|---|---|
| đ” MyAnimeList | Ouvre la fiche correspondante sur MAL |
| đą AniList | Ouvre la fiche correspondante sur AniList |
| đŁ Info | Popover avec banniĂšre, cover, titre, genres, prochain Ă©pisode, synopsis et liens |
Le titre est extrait en prioritĂ© depuis le JSON-LD de la page, avec repli sur le DOM. AniList est la source de vĂ©ritĂ© pour toutes les donnĂ©esâŻ; le service worker les met en cache 10 minutes.
Plateformes de streaming supportées :
Voiranime |
Crunchyroll |
ADKami |
ADN |
Gum Gum |
đŹ Mavanimes |
Mode Ă©dition â depuis la popup, il permet de corriger Ă la main lâURL associĂ©e Ă un
anime mal dĂ©tectĂ©, ou de lâignorer complĂštement. Les corrections sont conservĂ©es en local
(chrome.storage.local) et réutilisées ensuite.
Sur MyAnimeList, AniList et Nautiljon, un bouton permet de sauter dâune base Ă lâautre pour la mĂȘme Ćuvre (animes comme mangas), avec recherche automatique de la correspondance.
Le support le plus poussé, en plus des boutons :
- Barre de recherche intégrée
- Navigation entre Ă©pisodes (boutons flottants â / â, lâexistence de lâĂ©pisode est vĂ©rifiĂ©e avant affichage)
- Bouton đ de retour Ă la liste des Ă©pisodes
| Option | Ce quâelle fait |
|---|---|
| Lecture fluide des vidĂ©os | Recharge une seule fois une page vidĂ©o qui dĂ©marre figĂ©e (play/pause immĂ©diat, timer bloquĂ© Ă 0). Chaque ID nâest rechargĂ© quâune fois, mĂ©morisĂ© en sessionStorage â anti-boucle garanti. |
| Auto-scroll des Shorts | Passe au Short suivant Ă la fin de la lecture. ParamĂ©trable : nombre de replays avant de scroller (0â50) et dĂ©lai avant scroll (0â10 000 ms). |
- Collecte automatique des channel points (la bulle est cliquée toute seule)
- Page Statistiques dédiée : total collecté, détail par chaßne, historique, suivi en temps réel
Port sur Chromium de deux projets Firefox/Tampermonkey â lâAPI
webRequest.filterResponseData() dont ils dĂ©pendent nâexiste pas sur Chromium, elle est
remplacée par des rÚgles declarativeNetRequest et des content scripts en MAIN world.
posts NSFW |
AliExpress flou produits |
Bluesky sensible |
X / Twitter sensible |
AgeChecker |
AgeGO |
AgeVerif |
Veriff |
Un toggle maĂźtre plus un sous-toggle par site. Le statut du bypass X (hooks installĂ©s, erreurs) est consultable dans la popup quand lâonglet actif est XâŻ; une pastille sur la page elle-mĂȘme est disponible en option (dĂ©sactivĂ©e par dĂ©faut).
đ DĂ©tail des mĂ©canismes, correspondance avec lâupstream et limites connues :
scripts/avb/README.md
PrĂ©pare, publie ou programme des publications sur x.com depuis un outil local. CoupĂ© par dĂ©faut â il faut cocher la case et renseigner un jeton.
# 1. Générer un jeton dans les options de l'extension, puis lancer le pont
node tools/xposter-server.js --token MONJETON --port 8787
# 2. Déposer un ordre depuis un autre terminal
node tools/xposter-cli.js programmer --fichier post.json --token MONJETON
node tools/xposter-cli.js maintenant --fichier post.json --token MONJETON
node tools/xposter-cli.js lister --token MONJETON
node tools/xposter-cli.js annuler --id p123 --token MONJETON
node tools/xposter-cli.js capturer --sortie ecran.png --token MONJETON
node tools/xposter-cli.js tweets --compte moncompte --sortie fil.json --token MONJETONFormat du fichier de publication
{
"texte": "Your anime list, as one image.\n\nâ cma.ascencia.re",
"images": ["./assets/hero.png"],
"alts": ["Mur inclinĂ© de jaquettes d'animeâŠ"],
"quand": "2026-08-20T14:00:00+02:00",
"publier": false
}Le CLI encode les images en base64 (le navigateur ne peut pas lire le disque). X accepte 4 images maximum â au-delĂ , le CLI refuse plutĂŽt que de tronquer en silence.
Quatre gardes :
- Module décoché par défaut
- Sans jeton renseignĂ©, lâextension ne contacte mĂȘme pas le serveur
- Liste blanche dâactions (
ping,programmer,annuler,lister,maintenant) â jamais de code arbitraire - La publication automatique a sa propre case, dĂ©cochĂ©e : un ordre peut rĂ©clamer
publier: true, sans cette case lâextension prĂ©pare le composeur et laisse le clic final Ă lâhumain
Le serveur Ă©coute sur 127.0.0.1 exclusivement, jeton exigĂ© Ă chaque requĂȘte.
â ïž Ce module ne parle pas Ă lâAPI de X et ne connaĂźt aucun identifiant : il pilote lâinterface dans un onglet dĂ©jĂ connectĂ©. Câest contraire aux rĂšgles dâautomatisation de X â le mode « prĂ©parer », qui laisse le clic final Ă lâhumain, est celui qui reste dans les clous.
Pourquoi un sondage HTTP et pas un WebSocket�
En MV3 le service worker est arrĂȘtĂ© dĂšs quâil nâa rien Ă faire : une connexion permanente ne tient pas. Une alarme le rĂ©veille chaque minute, il demande sâil y a du travail. Une minute dâattente nâa aucune importance pour programmer une publication, et ça Ă©vite dâimplĂ©menter le protocole WebSocket Ă la main dans un projet sans dĂ©pendances.
La file dâattente vit dans lâextension, pas dans le serveur : une publication programmĂ©e part mĂȘme si lâoutil qui lâa dĂ©posĂ©e est Ă©teint.
Laisse un outil local â une IA, un script â lire le web Ă travers ce navigateur quand une requĂȘte directe se fait refouler (pas de session, pas de JavaScript, empreinte de robot). Lecture seule, et coupĂ© par dĂ©faut : il faut cocher la case et gĂ©nĂ©rer un jeton.
# Une seule fois : générer un jeton dans les options (Pont navigateur), puis
node tools/browser-server.js --token MONJETON
# Ensuite, sans argument â le CLI retrouve le jeton et relance le serveur au besoin
node tools/browser-cli.js read --url https://exemple.fr/article
node tools/browser-cli.js read --url https://exemple.fr --selector "main" --format text
node tools/browser-cli.js query --url https://exemple.fr --selector "h2 a" --limit 20
node tools/browser-cli.js screenshot --url https://exemple.fr --selector ".prix" --out prix.png
node tools/browser-cli.js network --tab 123 --filter /api/
node tools/browser-cli.js fetch --url https://exemple.fr/api/items.json
node tools/browser-cli.js tabs
# Lectures plus poussées
node tools/browser-cli.js read --url https://exemple.fr --scroll --frames
node tools/browser-cli.js screenshot --url https://exemple.fr --full --out page.png
node tools/browser-cli.js inspect --url https://exemple.fr --filter /api/ --bodies --console
node tools/browser-cli.js storage --tab 123| Action | Ce quâelle rend |
|---|---|
read |
Le contenu de la page ou dâun Ă©lĂ©ment, en Markdown (dĂ©faut), texte ou HTML. --scroll fait dĂ©filer avant de lire, --frames lit aussi les iframes |
query |
Les éléments qui correspondent à un sélecteur CSS : texte, attributs, position |
screenshot |
Une capture PNG de la partie visible, dâun seul Ă©lĂ©ment, ou de la page entiĂšre (--full đ§) |
network |
Les requĂȘtes faites par la page : adresse, type, statut, poids |
inspect đ§ |
Les requĂȘtes complĂštes (mĂ©thode, corps envoyĂ©, en-tĂȘtes et corps reçus sur demande) et la console |
storage đïž |
localStorage, sessionStorage et cookies lisibles par la page |
fetch |
Le corps dâune adresse (GET), avec la session du navigateur |
tabs · open · close |
Lister les onglets, en ouvrir un, refermer un onglet ouvert par le pont |
Une lecture vise --url (ouvre en arriĂšre-plan, lit, referme), --tab ID (un onglet dĂ©jĂ
ouvert) ou, sans rien, lâonglet actif.
đ§ demande la case Autoriser le dĂ©bogueur : Chrome affiche un bandeau pendant lâopĂ©ration, et certains sites anti-robots le dĂ©tectent. đïž demande la case Autoriser la lecture du stockage. Les deux sont dĂ©cochĂ©es par dĂ©faut, parce quâelles exposent cookies et jetons de session.
Suivre ce qui se passe :
- Une pastille se pose sur chaque onglet lu qui reste ouvert. Elle se dĂ©place Ă la souris, se souvient de sa place, et un clic dĂ©roule ce qui a Ă©tĂ© relevĂ© sur ce site. Les lectures et les captures lâignorent. DĂ©sactivable dans les options.
- LâĂ©cran Pont navigateur (depuis la popup) tient le journal complet : action, page, rĂ©sultat, durĂ©e, vignette des captures, avec filtre, recherche et pagination.
- La popup affiche lâĂ©tat du pont et les derniĂšres lectures.
Cinq gardes :
- Module décoché par défaut
- Sans jeton renseignĂ©, lâextension ne contacte mĂȘme pas le serveur
- Liste blanche dâactions, toutes en lecture â ni clic, ni saisie, ni code arbitraire
- Sites bannis (options) : jamais ouverts, lus, photographiĂ©s ni listĂ©s, sous-domaines et redirections compris. Câest lâextension qui applique la liste, pas lâoutil qui demande
- Le débogueur et la lecture du stockage ont chacun leur case, décochée
â ïž Tant que le module est actif, tout programme de la machine qui connaĂźt le jeton peut lire les pages de ce navigateur avec tes sessions ouvertes. Bannis ce qui ne doit pas lâĂȘtre (banque, impĂŽts, messagerie) et coupe le module quand il ne sert pas.
Limites connues : sans le dĂ©bogueur, network ne voit ni la mĂ©thode, ni les en-tĂȘtes, ni
les corps (API Performance), et les captures sâarrĂȘtent Ă lâĂ©cran visible ; storage ne voit
pas les cookies HttpOnly ; query, network et storage ne lisent que le cadre principal.
- Réautorise le défilement quand une page force
overflow: hiddensur le<body> - Retire les overlays de consentement cookies / 18+ bloquants
- Notifications toast discrĂštes pour les actions de lâextension
| Page | RĂŽle |
|---|---|
| Popup | Point dâentrĂ©e : statut X, accĂšs rapide aux pages, bascule du mode Ă©dition |
| ParamÚtres | Tous les réglages, groupés et repliables |
| Gestionnaire dâanimes | Liste des URL corrigĂ©es Ă la main et des animes ignorĂ©s |
| Statistiques Twitch | Points collectés, détail par chaßne, historique |
| Publication X | File dâattente, historique, Ă©tat du pont local |
| Pont navigateur | Ătat du pont et journal de tout ce qui a Ă©tĂ© lu |
| Ă propos | Version et informations |
| Testeur de toasts | Outil de dev pour prévisualiser les notifications |
Accessible via la popup â ParamĂštres, ou par la page dâoptions de lâextension.
GĂ©nĂ©ral â couleur de fond, censure, et 8 thĂšmes : Clair, Sombre, Violet, OcĂ©an, ForĂȘt, Coucher de soleil, Cerisier, Minuit (avec aperçu en direct).
Boutons de switch â MyAnimeList, AniList, dĂ©sactivation des animations.
Plateformes de streaming â un toggle par site.
YouTube â lecture fluide, auto-scroll des Shorts, replays et dĂ©lai.
FonctionnalitĂ©s â rewards Twitch, notifications toast.
Bypass vĂ©rification dâĂąge â toggle maĂźtre + un par site.
Publication X â activation, autorisation de publier, port et jeton du pont local.
Pont navigateur â activation, port, jeton, pastille sur les pages, autorisations du dĂ©bogueur et du stockage, liste des sites bannis.
| Raccourci | Action | OĂč |
|---|---|---|
| Ctrl + â / â | Ăpisode prĂ©cĂ©dent / suivant | Mavanimes |
| Ctrl + L | Retour à la liste des épisodes | Mavanimes |
| Ăchap | Fermer le popover dâinfo / le mode Ă©dition | Partout |
SorryIDHMoney/
âââ background.js # Service worker : cache AniList (10 min), routage des actions
âââ manifest.example.json # RĂ©fĂ©rence versionnĂ©e (manifest.json est gitignored)
âââ icons/
â âââ platforms/ # Logos des plateformes (PNG, SVG, WebP, ICO)
âââ interfaces/ # Pages HTML de l'extension + leurs scripts
âââ libs/ # Modules partagĂ©s (toast-managerâŠ)
âââ scripts/
â âââ utils.js # Boutons, popover info, mode Ă©dition, animations
â âââ anime-cache-manager.js # URL personnalisĂ©es et animes ignorĂ©s (storage.local)
â âââ *-content.js # Un content script par plateforme
â âââ avb/ # Bypass vĂ©rification d'Ăąge (+ son propre README)
â â âââ spoofs/ # SDK des vĂ©rificateurs, remplacĂ©s via DNR
â âââ xposter-*.js # Module Publication X (content, file, pont, relecture)
â âââ browser-*.js # Module Pont navigateur (pont, relevĂ©s, pastille, journal, dĂ©bogueur)
âââ styles/ # base.css (design tokens) + une feuille par interface
âââ tools/ # Ponts locaux : Publication X et Pont navigateur (Node, sans deps)
Permissions demandées : storage, unlimitedStorage, activeTab, scripting,
declarativeNetRequest, alarms, tabs, downloads, debugger (pont navigateur, utilisée
seulement si sa case est cochĂ©e), et host_permissions: <all_urls> â requis pour
que les rĂšgles DNR de redirection sâappliquent quel que soit le site qui intĂšgre un
vĂ©rificateur dâĂąge.
Aucune étape de build, aucune dépendance : le code est chargé tel quel par le navigateur.
AprĂšs modification, recharger lâextension depuis chrome://extensions.
Conventions du projet :
- Les content scripts loguent avec un prĂ©fixe explicite â
[NomPlateforme] - AniList est la source de vérité pour les données anime
- Toute nouvelle plateforme doit avoir son toggle dans les options, vérifié en début de
main() manifest.jsonétant gitignored, toujours mettre à jourmanifest.example.jsonen parallÚle- Les commits ne contiennent jamais de
Co-Authored-By
đ
AGENTS.mddocumente le processus complet dâajout dâune plateforme de streaming, Ă©tape par Ă©tape (inspection du DOM, logo, content script, manifest, toggle).
Les contributions sont les bienvenues â bugs, idĂ©es de fonctionnalitĂ©s, pull requests.
Pour une nouvelle plateforme, suivre le processus décrit dans
AGENTS.md.
MIT.