YAMZ

YAMZ

Docker app from ZombifiedTurkey's Repository

Overview

YAMZ (Yet Another Media Zombie) is a good-looking browser for your movie and TV collection. Connect Plex or Jellyfin and get a poster wall with ratings, cast and photos, a Gaps page that finds what's missing from your franchises and TV seasons, Discover (Popular, Upcoming, Recent and Essentials by genre and decade), your own Lists, a release Calendar, Plex Watchlist sync, and one-click adding to Radarr and Sonarr. Everything is stored in /config and protected by its own sign-in. Open the WebUI and create your account on first run. Note: YAMZ is tested day to day with Plex. Jellyfin support should work but still needs more real-world testing.

YAMZ — Yet Another Media Zombie

YAMZ — Yet Another Media Zombie

A "vibe coded" media manager.

▶ Try the live demo — runs entirely in your browser with a sample library (sign in with demo / zombies123).

A good-looking, self-hosted browser for your movie and TV collection. Point it at Plex or Jellyfin and get a poster wall with ratings, cast and photos — plus tools for finding what you're missing, discovering what to watch next, tracking releases, and sending titles to Radarr and Sonarr.

https://github.com/user-attachments/assets/50e57c1c-911d-4a4a-8e89-16c3db479537

Jellyfin support is still being tested. YAMZ is developed and tested day to day against Plex. Jellyfin uses Jellyfin's documented API and should work, but it hasn't had much real-world testing yet. If something doesn't look right with Jellyfin, please open an issue and say which Jellyfin version you're on.

Run it as a Docker container (Unraid Community Applications, Synology, any Linux box) and use it from any browser on your network or through a reverse proxy — or just open the single YAMZ.html file.

Library Movie details
Gaps: collections Gaps: actors
Discover: Essentials Calendar

Features

  • Library — Plex and/or Jellyfin (Jellyfin still being tested, see the note above), or plain folders, merged and de-duplicated. Posters, genres, ratings from several sources, cast, photos and a Play in Plex/Jellyfin button.
  • TV — seasons and episodes you have vs. what exists, with episode lists and descriptions (via TVmaze).
  • Gaps — search for any movie or show and add it to a list, Plex Watchlist, Radarr or Sonarr; incomplete franchises/collections (missing films first), your most-watched actors and the films of theirs you don't own, and TV shows with missing seasons or episodes.
  • Discover — Popular, Upcoming and Recent (last 1–12 months) for movies or TV, filterable by genre. Pick a genre to unlock Essentials: the greatest titles in that genre, all time or by decade.
  • Lists — your own lists (marathons, shopping lists, films to lend a mate), plus your Plex Watchlist synced alongside.
  • Calendar — month or agenda view of upcoming releases for everything in Radarr, Sonarr, your lists and your Plex Watchlist, labelled Theatres, Streaming or Physical media (episodes for TV).
  • Connections — Plex Watchlist, Radarr and Sonarr (documented v3 API only: look up and add titles with your root folder, quality profile, tags and monitoring options).
  • Make it yours — dark, light, auto or Glass theme (frosted panels with an ambient glow that follows the poster you're on), 9 accent colours, 5 poster sizes, rounded or square corners, and a side menu that can auto-hide.
  • Server mode — built-in sign-in, settings shared across every device, backups, and requests to your LAN servers relayed by YAMZ (no CORS or mixed-content problems behind https).

No API keys are required. Metadata comes from Wikipedia/Wikidata and TVmaze; a free TMDB key gives richer data, TMDB-powered Discover lists (trending, release dates, audience-rated Essentials) and theatrical/digital/physical release dates.


Install with Docker

docker run -d --name yamz \
  -p 7979:7979 \
  -v /path/to/appdata/yamz:/config \
  -e PUID=1000 -e PGID=1000 -e TZ=Australia/Brisbane \
  --restart unless-stopped \
  ghcr.io/zombifiedturkey/yamz:latest

Then open http://<server-ip>:7979 and create your account.

Or with Compose — see docker-compose.yml.

Unraid

YAMZ is in Community Applications:

  1. Apps tab → search for YAMZ → Install.
  2. Check the settings (the defaults are fine for most people) → Apply.
  3. Click the YAMZ icon → WebUI, and create your account.
Installing the template by hand instead
  1. Open a terminal (the >_ icon at the top right of the Unraid web UI) and run:
    wget -O /boot/config/plugins/dockerMan/templates-user/my-YAMZ.xml \
      https://raw.githubusercontent.com/zombifiedturkey/YAMZ/main/unraid/yamz.xml
    
  2. Docker tab → Add Container → in the Template dropdown pick YAMZ (under User templates) → Apply.
  3. Click the YAMZ icon → WebUI, and create your account.

Appdata defaults to /mnt/user/appdata/yamz, running as 99:100 (nobody:users).

Settings (environment variables)

Variable Default What it does
PORT 7979 Port inside the container.
PUID / PGID 99 / 100 User/group YAMZ runs as and owns /config.
TZ Etc/UTC Timezone for logs.
YAMZ_AUTH on none turns off YAMZ's own sign-in — only if your reverse proxy already requires a login (Authelia, Authentik…).
YAMZ_TRUST_PROXY false true when behind a reverse proxy: secure cookies over https and real client IPs for sign-in rate-limiting.
YAMZ_ALLOW_SELF_SIGNED false true if Plex/Jellyfin/Radarr/Sonarr use https with self-signed certificates.
YAMZ_BASE_PATH (empty) Only if your proxy serves YAMZ under a sub-folder without stripping it, e.g. /yamz.
YAMZ_USER / YAMZ_PASSWORD (empty) Optional: create the first account automatically instead of the setup screen.
YAMZ_SESSION_DAYS 30 How long a sign-in lasts.

Reverse proxy

YAMZ works behind SWAG, Nginx Proxy Manager, Traefik or Caddy on its own (sub)domain. Set YAMZ_TRUST_PROXY=true.

yamz.example.com {
    reverse_proxy 192.168.1.10:7979
}
location / {
    proxy_pass http://192.168.1.10:7979;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Because YAMZ relays requests to Plex, Jellyfin, Radarr and Sonarr itself, those servers can stay on plain http on your LAN — the browser only ever talks to YAMZ.


The standalone file

YAMZ.html is the whole app in one file. Download it, open it in Chrome, Edge or Firefox, and connect your library — no install. Everything is stored in that browser.

  • To move to the Docker version: Settings → Backup → Download backup in the file, then Restore backup in the server.
  • Browsers limit what a local file can reach. If Jellyfin, Radarr or Sonarr connections fail from the file, use the Docker version.

Data & privacy

  • Server mode keeps everything in /config: state.json (settings, lists, connections, caches), auth.json (account, scrypt-hashed password) and sessions.json (hashed sign-in tokens). Back up the folder, or use Settings → Backup.
  • Server addresses, API keys and tokens are stored on your server and only delivered to signed-in browsers. They are never sent anywhere except to the servers they belong to.
  • Lookups go directly from your browser to Wikipedia, Wikidata, TVmaze and (if you add a key) TMDB/OMDb.
  • Forgot your password? Stop the container, delete auth.json from your appdata folder, start it again and create a new account. Your library and settings are kept.

Live demo

The demo at https://zombifiedturkey.github.io/YAMZ/ is the real app with a service worker standing in for the YAMZ server, Plex, Radarr, Sonarr, Wikidata and TVmaze (demo/sw.js). Everything stays in your browser; Reset in the corner puts it back to the start. It's rebuilt on every push to main by .github/workflows/pages.yml; demo/seed.json is the starting library.

Development

npm run dev          # http://localhost:7979, data in ./config

No dependencies — Node 20+ only. The UI is YAMZ.html; the server is server/server.js. Images are built for linux/amd64 and linux/arm64 by GitHub Actions and published to ghcr.io on every push to main (:edge) and every v* tag (:latest, :1.1.0, :1.1).

Found a bug? Got an idea?

Please open an issue: there's a quick form for bug reports and one for feature ideas. YAMZ is new and vibe-coded, so reports are genuinely helpful. Please leave API keys, tokens and passwords out of anything you paste.

Credits

Metadata: Wikipedia & Wikidata (CC BY-SA / CC0), TVmaze (CC BY-SA), optional TMDB and OMDb. This product uses the TMDB API but is not endorsed or certified by TMDB. Not affiliated with Plex, Jellyfin, Radarr or Sonarr.

License

MIT

Related apps

Details

Repository
ghcr.io/zombifiedturkey/yamz:latest
Last Updated2026-10-16
First Seen2026-10-16

Runtime arguments

Web UI
http://[IP]:[PORT:7979]/
Network
bridge
Shell
sh
Privileged
false

Template configuration

WebUI portPorttcp

Port for the YAMZ web interface.

Target
7979
Default
7979
Value
7979
AppdataPathrw

Where YAMZ keeps its settings, lists, account and cache.

Target
/config
Default
/mnt/user/appdata/yamz
Value
/mnt/user/appdata/yamz
PUIDVariable

User ID YAMZ runs as (Unraid default: 99 = nobody).

Default
99
Value
99
PGIDVariable

Group ID YAMZ runs as (Unraid default: 100 = users).

Default
100
Value
100
Sign-inVariable

Keep 'on'. Choose 'none' ONLY if a reverse proxy in front of YAMZ already requires a login (Authelia, Authentik, etc.).

Target
YAMZ_AUTH
Default
on|none
Value
on
Behind a reverse proxyVariable

Set to true when you reach YAMZ through a reverse proxy (SWAG, Nginx Proxy Manager, Traefik, Caddy). Enables secure cookies over https and correct client addresses for sign-in protection.

Target
YAMZ_TRUST_PROXY
Default
false|true
Value
false
Allow self-signed certificatesVariable

Set to true if your Plex, Jellyfin, Radarr or Sonarr use https with a self-signed certificate.

Target
YAMZ_ALLOW_SELF_SIGNED
Default
false|true
Value
false
Base pathVariable

Only needed if your reverse proxy serves YAMZ under a sub-folder (e.g. /yamz) WITHOUT stripping it. Leave empty otherwise.

Target
YAMZ_BASE_PATH
Initial usernameVariable

Optional. Creates this account on first start instead of the in-browser setup screen.

Target
YAMZ_USER
Initial passwordVariable

Optional. Password for the initial account (at least 8 characters). You can remove it after the first start.

Target
YAMZ_PASSWORD