Skip to content

nickheyer/DiscoFlix

Repository files navigation

DiscoFlix - the Discord concierge for your media server



self-hosted: single binary discord.js v14 koa + htmx, no build step prisma + sqlite



Ask for a movie in Discord. DiscoFlix searches your services, handles the approval,
tracks the download, and replies when it's ready to watch.


One request, start to finish

Animated: a user requests a movie, staff approves it on a Discord button, the download progresses to 100%, and the movie becomes available

Request lifecycle.


The console is a Discord mirror

The og discord, the good one.

DiscoFlix web console mirroring a Discord channel: request cards show pending approval buttons, a live download at 62%, and an approved request


Mission control for the whole stack

Overview: bot identity, health notices, at-a-glance stats, and every connected app with live version pills
Overview - all the apps.
Requests: pipeline cards with stage steppers from Requested through Decision, Radarr, Download, Imported, and media server
Requests - approval pipelines and the ability to track the lifecycle of a request.
Unified library: poster grid across Radarr and Sonarr with availability dots and movie/show filters
Library - combined library, derived (and deduped) from all media servers.
Download queue: progress bars, quality and indexer chips, time remaining, and a grabbed/imported activity feed
Queue - live progress for all your download clients in one place.
Now playing: active Plex sessions with direct play and transcode chips, watch progress, and recently added
Now playing - who is watching what.
Users: cards with tier chips, wants-access flags, per-user limits, and operator notes
Users - tiers, limits, and a WANTS ACCESS flags.
User profile modal: permission tier ladder, limits, notes, and the user's request history
Profiles - grant a tier, cap requests, keep receipts.
Logs: searchable, level-filtered event log rows with metadata
Logs - ...I dont know how to excite people about logs.

Optional AI-powered everything

Plug in Anthropic, OpenAI, Gemini, or a local Ollama. The assistant has access to all your users, what media you have downloaded/monitored/queued, and of course - the discord bot (you can turn these off incrementally if thats too intrusive for you, but thats why we include ollama).

Console AI chat: the assistant plans a triple feature from the library, citing the tools it used - media_library, open_requests, download_queue

AI routing board: a who-answers ribbon and ranked provider rows per door, each with audience, daily caps, and memory settings
Routing - commands, mentions, and DMs each pick their own provider, audience, and memory.
Directives: every system prompt block is a card with a lifecycle stepper, customizable text, and a live template-variables rail
Directives - system prompt, go nuts.

How it fits together

flowchart LR
    discord(["Discord"]) <--> core{{"DiscoFlix"}}
    console(["Web console"]) <--> core
    core --> arr["Radarr / Sonarr / Lidarr"]
    core --> dl["SABnzbd / qBittorrent / NZBGet / +5"]
    core --> media["Plex / Emby / Jellyfin"]
    core --> ai["Anthropic / OpenAI / Gemini / Ollama"]
Loading

Run it

Docker (recommended)
docker run -d --name discoflix \
  -p 5001:5001 \
  -v discoflix_data:/data \
  nickheyer/discoflix:latest

Or grab docker-compose.yml and docker compose up -d.

From source
git clone https://github.com/nickheyer/DiscoFlix.git
cd DiscoFlix
npm install
npm start        # or: make dev (auto-restarts on change)

Node 20+. The schema migrates itself on first boot.

Single binary
npm install
npm run build:binary   # -> dist/discoflix

Data lands next to the binary in discoflix-data/ (override with DF_DATA_DIR).

Then open http://localhost:5001, paste your Discord bot token, and flip the power switch. Everything is configured in the console - or seed first-boot settings from the environment with .env.example.

Inspect the database

DiscoFlix ships its own admin panel - no external tools. Enable Database Admin in the DiscoFlix app's Settings (or set DF_DB_ADMIN=1 before first boot) and it serves a standalone editor at http://localhost:5001/admin (a Database shortcut also appears in the DiscoFlix app and opens it in a new tab). It reads the schema straight from the Prisma models, so every table, column, relation, and index shows up automatically: search, sort, filter by clicking any foreign key, edit or create rows in the side editor, bulk-edit or bulk-delete the checked rows (or everything matching the current filter), and drop to raw SQL when you want it.

It edits the live database with no guardrails - that's the point - so if the console is reachable by anyone but you, set an admin password. DiscoFlix will nag you about exactly that (dismissable) if you enable it on a password-less console.



Every screenshot above is the real UI (kinda?), captured live against a fictional showcase dataset - the movies, the users, and yes, the posters were all invented for this README (imagine if I used real movie posters, id never do that).



Built by Nicholas Heyer  ·  ISC License

About

A simple media-requesting, Radarr/Sonarr-interfacing, movie and tv show-listing Chat Bot web-app for your media server.

Topics

Resources

Stars

57 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors