Prism
A self-hosted movie collection manager with a React web UI and a REST API. Edition-aware release scoring, full release decision explainability, and a native Radarr v3 API so Overseerr and Jellyseerr connect without modification.
Features
What Prism does
Library management
Full TMDB integration for search, metadata, posters, and collection tracking. Per-movie monitoring with automatic grab on missing. Calendar view of upcoming releases. Library stats with drill-down by quality tier, genre, decade, and indexer performance.
Edition-aware scoring
Prism's parser recognizes 15 canonical editions: Theatrical, Director's Cut, Extended, Ultimate, IMAX, Criterion, 4K Remaster, and others. Set a preferred edition per movie and matching releases score higher during the decision pass.
Release decision explainability
Every release on the manual search page shows exactly which custom formats matched, which quality tier it landed in, and whether it was blocked by the title match, quality floor, or a blocklist entry. Debugging takes seconds, not mysteries.
Radarr v3 API compatibility
Prism exposes a Radarr v3 compatible API at /api/v3/. Point Overseerr, Jellyseerr, Homepage, Home Assistant, LunaSea, or any other tool with a Radarr integration at Prism — it connects without modification.
Automation
Automatic RSS sync, auto-import with rename and hardlink support. Import lists from TMDB, Trakt, Plex watchlists, MDBList, and custom URL lists. Library Sync — compare your media server library against Prism and import the delta.
TRaSH Guides presets
Ships with TRaSH Guides custom format presets preinstalled and scored per their recommendations. A fresh install gets solid 1080p and 2160p releases without manual configuration. All formats are editable.
Interface
Screenshots
React 19 + TypeScript UI embedded in the Go binary.
Technical
Advanced features
Radarr v3 adapter
Lives in internal/api/v3/. A compatibility layer over Prism's native API that maps Radarr's endpoint shapes onto Prism's internal types. Known to work with Overseerr, Jellyseerr, Homepage, and Home Assistant.
Custom format engine
Compatible with Radarr's custom format engine — existing formats import cleanly. The decision engine shows exactly why each release was grabbed or skipped: which formats matched, which quality tier it hit, and what blocked it if anything did.
Import conflict detection
Warns about dimension regressions — HDR lost, audio downgrade — before grabbing. The conflict checker runs in the auto-import pass and in the manual search modal so you always know what you're replacing.
Radarr migration
Imports from a running Radarr instance in one pass. Open Settings → Import, enter the Radarr URL and API key, preview, and select categories. Supported: quality profiles, libraries, indexers, download clients, and movies with monitoring state.
docker run -d \ --name prism \ -p 8282:8282 \ -v /path/to/config:/config \ -v /path/to/movies:/movies \ ghcr.io/beacon-stack/prism:latest
Open http://localhost:8282 — Prism generates an API key on first run. Find it in Settings → App Settings.
Configuration
Environment variables
| Variable | Default | Description |
|---|---|---|
PRISM_SERVER_PORT | 8282 | Web UI and API port |
PRISM_DATABASE_DSN | — | Postgres DSN (required) |
PRISM_AUTH_API_KEY | auto | API key; autogenerated on first run if unset |
PRISM_PULSE_URL | — | Pulse control-plane URL (optional) |
PRISM_LOG_LEVEL | info | debug, info, warn, error |
PRISM_LOG_FORMAT | json | json or text |