A self-hosted, drop-in replacement for RPDB (Rating Poster Database). It generates movie and TV posters, logos, backdrops, and episode stills with rating badges overlaid on them — pulling artwork from TMDB (or optionally Fanart.tv) and aggregating ratings from IMDb, Rotten Tomatoes, Metacritic, Trakt, Letterboxd, MyAnimeList, MDBList, Roger Ebert, and FilmAffinity.
Website · GitHub · Docker Hub · GitHub Packages · Documentation
Note
This project is developed with the assistance of AI code generation tools. AI-generated code is reviewed and tested before being merged. If you hit any issues, please open an issue or a pull request.
Warning
This project is in active development. Expect breaking changes to the database schema and cache key format until a stable release. After updating you may need to clear your cache to drop orphaned entries — use the admin dashboard's Clear cache button (no need to delete the database volume).
A hosted version runs at openposterdb.com — no setup, just grab a free API key and point your media server at it.
OpenPosterDB runs as a single Docker container. You'll need a few free API keys first:
- TMDB (required) — artwork
- MDBList (recommended) — one key covers all 9 rating sources
- A random JWT secret for auth — generate one with
openssl rand -hex 32
# Copy the example env to the project root and fill in your keys
cp api/.env.example .env
# Edit .env — at minimum set TMDB_API_KEY, MDBLIST_API_KEY (or OMDB_API_KEY), and JWT_SECRET
docker compose up -ddocker run -d \
-p 3000:3000 \
-e TMDB_API_KEY=your_key \
-e MDBLIST_API_KEY=your_key \
-e JWT_SECRET=$(openssl rand -hex 32) \
-v openposterdb-cache:/data/cache \
-v openposterdb-db:/data/db \
pnrxa/openposterdbThen open http://localhost:3000 and create your admin account on first visit.
If you access the UI over plain HTTP (no TLS in front), add
-e COOKIE_SECURE=false— otherwise the browser drops the auth cookie and login appears broken.
See Configuration for the full list of environment variables (ratings sources, caching, logging, and more).
Grab an API key from the admin UI, then point your client at your instance:
- aiometadata — poster/backdrop/logo/episode URL templates
- Jellyfin — dedicated remote image provider plugin
- Plex — Custom Metadata Provider (PMS 1.43+)
Any client that fetches images by URL works too — see the API Reference.
Exposing OpenPosterDB to external users? Put it behind a reverse proxy with TLS, and optionally a CDN. The Deployment guide covers Caddy (auto-TLS) and Cloudflare (edge caching that shares one cache entry across users with identical settings).
- Multi-source ratings — Aggregates from MDBList (IMDb, RT Critics, RT Audience, Metacritic, Trakt, Letterboxd, MAL, the MDBList score, and Roger Ebert), optionally OMDb, and optionally Trakt directly (for episode-level ratings and as a standalone provider), and optionally FilmAffinity via a self-hosted filmaffinity-rest-api
- Multiple image sources — TMDB as the primary source for posters, logos, and backdrops, with Fanart.tv as an optional fallback (or preferred source). Supports language selection and textless posters from both sources
- Configurable per API key — Override image source, language, and textless settings per key, or set global defaults
- ID resolution — Accepts IMDb, TMDB, or TVDB IDs
- Multi-layer caching — In-memory (moka), filesystem, and SQLite metadata with background refresh and request coalescing
- Admin UI — Vue 3 web panel for API key management, poster settings, global configuration, and cache purging
- Auth — Argon2 password hashing, JWT access tokens, rotating refresh tokens, API key access for poster endpoints
- Connecting a Media Server — aiometadata, Jellyfin, Plex
- Configuration — all environment variables
- API Reference — endpoints, parameters, image sizes
- Deployment — reverse proxy and CDN
- Building from Source — running without Docker
- Architecture — caching internals for contributors
OpenPosterDB is made possible by these third-party services and projects:
Data & image providers — TMDB (movie/TV metadata and posters; this product uses the TMDB API but is not endorsed or certified by TMDB), MDBList (aggregated ratings), OMDb (alternative ratings for IMDb, RT, Metacritic), Fanart.tv (fan art, logos, backdrops), RPDB (the original project that inspired OPDB's API design), and Simple Icons (brand SVG icons).
Rating sources — IMDb, Rotten Tomatoes, Metacritic, Trakt, Letterboxd, and MyAnimeList.
See LICENSE.