Open source · MIT License

Movie automation
that just works.

A modern, self-hosted movie collection manager. Built on lessons learned from the *arr ecosystem — lightweight, fast, and designed from scratch in Go and React.

$ docker run -d -p 8282:8282 -v data:/config ghcr.io/luminarr/luminarr
~30 MB
Memory at idle
< 1s
Startup time
Zero
Telemetry, ever

Quality presets.
Just check the box.

Each preset combines resolution, source, codec, and HDR into one line. Check the ones you want, pick a cutoff, and you're done — no scoring rules to write.

HD-1080p

Profile
Resolution Source Codec HDR
1080p WEBDL x264 None
1080p WEBRip x265 None
1080p Bluray x265 None
1080p Remux x265 None
Cutoff 1080p · Bluray · x265 · None

Everything you need.
Nothing you don't.

Movie gallery

Poster grid or list view. Filter by status, quality, library, and search. TMDB metadata, cast, and posters.

Full automation

RSS sync, automatic grabbing, downloading, and importing. File renaming, bulk editor, blocklist, and backup/restore built in.

Zero telemetry

No analytics, no crash reports, no update checks, no phone home. Credentials use a Secret type that redacts in all output.

One-click Radarr import

Import quality profiles, libraries, indexers, download clients, and your entire movie list from a running Radarr instance.

5 download clients

qBittorrent, Deluge, Transmission, SABnzbd, and NZBGet. Per-indexer seed ratio and time limits for private trackers. Live queue with WebSocket updates.

Media scanning

Optional ffprobe integration verifies actual codec, resolution, and HDR. Flags mislabelled releases with a mismatch badge.

9 notification channels

Discord, Slack, Telegram, Gotify, ntfy, Pushover, webhook, email, and custom scripts. Subscribe each channel to specific events.

Calendar & Wanted

Monthly calendar colour-coded by status. Wanted page shows missing and cutoff-unmet movies. Manual search with release comparison.

Library statistics

Decade distribution, collection growth, genre breakdown, quality and storage charts. Interactive dashboards powered by Recharts.

Media server sync

Compare your Plex, Emby, or Jellyfin library against Luminarr. See what's missing on each side and import with one click. Auto-refresh on import.

Custom scripts

Execute any code when events happen. Bash, Python, Ruby — your script, your language. Full guide →

Security first

Constant-time auth, WebSocket auth, SSRF protection, path traversal checks, secret redaction, CSP headers. Security model →

Built-in log viewer

In-memory ring buffer captures the last 1,000 log entries. View them in the UI with level filtering, color-coded badges, and auto-refresh. No external logging stack needed.

Inspired by the best.
Built from scratch.

Radarr pioneered automated movie management. Luminarr builds on that foundation with a fresh tech stack, different trade-offs, and a few ideas of our own.

Radarr Luminarr
Backend .NET / Mono Go
Frontend Angular React
Database SQLite / Postgres SQLite
Memory (idle) 300 – 500 MB 30 – 60 MB
Startup time 10 – 30 s < 1 s
Quality system Custom Formats + scoring Explicit codec & HDR
Telemetry Optional analytics None
Download clients 6 clients 5 (qBit, Deluge, Transmission, SAB, NZBGet)
Notifications 7 channels 9 channels + custom scripts
Media server sync Plex, Emby, Jellyfin
Migration One-click import from Radarr
Ecosystem Radarr v3 API built in

Switch from Radarr in four steps

Radarr keeps running during the import. There's no cutover moment. Take your time, verify everything, then switch when you're ready.

1

Connect

Enter your Radarr URL and API key

2

Preview

See everything Luminarr found

3

Import

Pick what to bring over and click Import

4

Done

Profiles, libraries, indexers, clients, movies — all there

Works with your existing tools

Luminarr speaks Radarr's API. Point your tools at Luminarr and they just work — no native integrations needed.

🎬

Overseerr / Jellyseerr

Request movies, sync libraries, manage quality profiles

📈

Homepage / Homarr

Movie count, queue status, and activity widgets

🏠

Home Assistant

Sensors for library size, queue depth, and download status

📱

LunaSea & more

Any app with a Radarr integration section works out of the box

Up and running in 60 seconds

Pick your method. No keys to configure — just start and go.

docker-compose.yml
services:
  luminarr:
    image: ghcr.io/luminarr/luminarr:latest
    ports:
      - "8282:8282"
    volumes:
      - /path/to/config:/config
      - /path/to/movies:/movies
    restart: unless-stopped
Terminal
$ docker run -d \
    --name luminarr \
    -p 8282:8282 \
    -v /path/to/config:/config \
    -v /path/to/movies:/movies \
    --restart unless-stopped \
    ghcr.io/luminarr/luminarr:latest
luminarr.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: luminarr
spec:
  replicas: 1
  selector:
    matchLabels:
      app: luminarr
  template:
    metadata:
      labels:
        app: luminarr
    spec:
      containers:
        - name: luminarr
          image: ghcr.io/luminarr/luminarr:latest
          ports:
            - containerPort: 8282
          volumeMounts:
            - name: config
              mountPath: /config
            - name: movies
              mountPath: /movies
      volumes:
        - name: config
          persistentVolumeClaim:
            claimName: luminarr-config
        - name: movies
          persistentVolumeClaim:
            claimName: luminarr-movies
Terminal
# Download the latest release
$ curl -Lo luminarr \
    https://github.com/luminarr/luminarr/releases/latest/download/luminarr-linux-amd64
$ chmod +x luminarr

# Run it
$ ./luminarr

Open http://localhost:8282 and you're good to go.

Your data stays yours

Luminarr connects only to services you explicitly configure. Nothing else.

No telemetry

No usage data, events, or analytics are sent anywhere. Errors are logged locally only.

No crash reporting

Errors are logged locally and viewable in the built-in log viewer. No Sentry, no Bugsnag, no third-party services.

No update checks

Luminarr never contacts any server to check for updates. You update when you choose to.

Credentials are redacted

A Secret type renders as *** in all log output and JSON serialization. Keys never leak.

Built with AI. Reviewed by humans.

Luminarr was built with Claude as the primary code generator, with human design and review throughout. We think that's worth being upfront about.

Every architectural decision was made by a human and documented

Security-sensitive code was explicitly designed and reviewed

Consistent patterns throughout — no style drift halfway through

600+ tests across 42 packages — unit tests, plugin tests, and 59 API integration tests run on every change

Ready to try it?

MIT licensed. One binary. Takes 60 seconds to set up.