diff --git a/Apps/MetaFeederStremio/docker-compose.yml b/Apps/MetaFeederStremio/docker-compose.yml new file mode 100644 index 0000000..edaa3a8 --- /dev/null +++ b/Apps/MetaFeederStremio/docker-compose.yml @@ -0,0 +1,205 @@ +name: metafeederstremio + +# ============================================================================= +# MetaFeeder · Stremio — Stremio addons (AIOStreams, Torrentio, …) as a torrent +# source for MetaMesh. +# +# Same model as MetaFeeder · Prowlarr: this app is only the GLUE. The source is a +# separate app — **AIOStreams** (Yundera store, container `aiostreams:3000`) is +# the recommended one: a single addon URL that aggregates Torrentio, Comet, +# MediaFusion, … Any addon speaking the Stremio protocol works, including +# Torrentio's public link. +# +# Answers id-anchored queries only, the three shapes MetaWatch sends: +# film `tmdbid:603 contentKind:movie` +# season `tmdbid:1399 season:1` (one addon call per episode) +# episode `tmdbid:1399 season:1 episode:2` +# (`imdbid:` works in place of `tmdbid:`). Each P2P stream is one per-file +# BitTorrent record — infoHash + fileIdx, i.e. the exact episode inside a season +# pack — that MetaTransport · Torrent plays with no .torrent file. +# +# ⚠ P2P ONLY. Configure AIOStreams WITHOUT a debrid service. Debrid links are +# personal, expiring and carry your token: this feeder drops them, and the +# gateway must never relay one user's debrid account to the mesh. Debrid will be +# a client-side MetaShare option instead. +# +# Self-contained: calls the addons and TMDB directly, holds no bytes, runs no +# enrichment sidecars, does NOT talk to meta-core — the MetaGateway core stores +# and announces the records it returns. +# +# It needs, over the shared `pcs` network: +# - the **MetaGateway** app — which must list this feeder's URL +# (`http://metafeederstremio-feeder:8080`) in its feeders config. Discovery +# is startup-only, so restart the gateway afterwards. +# - an addon (AIOStreams app, or a public addon URL). +# +# Everything is scoped under the `metafeederstremio-*` prefix + +# /DATA/AppData/metafeederstremio/ data root, so it installs alongside the other +# Meta* apps with zero collisions. +# ============================================================================= + +services: + # --------------------------------------------------------------------------- + # metafeederstremio-feeder — the feeder (meta-feeder-stremio) hosting the + # `stremio` upstream. The gateway core reaches it directly on `pcs` for + # discovery/query; the human configures it from the MetaGateway dashboard + # (configure panel). + # --------------------------------------------------------------------------- + metafeederstremio-feeder: + image: ghcr.io/worph/meta-feeder-stremio:1.0.0 + cpu_shares: 30 + container_name: metafeederstremio-feeder + # Hard RAM cap, swap disabled (memswap_limit == mem_limit) → OOM instead of + # swap. One HTTP client + in-memory TMDB/record caches. + mem_limit: 256m + memswap_limit: 256m + hostname: metafeederstremio-feeder + restart: unless-stopped + # Its only write is its own state dir below, which Maison creates as + # $PUID:$PGID (x-compose-app.folders). So no root is needed. + user: $PUID:$PGID + expose: + - 8080 + environment: + # INFRA-ONLY env (the "config: no env if in webui" rule). The addon URLs and + # the TMDB token are read from the persisted config.json written by this + # feeder's config page (opened from the MetaGateway dashboard). The + # STREMIO_ADDON_URLS / TMDB_TOKEN env vars exist only as first-boot seeds; + # don't set them here. + RUST_LOG: "info" + TZ: "$TZ" + volumes: + # Persist feeder config (config.json saved via the config UI). + - ${DATA_ROOT:-/DATA}/AppData/metafeederstremio/state:/data/meta-feeder:rw + healthcheck: + test: ["CMD", "curl", "-sf", "http://localhost:8080/health"] + interval: 5s + timeout: 3s + retries: 10 + start_period: 5s + networks: + - pcs +networks: + pcs: + name: ${APP_NET:-pcs} + external: true + +x-casaos: + architectures: + - amd64 + - arm64 + author: Worph Team + category: Media + developer: Aptero Team + + description: + en_us: | + **Stremio addons as a MetaMesh source — AIOStreams, Torrentio and friends.** + + MetaFeeder · Stremio asks your Stremio addons for the torrents of a film or + an episode, and turns each one into a MetaMesh release that **MetaWatch** + can play. The addons have already done the hard matching work: every + result points at the **exact file** — the right episode inside a season + pack or a complete-series torrent — so nothing is guessed from release + names. + + **Use it with AIOStreams** (one link that aggregates Torrentio, Comet, + MediaFusion, …) or paste any addon's install link — Torrentio's public link + works too. + + **Torrent (P2P) streams only.** Set up AIOStreams **without** a debrid + service: debrid links are personal and expire, so this feeder ignores + them rather than share your account with the mesh. + + **Fast and self-contained:** an addon answers in about a second, results + stream in as they arrive, nothing is stored here and no enrichment + sidecars run. ~256 MB RAM. + + **Requires:** **MetaGateway** — its meta-core stores the results and + announces them to the swarm; the gateway must list this feeder in its + config. A free **TMDB** token gives releases their poster and summary. + + **Pairs with:** **AIOStreams**, **MetaWatch**, **MetaTransport · Torrent**. + + fr_fr: | + **Les addons Stremio comme source MetaMesh — AIOStreams, Torrentio et autres.** + + MetaFeeder · Stremio demande à vos addons Stremio les torrents d'un film ou + d'un épisode, et transforme chacun en une release MetaMesh que + **MetaWatch** peut lire. Les addons ont déjà fait le travail de + correspondance : chaque résultat désigne le **fichier exact** — le bon + épisode dans un pack de saison ou une intégrale — rien n'est deviné à + partir des noms de release. + + **À utiliser avec AIOStreams** (un seul lien qui agrège Torrentio, Comet, + MediaFusion, …) ou collez le lien d'installation de n'importe quel addon — + le lien public de Torrentio fonctionne aussi. + + **Flux torrent (P2P) uniquement.** Configurez AIOStreams **sans** service + de debrid : les liens debrid sont personnels et expirent, ce feeder les + ignore plutôt que de partager votre compte avec le mesh. + + **Rapide et autonome :** un addon répond en une seconde environ, les + résultats arrivent au fil de l'eau, rien n'est stocké ici, aucun plugin + d'enrichissement. ~256 Mo de RAM. + + **Nécessite :** l'app **MetaGateway** (son meta-core stocke et annonce les + résultats ; la passerelle doit lister ce feeder dans sa configuration). Un + jeton **TMDB** gratuit donne aux releases leur affiche et leur résumé. + + tagline: + en_us: Stremio addons (AIOStreams, Torrentio) as a torrent source — exact file per episode + fr_fr: Addons Stremio (AIOStreams, Torrentio) comme source torrent — le fichier exact par épisode + + title: + en_us: MetaFeeder · Stremio + + icon: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaFeederStremio/icon.png + thumbnail: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaFeederStremio/thumbnail.png + + store_app_id: metafeederstremio + is_uncontrolled: false + + tips: + before_install: + en_us: | + **Install order:** **MetaGateway** first, then **AIOStreams** (Yundera + store) if you use it. + + **After installing this app:** + 1. In **AIOStreams**, build a configuration **without any debrid + service** (torrent/P2P addons only, e.g. Torrentio), save it and copy + its install link (`…/manifest.json`). From inside the PCS you can use + the internal form `http://aiostreams:3000/stremio/…/manifest.json`. + 2. Open this feeder's config panel (the **MetaGateway** dashboard → this + feeder → *configure*), paste the link into **Stremio addon URLs** (one + per line), add your **TMDB token** (v4 read token from + themoviedb.org → Settings → API) and save. The feeder restarts itself. + 3. In **MetaGateway**, add this feeder to its feeders config — name + `stremio-feeder`, URL `http://metafeederstremio-feeder:8080` — from + the gateway dashboard's *Add a feeder* box. The gateway restarts + itself and picks up the `stremio` upstream. + + **Without an addon URL** the feeder stays up but reports degraded and + answers nothing. **Without a TMDB token** it answers only `imdbid:` + searches and releases have no poster — MetaWatch sends `tmdbid:`. + + **Only film and episode lookups reach it** (a title, season or episode + page). The free-text search box never does: addons cannot search by text. + + **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. + # The feeder runs as $PUID:$PGID, so this ownership is what lets it write. + folders: + - path: /DATA/AppData/metafeederstremio/state + user: $PUID + group: $PGID diff --git a/Apps/MetaFeederStremio/icon.png b/Apps/MetaFeederStremio/icon.png new file mode 100644 index 0000000..aef82bd Binary files /dev/null and b/Apps/MetaFeederStremio/icon.png differ diff --git a/Apps/MetaFeederStremio/thumbnail.png b/Apps/MetaFeederStremio/thumbnail.png new file mode 100644 index 0000000..aef82bd Binary files /dev/null and b/Apps/MetaFeederStremio/thumbnail.png differ diff --git a/README.md b/README.md index bc815d2..2d6953c 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ https://github.com/Worph/MetaAppStore/archive/refs/heads/main.zip | Library | `MetaSort`, `MetaFuse`, `MetaStremio` | | Network | `MetaShare` (content transport), `MetaGateway`, `MetaGatewayShared` | | Clients | `MetaWatch`, `MetaWatchShared`, `MetaRead`, `MetaReadShared` | -| Feeders | `MetaFeederAniList`, `MetaFeederArxiv`, `MetaFeederEuropePMC`, `MetaFeederGiphy`, `MetaFeederGutenberg`, `MetaFeederInternetArchive`, `MetaFeederJamendo`, `MetaFeederMusicBrainz`, `MetaFeederOpenSubtitles`, `MetaFeederProwlarr`, `MetaFeederSciHub`, `MetaFeederSuwayomi`, `MetaFeederTMDB`, `MetaFeederTribler`, `MetaFeederUsenet`, `MetaFeederWikiCommons`, `MetaFeederYouTube` | +| Feeders | `MetaFeederAniList`, `MetaFeederArxiv`, `MetaFeederEuropePMC`, `MetaFeederGiphy`, `MetaFeederGutenberg`, `MetaFeederInternetArchive`, `MetaFeederJamendo`, `MetaFeederMusicBrainz`, `MetaFeederOpenSubtitles`, `MetaFeederProwlarr`, `MetaFeederSciHub`, `MetaFeederStremio`, `MetaFeederSuwayomi`, `MetaFeederTMDB`, `MetaFeederTribler`, `MetaFeederUsenet`, `MetaFeederWikiCommons`, `MetaFeederYouTube` | | Plugins | `MetaPluginAnimeDetector`, `MetaPluginFFmpeg`, `MetaPluginFileInfo`, `MetaPluginFilenameParser`, `MetaPluginFullHash`, `MetaPluginJellyfinNFO`, `MetaPluginLanguage`, `MetaPluginOpenSubtitles`, `MetaPluginStillExtractor`, `MetaPluginSubtitle`, `MetaPluginSubtitleExtractor`, `MetaPluginTMDB` — headless enrichment workers, one per `metamesh-plugin-*` image | `MetaCore` is the dependency of every other app — install it first. diff --git a/psd-source/meta-icons-v2/meta_icons.py b/psd-source/meta-icons-v2/meta_icons.py index 54c6b03..ca432ef 100644 --- a/psd-source/meta-icons-v2/meta_icons.py +++ b/psd-source/meta-icons-v2/meta_icons.py @@ -127,6 +127,7 @@ APPS = { "MetaFeederJamendo": ("JAMENDO", "note", ORANGE), "MetaFeederMusicBrainz": ("MUSICBRAINZ", "disc", ORANGE), "MetaFeederYouTube": ("YOUTUBE", "video", ORANGE), + "MetaFeederStremio": ("STREMIO", "play", ORANGE), # MetaPlugin family — headless enrichment workers, blue ring. "MetaPluginFileInfo": ("FILE INFO", "fileinfo", BLUE), "MetaPluginFFmpeg": ("FFMPEG", "film", BLUE), diff --git a/psd-source/meta-icons-v2/svg/MetaFeederStremio.svg b/psd-source/meta-icons-v2/svg/MetaFeederStremio.svg new file mode 100644 index 0000000..addcf55 --- /dev/null +++ b/psd-source/meta-icons-v2/svg/MetaFeederStremio.svg @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +STREMIO \ No newline at end of file