MetaFeederSuwayomi 1.1.0 for the stock Suwayomi app (port 80, login on the config page); meta-share 2.6.4, meta-transport-ipfs 1.3.4

This commit is contained in:
Worph
2026-10-19 20:09:17 +00:00
parent 479f53850b
commit 235b1a7264
6 changed files with 49 additions and 44 deletions
+41 -36
View File
@@ -8,21 +8,24 @@ name: metafeedersuwayomi
# own. Split out of the former MetaFeeder · Comic app; **MetaFeeder · AniList** # own. Split out of the former MetaFeeder · Comic app; **MetaFeeder · AniList**
# is the optional identity tier beside it. # is the optional identity tier beside it.
# #
# ⚠ **Needs meta-gateway ≥ 1.0.28** — chapters arrive unresolved and their page
# list follows as an EnrichPatch, which an older gateway drops.
#
# ⚠ **Suwayomi itself is a SEPARATE app — install it first.** This feeder ships # ⚠ **Suwayomi itself is a SEPARATE app — install it first.** This feeder ships
# pointed at `suwayomi:4567`, the container the **Suwayomi** store app publishes # pointed at `http://suwayomi` (port 80), the container the stock **Suwayomi**
# on the shared `pcs` network. # store app publishes on the shared `pcs` network.
#
# ⚠ **Give the feeder Suwayomi's login.** The stock app runs
# `AUTH_MODE: simple_login`; enter its admin password (Maison → Suwayomi →
# credentials) on this feeder's config page. Only this feeder talks to
# Suwayomi — readers get chapters through the gateway — so its login stays on.
# #
# ⚠ **Querying Suwayomi WRITES.** Its search and chapter calls are GraphQL # ⚠ **Querying Suwayomi WRITES.** Its search and chapter calls are GraphQL
# mutations that cache source results into its library database. # mutations that cache source results into its library database.
# #
# ⚠ **Suwayomi must be reachable UNAUTHENTICATED.** An undownloaded chapter is a # How a chapter is read: its record carries one portable `tachiyomi` locator
# list of per-page URLs pointing at the Suwayomi container, redeemed by the # (minted from the chapter's address on its SITE, so every box agrees on it).
# READER's meta-share peer with no credentials. Suwayomi's `simple_login` 401s # Opening it makes the gateway redeem it here: the feeder fetches every page
# those routes — a library that lists every chapter and opens none. The Suwayomi # through Suwayomi and answers one CBZ, which the gateway stores once and the
# store app therefore runs `AUTH_MODE: none` behind an AppShield/OIDC gate. # mesh serves from then on. Needs a gateway that redeems `provider-file`
# locators and MetaTransport · IPFS ≥ 1.3.4 (64 MiB redeem ceiling).
# #
# It needs, over the shared `pcs` network: # It needs, over the shared `pcs` network:
# - the **MetaGateway** app — which must list this feeder's URL # - the **MetaGateway** app — which must list this feeder's URL
@@ -37,11 +40,11 @@ name: metafeedersuwayomi
services: services:
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# metafeedersuwayomi-feeder — the chapter tier. Resolves a work to titles, # metafeedersuwayomi-feeder — the chapter tier. Resolves a work to titles,
# searches every installed source, returns the chapters. Chapters are listed # searches every installed source, returns the chapters. Listing fetches no
# lazily: each chapter's page list is fetched only when a reader opens it. # page: a chapter's pages are fetched once, when a reader first opens it.
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
metafeedersuwayomi-feeder: metafeedersuwayomi-feeder:
image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-feeder-suwayomi:1.0.8 image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-feeder-suwayomi:1.1.0
cpu_shares: 30 cpu_shares: 30
container_name: metafeedersuwayomi-feeder container_name: metafeedersuwayomi-feeder
mem_limit: 256m mem_limit: 256m
@@ -54,16 +57,15 @@ services:
environment: environment:
RUST_LOG: "info,meta_feeder=info,suwayomi_feeder=info" RUST_LOG: "info,meta_feeder=info,suwayomi_feeder=info"
META_FEEDER_STATE_DIR: "/data/meta-feeder" META_FEEDER_STATE_DIR: "/data/meta-feeder"
# INFRA-ONLY env, and only a FIRST-BOOT SEED: `base_url` is a field on # FIRST-BOOT SEEDS only: `base_url`, `username` and `password` are fields
# this feeder's own config page (the MetaGateway dashboard (configure panel)), and a value saved # on this feeder's own config page (MetaGateway dashboard → this feeder →
# there wins. `suwayomi` is the container the Suwayomi store app publishes # configure), and a value saved there wins. `suwayomi` is the container
# on `pcs` — change it only to point at a Suwayomi somewhere else, and see # the Suwayomi store app publishes on `pcs`, on port 80.
# the reachability warning in the header before you do. SUWAYOMI_URL: "http://suwayomi"
SUWAYOMI_URL: "http://suwayomi:4567" # The stock Suwayomi app's login user. Its password is per-install
# Listing chapters is cheap (one call returns them all); RESOLVING a # (Maison → Suwayomi → credentials) and no app can read another's
# chapter's page list is what costs. 0 = fetch nothing until a reader # secret, so it is entered once on the config page.
# clicks. Raise it to pre-warm the first N ordinals per work. SUWAYOMI_USERNAME: "admin"
SUWAYOMI_WARM_CHAPTERS: "0"
# ⚠ SUWAYOMI_MAX_CHAPTERS is deliberately NOT set: it bounds how many # ⚠ SUWAYOMI_MAX_CHAPTERS is deliberately NOT set: it bounds how many
# chapters are LISTED, and any value can only truncate a long series into # chapters are LISTED, and any value can only truncate a long series into
# looking short. # looking short.
@@ -101,9 +103,9 @@ x-casaos:
you installed in the **Suwayomi** app, and mints its own work cards so search you installed in the **Suwayomi** app, and mints its own work cards so search
works on its own. Add **MetaFeeder · AniList** to name works across sources. works on its own. Add **MetaFeeder · AniList** to name works across sources.
**Install Suwayomi first.** It is a separate app in this store (with a **Install Suwayomi first** (a separate app, with a FlareSolverr sidecar so
FlareSolverr sidecar, so Cloudflare-protected sources work). This feeder arrives Cloudflare-protected sources work). This feeder arrives pointed at it; give it
pointed at it and needs no wiring. Suwayomi's admin password on its config page.
**You own the sources.** Suwayomi ships exactly one built-in source — *Local **You own the sources.** Suwayomi ships exactly one built-in source — *Local
source*, which reads CBZ/CBR from its own folder. Everything else is an extension source*, which reads CBZ/CBR from its own folder. Everything else is an extension
@@ -114,8 +116,9 @@ x-casaos:
**Multi-source by design.** Every installed source that carries a work **Multi-source by design.** Every installed source that carries a work
contributes, and each chapter row offers a chooser across them. contributes, and each chapter row offers a chooser across them.
**Lazy by default.** Listing a series' chapters costs one upstream call however **Fetched once, shared after.** Listing a series' chapters costs one upstream
long it is; a chapter's page list is fetched only when someone opens it. call however long it is. A chapter's pages are fetched the first time someone
opens it, stored as one CBZ, and served from the mesh from then on.
**Requires:** **MetaGateway** — its meta-core stores the resolved records and **Requires:** **MetaGateway** — its meta-core stores the resolved records and
announces them to the swarm. The gateway must list this feeder in its config. announces them to the swarm. The gateway must list this feeder in its config.
**Pairs with: MetaRead**, the reading client. **Pairs with: MetaRead**, the reading client.
@@ -131,8 +134,9 @@ x-casaos:
**Vous possédez les sources.** Suwayomi n'embarque que *Local source* ; tout le **Vous possédez les sources.** Suwayomi n'embarque que *Local source* ; tout le
reste est une extension que **vous** installez via l'interface Suwayomi. reste est une extension que **vous** installez via l'interface Suwayomi.
**Paresseux par défaut.** Lister les chapitres coûte un appel ; les pages d'un **Récupéré une fois, partagé ensuite.** Lister les chapitres coûte un appel ;
chapitre ne sont récupérées qu'à l'ouverture. les pages d'un chapitre sont récupérées à sa première ouverture, stockées en un
CBZ, puis servies par le maillage.
**Nécessite :** les apps **MetaGateway** et **Suwayomi**. **Va avec : MetaRead.** **Nécessite :** les apps **MetaGateway** et **Suwayomi**. **Va avec : MetaRead.**
tagline: tagline:
@@ -152,8 +156,8 @@ x-casaos:
before_install: before_install:
en_us: | en_us: |
**Install order:** **MetaGateway** first, then **Suwayomi** — the separate **Install order:** **MetaGateway** first, then **Suwayomi** — the separate
store app this feeder reads. This app arrives pointed at `suwayomi:4567`; without store app this feeder reads. This app arrives pointed at `http://suwayomi`;
that app installed it stays healthy and simply finds no chapters. without that app installed it stays healthy and simply finds no chapters.
**After installing this app:** **After installing this app:**
1. In **MetaGateway**, add this feeder from the dashboard's *Add a feeder* box — 1. In **MetaGateway**, add this feeder from the dashboard's *Add a feeder* box —
@@ -167,16 +171,17 @@ x-casaos:
4. Optionally install **MetaFeeder · AniList** so chapters from several sources 4. Optionally install **MetaFeeder · AniList** so chapters from several sources
converge on one work page. converge on one work page.
5. **Give the feeder Suwayomi's login:** copy the admin password from Maison →
Suwayomi → credentials into this feeder's config page (*Suwayomi password*).
Changed it in Maison later? Enter it here again.
This app has no web UI of its own: the **feeder's config page** (Suwayomi URL, This app has no web UI of its own: the **feeder's config page** (Suwayomi URL,
chapters per work, chapters pre-loaded) opens from the **MetaGateway** username, password, chapters per work) opens from the **MetaGateway**
dashboard → this feeder → *configure*. Suwayomi's own UI is the Suwayomi app. dashboard → this feeder → *configure*. Suwayomi's own UI is the Suwayomi app.
**⚠ Querying Suwayomi writes to it.** Rows will appear in its library that you **⚠ Querying Suwayomi writes to it.** Rows will appear in its library that you
did not add by hand. That is inherent to how the aggregator works. did not add by hand. That is inherent to how the aggregator works.
**Suwayomi's own login must stay off** — the reader fetches chapter pages from it
unauthenticated, so enabling it gives a library that lists every chapter and can
open none.
**No web UI of its own:** configure it from the **MetaGateway** dashboard → this feeder → *configure* (the gateway proxies this feeder's config page, behind the gateway's login). **No web UI of its own:** configure it from the **MetaGateway** dashboard → this feeder → *configure* (the gateway proxies this feeder's config page, behind the gateway's login).
# Maison (Yundera dashboard) configuration. Read in preference to x-casaos. # Maison (Yundera dashboard) configuration. Read in preference to x-casaos.
+2 -2
View File
@@ -81,7 +81,7 @@ services:
# MetaShare app's `metashare-<tier>` hostnames, which on a shared `pcs` # MetaShare app's `metashare-<tier>` hostnames, which on a shared `pcs`
# would be ANOTHER hull's plugins writing to another /data). # would be ANOTHER hull's plugins writing to another /data).
# - 3000 HTTP API - 3001 plugin callback API (internal only) # - 3000 HTTP API - 3001 plugin callback API (internal only)
image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.2 image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.4
container_name: metagateway-share container_name: metagateway-share
# The swarm and blockstore moved to the ipfs plugin, so the hull needs far # The swarm and blockstore moved to the ipfs plugin, so the hull needs far
# less than the monolith did. # less than the monolith did.
@@ -129,7 +129,7 @@ services:
# mDNS, bitswap), the blockstore, gateway discovery and the peer directory # mDNS, bitswap), the blockstore, gateway discovery and the peer directory
# the hull uses to forward Usenet cids. Waits up to 60 s for the hull's # the hull uses to forward Usenet cids. Waits up to 60 s for the hull's
# internal /health before opening blocks.redb, so no depends_on. # internal /health before opening blocks.redb, so no depends_on.
image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.2 image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.4
container_name: metagateway-share-ipfs container_name: metagateway-share-ipfs
hostname: metagateway-share-ipfs hostname: metagateway-share-ipfs
restart: unless-stopped restart: unless-stopped
+2 -2
View File
@@ -154,7 +154,7 @@ services:
# MetaShare app's `metashare-<tier>` hostnames, which on a shared `pcs` # MetaShare app's `metashare-<tier>` hostnames, which on a shared `pcs`
# would be ANOTHER hull's plugins writing to another /data). # would be ANOTHER hull's plugins writing to another /data).
# - 3000 HTTP API - 3001 plugin callback API (internal only) # - 3000 HTTP API - 3001 plugin callback API (internal only)
image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.2 image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.4
container_name: metaread-share container_name: metaread-share
# The swarm and blockstore moved to the ipfs plugin, so the hull needs far # The swarm and blockstore moved to the ipfs plugin, so the hull needs far
# less than the monolith did. # less than the monolith did.
@@ -202,7 +202,7 @@ services:
# mDNS, bitswap), the blockstore, gateway discovery and the peer directory # mDNS, bitswap), the blockstore, gateway discovery and the peer directory
# the hull uses to forward Usenet cids. Waits up to 60 s for the hull's # the hull uses to forward Usenet cids. Waits up to 60 s for the hull's
# internal /health before opening blocks.redb, so no depends_on. # internal /health before opening blocks.redb, so no depends_on.
image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.2 image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.4
container_name: metaread-share-ipfs container_name: metaread-share-ipfs
hostname: metaread-share-ipfs hostname: metaread-share-ipfs
restart: unless-stopped restart: unless-stopped
+1 -1
View File
@@ -13,7 +13,7 @@ services:
# - 3000 HTTP API + dashboard (proxied through the hash-lock + Caddy) # - 3000 HTTP API + dashboard (proxied through the hash-lock + Caddy)
# - 3001 plugin callback API — internal only, never published # - 3001 plugin callback API — internal only, never published
metashare-app: metashare-app:
image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.2 image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.4
container_name: metashare-app container_name: metashare-app
# Hard RAM cap, swap disabled (memswap_limit == mem_limit) → OOM instead of # Hard RAM cap, swap disabled (memswap_limit == mem_limit) → OOM instead of
# swap. The swarm, blockstore and torrent session moved to the plugins, so # swap. The swarm, blockstore and torrent session moved to the plugins, so
+1 -1
View File
@@ -16,7 +16,7 @@ name: metatransportipfs
services: services:
metashare-ipfs: metashare-ipfs:
image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.2 image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.4
container_name: metashare-ipfs container_name: metashare-ipfs
hostname: metashare-ipfs hostname: metashare-ipfs
restart: unless-stopped restart: unless-stopped
+2 -2
View File
@@ -157,7 +157,7 @@ services:
# MetaShare app's `metashare-<tier>` hostnames, which on a shared `pcs` # MetaShare app's `metashare-<tier>` hostnames, which on a shared `pcs`
# would be ANOTHER hull's plugins writing to another /data). # would be ANOTHER hull's plugins writing to another /data).
# - 3000 HTTP API - 3001 plugin callback API (internal only) # - 3000 HTTP API - 3001 plugin callback API (internal only)
image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.2 image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.4
container_name: metawatch-share container_name: metawatch-share
# The swarm and blockstore moved to the ipfs plugin, so the hull needs far # The swarm and blockstore moved to the ipfs plugin, so the hull needs far
# less than the monolith did. # less than the monolith did.
@@ -205,7 +205,7 @@ services:
# mDNS, bitswap), the blockstore, gateway discovery and the peer directory # mDNS, bitswap), the blockstore, gateway discovery and the peer directory
# the hull uses to forward Usenet cids. Waits up to 60 s for the hull's # the hull uses to forward Usenet cids. Waits up to 60 s for the hull's
# internal /health before opening blocks.redb, so no depends_on. # internal /health before opening blocks.redb, so no depends_on.
image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.2 image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.4
container_name: metawatch-share-ipfs container_name: metawatch-share-ipfs
hostname: metawatch-share-ipfs hostname: metawatch-share-ipfs
restart: unless-stopped restart: unless-stopped