Skip to content

About

Watchtower Extensions - Anime, Manga & More sources

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Watchtower

Watchtower Extensions

Le dépôt officiel d'extensions pour Watchtower Regarder · Lire · Écouter · Jouer — tout en un

Extensions Watch Extensions Manga Extensions Novel Extensions Music Extensions Game Extensions Subtitles License


📋 Table des matières


⚙️ Préférences communes Watchtower

Chaque extension doit continuer à exposer getSourcePreferences(), même lorsqu'elle ne propose aucun réglage local (return []). Watchtower ajoute automatiquement les réglages communs à partir des métadonnées de la source :

  • qualité vidéo par défaut et qualité de secours (supérieure ou inférieure) ;
  • langues préférées lorsque l'extension en publie plusieurs ;
  • conservation de la session, partagée entre les requêtes HTTP et le WebView.

Les extensions doivent déclarer les qualités réellement supportées dans leur manifeste quand elles sont connues :

const watchtowerSources = [{
  // ...
  "videoQualities": ["2160p", "1080p", "720p", "480p", "360p"]
}];

Les qualités déclarées ne servent pas à fabriquer des URLs : Watchtower les utilise uniquement pour choisir une vidéo retournée par getVideoList(). Si une qualité exacte n'existe pas pour un épisode, le réglage de secours choisit la voisine supérieure ou inférieure disponible.


📲 Ajouter le dépôt à Watchtower

Watchtower — ouvre l'app → Plus → Paramètres → Browse

Clique sur l'un des boutons ci-dessous pour ajouter le ou les dépôts correspondants :

Tous les dépôts d'un coup

Add All

Par type de contenu

Type Bouton
📺 Watch — Anime, Films, Séries Add Watch
📖 Manga — Manga, Manhwa, Comics Add Manga
📚 Novel — Webnovels, Light novels Add Novel
🎵 Music — Streaming musical Add Music
🎮 Game — ROMs & émulation Add Game

🐳 Via Live Container

Si tu as installé l'app via Live Container, utilise ces boutons à la place :

Add All (LC)

Type Bouton
📺 Watch Add Watch LC
📖 Manga Add Manga LC
📚 Novel Add Novel LC
🎵 Music Add Music LC
🎮 Game Add Game LC

🔗 Ajouter manuellement

Ouvre l'app → Plus → Paramètres → Browse → Dépôts d'extensions → +

Colle l'URL correspondante :

# Dépôt principal (auto-détecte tous les types)
https://raw.githubusercontent.com/ferelking242/watchtower-extensions/main/repo.json

# Watch (Anime, Films, Séries)
https://raw.githubusercontent.com/ferelking242/watchtower-extensions/main/index/watch.json

# Manga & Comics
https://raw.githubusercontent.com/ferelking242/watchtower-extensions/main/index/manga.json

# Novels
https://raw.githubusercontent.com/ferelking242/watchtower-extensions/main/index/novel.json

# Musique
https://raw.githubusercontent.com/ferelking242/watchtower-extensions/main/index/music.json

# Jeux / ROMs
https://raw.githubusercontent.com/ferelking242/watchtower-extensions/main/index/game.json

🌐 Dépôts disponibles par app

Ces URLs sont compatibles avec plusieurs apps basées sur le même moteur.

📺 Watchtower — app principale
Bouton URL
Watchtower All watchtower://add-repo?url=…/repo.json
Watchtower Manga watchtower://add-repo?url=…/index/manga.json
Watchtower Novel watchtower://add-repo?url=…/index/novel.json
🦊 Mangayomi — fork upstream
Bouton URL
Mangayomi Manga mangayomi://add-repo?url=…/index/manga.json
Mangayomi Novel mangayomi://add-repo?url=…/index/novel.json
📦 Live Container — installation sandboxée iOS
Bouton URL
LC All livecontainer://add-repo?url=…/repo.json
LC Manga livecontainer://add-repo?url=…/index/manga.json
LC Novel livecontainer://add-repo?url=…/index/novel.json

🗂️ Architecture du dépôt

watchtower-extensions/
│
├── 📁 src/                        ← Code source des extensions (.js)
│   │
│   ├── 📁 watch/                  ← Sources vidéo (anime, films, séries)
│   │   ├── 📁 multi/              ← Extensions multi-langues (1 fichier = N langues)
│   │   ├── 📁 en/                 ← Sources anglophones uniquement
│   │   ├── 📁 fr/                 ← Sources francophones uniquement
│   │   ├── 📁 de/ es/ zh/ …      ← Autres langues
│   │   └── 📁 nsfw/               ← Contenu adulte (désactivé par défaut)
│   │       ├── 📁 en/
│   │       ├── 📁 ja/             ← JAV & sources japonaises
│   │       └── 📁 multi/
│   │
│   ├── 📁 manga/                  ← Sources manga, manhwa, comics
│   │   ├── 📁 multi/              ← MangaDex, Comick, Webtoons, Mangafire…
│   │   ├── 📁 en/ fr/ ar/ …      ← Sources langue-spécifiques
│   │   └── 📁 nsfw/multi/        ← MangaDex Unlocked
│   │
│   ├── 📁 novel/en/               ← RoyalRoad, WuxiaWorld, NovelFire…
│   ├── 📁 game/en/                ← Sources ROM / émulation
│   ├── 📁 music/                  ← SoundCloud, Deezer, YouTube Music…
│   └── 📁 plugins/               ← Plugins système (téléchargeurs, sync…)
│
├── 📁 index/                      ← Index JSON générés (lus par l'app)
│   ├── watch.json                 ← Index Watch
│   ├── manga.json                 ← Index Manga
│   ├── novel.json                 ← Index Novel
│   ├── game.json                  ← Index Game
│   └── music.json                 ← Index Music
│
├── 📁 docs/                       ← Site web GitHub Pages
├── 📁 tools/                      ← Scripts de build et de test
├── 📁 local_sources/              ← Templates pour sources personnelles
├── 📄 repo.json                   ← Point d'entrée principal
└── 📄 README.md

Pourquoi multi/ ? MangaDex supporte 45 langues avec un seul fichier. L'ancienne structure créait 42 entrées identiques dans la marketplace. Maintenant : 1 entrée, toutes les langues.


🔧 Créer une extension

Voir le guide complet

Structure minimale

Une extension = un fichier JS qui exporte watchtowerSources :

const watchtowerSources = [{
  "name": "Ma Source",
  "lang": "en",                  // ou "multi" si plusieurs langues
  "baseUrl": "https://monsite.com",
  "iconUrl": "https://monsite.com/favicon.ico",
  "typeSource": "single",
  "itemType": 1,                 // 0=manga 1=watch 2=novel 4=game
  "isManga": false,
  "isNsfw": false,
  "hasCloudflare": false,
  "version": "1.0.0",
  "appMinVerReq": "0.5.0",
  "sourceCodeLanguage": 1,       // 1=JavaScript
}];

async function search(query, page) {
  const url = `${source.baseUrl}/search?q=${encodeURIComponent(query)}&page=${page}`;
  const res = await fetch(url);
  const $ = await parseHtml(await res.text());
  return {
    list: $('.item').toArray().map(el => ({
      name: $(el).find('.title').text().trim(),
      imageUrl: $(el).find('img').attr('src'),
      link: $(el).find('a').attr('href'),
    })),
    hasNextPage: !!$('.next-page').length,
  };
}

async function getDetail(url) { /* … */ }
async function getVideoList(url) { /* … */ }   // pour watch
async function getPageList(url) { /* … */ }    // pour manga

Métadonnées du catalogue

Les index sont affichés comme un catalogue mobile. Pour obtenir une fiche complète dans Watchtower, chaque entrée peut aussi fournir les champs suivants :

Champ Type Utilisation
notes ou description string Résumé court affiché sous le nom
sizeBytes number Poids du fichier JavaScript téléchargé
rating number Note entre 0 et 5
reviewCount number Nombre d'avis associés à la note

Ces champs sont optionnels pour rester compatibles avec les dépôts existants. Watchtower conserve une description et une taille lisibles lorsqu'un index ancien ne les renseigne pas. Les notes doivent rester basées sur la qualité réelle de la source : disponibilité, stabilité, couverture et qualité des résultats, pas sur le nombre de téléchargements.

Types de contenu (itemType)

Valeur Type
0 Manga / Comic
1 Watch / Anime / Vidéo
2 Novel / Ebook
4 Game / ROM

APIs disponibles dans le runtime

API Description
fetch(url, options?) HTTP avec support cookies
parseHtml(html) Sélecteur Cheerio-like
source Config de la source courante
btoa / atob Base64
CryptoJS AES, MD5, etc.

Extension multi-langues

Si ta source supporte plusieurs langues, utilise "lang": "multi" et le champ "langs" :

const watchtowerSources = [{
  "lang": "multi",
  "langs": ["en", "fr", "de", "ja"],
  "ids": {
    "en": 810342358,
    "fr": 545017689,
    // …
  }
}];

Cela crée une seule entrée dans la marketplace avec un sélecteur de langue intégré.

Contenu NSFW

// Dans le fichier source :
"isNsfw": true

// Placement dans le repo :
src/nsfw/watch/en/masource.js
src/nsfw/manga/multi/masource.js

Le contenu NSFW est masqué par défaut — l'utilisateur doit l'activer dans Paramètres → Browse.


🏗️ Créer son propre dépôt

Guide pas à pas

1. Structure minimale

mon-depot/
├── repo.json
├── index/
│   └── manga.json
└── src/
    └── manga/
        └── en/
            └── masource.js

2. repo.json

{
  "name": "Mon Dépôt",
  "website": "https://github.com/moncompte/mon-depot",
  "watchJsonUrl":  "https://raw.githubusercontent.com/moncompte/mon-depot/main/index/watch.json",
  "mangaJsonUrl":  "https://raw.githubusercontent.com/moncompte/mon-depot/main/index/manga.json",
  "novelJsonUrl":  "https://raw.githubusercontent.com/moncompte/mon-depot/main/index/novel.json"
}

3. index/manga.json

[
  {
    "name": "Ma Source",
    "id": 9000000001,
    "baseUrl": "https://monsite.com",
    "lang": "en",
    "typeSource": "single",
    "iconUrl": "https://monsite.com/favicon.ico",
    "isNsfw": false,
    "hasCloudflare": false,
    "sourceCodeUrl": "https://raw.githubusercontent.com/moncompte/mon-depot/main/src/manga/en/masource.js",
    "version": "1.0.0",
    "isManga": true,
    "itemType": 0,
    "appMinVerReq": "0.5.0",
    "sourceCodeLanguage": 1
  }
]

ID unique : commence à 9000000001 pour éviter les collisions avec ce dépôt officiel.

4. Publier

Rends le repo GitHub public, puis partage l'URL :

https://raw.githubusercontent.com/moncompte/mon-depot/main/repo.json

5. Mises à jour

À chaque modification d'un fichier JS, incrémente le champ version dans l'index JSON. Watchtower affiche alors le badge « Mettre à jour » dans la marketplace.


🤝 Contribuer

  1. Fork ce dépôt
  2. Place ton fichier JS dans src/<type>/<lang>/masource.js
  3. Ajoute une entrée dans index/<type>.json
  4. Si c'est une mise à jour, bump la version dans l'index
  5. Ouvre une Pull Request — titre : [manga/en] Add MonSite v1.0.0

Règles

  • ✅ Sources NSFW → isNsfw: true + placées dans src/nsfw/<type>/<lang>/
  • ✅ Version SemVer : MAJOR.MINOR.PATCH
  • ✅ appMinVerReq doit correspondre à la version Watchtower minimum requise
  • ❌ Pas de code malveillant ou de tracking utilisateur
  • ❌ Pas de clés API hardcodées

MIT License · Watchtower · Signaler un bug

About

Watchtower Extensions - Anime, Manga & More sources

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages