Scrob
Self-hosted media tracking app that syncs watch history from Jellyfin, Plex, and Emby
Alternative to: letterboxd, trakt
Scrob is a self-hosted media tracking app that automatically syncs your watch history, ratings, and personal lists from Jellyfin, Plex, Emby, Nuvio, and Stremio libraries, acting as your own private Letterboxd plus Trakt. It tracks movies, TV shows, and episodes with no manual logging required, and offers a progressive web app interface installable on any device.
Scrob Docker Compose example
Self-host Scrob on your own server, homelab, or VPS starting from this Docker Compose example.
It runs Scrob in Docker containers using the official postgres:16-alpine, bellamy/scrob:latest images, with persistent volumes and automatic restarts preconfigured.
Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.
services:
scrob-db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: "scrob"
# Password for the bundled PostgreSQL database.
POSTGRES_PASSWORD: "changeme"
POSTGRES_DB: "scrob"
volumes:
- db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U scrob -d scrob"]
interval: 5s
timeout: 5s
retries: 10
scrob:
image: bellamy/scrob:latest
restart: unless-stopped
depends_on:
scrob-db:
condition: service_healthy
environment:
# Connection string to the PostgreSQL database (password must match POSTGRES_PASSWORD above).
DATABASE_URL: "postgresql+asyncpg://scrob:changeme@scrob-db:5432/scrob"
# JWT signing key. Generate with: openssl rand -hex 32
SECRET_KEY: "changeme"
# Allow new users to register. The first user can always register regardless of this setting.
ENABLE_REGISTRATIONS: "false"
# Container timezone (e.g. Europe/Lisbon).
TZ: "UTC"
volumes:
- scrob_data:/app/backend/data
volumes:
db_data:
scrob_data:
Values set to changeme are required — replace them with your own
values before starting Scrob.
Prefer a managed setup? WinterFlow installs, configures, and updates Scrob for you using this same Docker Compose configuration.