All apps · 0 apps
MediaRoulette
Docker app from Selfhosters
Overview
Readme
View on GitHubMediaRoulette
MediaRoulette for Plex — Can't decide what to watch? Let MediaRoulette pick for you!
A web app that randomly selects from your Movies, TV Shows, or both based on your preferences.
Great for large libraries where scrolling becomes overwhelming.
Features
- 🎲 Random Picker — Randomly selects from your Movies, TV Shows, or both
- 🎯 Smart Filters — Filter by media type, genre, rating, keyword, and more
- 📺 Watchlist — Save picks for later viewing
- 🌙 Dark/Light Themes — Choose your preferred appearance
- 📤 Export — Download your watchlist as JSON or CSV
- 🔐 Secure — Authenticates directly with Plex using OAuth
Screenshots
| Picker | Watchlist | Settings |
|---|---|---|
![]() |
![]() |
![]() |
Quick Start
Docker Run (Recommended)
docker run -d \
--name mediaroulette \
-p 5000:5000 \
-v mediaroulette-data:/app/data \
-e SECRET_KEY=your-secret-key-here \
--restart unless-stopped \
ghcr.io/keltech-services/mediaroulette:latest
Then open http://localhost:5000 in your browser.
Docker Compose
Create a docker-compose.yml file:
version: '3.8'
services:
mediaroulette:
image: ghcr.io/keltech-services/mediaroulette:latest
container_name: mediaroulette
ports:
- "5000:5000"
volumes:
- mediaroulette-data:/app/data
environment:
- SECRET_KEY=your-secret-key-here
restart: unless-stopped
volumes:
mediaroulette-data:
Then run:
docker-compose up -d
Configuration
Environment Variables
| Variable | Description | Default |
|---|---|---|
SECRET_KEY |
Flask session encryption key (see below) | mediaroulette-dev-key-change-in-prod |
PORT |
Port to run the application | 5000 |
Generating a Secret Key
The SECRET_KEY is used to securely sign session cookies. You should generate your own random key, especially if exposing the app outside your local network.
Option 1: Generate one online at IT Tools Token Generator
Option 2: Generate via command line:
python3 -c "import secrets; print(secrets.token_hex(32))"
Then replace your-secret-key-here in the Docker command or compose file with your generated key.
Data Storage
All user data is stored in the /app/data directory inside the container:
config.json— Plex connection settings and preferenceswatchlist.json— Your saved watchlist items
Mount this directory as a volume to persist data between container restarts.
How to Use
1. Sign In
Open MediaRoulette in your browser and click Sign in with Plex. You'll receive a code to enter at plex.tv/link.
2. Configure Libraries
After signing in, go to Settings and select your Plex server and libraries (Movies and/or TV Shows).
3. Spin the Wheel
Return to the Picker page, set your filters (or leave them as defaults), and click Spin to get a random recommendation.
4. Save to Watchlist
Found something interesting? Click Add to Watchlist to save it for later. Access your saved items from the Watchlist page.
Building from Source
Prerequisites
- Python 3.9+
- pip
Development Setup
# Clone the repository
git clone https://github.com/KelTech-Services/MediaRoulette.git
cd MediaRoulette
# Create a virtual environment (optional but recommended)
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Run the development server
python app.py
Open http://localhost:5000 in your browser.
Build Docker Image Locally
docker build -t mediaroulette .
docker run -d -p 5000:5000 -v mediaroulette-data:/app/data mediaroulette
Troubleshooting
Forgot Password / Locked Out
If you forgot your password or mistyped it during setup, you can reset your account:
Option 1: Via Settings (if logged in)
Go to Settings and click Reset Password. This will delete your account and redirect you to create a new one.
Option 2: Manual Reset (if locked out)
Delete the users.json file from your data directory and refresh the page:
# Docker volume
docker exec mediaroulette rm /app/data/users.json
# Or if using a bind mount (e.g., Portainer/Unraid)
rm /path/to/your/data/users.json
After deleting the file, reload MediaRoulette in your browser — you'll be prompted to create a new admin account.
Note: This only resets your MediaRoulette login. Your Plex connection and settings are preserved in
config.json.
Tech Stack
- Backend: Python, Flask
- Frontend: HTML, CSS, Jinja2 Templates
- Authentication: Plex OAuth
- Deployment: Docker, Gunicorn
License
MIT License — see LICENSE for details.
Contributing
Contributions are welcome! Please see our Contributing Guide for details on how to report bugs, request features, and support the project.
Acknowledgments
- Plex for the amazing media server
- Built with ❤️ by KelTech Services
Install MediaRoulette on Unraid in a few clicks.
Find MediaRoulette in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/keltech-services/mediaroulette:latestRuntime arguments
- Web UI
http://[IP]:[PORT:5000]- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Web interface port
- Target
- 5000
- Default
- 5000
- Value
- 5000
Stores config, watchlist, and user data
- Target
- /app/data
- Default
- /mnt/user/appdata/mediaroulette
- Value
- /mnt/user/appdata/mediaroulette
Flask session encryption key. Generate a random 32+ character string for security.
- Target
- SECRET_KEY


