Tasterr customization fork. Upstream: https://github.com/ZacharyArthur/tasterr
  • Python 69.6%
  • TypeScript 28.1%
  • JavaScript 1.4%
  • Shell 0.3%
  • Dockerfile 0.2%
  • Other 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
techfather 4cdaed4fb7
All checks were successful
security / advisories (push) Successful in 14s
image / smoke (push) Successful in 28s
image / publish (push) Successful in 3s
Merge pull request #9
2026-10-18 14:07:32 -07:00
.devcontainer feat: improve tooling, Plex recovery, and discovery rails 2026-08-29 19:24:45 -04:00
.github ci: run tasterr checks on the local Forgejo runner 2026-10-18 08:36:05 -07:00
backend perf(home): cut cold home-feed latency from 3.9s to 1.5s 2026-10-18 15:47:35 -05:00
braid chore: track repo map, ignore only braid reviews 2026-10-12 01:45:06 -04:00
docs chore: prepare v2.3.1 release 2026-10-08 20:42:05 -04:00
frontend feat(search): fill the empty search page with rows instead of three 2026-10-18 15:57:21 -05:00
openspec feat: route requests to matching media libraries 2026-10-18 08:10:21 -05:00
ops/seerr-routing feat: route requests to matching media libraries 2026-10-18 08:10:21 -05:00
scripts feat: prepare Tasterr for public v1 release 2026-07-25 21:48:45 -04:00
.dockerignore feat: organize settings and expose Seerr-backed access 2026-10-18 12:21:54 +00:00
.env.example feat: add household discovery exclusions 2026-10-04 21:34:11 -04:00
.gitattributes chore: bootstrap founding docs and project scaffolding 2026-07-01 22:47:07 -04:00
.gitignore chore: track repo map, ignore only braid reviews 2026-10-12 01:45:06 -04:00
AGENTS.md feat: add household discovery exclusions 2026-10-04 21:34:11 -04:00
CLAUDE.md chore: bootstrap founding docs and project scaffolding 2026-07-01 22:47:07 -04:00
CODE_OF_CONDUCT.md chore: harden repository and release automation (#8) 2026-07-26 21:24:12 -04:00
CONTRIBUTING.md feat: add household discovery exclusions 2026-10-04 21:34:11 -04:00
docker-compose.seerr-network.yml feat: harden and prepare v1.0 release 2026-07-14 20:42:34 -04:00
docker-compose.yml feat: prepare Tasterr for public v1 release 2026-07-25 21:48:45 -04:00
Dockerfile feat: organize settings and expose Seerr-backed access 2026-10-18 12:21:54 +00:00
justfile feat: add Plex-aware personalization (#20) 2026-08-28 19:36:46 -04:00
LICENSE feat: prepare Tasterr for public v1 release 2026-07-25 21:48:45 -04:00
README.md chore: prepare v2.3.1 release 2026-10-08 20:42:05 -04:00
SECURITY.md chore: prepare v2.3.0 release 2026-10-06 17:37:02 -04:00

Tasterr logo

Tasterr

Self-hosted discovery for TMDB and Seerr, with a learned taste profile for every household member.

Gate Latest release GHCR container License: AGPL-3.0-only

Tasterr is a self-hosted, Netflix-style discovery front end for a household media stack. It combines the TMDB catalog with Seerr identity, library state, and requests, then learns a separate taste profile for each signed-in user.

The current source supports Plex or local Seerr sign-in, composed discovery rails, search, title details, availability badges, requests attributed to the signed-in member, per-user taste signals and recommendations, and admin-managed regions, services, rails, and appearance. Plex-backed sessions also learn from bounded watch history, offer Continue Watching, and can request an ephemeral household blend; low-correlation picks keep discovery broad. These features need no Plex URL or token configuration: they reuse the encrypted token created by Plex sign-in and disappear cleanly for local sessions or when Plex is unavailable.

Tasterr intentionally does not bundle Seerr, start or control playback, persist raw history or Plex progress, persist household groups, or run more than one process.

Screenshots

Tasterr personalized discovery home

Tasterr title details with trailer and request controls Tasterr search results with availability

Quick start with an existing Seerr

Prerequisites are Docker with Compose, a running Seerr instance, a TMDB v3 API key, and a Seerr API key. A shared Docker network is not required when Seerr is reachable through a routable LAN hostname or address.

  1. Copy .env.example to .env.

  2. Set SEERR_INTERNAL_URL to a URL reachable from inside the Tasterr container, such as http://seerr.home.arpa:5055. Set SEERR_EXTERNAL_URL to the URL household browsers use for Seerr.

  3. Fill TMDB_API_KEY, SEERR_API_KEY, and a randomly generated TASTERR_SECRET_KEY.

  4. Start and verify Tasterr:

    docker compose up -d --build
    docker compose ps
    curl --fail http://127.0.0.1:8000/api/v1/health
    

Open http://127.0.0.1:8000, sign in with an existing Seerr account, and use the Settings screen as a Seerr administrator to select the region, streaming services, rails, theme, and accent. SQLite migrations run automatically on first boot.

Compose publishes Tasterr on host loopback by default. For intentional direct LAN access, set TASTERR_HTTP_PORT=8000 (or a specific LAN IP and port) in .env and keep the host firewall closed to the public internet. Internet-facing deployments must use a TLS reverse proxy or tunnel; see the configuration guide.

When Seerr runs on this same Docker host in another Compose project, an optional external-network override is available; see the configuration guide. It is not used for Seerr on another host.

Run the published image

To deploy a release without cloning the repository, save this as compose.yaml and create .env from .env.example, using the five configuration values listed above. Pin the desired version from the Tasterr GHCR package:

services:
  tasterr:
    image: ghcr.io/zacharyarthur/tasterr:2.3.1
    restart: unless-stopped
    ports:
      - "127.0.0.1:8000:8000"
    env_file:
      - .env
    volumes:
      - tasterr-data:/data

volumes:
  tasterr-data:

Tasterr itself reads ordinary process environment variables and does not require a .env file. The example above asks Compose to load that file. If a service manager or container platform injects variables directly, set the same names on the Tasterr process/container and omit env_file. To use exported host variables with Compose, replace the env_file block with this explicit mapping:

    environment:
      - TMDB_API_KEY
      - SEERR_INTERNAL_URL
      - SEERR_EXTERNAL_URL
      - SEERR_API_KEY
      - TASTERR_SECRET_KEY

Host variables are not passed into a Compose service automatically. Add any optional variables from the configuration table to the mapping when needed.

docker compose pull
docker compose up -d
curl --fail http://127.0.0.1:8000/api/v1/health

Keep the loopback bind when using a reverse proxy or tunnel. Replace it with a specific LAN bind only when direct household-network access is intentional.

Living documentation

  • Configuration and operations: every variable, proxy/TLS, first boot, degraded modes, backups, upgrades, rollback, and troubleshooting.
  • Architecture: process and module boundaries, auth/request/ taste flows, storage, caches, and generated API types.
  • Security policy: supported releases and private vulnerability reporting. The developer threat model lives in docs/SECURITY.md.
  • Contributing guide: issue reporting, development setup, change workflow, and pull request expectations.
  • Code of Conduct: expected behavior and enforcement.
  • Release procedure: deterministic checks, audits, live contracts, image verification, and rollback.

The living OpenSpec specifications under openspec/specs/ define current behavior. The documents under docs/PRD.md and docs/SPEC.md preserve the founding rationale and are intentionally frozen.

License

Tasterr is licensed under the GNU Affero General Public License v3.0 only.