name: metafeederprowlarr # ============================================================================= # MetaFeeder · Prowlarr — a STANDALONE Prowlarr feeder for MetaMesh. # # Bridges your **Prowlarr** indexers — Torznab/Newznab, torrent AND usenet — into # MetaMesh, so releases surface in **MetaWatch**. Prowlarr is the separate store # app (container `prowlarr:9696`) that aggregates the indexers. # # (The Tribler source used to ride in this same app; it was extracted into its # own image + app — install **MetaFeeder · Tribler** for decentralized IPv8 # discovery. This app is now Prowlarr/Torznab-only.) # # Split out of the MetaGateway stack so the sources stay modular. Self-contained # for enrichment: ships its own filename-parser + tmdb plugins. # # It needs, all reached over the shared `pcs` network: # 1. the **Prowlarr** store app (`prowlarr:9696`) — the indexer source. # 2. the shared **MetaCore** app (`metacore-app:9000`) — where resolved # records + TMDB posters are stored; the shared **MetaShare** app then # announces them to the swarm. # The **MetaGateway** app must list this feeder's URL # (`http://metafeederprowlarr-feeder:8080`) in its feeders config so it # discovers + queries it (MetaGateway, MetaCore and this feeder share `pcs`). # # Everything is scoped under the `metafeederprowlarr-*` prefix + the # per-stack `metafeederprowlarr` network + /DATA/AppData/metafeederprowlarr/ # data root, so it installs alongside the other Meta* apps with zero collisions. # ============================================================================= services: # --------------------------------------------------------------------------- # metafeederprowlarr-feeder — the feeder (meta-feeder-torznab) running the # Prowlarr/Torznab source. The gateway reaches it directly on `pcs` for # discovery/query/compute; the human configures it # from the MetaGateway dashboard (configure panel). # --------------------------------------------------------------------------- metafeederprowlarr-feeder: # Image name is `meta-feeder-torznab` — the repo (and therefore the ghcr # package, published as ${{ github.repository }}) was renamed. The old # `meta-feeder-indexer` package still exists but is frozen at 1.0.23 and # receives no further pushes. The APP keeps the `metafeederprowlarr` name. image: ghcr.io/worph/meta-feeder-torznab:1.0.35 cpu_shares: 30 container_name: metafeederprowlarr-feeder # Hard RAM cap, swap disabled (memswap_limit == mem_limit) → OOM # instead of swap. 512m -> 1g (2026-09-30): the feeder's steady state on # watch.nsl.sh is ~660 MiB (release cache + in-flight torznab pages). mem_limit: 1g memswap_limit: 1g hostname: metafeederprowlarr-feeder restart: unless-stopped user: "0:0" expose: - 8080 environment: # INFRA-ONLY env (the "config: no env if in webui" rule). Operator config — # Prowlarr indexers + API key, TMDB token / language, meta-core URL — is # read from the persisted config.json (this feeder's config page, opened from # the MetaGateway dashboard (configure panel)); env is only a deprecated first-boot seed. These env vars # are wiring only: the enrichment sidecars, the enrich callback, the peer id # and Prowlarr paging. meta-core defaults to the pcs # `http://metacore-app:9000`; Prowlarr is reached as `prowlarr:9696`. RUST_LOG: "info,meta_feeder=info,meta_feeder::store=debug" # The peer id stamped into provenance.gateway_peer on every record this # feeder self-publishes. It names the GATEWAY this feeder serves — not the # feeder itself — so records are attributed to the gateway that fronts them # (analytics group by it). Without it, it falls back to HOSTNAME. META_GATEWAY_PEER_ID: "metagateway" FILENAME_PARSER_URL: "http://metafeederprowlarr-filename-parser:8080" TMDB_PLUGIN_URL: "http://metafeederprowlarr-tmdb:8080" META_FEEDER_CALLBACK_URL: "http://metafeederprowlarr-feeder:8080/enrich/callback" # LOAD-BEARING at meta-feeder-indexer:1.0.9 — NOT a restatement of the # default: that build defaults the page size to 100. 20 is the pacing # choice (results stream 20-at-a-time). META_GATEWAY_PROWLARR_MAX_DEPTH # was dropped — its 500 did match the default. META_GATEWAY_PROWLARR_PAGE_SIZE: "20" TZ: "$TZ" volumes: # Persist feeder config (config.json saved via the config UI) + redb cache. # Transient librqbit downloads go to the container's /tmp (off backup). - ${DATA_ROOT:-/DATA}/AppData/metafeederprowlarr/state:/data/meta-feeder:rw healthcheck: test: ["CMD", "curl", "-sf", "http://localhost:8080/health"] interval: 5s timeout: 3s retries: 10 start_period: 5s depends_on: # service_started (not _healthy): the plugin images ship no healthcheck. metafeederprowlarr-filename-parser: condition: service_started metafeederprowlarr-tmdb: condition: service_started networks: - metafeederprowlarr - pcs # --------------------------------------------------------------------------- # Bundled enrichment plugins (self-contained). filename-parser per file; tmdb # once per torrent — tmdb writes posters/backdrops to the gateway core's WebDAV. # No healthcheck: these plugin images don't ship one (curl absent). # --------------------------------------------------------------------------- metafeederprowlarr-filename-parser: image: ghcr.io/worph/metamesh-plugin-filename-parser:1.0.4 cpu_shares: 30 container_name: metafeederprowlarr-filename-parser # Hard RAM cap, swap disabled (memswap_limit == mem_limit) → OOM # instead of swap. Mirrors the dev sub-stack limits. mem_limit: 256m memswap_limit: 256m hostname: metafeederprowlarr-filename-parser restart: unless-stopped expose: - 8080 environment: EMIT_TITLE_TAGS: "true" networks: - metafeederprowlarr metafeederprowlarr-tmdb: image: ghcr.io/worph/metamesh-plugin-tmdb:1.0.4 cpu_shares: 30 container_name: metafeederprowlarr-tmdb # Hard RAM cap, swap disabled (memswap_limit == mem_limit) → OOM # instead of swap. Mirrors the dev sub-stack limits. mem_limit: 384m memswap_limit: 384m hostname: metafeederprowlarr-tmdb restart: unless-stopped expose: - 8080 environment: # Posters land in the gateway core (over pcs) so the ingester seeds them. # LOAD-BEARING at metamesh-plugin-tmdb:1.0.0 — do NOT remove. # Newer source derives WebDAV from the metaCoreUrl passed on each /process # (GET /urls -> webdavUrlInternal), which is why the dev compose omits it. The # PUBLISHED image predates that: without this var it logs "WebDAV client # unavailable" and silently writes no posters/backdrops, so every record then # fails meta-watch's poster gate. Drop only after re-tagging the plugin. WEBDAV_URL: "http://metacore-app:9000/webdav" volumes: - ${DATA_ROOT:-/DATA}/AppData/metafeederprowlarr/tmdb-cache:/cache networks: - metafeederprowlarr - pcs networks: metafeederprowlarr: name: metafeederprowlarr driver: bridge pcs: name: ${APP_NET:-pcs} external: true x-casaos: architectures: - amd64 - arm64 author: Worph Team category: Media developer: Aptero Team description: en_us: | **A standalone torrent + usenet feeder for the MetaMesh network.** MetaFeeder · Prowlarr bridges your **Prowlarr** indexers (Torznab/Newznab — torrent *and* usenet) into MetaMesh, so releases surface in **MetaWatch**. It's the torrent/usenet source tier, split out of MetaGateway so you can run only the feeders you want. **Self-contained:** ships its own filename-parser + TMDB enrichment, so each release gets a clean title, poster and plot. **Source:** - **Prowlarr** — Torznab/Newznab indexers, torrent or usenet (reached as `prowlarr` on the shared network). **Want decentralized discovery too?** Install **MetaFeeder · Tribler** — the Tribler source now lives in its own app. **Also requires:** **MetaGateway** — its meta-core stores the resolved records and announces them to the swarm. The gateway must list this feeder in its config. fr_fr: | **Un feeder torrent + usenet autonome pour le réseau MetaMesh.** MetaFeeder · Prowlarr connecte vos indexeurs **Prowlarr** (Torznab/Newznab — torrent *et* usenet) à MetaMesh pour qu'ils apparaissent dans **MetaWatch**. C'est la couche de sources torrent/usenet, détachée de MetaGateway pour n'exécuter que les feeders souhaités. **Autonome :** embarque ses propres plugins filename-parser + TMDB. **Source :** l'app **Prowlarr** (indexeurs Torznab/Newznab, torrent ou usenet, atteinte comme `prowlarr`). **Envie de découverte décentralisée ?** Installez **MetaFeeder · Tribler** — la source Tribler est désormais une app dédiée. **Nécessite aussi :** l'app **MetaGateway** (son meta-core stocke et annonce les enregistrements). tagline: en_us: Standalone Prowlarr/Torznab (torrent + usenet) feeder for MetaMesh fr_fr: Feeder Prowlarr/Torznab (torrent + usenet) autonome pour MetaMesh title: en_us: MetaFeeder · Prowlarr icon: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaFeederProwlarr/icon.png thumbnail: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaFeederProwlarr/thumbnail.png store_app_id: metafeederprowlarr is_uncontrolled: false tips: before_install: en_us: | **Install order:** install **MetaGateway** first, plus the **Prowlarr** store app (Torznab/Newznab). **After installing this app:** 1. In **Prowlarr**: complete its first-run wizard, add one or more indexers (torrent or usenet), then copy the **API Key** (Settings → General). 2. Open its config panel (the **MetaGateway** dashboard → this feeder → *configure*). Paste the Prowlarr key into the indexer's API-key field; optionally set a TMDB v4 token for posters. Save — the feeder reloads automatically. 3. In **MetaGateway**, make sure this feeder is listed in its feeders config (`http://metafeederprowlarr-feeder:8080`) so it gets discovered. **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. # schema_version 2 is required for `folders`: an older Maison refuses the app # outright rather than starting it without its directories. x-compose-app: schema_version: 2 # Created and chowned by Maison before any image is pulled, before any hook # runs and before the containers start — on the first boot and every one after. # Compose would otherwise create a missing bind source as a root-owned dir. folders: - path: /DATA/AppData/metafeederprowlarr/state user: $PUID group: $PGID - path: /DATA/AppData/metafeederprowlarr/tmdb-cache user: $PUID group: $PGID