Your Usenet-powered bridge between Prowlarr/NZBHydra, NZBDav, and Stremio.
Query your favorite indexers, stream directly over WebDAV, and manage it all from a friendly web dashboard.
- Docker image:
ghcr.io/sanket9225/usenetstreamer:latest - Admin dashboard:
https://your-addon-domain/<admin-token (ADDON_SHARED_SECRET)>/admin/ - Manifest template:
https://your-addon-domain/<stream-token>/manifest.json - Discord: Community chat
- Sponsor: GitHub Sponsors
- Self-hosting guide: Jump to instructions
Disclaimer: UsenetStreamer is not affiliated with any Usenet provider or indexer, does not host or distribute media, and is offered strictly for educational purposes.
⚠️ Upgrade notice: If you are upgrading from a version older than 1.7.6, you may need to reinstall the addon in Stremio for changes to take effect.
Sponsor on GitHub → — your sponsorship keeps the addon maintained, hosted, and packed with new features.
- Stream Protection modes — unified protection selector in the dashboard:
none,auto-advance,health-check,health-check-auto-advance,smart-play-only, andsmart-play. - Smart Play (background triage) — background health checks add a dedicated Smart Play stream that can auto-pick healthy candidates while checks continue.
- Custom sorting chain —
NZB_SORT_ORDERdrives result ordering with any combination of:language,release_group,size,resolution,quality,encode,visual_tag,audio_tag,keyword,date,files. Default chain:quality,size,files. - Per-indexer capability gating — ID-based plans run only on indexers that advertise required caps support (e.g., skip
imdbidtvsearch where unsupported). - Anime ID support — accepts
kitsu:,mal:, andanilist:IDs and resolves them to IMDb/TVDb via bundled mapping databases (Fribb, Kitsu-IMDB, Manami).
- Parallel queries to Prowlarr or NZBHydra with automatic deduplication.
- Two-tier cache (Stremio responses + verified NZBs) to keep repeat requests instant.
- IMDb/TMDb/TVDb and anime-ID (
kitsu:,mal:,anilist:) aware search plans with TVDB-prefixed ID support (no Cinemeta needed). Anime IDs are resolved to IMDb/TVDb via bundled mapping databases. - Release titles parsed for resolution, quality, and audio language — sorting is fully configurable via
NZB_SORT_ORDER(e.g.quality,size,files,language,quality,date, or any combination). - Preferred language groups (single or multiple) rise to the top and display with clear 🌐 labels.
- Optional dedupe filter (enabled by default) collapses duplicates when normalized title + Usenet group match within the publish window; keeps preferred result by paid indexer, then lower file count.
- A single per-quality cap (e.g., 4) keeps only the first few results for each resolution before falling back to the next tier.
- Completed NZBDav jobs are recognized automatically and surfaced with a ⚡ tag.
- Instant streams are floated to the top of the list so you can start watching immediately.
- Toggle Easynews in the admin panel, drop in your username/password, and get native search results without running the standalone proxy.
- Movies/series use strict Cinemeta matching for precise hits, while external text-only addons stay in loose mode.
- Easynews results skip triage (they're treated as ✅ verified) but still flow through the usual dedupe/sorting pipeline.
- Optional triage downloads a handful of NZBs, inspects archive contents, and flags bad uploads before Stremio sees them.
- Archive checks are used to peek inside NZBs and verify two things before selection:
- the archive format is supported by NZBDav
- playable video files are present in the payload
- Decisions are cached per download URL and per normalized title, so later requests inherit health verdicts instantly.
- Admin token (
ADDON_SHARED_SECRET) — used to access the admin dashboard where you can edit settings and credentials. Credentials are write-only (never exposed back to the UI). - Stream token (
ADDON_STREAM_TOKEN) — a separate token used only for streaming; it cannot access the admin dashboard or modify any settings.
- Stremio request: Stremio calls
/stream/<type>/<id>.json(optionally with?lang=deor other hints). - Indexer search: UsenetStreamer plans IMDb/TMDb/TVDb/anime-ID searches plus fallbacks and queries Prowlarr/NZBHydra simultaneously.
- Release parsing: Titles are normalized for resolution, size, and language; oversize files above your cap are dropped.
- Triage & caching (optional): Health checks sample NZBs via NNTP; decisions and NZBs are cached.
- NZBDav streaming: Chosen NZBs feed NZBDav, which exposes a WebDAV stream back to Stremio.
- Instant detection: Completed NZBDav jobs are matched by normalized title and tagged ⚡ for instant playback.
mkdir -p ~/usenetstreamer-config
docker run -d --restart unless-stopped \
--name usenetstreamer \
--log-opt max-size=10m \
--log-opt max-file=1 \
-p 7000:7000 \
-e ADDON_SHARED_SECRET=super-secret-token \
-e CONFIG_DIR=/data/config \
-v ~/usenetstreamer-config:/data/config \
ghcr.io/sanket9225/usenetstreamer:latestservices:
usenetstreamer:
image: ghcr.io/sanket9225/usenetstreamer:latest
container_name: usenetstreamer
restart: unless-stopped
ports:
- "7000:7000"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "1"
environment:
ADDON_SHARED_SECRET: super-secret-token
CONFIG_DIR: /data/config
volumes:
- ./usenetstreamer-config:/data/configThen browse to https://your-domain/super-secret-token/admin/ to enter your credentials. The CONFIG_DIR variable tells the addon to store runtime-env.json under the mounted path so your admin settings survive container recreations. The container ships with Node 20, exposes port 7000, and supports both linux/amd64 and linux/arm64 thanks to buildx.
Stremio requires HTTPS. Place Nginx/Caddy/Traefik in front of the addon, terminate TLS, and forward to http://127.0.0.1:7000. Expose /manifest.json, /stream/*, /nzb/*, /assets/*, and /admin/*. Update ADDON_BASE_URL accordingly.
Prefer a hand-held walkthrough? Read docs/beginners-guide.md for a soup-to-nuts tutorial that covers:
- Picking a Usenet provider + indexer, spinning up a VPS, and installing Docker.
- Deploying Prowlarr, NZBDav, and UsenetStreamer with a single
docker composefile. - Opening firewall ports, wiring DuckDNS, and configuring Caddy for HTTPS the beginner way.
Refer to that guide whenever you need a step-by-step checklist; the rest of this README focuses on day-to-day usage details.
Visit https://your-addon-domain/<token>/admin/ to:
- Load and edit every runtime setting with validation and helpful hints.
- Trigger connection tests for indexer manager, NZBDav, and NNTP provider.
- Copy the ready-to-use manifest URL right after saving.
- Restart the addon safely once changes are persisted.
The dashboard and stream routes are protected by secret tokens. Rotate secrets/tokens if you ever suspect exposure.
- Indexer sources:
INDEXER_MANAGER(none,prowlarr,nzbhydra),INDEXER_MANAGER_URL,INDEXER_MANAGER_API_KEY,INDEXER_MANAGER_INDEXERS,INDEXER_MANAGER_STRICT_ID_MATCH. - Direct Newznab mode:
NEWZNAB_ENABLED,NEWZNAB_FILTER_NZB_ONLY, numberedNEWZNAB_*entries, optionalNEWZNAB_CAPS_CACHE. - Addon security + routing:
ADDON_BASE_URL(HTTPS),ADDON_SHARED_SECRET(required), optionalADDON_STREAM_TOKEN(separate stream token). - Sorting + filtering:
NZB_SORT_MODE(legacy/back-compat),NZB_SORT_ORDER(priority chain, defaultquality,size,files),NZB_PREFERRED_LANGUAGE,NZB_DEDUP_ENABLED,NZB_MAX_RESULT_SIZE_GB,NZB_ALLOWED_RESOLUTIONS,NZB_RESOLUTION_LIMIT_PER_QUALITY,NZB_RELEASE_EXCLUSIONS. - Stream naming:
NZB_DISPLAY_NAME_PATTERN,NZB_NAMING_PATTERNwith token-list support (title,stream_quality,source,codec,group,size,files,date,languages,indexer,health, etc.). - NZBDav:
NZBDAV_URL,NZBDAV_API_KEY, WebDAV credentials, category controls, and history/cache options. - Easynews:
EASYNEWS_ENABLED,EASYNEWS_USERNAME,EASYNEWS_PASSWORD, optional size/text-mode flags. - TMDb/TVDb/anime metadata assist:
TMDB_ENABLED,TMDB_API_KEY,TMDB_SEARCH_MODE(english_only/english_and_regional),TMDB_SEARCH_LANGUAGES,TVDB_ENABLED,TVDB_API_KEY, plus built-in anime ID mapping support. - Stream protection + health checks:
NZB_STREAM_PROTECTION,NZB_AUTO_ADVANCE_STRATEGY,NZB_SMART_PLAY_MODE, andNZB_TRIAGE_*NNTP/triage controls. - Archive-check knobs:
NZB_TRIAGE_HEALTH_METHOD,NZB_TRIAGE_STAT_SAMPLE_COUNT, andNZB_TRIAGE_ARCHIVE_SAMPLE_COUNT.
See .env.example for the complete list and defaults.
- Switch to
language_quality_sizesorting to pin one or more preferred languages (set via dashboard orNZB_PREFERRED_LANGUAGE=English,Tamil). - Matching releases get a ⭐ tag plus
🌐 <Language>badges, but non-matching streams stay available.
- Completed NZBDav titles and still-mounted NZBs are resolved by normalized titles.
- Instant streams jump to the top of the response and are logged in Stremio metadata (
cached,cachedFromHistory).
- Triage can mark NZBs
✅ verified,⚠️ unverified, or🚫 blocked, reflected in stream tags. - Approved samples optionally store NZB payloads in memory, letting NZBDav mount them without re-fetching.
- None — no health checks, no auto-advance.
- Auto-Advance — no health checks; fallback only when a stream fails.
- Upfront Health Check — triage before returning stream list.
- Upfront Health Check + Auto-Advance — upfront filtering plus fallback queueing.
- Background Health Check + Smart Play — return immediately, verify in background, Smart Play picks healthy results.
- Background Health Check + Smart Play + Auto-Advance — Smart Play plus auto-advance protection.
| Platform | Status |
|---|---|
| Stremio 4.x desktop (Win/Linux) | ✅ Tested |
| Stremio 5.x beta | ✅ Tested |
| Android TV / Mobile | ✅ Tested |
| iOS via Safari/TestFlight | ✅ Tested |
| Web (Chromium-based browsers) | ✅ Tested |
| tvOS / Apple TV (Omni/Vidi/Fusion) | ✅ Tested |
Anything that can load HTTPS manifests and handle externalPlayer hints should work. Open an issue or drop by Discord if you hit a platform-specific quirk.
- Discord: Join the chat
- Sponsor: Keep development humming
- Issues & PRs: GitHub tracker
Huge thanks to everyone testing, filing bugs, and sharing feature ideas.