Help us shape the future of Go! Take the 2026 Go Developer Survey

ether

module
v0.2.17 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 27, 2026 License: GPL-3.0

README

Ether

The whole TMDB catalogue, inside the Plex app your family already uses.
Your on-demand server alongside Plex Media Server.

Press Play on a title in any official Plex app. Ether resolves the best release across your Usenet providers and your debrid accounts, health-checks it, and streams the exact byte ranges the player asks for.

Latest release Platforms Pure Go GPL-3.0 No telemetry

Why Ether Exists · Under the Hood · Product Tour · Alongside Your Library · Install in 5 Minutes · FAQ

Ether Server Overview


Why Ether exists

A typical automated Plex setup is built from several excellent projects—Sonarr, Radarr, Prowlarr, SABnzbd, Overseerr, Kometa, Tautulli and more—each of them very good at its job. Wiring them together still means download clients, path mappings, webhooks and, for debrid users, FUSE/WebDAV mounts that Plex Media Server has to scan. A new title still has to download, unpack and be scanned before anyone can press Play.

Ether takes a different approach to the on-demand case. Instead of presenting files for Plex Media Server to scan, Ether speaks the PMS protocol itself. It talks directly to official Plex clients (Apple TV, iOS, Android TV, Shield, Fire TV, Roku, Smart TVs, Web) and backs the library with the live TMDB catalogue and an on-demand byte-range streaming engine.

When you open Plex, the catalogue is already there. When you press Play, Ether resolves, health-checks, and streams the bytes on the fly. When you scrub to 01:14:22, Ether seeks to the matching keyframe offset inside a remote Usenet RAR5 set or debrid HTTPS stream and serves just those bytes.

What your family experiences What you stop maintaining
Press Play and watch. Titles are browsable, searchable, and playable inside the stock Plex app. No request queue. No "Can you add this to Plex?" texts. No waiting for downloads, extractions, or library scans.
A Home screen that knows them. Every viewer gets their own taste model, row ordering, and runtime-aware picks. No single Recently Added row shared by everyone in the house.
It just plays. Automatic provider backfill, mid-stream release failover, synced subtitles, and Skip Intro / Skip Credits. No dead mounts, stuck queues, out-of-sync .srt files, or broken archives to chase on a Friday night.
Storage you choose. Run in 256 MiB pass-through mode or let a multi-terabyte shelf pre-warm what your household watches next. No cleanup rules to tune, and no need to buy storage for everything you might watch.

Alongside your local library

Keep Plex Media Server and the tools that curate the files you own. Ether adds a second server in the same Plex apps for titles outside that collection. Its availability depends on your configured sources; an on-demand catalogue is not a durable local library.

The table maps familiar workflows to Ether’s on-demand features. It does not claim feature parity with these mature projects. Clustering, virtual Live TV, hardware enhancement and poster customization are optional integrations; ordinary playback needs none of them.

If you run today What Ether does instead
Plex Media Server (for streaming) Clean-room implementation of the PMS HTTP/HLS/DASH/GDM protocol, *.plex.direct TLS, and plex.tv sharing. (Keep PMS for your local files.)
Sonarr & Radarr Resolution happens at Play time (or during detail-page warmup) using your quality profiles, custom formats, edition rules, and release pins.
Prowlarr & Jackett Native Newznab and Torznab manager with daily quota tracking, Retry-After backoff, result caching, 1-click Prowlarr import, a built-in Cardigann YAML engine, and Stremio stream addons as torrent sources (paste an install link).
SABnzbd, NZBGet, NzbDAV, AltMount Native NNTP connection pools, wire-pipelined BODY fetching, SWAR yEnc decoding, and direct byte-range seeking inside store-mode RAR4, RAR5, and 7z sets (including password-protected stored archives).
zurg, rclone, Riven, plex_debrid Native HTTPS range streaming for Real-Debrid, TorBox, AllDebrid, and Premiumize—including single-episode extraction from torrent season packs without mounts.
Overseerr & Jellyseerr Released titles need no requests. Viewers' Plex and Trakt Watchlists sync automatically and notify them the moment newly released titles become playable.
Kometa (Plex Meta Manager) Live visual poster studio and rule-based collection builder in the browser. Renders 4K / DV / Atmos and rating badges in pure Go on demand, configured in the browser.
Bazarr Automatic OpenSubtitles matching plus piecewise dialogue-timing alignment that syncs subtitles and skip markers across different cuts without downloading video.
Tautulli & Notifiarr Built-in real-time session monitor, 30-day analytics, provider throughput graphs, weekly HTML digests, and rule-filtered alerts (Discord, Slack, Telegram, Push, Email, ntfy, Gotify).
Maintainerr Self-evicting segment cache with repeat-watch retention credit and rolling TV episode preloading that automatically slides forward as your household watches.
ErsatzTV, Tunarr, Threadfin Turn any collection into a 24/7 virtual TV channel alongside M3U/XMLTV and Xtream feeds—served straight into Plex's native Live TV guide.

Under the hood

                       Official Plex Apps (Apple TV · iOS · Android TV · Web · Roku)
                                     │  browse · search · Play · scrub
                                     ▼
  ┌──────────────────────────────────────────── ETHER ────────────────────────────────────────────┐
  │  PMS Protocol Layer      Native hubs, metadata, PlayQueues, HLS/DASH, GDM, plex.direct TLS   │
  │  Personalization Engine  Per-viewer taste model · Beta-bandit row ranker · Learned re-ranker  │
  │  Smart Resolver          Quality profiles · Custom formats · Measured-latency source racing   │
  │  PAR2 & Health Oracle    16 KiB MD5 de-obfuscation · Mid-file BODY probes · Slice checksums   │
  │  Zero-Copy Streamer      Seekable RAR4/RAR5/7z (plain & AES) · HTTPS ranges · Disk/NAS tier   │
  │  Dialogue Aligner        Piecewise subtitle-cue solver for cross-cut failover & skip markers  │
  │  Media & GPU Transcode   Direct play · Copy remux · HW ABR HLS/DASH · NVIDIA RTX Video VSR    │
  └──────────────────────────────────┬───────────────────────────────────────┬────────────────────┘
                                     │                                       │
                        Usenet Providers (Primary + Backfill)       Debrid Accounts (RD · TorBox · AD · PM)
                        + Newznab Indexers & Cardigann Sites        + Torznab Indexers & Cardigann Sites

1. Native Usenet & Debrid streaming without extraction

  • Lazy store-mode archive indexing (including encrypted sets): To open a 60-part RAR4, RAR5, or 7z post on Usenet, Ether touches only the first, second, and last volume headers to infer the uniform layout and expose a seekable io.ReaderAt immediately—verifying volume boundaries lazily before serving bytes and supporting bounded native AES decryption on password-protected stored RAR4/RAR5/7z sets when the password is supplied in the NZB metadata.
  • PAR2 as a zero-cost de-obfuscation & integrity oracle: Ether never runs slow PAR2 repair. Instead, it fetches only the <1 MiB .par2 index packet in parallel with the first article, matches the MD5 of the first 16 KiB of obfuscated posts against PAR2 file descriptions to recover true filenames and volume order, and verifies slice checksums on the spot. If one dominant video file is identified, decoy files aren't even probed.
  • Truthful mid-file health checks: Providers routinely answer 223 to STAT for DMCA-pulled articles that fail with 451 on BODY. Ether combines spread STAT checks with real mid-file BODY yEnc-header reads and bails out on the first confirmed missing article across all providers.
  • Surgical Matroska damage concealment & live failover: Priority semaphores strictly protect PriorityLive reads over read-ahead and background prefetch. If an article is genuinely missing mid-stream inside an unlaced Matroska frame payload, Ether conceals the gap while warming an alternate release in the background—and if a release stalls or breaks, fails over to another release at the exact same scene.

2. Server-side NVIDIA RTX Video Super Resolution (nvenc-ngx-vsr) & GPU pipelines

90s sitcoms, classic anime, and DVD-era 480p/576p/720p shows tend to look soft on a 4K TV, and client-side upscalers only exist on a handful of devices.

  • Tensor-Core neural upscaling on the server: On Windows hosts with an NVIDIA RTX GPU and NVEncC64 (with NVIDIA NGX VSR runtime DLLs), Ether can run NVIDIA RTX Video Super Resolution directly inside the server's HLS/DASH transcode pipeline—cleaning compression artifacts and reconstructing crisp edges on SDR H.264 streams before they ever reach an Apple TV, Roku, iPad, or browser.
  • Self-protecting ABR & fallback: RTX VSR is opt-in (off by default) with owner-configurable source/target resolution caps (e.g. ≤720p → 1080p), quality tiers, and concurrency limits. Enhancement is reserved for the top ABR rendition; if measured client bandwidth dips or the GPU concurrency limit is reached, Ether seamlessly drops to ordinary hardware/software ABR renditions without interrupting playback or mislabeling an ordinary scaler as RTX VSR.
  • Zero-copy GPU surface transcoding: For standard transcodes across NVIDIA NVENC, Intel QuickSync, VAAPI, and Apple VideoToolbox, Ether keeps decode, scaling, and encode on GPU hardware surfaces end-to-end and bounds software fallback worker threads.

3. Piecewise dialogue alignment across different cuts

What happens when a stream fails over at 00:52:18 from a Theatrical WEB-DL to an Extended Blu-ray rip—or when TheIntroDB skip markers were timed against a different release? Duration math lands you in the wrong scene.

  • Ether aligns the subtitle dialogue timelines of the two releases using a piecewise-linear solver—without downloading a single byte of video—accounting for studio logo offsets, PAL 25fps speedup, and inserted/removed scenes.
  • That same dialogue engine inspects subtitle cues inside closing credits to detect mid- and post-credits stinger scenes, automatically ending the Skip Credits marker right before the stinger begins.

4. Personalization inside stock Plex apps

Viewers never leave the official Plex client, yet every person's Home screen is dynamically assembled for them, their device, and the current hour:

  • Per-viewer taste models: Tracks affinities across genres, keywords, directors, actors, decades, and languages with exponential time decay—separating completions and comfort rewatches from early abandons and unplayed impressions.
  • Hierarchical Thompson-sampling bandits: Row ordering uses a Beta-Bernoulli bandit that blends hand-tuned priors → server-wide evidence → the viewer's own play rate, held stable during an active browsing visit, with fresh exploration when a new client session starts or after an idle break.
  • Self-gated learned re-ranker: A pooled logistic-regression model trains in the background during quiet hours on 48-hour impression-to-play attribution (debiasing row and item position at inference). It refuses to activate until it beats the hand-tuned baseline by a strict held-out AUC margin.
  • Session-intent & Micro-Reason headers: Clicking through 90s thrillers without pressing Play subtly lifts related rows for the next hour. Detail pages greet the viewer with a calibrated decision header:

    96% Match · Directed by Denis Villeneuve · Ends at 10:45 PM (resume-aware, local time, never faked for new users).


The owner experience

Everything is managed through /ether/—a fast, keyboard-friendly web UI built around live previews and slide-over drawers. Zero YAML files required.

Global TMDB trending charts refresh hourly and survive restarts. Continue Watching leads the default discovery layout, followed by Trending Now. Browseable collections and discovery rows have independent placement controls, with movie-genre and TV-network/studio defaults. Catalog → Library visibility adds optional, previewable country, language, genre and numeric exclusion rules without replacing the catalogue browser or launching provider searches.

Taste Intelligence & Per-Viewer Controls

Inspect what the personalization engine has learned for each viewer—their top picks, taste confidence, peak viewing hours, typical session length, and genre/person affinities—alongside granular per-person content ratings, time windows, and stream caps.

Per-Viewer Taste Profile — learned affinities, top picks, confidence & viewing habits

Viewers & Household Guardrails — activity totals, age presets & stream limits

Home Designer & Conversational Collections

Compose your server's Home screen with global rules and per-viewer overrides, previewing any viewer's exact live rows before saving. Build smart collections visually—or let viewers type natural descriptions like "80s sci-fi under 2 hours" straight into the Plex search bar to generate an instant browsable collection (with zero AI required, and optional local/API LLM refinement when enabled).

Home Designer Live Preview

Home Designer — live per-viewer row composition, pinning & scheduling

Smart Collections — rule builder, generated posters & split preview workspace

Live Poster Studio & 24/7 Live TV Guide

Design versioned poster overlays (Cinema, Spotlight, Essential) with IMDb, Rotten Tomatoes, Letterboxd, and TMDB scores. Quality badges (4K, HDR, Dolby Vision, Atmos) are strictly truthful—rendered only when backed by observed media facts. In Live TV, combine M3U/XMLTV and Xtream feeds with 24/7 virtual channels generated from your own collections.

Live Poster Overlay Studio

Metadata & Poster Studio — pure-Go versioned badges from verified release facts

Live TV & Virtual Channels — 24/7 collection channels, M3U/XMLTV & multi-source failover

Adaptive Media Cache & Zero-CLI High Availability

Dial your storage footprint from Pass-through (0 GiB) to Everyday (32 GiB) up to Edge Library (20 TiB) with household-aware movie preloading and rolling TV episode windows on local disk or a Shared NAS pool. Start on standalone SQLite, and when you're ready, migrate to an active-active PostgreSQL cluster through a guided wizard—complete with automatic connection-budget partitioning, leader election, and zero-downtime rolling updates.

Adaptive Media Cache — rolling household shelves, warm windows & Shared NAS support

Cluster Manager — 1-click guided migration from SQLite to active-active PostgreSQL HA


Install in five minutes

Platform Download / Image Details
macOS 13+ Ether-<version>.dmg Universal menu-bar app (Apple Silicon & Intel) with bundled FFmpeg. (Ad-hoc signed: right-click → Open on first launch.)
Windows (x64) EtherSetup-<version>.exe Windows service + system tray app with bundled FFmpeg and automatic firewall rule.
Linux .deb / .rpm (amd64, arm64) Dedicated ether systemd service, hardware transcoding group setup (render/video), bundled FFmpeg.
Docker ghcr.io/braedonsaunders/ether:latest Multi-arch (amd64, arm64). Ready-made templates for Unraid, TrueNAS SCALE, Proxmox, and Synology in packaging/community.
services:
  ether:
    image: ghcr.io/braedonsaunders/ether:latest
    container_name: ether
    restart: unless-stopped
    network_mode: host            # enables LAN GDM auto-discovery in Plex apps
    environment:
      TZ: Etc/UTC
    volumes:
      - ./config:/config
      - ./cache:/cache            # select /cache during the setup wizard
    # devices: ["/dev/dri:/dev/dri"]   # optional: Intel QuickSync / VAAPI hardware transcoding

Open http://localhost:32400/ether/ and finish the 4-step wizard:

  1. Sign in with Plex and claim the server. It appears in every Plex app on your account immediately.
  2. Add a source: a Usenet provider + Newznab indexer, or a debrid account (Real-Debrid, TorBox, AllDebrid, Premiumize) + torrent indexer, Cardigann site or Stremio addon, or both.
  3. Choose a cache preset (an SSD with 32–50 GiB is plenty to start).
  4. Paste a free TMDB API key and optional integrations (Trakt, OpenSubtitles, local Ollama/LM Studio).

Full documentation: Installation & Clustering Guide · Owner & User Guide · NAS & Homelab Templates


Questions you're about to ask

Do I need Plex Pass?

At home on your local network, no. To stream outside your home, yes. Ether follows Plex's rules just like a standard Plex Media Server: remote playback requires Plex Pass on the server owner's account or a Remote Watch Pass on the viewer's account.

Ether never emulates, unlocks, or bypasses Plex Pass or any paid Plex feature. Every viewer signs in through plex.tv and receives the exact entitlements Plex grants their account. If you love the official Plex apps, support Plex.

Which Plex apps work?

Every official Plex client: Apple TV, iPhone, iPad, Android, Android TV / Nvidia Shield, Fire TV, Roku, PlayStation, Xbox, Smart TVs (LG, Samsung, VIDAA), Plex Desktop, and Plex Web. To the client app, Ether is simply a Plex Media Server on your account.

Does it download whole movies? How much disk space do I need?

By default, no. Ordinary playback fetches only the byte ranges the player is watching plus a bounded read-ahead window (a 20 Mbit/s stream uses ~150 MB per minute) into a self-trimming disk cache. If you have a tiny disk, choose Pass-through. If you have terabytes to spare, you can opt into the Managed Shelf, which proactively preloads top household movies and a rolling window of next TV episodes during idle hours.

Won't this hammer my indexers and Usenet providers?

Ether is engineered specifically not to:

  • Zero background crawling: Indexers are queried only when a viewer opens/plays a title, when the next episode is about to air/play, or on a slow schedule for watchlisted items.
  • Detail-page reuse: Opening a detail page resolves, probes, and caches the keyframe index for 10 minutes—pressing Play reuses that work with zero extra queries.
  • Quota & Retry-After discipline: Per-indexer daily API and download caps are tracked durably across restarts; 429 and Retry-After responses pause that indexer cleanly while falling back to others.
  • Minimal health sampling: Health checks sample ~12 spread articles and bail out on the first confirmed miss across all providers.

Always check your indexer's terms of service—some private indexers restrict streaming engines.

Will my debrid account get flagged for multiple IPs?

No. Every stream is fetched by your Ether server and served from Ether to the viewer. Your debrid provider only ever sees your Ether server's IP address, even when family members stream remotely from their phones or TVs. (If you run a multi-node cluster, keep your nodes behind the same WAN IP; Ether's Cluster page warns you if nodes egress from different public IPs.)

How does Ether treat my Real-Debrid account?

Real-Debrid no longer reports which torrents it holds, so Ether adds only the top few candidates for a title you open, keeps the ones that are ready instantly and removes the rest. Answers are remembered so the same torrent isn't checked again, API calls are limited to four at a time, and rate limits pause the account cleanly. Files Real-Debrid refuses to serve (infringing_file) are removed and skipped in favour of the next release; when it refuses new torrents in a row, Ether pauses adding for a few minutes rather than retrying. A Stremio addon configured with your key can mark which torrents are cached, which saves those checks.

Can I run Ether alongside my existing Plex Media Server?

Yes—and if you have local media files on disk, that's the recommended setup. Run them on separate machines or put Ether on a different port, and both servers appear side-by-side in your Plex app. You can also import your existing PMS watch history, ratings, collections, and playlists into Ether in read-only mode.

What does Ether phone home to?

Nothing. There is zero telemetry or analytics. Ether communicates only with plex.tv (authentication, claiming, sharing, certificates), TMDB, the providers/indexers/services you configure, and GitHub's release feed when checking for updates.


Where it stands today

Ether is backed by 2,600+ offline unit, fault-injection and fuzz tests, recorded protocol conformance checks against real Plex Media Server fixtures (internal/pmsconform), and hardware transcoding verification across Apple VideoToolbox, NVIDIA NVENC (plus optional Windows RTX Video Super Resolution), Intel QuickSync, and VAAPI.

Capability Status
TMDB Catalogue, Browse, Conversational Search & Collections Working
Personalization Engine, Taste Models & Home Designer Working
Usenet Streaming Engine, PAR2 Oracle, Health Checks & Failover Working
Debrid Streaming (Real-Debrid, TorBox, AllDebrid, Premiumize) Working
Official Plex Apps (TV, Mobile, Desktop, Web) Working
Pure-Go Poster Overlays, Skip Markers & Subtitle Alignment Working
Hardware Transcoding & Optional Windows NVIDIA RTX Video VSR Working
Live TV Guide, Virtual Channels & M3U/XMLTV/Xtream Working
PostgreSQL Active-Active HA Clustering & Shared NAS Cache Working

Current boundaries:

  • Usenet archives must be store-mode (m0, plain or password-encrypted RAR4/RAR5/7z); compressed archives and RAR-wrapped torrents are skipped during resolution.
  • NVIDIA RTX Video Super Resolution (nvenc-ngx-vsr) requires native Windows, an NVIDIA RTX GPU, and NVEncC64 9.38 with NGX DLLs (installed automatically when enabled unless a custom path is configured), is off by default, targets SDR H.264 HLS/DASH streams within configured height/concurrency bounds, and falls back to ordinary ABR renditions when bandwidth or concurrency requires it.
  • No Plex Relay support—remote viewers connect directly via UPnP/NAT-PMP, a port forward, or your reverse proxy.
  • No DVR recording.

Ether is an independent, clean-room implementation of the HTTP protocol used by compatible media client applications. It contains no proprietary Plex code, assets, or binaries. Ether ships no media content, no Usenet providers, no indexers, no Cardigann site definitions, no debrid accounts, and no third-party API keys. Owners supply their own accounts and are solely responsible for their configuration and compliance with applicable laws and service terms. See LEGAL.md.

"Plex" is a trademark of Plex, Inc. Ether is not affiliated with, sponsored by, or endorsed by Plex, Inc. This product uses the TMDB API but is not endorsed or certified by TMDB.

GPL-3.0 License · Legal · Third-Party Notices

Directories

Path Synopsis
cmd
ether command
Command ether runs the Ether server: a Plex Media Server-compatible front end over a TMDB catalogue, streaming from Usenet on demand.
Command ether runs the Ether server: a Plex Media Server-compatible front end over a TMDB catalogue, streaming from Usenet on demand.
ether-livebench command
Command ether-livebench measures time-to-playable against real services: it resolves a title over the owner's indexers and Usenet providers, opens it, reads the first bytes, seeks, and probes it.
Command ether-livebench measures time-to-playable against real services: it resolves a title over the owner's indexers and Usenet providers, opens it, reads the first bytes, seeks, and probes it.
ether-release-sign command
Command ether-release-sign manages Ether's release-signing keys and signs update manifests.
Command ether-release-sign manages Ether's release-signing keys and signs update manifests.
ether-repairbench command
ether-repairbench performs explicitly invoked live experiments; ordinary Go tests remain offline.
ether-repairbench performs explicitly invoked live experiments; ordinary Go tests remain offline.
ether-transcodebench command
Command ether-transcodebench measures Ether's real transcode.Manager (probe, explicit decision, simultaneous HLS sessions consumed through ServeSegment) against a local fixture served over loopback range HTTP.
Command ether-transcodebench measures Ether's real transcode.Manager (probe, explicit decision, simultaneous HLS sessions consumed through ServeSegment) against a local fixture served over loopback range HTTP.
ether-tray command
Command ether-tray is Ether's tray / menu-bar companion: it shows server status, opens the web UI, starts/stops the service, checks the signed update feed (notify only: the server installs updates itself) and can launch at login.
Command ether-tray is Ether's tray / menu-bar companion: it shows server status, opens the web UI, starts/stops the service, checks the signed update feed (notify only: the server installs updates itself) and can launch at login.
pmsdiff command
pmsdiff records and compares Plex Media Server HTTP responses.
pmsdiff records and compares Plex Media Server HTTP responses.
usenetbench command
usenetbench generates a deterministic local NNTP fixture and downloads it through Ether's production fetcher or streaming engine.
usenetbench generates a deterministic local NNTP fixture and downloads it through Ether's production fetcher or streaming engine.
internal
admin
Package admin is Ether's owner-facing HTTP surface: the JSON API under /ether/api/ and the embedded React SPA (setup wizard, dashboard, settings, logs, resolver traces) served under /ether/.
Package admin is Ether's owner-facing HTTP surface: the JSON API under /ether/api/ and the embedded React SPA (setup wizard, dashboard, settings, logs, resolver traces) served under /ether/.
app
Package app wires Ether's components into one running server: the Plex front end and the owner UI on one port, and the background services (catalogue sync, plex.tv registration, prefetch, LAN discovery) behind it.
Package app wires Ether's components into one running server: the Plex front end and the owner UI on one port, and the background services (catalogue sync, plex.tv registration, prefetch, LAN discovery) behind it.
archive
Package archive reads the headers of RAR (4.x and 5.x) and 7z archives and maps each inner file onto byte ranges (extents) of the archive volumes, so that store-mode members can be streamed (with native decryption when needed) out of the volumes without extracting anything.
Package archive reads the headers of RAR (4.x and 5.x) and 7z archives and maps each inner file onto byte ranges (extents) of the archive volumes, so that store-mode members can be streamed (with native decryption when needed) out of the volumes without extracting anything.
archive/archivetest
Package archivetest builds small RAR 4.x / RAR 5.0 archives (and Copy-mode 7z archives) for tests.
Package archivetest builds small RAR 4.x / RAR 5.0 archives (and Copy-mode 7z archives) for tests.
artwork
Package artwork serves and makes Ether's artwork: a caching proxy for TMDB images (memory LRU over a disk cache) and a pure-Go poster generator for collections (collage and backdrop treatments with the title set in the Go fonts).
Package artwork serves and makes Ether's artwork: a caching proxy for TMDB images (memory LRU over a disk cache) and a pure-Go poster generator for collections (collage and backdrop treatments with the title set in the Go fonts).
auth
Package auth implements core.Auth: it maps the X-Plex-Token a Plex app presents to an Ether user, and keeps the users table with per-user settings (stream limit, content rating cap, languages, sections).
Package auth implements core.Auth: it maps the X-Plex-Token a Plex app presents to an Ether user, and keeps the users table with per-user settings (stream limit, content rating cap, languages, sections).
availability
Package availability discovers releases incrementally and spends a bounded background allowance validating useful candidates.
Package availability discovers releases incrementally and spends a bounded background allowance validating useful candidates.
backup
Package backup creates integrity-checked, portable snapshots without copying live WAL files.
Package backup creates integrity-checked, portable snapshots without copying live WAL files.
cachefill
Package cachefill maintains an opt-in, bounded local shelf of complete media sources.
Package cachefill maintains an opt-in, bounded local shelf of complete media sources.
cardigann
Package cardigann runs owner-supplied indexer definitions written in the Cardigann YAML format (the format Prowlarr and Jackett use for their built-in sites).
Package cardigann runs owner-supplied indexer definitions written in the Cardigann YAML format (the format Prowlarr and Jackett use for their built-in sites).
catalog
Package catalog implements core.Catalog: a SQLite mirror of a filtered TMDB slice plus on-demand fetches for anything else.
Package catalog implements core.Catalog: a SQLite mirror of a filtered TMDB slice plus on-demand fetches for anything else.
cluster
Package cluster is Ether's multi-node runtime: node identity, liveness heartbeats, leader election and a small cross-node event bus.
Package cluster is Ether's multi-node runtime: node identity, liveness heartbeats, leader election and a small cross-node event bus.
clusterbus
Package clusterbus is the small surface components use to take part in a cluster: publishing and receiving events on the cluster bus, knowing their own node ID and which nodes are alive, and dropping in-memory caches when another node writes the shared database (Invalidator).
Package clusterbus is the small surface components use to take part in a cluster: publishing and receiving events on the cluster bus, knowing their own node ID and which nodes are alive, and dropping in-memory caches when another node writes the shared database (Invalidator).
clusterconfig
Package clusterconfig keeps the settings and identity material that the nodes of an Ether cluster share in the owner's PostgreSQL database:
Package clusterconfig keeps the settings and identity material that the nodes of an Ether cluster share in the owner's PostgreSQL database:
collections
Package collections is Ether's collection engine.
Package collections is Ether's collection engine.
config
Package config is Ether's owner-editable settings, stored as JSON in the data directory.
Package config is Ether's owner-editable settings, stored as JSON in the data directory.
core
Package core holds the domain types and the interfaces between Ether's components.
Package core holds the domain types and the interfaces between Ether's components.
debrid
Package debrid streams torrent releases through owner-configured debrid services (Real-Debrid, TorBox, AllDebrid, Premiumize).
Package debrid streams torrent releases through owner-configured debrid services (Real-Debrid, TorBox, AllDebrid, Premiumize).
episodeorder
Package episodeorder provides presentation-only TV ordering.
Package episodeorder provides presentation-only TV ordering.
extras
Package extras lists and resolves trailers and other clips attached to catalogue titles (Plex "Extras" and Cinema Trailers).
Package extras lists and resolves trailers and other clips attached to catalogue titles (Plex "Extras" and Cinema Trailers).
faillog
Package faillog logs a repeating background failure (a heartbeat or sync loop that cannot reach the database) without flooding the log: the first failure is logged at WARN, later ones are summarised at most once per interval, and the recovery is logged once at INFO.
Package faillog logs a repeating background failure (a heartbeat or sync loop that cannot reach the database) without flooding the log: the first failure is logged at WARN, later ones are summarised at most once per interval, and the recovery is logged once at INFO.
flight
Package flight collapses concurrent calls for the same key into one execution whose result every caller shares.
Package flight collapses concurrent calls for the same key into one execution whose result every caller shares.
libraryfilter
Package libraryfilter evaluates owner catalogue exclusions without network access.
Package libraryfilter evaluates owner catalogue exclusions without network access.
livetv
Package livetv implements owner-defined virtual channels and IPTV playout.
Package livetv implements owner-defined virtual channels and IPTV playout.
llm
Package llm is an optional multi-provider chat client (OpenAI, Anthropic, Gemini, OpenRouter, Ollama, LM Studio, any OpenAI-compatible server, …) used for natural-language recommendation rows: "more like this" for a title and themed rows from a user's history ("Slow-burn sci-fi with a twist").
Package llm is an optional multi-provider chat client (OpenAI, Anthropic, Gemini, OpenRouter, Ollama, LM Studio, any OpenAI-compatible server, …) used for natural-language recommendation rows: "more like this" for a title and themed rows from a user's history ("Slow-burn sci-fi with a twist").
logfile
Package logfile provides Ether's on-disk logs: a size-rotated log file (stderr is discarded under a Windows service and unrotated under launchd) and the crash log that receives fatal runtime traces.
Package logfile provides Ether's on-disk logs: a size-rotated log file (stderr is discarded under a Windows service and unrotated under launchd) and the crash log that receives fatal runtime traces.
lru
Package lru provides a least-recently-used cache bounded by entry count and total cost.
Package lru provides a least-recently-used cache bounded by entry count and total cost.
markers
Package markers supplies release-duration-specific skip ranges.
Package markers supplies release-duration-specific skip ranges.
migrate
Package migrate performs read-only PMS discovery and reviewed, idempotent local imports.
Package migrate performs read-only PMS discovery and reviewed, idempotent local imports.
newznab
Package newznab implements core.Indexer against Newznab-compatible Usenet indexers, with per-indexer daily budgets and a result cache.
Package newznab implements core.Indexer against Newznab-compatible Usenet indexers, with per-indexer daily budgets and a result cache.
notify
Package notify provides durable, rule-filtered owner notifications.
Package notify provides durable, rule-filtered owner notifications.
nzb
Package nzb parses NZB documents: the XML index of a Usenet post that lists every file, its newsgroups and the message IDs of its segments (articles).
Package nzb parses NZB documents: the XML index of a Usenet post that lists every file, its newsgroups and the message IDs of its segments (articles).
overlays
Package overlays creates truthful, versioned poster variants in pure Go.
Package overlays creates truthful, versioned poster variants in pure Go.
par2
Package par2 parses PAR2 2.0 metadata and performs bounded GF16 recovery.
Package par2 parses PAR2 2.0 metadata and performs bounded GF16 recovery.
par2/par2test
Package par2test builds PAR2 2.0 metadata packets and index files for tests.
Package par2test builds PAR2 2.0 metadata packets and index files for tests.
personalize
Package personalize is Ether's Netflix-style personalization engine.
Package personalize is Ether's Netflix-style personalization engine.
playback
Package playback implements core.Playback: it binds a user, a client and a title to a resolved, open release, enforces stream limits, serves the source to clients (direct play) and to ffmpeg (a loopback HTTP server), fails over to another release mid-stream when articles go missing, and protects the releases of live and in-progress titles in the segment cache.
Package playback implements core.Playback: it binds a user, a client and a title to a resolved, open release, enforces stream limits, serves the source to clients (direct play) and to ffmpeg (a loopback HTTP server), fails over to another release mid-stream when articles go missing, and protects the releases of live and in-progress titles in the segment cache.
plex
Package plex is Ether's Plex Media Server front end: the HTTP API that official Plex apps (Web, iOS, Apple TV, Android, TVs) talk to.
Package plex is Ether's Plex Media Server front end: the HTTP API that official Plex apps (Web, iOS, Apple TV, Android, TVs) talk to.
plex/model
Package model holds the Plex Media Server response models and the encoder that renders one model as either PMS-style XML or PMS-style JSON.
Package model holds the Plex Media Server response models and the encoder that renders one model as either PMS-style XML or PMS-style JSON.
plexguid
Package plexguid maps verified external identities through Plex's metadata provider.
Package plexguid maps verified external identities through Plex's metadata provider.
plextv
Package plextv is Ether's plex.tv client: PIN sign-in, server claim, connection publishing, resources, shared users and their server access tokens, and plex.direct certificates.
Package plextv is Ether's plex.tv client: PIN sign-in, server claim, connection publishing, resources, shared users and their server access tokens, and plex.direct certificates.
pmsconform
Package pmsconform captures and compares the HTTP surface exposed by Plex Media Servers.
Package pmsconform captures and compares the HTTP surface exposed by Plex Media Servers.
prefetch
Package prefetch warms the segment cache in the background so the next episode and the resume point of in-progress titles start instantly.
Package prefetch warms the segment cache in the background so the next episode and the resume point of in-progress titles start instantly.
ratings
Package ratings caches licensed, owner-keyed rating data.
Package ratings caches licensed, owner-keyed rating data.
recommend
Package recommend supplies detail-page related rows.
Package recommend supplies detail-page related rows.
releaseparse
Package releaseparse parses scene and P2P release names into core.ReleaseInfo.
Package releaseparse parses scene and P2P release names into core.ReleaseInfo.
remote
Package remote handles Ether's network presence: LAN address enumeration, WAN IP detection, Plex connection URIs (plain IP and *.plex.direct), UPnP IGD and NAT-PMP port mapping, GDM LAN discovery and reachability probes.
Package remote handles Ether's network presence: LAN address enumeration, WAN IP detection, Plex connection URIs (plain IP and *.plex.direct), UPnP IGD and NAT-PMP port mapping, GDM LAN discovery and reachability probes.
resolver
Package resolver implements core.Resolver: it turns a catalogue title plus client capabilities into a health-checked release.
Package resolver implements core.Resolver: it turns a catalogue title plus client capabilities into a health-checked release.
retryafter
Package retryafter parses HTTP Retry-After values.
Package retryafter parses HTTP Retry-After values.
safety
Package safety persists owner policy and enforces it at Plex request boundaries.
Package safety persists owner policy and enforces it at Plex request boundaries.
schedule
Package schedule provides wall-clock deadlines for periodic background work.
Package schedule provides wall-clock deadlines for periodic background work.
segcache
Package segcache is Ether's on-disk cache of decoded Usenet segments.
Package segcache is Ether's on-disk cache of decoded Usenet segments.
service
Package service runs Ether as an operating-system service: systemd on Linux, launchd on macOS and the Service Control Manager on Windows, via github.com/kardianos/service.
Package service runs Ether as an operating-system service: systemd on Linux, launchd on macOS and the Service Control Manager on Windows, via github.com/kardianos/service.
spike
Package spike serves a handful of local video files as a Plex library so the Plex front end (internal/plex) can be tested against official Plex apps before the Usenet engine exists.
Package spike serves a handful of local video files as a Plex library so the Plex front end (internal/plex) can be tested against official Plex apps before the Usenet engine exists.
spike/cmd/ether-spike command
Command ether-spike serves local video files through Ether's Plex front end, for testing official Plex apps (and pmsdiff) before the Usenet engine is wired in.
Command ether-spike serves local video files through Ether's Plex front end, for testing official Plex apps (and pmsdiff) before the Usenet engine is wired in.
state
Package state implements per-user watch state and playlists over SQLite: core.State and core.Playlists.
Package state implements per-user watch state and playlists over SQLite: core.State and core.Playlists.
stats
Package stats records owner analytics from observed playback and provider data.
Package stats records owner analytics from observed playback and provider data.
store
Package store opens Ether's database and applies each component's migrations.
Package store opens Ether's database and applies each component's migrations.
stream
Package stream is Ether's stream engine: it turns an NZB into a seekable core.MediaSource without writing the full file anywhere.
Package stream is Ether's stream engine: it turns an NZB into a seekable core.MediaSource without writing the full file anywhere.
stremio
Package stremio searches Stremio stream addons for torrent releases.
Package stremio searches Stremio stream addons for torrent releases.
subtitles
Package subtitles fetches missing subtitle languages from OpenSubtitles and serves them as external (sidecar) tracks.
Package subtitles fetches missing subtitle languages from OpenSubtitles and serves them as external (sidecar) tracks.
sysload
Package sysload samples this machine's load for the owner Overview: CPU, memory, network throughput, GPU (when the platform reports it) and Ether's own CPU and memory.
Package sysload samples this machine's load for the owner Overview: CPU, memory, network throughput, GPU (when the platform reports it) and Ether's own CPU and memory.
tmdb
Package tmdb is a TMDB API v3 client with rate limiting, retries, request coalescing and an ETag/TTL response cache.
Package tmdb is a TMDB API v3 client with rate limiting, retries, request coalescing and an ETag/TTL response cache.
trackprefs
Package trackprefs persists viewer stream policy and show-specific choices.
Package trackprefs persists viewer stream policy and show-specific choices.
trakt
Package trakt is the optional per-user Trakt integration: OAuth device flow sign-in, scrobbling Ether watch events to Trakt, and pulling Trakt history / recommendations / watchlist back in as recommendation sources.
Package trakt is the optional per-user Trakt integration: OAuth device flow sign-in, scrobbling Ether watch events to Trakt, and pulling Trakt history / recommendations / watchlist back in as recommendation sources.
transcode
Package transcode wraps Ether's bundled ffmpeg: discovery, hardware encoder detection, probing, the direct play / remux / transcode decision and HLS and MPEG-DASH sessions.
Package transcode wraps Ether's bundled ffmpeg: discovery, hardware encoder detection, probing, the direct play / remux / transcode decision and HLS and MPEG-DASH sessions.
transcodebench
Package transcodebench implements a reproducible benchmark harness that drives the real transcode.Manager (probe, decision, HLS sessions and ServeSegment) against a loopback range-capable HTTP source serving a local fixture file.
Package transcodebench implements a reproducible benchmark harness that drives the real transcode.Manager (probe, decision, HLS sessions and ServeSegment) against a loopback range-capable HTTP source serving a local fixture file.
updater
Package updater implements Ether's signed self-update feed.
Package updater implements Ether's signed self-update feed.
usenet
Package usenet is Ether's Usenet layer: an NNTP client, per-provider connection pools with priority scheduling and circuit breakers, and a multi-provider fetcher that implements core.ArticleFetcher with primary-first ordering and backfill from block accounts.
Package usenet is Ether's Usenet layer: an NNTP client, per-provider connection pools with priority scheduling and circuit breakers, and a multi-provider fetcher that implements core.ArticleFetcher with primary-first ordering and backfill from block accounts.
usenet/nntptest
Package nntptest provides an in-memory NNTP server for tests across Ether: articles keyed by message-id (yEnc-encoded on the way in), optional AUTHINFO, TLS, missing articles, latency, a connection limit and fault injection, plus Post, which uploads files as multipart yEnc segments and returns a matching NZB document.
Package nntptest provides an in-memory NNTP server for tests across Ether: articles keyed by message-id (yEnc-encoded on the way in), optional AUTHINFO, TLS, missing articles, latency, a connection limit and fault injection, plus Post, which uploads files as multipart yEnc segments and returns a matching NZB document.
watchlist
Package watchlist ingests authorized viewers' watchlists and lazily checks their release availability.
Package watchlist ingests authorized viewers' watchlists and lazily checks their release availability.
yenc
Package yenc implements the yEnc binary encoding used for Usenet binary posts (http://www.yenc.org/yenc-draft.1.3.txt): a fast streaming decoder with =ybegin/=ypart/=yend parsing and CRC32 verification, and an encoder used by tests and the fake NNTP server.
Package yenc implements the yEnc binary encoding used for Usenet binary posts (http://www.yenc.org/yenc-draft.1.3.txt): a fast streaming decoder with =ybegin/=ypart/=yend parsing and CRC32 verification, and an encoder used by tests and the fake NNTP server.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL