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.
Get notified when this guide updates
Jellyfin + Debrid setups can break with updates. We'll email you when there are breaking changes.