Get MediaSurv running on your server with Docker Compose. From zero to streaming in about 10 minutes.
Before you begin, make sure you have the following installed on your server:
Supported platforms: Any system that runs Docker — Linux, Windows (WSL2), macOS. MediaSurv is tested on Ubuntu 22.04+, Debian 12, and Windows Server 2022.
Open .env in your editor and set the required values:
| Variable | Required | Description |
|---|---|---|
POSTGRES_PASSWORD | Yes | A strong password for the PostgreSQL database |
TMDB_API_KEY | Yes | Your TMDB v3 API key for metadata lookups |
MEDIA_ROOT | Yes | Absolute path to your media directory |
This starts all five services: PostgreSQL, Redis, the Go API, the SvelteKit frontend, and nginx.
Navigate to http://your-server-ip:3000 in your browser. You should see the MediaSurv dashboard.
Go to Settings, add your library paths (e.g., /media/movies, /media/tv), and click Scan. MediaSurv will index your files and pull metadata from TMDB automatically.
MediaSurv is flexible about directory layout, but the following structure works best:
Supported video formats: MKV, MP4, AVI, M4V, MOV, WMV, TS, M2TS
Supported audio formats: MP3, FLAC, M4A, AAC, OGG, WAV
Full reference of available configuration options:
| Variable | Default | Description |
|---|---|---|
POSTGRES_PASSWORD | — | PostgreSQL database password |
TMDB_API_KEY | — | TMDB v3 API key |
MEDIA_ROOT | /media | Root path for media files inside the container |
ARTWORK_CACHE_DIR | /artwork | Directory for cached artwork and posters |
ENABLE_QSV | false | Enable Intel Quick Sync Video hardware transcoding |
ENABLE_NVENC | false | Enable NVIDIA NVENC hardware transcoding |
RADARR_API_KEY | — | Radarr API key for webhook integration |
RADARR_WEBHOOK_SECRET | — | Shared secret for Radarr webhook auth |
SONARR_API_KEY | — | Sonarr API key for webhook integration |
SONARR_WEBHOOK_SECRET | — | Shared secret for Sonarr webhook auth |
MediaSurv supports hardware-accelerated transcoding for smoother multi-stream playback.
Set ENABLE_QSV=true in your .env file. Your host must have an Intel CPU with integrated graphics and the appropriate drivers installed. The Docker container will be passed the /dev/dri device automatically.
Set ENABLE_NVENC=true in your .env file. You'll also need the NVIDIA Container Toolkit installed on your host.
Note: Software transcoding (CPU-only) works out of the box with no extra configuration. Hardware transcoding is optional and only needed for heavy multi-stream use.
MediaSurv can automatically rescan libraries when new media is added via Radarr or Sonarr.
http://your-server:3000/api/v1/webhooks/radarrX-Webhook-Secret: your-secret-herehttp://your-server:3000/api/v1/webhooks/sonarrX-Webhook-Secret: your-secret-hereSet the matching RADARR_WEBHOOK_SECRET and SONARR_WEBHOOK_SECRET in your .env file.
If you want to expose MediaSurv on a custom domain with HTTPS, put it behind a reverse proxy. Here's an example nginx config:
Cloudflare Tunnel: If you use Cloudflare Tunnel, point the tunnel to http://localhost:3000 and Cloudflare handles SSL termination for you. No nginx needed.
Run docker compose logs to check for errors. Common causes:
.env file — make sure you copied .env.examplecompose.ymlTMDB_API_KEY is correctdocker compose logs apiapi.themoviedb.org (no firewall blocks)Verify your instance is running:
A healthy response returns {"status":"ok"}.