Jellyfin + Real-Debrid: Free & Open Source
Build a powerful streaming setup with Jellyfin — the free, open-source alternative to Plex. No subscriptions, no tracking, full control.
Why Jellyfin over Plex?
- • 100% Free — No premium subscriptions needed
- • No tracking — Your data stays private
- • Open source — Transparent and community-driven
- • No account required — Works without external login
What you'll need
- ✓ Real-Debrid account — €3-16 depending on plan length
- ✓ Linux server or VPS — Ubuntu 22.04+ recommended, 2GB+ RAM
- ✓ Docker & Docker Compose — For running all services
- ✓ Terminal/SSH access — Basic command line knowledge
- ✓ 1-2 hours — Depending on experience level
No Jellyfin account needed! Unlike Plex, Jellyfin doesn't require any external account. Everything runs on your server.
How it works
┌─────────────────────────────────────────────────────────┐ │ Your Jellyfin Stack │ ├─────────────────────────────────────────────────────────┤ │ │ │ Real-Debrid (Cloud) │ │ │ │ │ ▼ │ │ ┌─────────┐ ┌─────────┐ ┌───────────┐ │ │ │ Zurg │───▶│ rclone │───▶│ Jellyfin │ │ │ │ WebDAV │ │ mount │ │ Server │ │ │ └─────────┘ └─────────┘ └───────────┘ │ │ │ │ │ │ ▼ ▼ │ │ /mnt/zurg Jellyfin Clients │ │ (filesystem) (TV, Phone, Web) │ │ │ └─────────────────────────────────────────────────────────┘
Component roles:
- • Zurg — Creates WebDAV server from Real-Debrid
- • rclone — Mounts WebDAV as local filesystem
- • Jellyfin — Free, open-source media server
Jellyfin advantages:
- • No subscriptions or premium tiers
- • Hardware transcoding (free!)
- • Plugins and customization
- • Complete privacy
Step 1: Set up Real-Debrid
1.1 Create account & subscribe
- 1. Go to real-debrid.com
- 2. Create an account and verify email
- 3. Purchase a subscription (180 days is best value at €16)
1.2 Get your API key
- 1. Go to real-debrid.com/apitoken
- 2. Copy your API key and save it securely
Step 2: Install Docker
# Install Docker (Ubuntu/Debian)
curl -fsSL https://get.docker.com | sh
# Add your user to docker group
sudo usermod -aG docker $USER
# Log out and back in, then verify
docker --version
docker compose version
# Create project directory
mkdir -p ~/jellyfin-debrid
cd ~/jellyfin-debrid
mkdir -p zurg rclone jellyfin/config jellyfin/cache Step 3: Deploy Zurg
Create Zurg configuration
# Create config file
nano ~/jellyfin-debrid/zurg/config.yml Add this configuration:
# ~/jellyfin-debrid/zurg/config.yml
zurg: v1
token: YOUR_REAL_DEBRID_API_KEY # Replace with your key
host: "[::]"
port: 9999
directories:
movies:
group: media
filters:
- regex: /.*\.(mkv|mp4|avi)$/i
shows:
group: media
filters:
- regex: /.*\.(mkv|mp4|avi)$/i Replace YOUR_REAL_DEBRID_API_KEY with your actual API key.
Step 4: Configure rclone
Create rclone configuration
# Create rclone config
nano ~/jellyfin-debrid/rclone/rclone.conf Add:
[zurg]
type = webdav
url = http://zurg:9999
vendor = other
pacer_min_sleep = 0 Create mount point
sudo mkdir -p /mnt/zurg
sudo chown $USER:$USER /mnt/zurg Step 5: Install Jellyfin
Jellyfin is included in the docker-compose below. Unlike Plex, there's no claim token needed — just start it and configure through the web UI.
Hardware transcoding: Jellyfin supports free hardware transcoding! The docker-compose includes GPU passthrough for Intel/AMD.
Step 6: Configure libraries
6.1 Initial setup
- 1. Open http://your-server-ip:8096
- 2. Create your admin account
- 3. Select your preferred language and metadata sources
6.2 Add libraries
- 1. Go to Dashboard → Libraries → Add Library
- 2.
Add a Movies library pointing
to
/mnt/zurg/movies - 3.
Add a TV Shows library pointing
to
/mnt/zurg/shows
6.3 Disable automatic scanning
- 1. Go to Dashboard → Scheduled Tasks
- 2. Disable or reduce frequency of library scan tasks
This prevents overwhelming Real-Debrid with requests.
Complete docker-compose.yml
# ~/jellyfin-debrid/docker-compose.yml
services:
# Zurg - WebDAV server for Real-Debrid
zurg:
image: ghcr.io/debridmediamanager/zurg-testing:latest
container_name: zurg
restart: unless-stopped
ports:
- "9999:9999"
volumes:
- ./zurg/config.yml:/app/config.yml
- ./zurg/data:/app/data
# rclone - Mounts Zurg as filesystem
rclone:
image: rclone/rclone:latest
container_name: rclone
restart: unless-stopped
cap_add:
- SYS_ADMIN
security_opt:
- apparmor:unconfined
devices:
- /dev/fuse
volumes:
- ./rclone/rclone.conf:/config/rclone/rclone.conf
- /mnt/zurg:/data:shared
command: >
mount zurg: /data
--config=/config/rclone/rclone.conf
--allow-other
--allow-non-empty
--dir-cache-time=10s
--vfs-cache-mode=full
--vfs-cache-max-size=10G
depends_on:
- zurg
# Jellyfin Media Server
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
ports:
- "8096:8096"
environment:
- PUID=1000
- PGID=1000
- TZ=UTC
volumes:
- ./jellyfin/config:/config
- ./jellyfin/cache:/cache
- /mnt/zurg:/mnt/zurg:shared
# Uncomment for Intel QuickSync hardware transcoding:
# devices:
# - /dev/dri:/dev/dri
depends_on:
- rclone Start everything
cd ~/jellyfin-debrid
docker compose up -d
# Watch logs
docker compose logs -f
# Check status
docker compose ps You're done!
Access Jellyfin at http://your-ip:8096
Troubleshooting
Mount not working / empty directory
-
• Install fuse:
sudo apt install fuse3 -
• Check Zurg:
docker logs zurg -
• Check rclone:
docker logs rclone
Jellyfin not finding content
-
• Verify mount:
ls /mnt/zurg - • Check library paths in Jellyfin match mount paths
- • Manually trigger a library scan
Hardware transcoding not working
-
• Uncomment the
devicessection in docker-compose -
• For Intel:
ls /dev/drishould show render and card devices - • Enable VAAPI in Jellyfin Dashboard → Playback → Transcoding
Buffering issues
- • Increase rclone vfs-cache-max-size
- • Enable direct play in client settings
- • Check Real-Debrid server status
Jellyfin Apps
Mobile
iOS & Android apps available
TV
Android TV, Fire TV, Roku
Web
Access from any browser
Want automation?
Add Riven to automatically manage your content library.