docker run -d -p 8000:8000 -v mediashelf-data:/data --restart unless-stopped \
ghcr.io/ghltshubh/mediashelf:v0.1.11Everything 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.