github ghltshubh/mediashelf v0.1.11
MediaShelf v0.1.11

3 hours ago
docker run -d -p 8000:8000 -v mediashelf-data:/data --restart unless-stopped \
  ghcr.io/ghltshubh/mediashelf:v0.1.11

Everything since v0.1.0. Tags v0.1.1–v0.1.10 shipped images but were never published as releases; this one covers the lot.

Watchlists

  • Save titles in the app with + Want to watch on any title page — no tooling needed. Titles you save are stored apart from imported ones, so an import can never delete them.
  • Paste or upload a list in Settings → Plugins: a service's official data export, a Letterboxd/IMDb CSV, or a plain Title (Year) list.
  • A companion browser extension (Chrome + Firefox) copies your "My List" across from ten streaming services in one click. It installs separately and always will — your browser holds those sessions, your server doesn't.
  • Import safety: a full-state sync with an empty payload is refused rather than wiping the list, over-limit imports report what was dropped, and the year is part of the dedupe key so two films sharing a title stay two rows.

Discovery

  • "Trending this week" from TMDB, on every install, no extra key.
  • "Popular right now" now fills itself from the weekly Top 10 Netflix publishes as open data — previously this rail could only be filled by tooling that was never shipped, so most installs saw it empty.
  • "Leaving soon" was removed. It had never worked: nothing ever wrote a row.

Episodes and availability

  • Episode tracking: the season list sits open on a show's page — tick episodes or whole seasons, with a Continue watching rail leading the shelf.
  • Shows sort into not started / watching / caught up / seen, so a running show you're up to date on steps aside until a new episode airs.
  • By season availability for shows whose seasons sit on different services.
  • Marking is manual by necessity: MediaShelf links out and never sees playback.

Interface

  • Title pages use the full width on large screens — availability sits beside the cast and episode list instead of below the fold.
  • Onboarding shows only the services you ticked, explains why most have nothing to connect to, and no longer balloons its service grid mid-setup.
  • Settings service tiles do one thing each; "Track episodes" is a real button on touch, where hover doesn't exist.

Under the hood

  • Releases build each architecture on its own runner instead of emulating arm64 — about 2 minutes instead of hours, after one release hung for five.
  • Docker layers stopped reinstalling every Python dependency on each build.
  • The watchlist importer address is a setting rather than a hardcoded 127.0.0.1, so it works when MediaShelf runs on a NAS.

Note: tag v0.1.3 has no image — its build hung and was cancelled; its contents shipped in v0.1.4.

Don't miss a new mediashelf release

NewReleases is sending notifications on new releases.