Year in Review for Plex Media Server
Obzorarr is a "Wrapped for Plex" application that syncs viewing history from your Plex Media Server and generates yearly statistics with an animated slideshow presentation - similar to Spotify Wrapped. It doesn't require Tautulli; it only relies on the Plex API.
- Yearly Statistics — Total watch time, top movies, shows, and genres
- Animated Slideshow — Beautiful, interactive presentation of your viewing habits
- Watch Patterns — Monthly and hourly distribution charts
- Percentile Rankings — See how you compare to other users on your server
- Plex OAuth — Secure authentication with your Plex account
- Automatic Sync — Scheduled background sync of viewing history
- AI Fun Facts — Optional AI-generated personalized insights
Found a bug or have a feature request? Please submit issues and feature requests to the obzorarr-docker repository rather than this repository. This ensures your report reaches the maintainers monitoring issue tracking across the project.
Wrapped Presentation
| Total Time | Top Movies |
|---|---|
![]() |
![]() |
| Top Shows | Genres |
|---|---|
![]() |
![]() |
| Percentile Ranking | Fun Facts |
|---|---|
![]() |
![]() |
| Summary | Share |
|---|---|
![]() |
![]() |
| Component | Technology |
|---|---|
| Runtime | Bun |
| Framework | SvelteKit + Svelte 5 |
| Database | SQLite (Drizzle ORM) |
| Styling | UnoCSS + shadcn-svelte |
| Animation | GSAP + Motion |
Docker (Recommended) — Image Repo
services:
obzorarr:
container_name: obzorarr
image: ghcr.io/engels74/obzorarr-docker
ports:
- 3000:3000
environment:
- PUID=1000
- PGID=1000
- UMASK=002
- TZ=Etc/UTC
# Optional: lock Plex connection at the env layer. You can also leave
# these unset and configure the server from the admin UI after onboarding.
# - PLEX_SERVER_URL=http://plex-url-here:32400
# - PLEX_TOKEN=your-plex-token-here
volumes:
- /<host_folder_config>:/configReplace /<host_folder_config> with your desired config path. Access the web UI at http://localhost:3000 to complete setup.
git clone https://github.com/engels74/obzorarr.git
cd obzorarr
cp .env.example .env
bun install
bun run devNote on
.envin local dev.bun run devdoes not auto-load.env, so anyPLEX_SERVER_URL/OPENAI_*values you put there are ignored — local dev configures the server through onboarding and the admin UI (values stored in the SQLite DB). Environment-variable precedence (and the "Locked by environment variable" UI) applies to Docker/production, where the container passes the vars into the process. To exercise env-precedence locally (e.g. to see an env-locked field render itsENVbadge), runbun run dev:env, which loads.envvia--env-file.
This project is licensed under the GNU Affero General Public License v3.0.












