Jellyfin
Unraid media server hosting for Jellyfin
Video
Useful Links
Related Videos Check IBRACORP YouTube channel for latest tutorials
Thank you for choosing to collaborate with IBRACORP π
Please read our disclaimer https://docs.ibracorp.io/#disclaimer
Creditsβ
Role | Contributor |
---|---|
Writer / Producer | IBRACORP |
Video Recording and Voice | IBRACORP |
Contributor | Jellyfin Community |
Testing / Proofreading | IBRACORP Community |
Feature Listβ
Jellyfin Media Server Features:
- Free and open-source media management platform
- Manage movie collections with poster displays
- Organize TV shows by season with metadata
- Music library with playlist creation and streaming
- Live TV integration and automatic recording (with tuner)
- Multi-platform client support (web, mobile, streaming devices)
- Hardware transcoding for optimal streaming performance
- No tracking, data collection, or premium features
- Plugin ecosystem for extended functionality
- User management with parental controls
Prerequisitesβ
System Requirements:
- CPU: 4+ cores (hardware transcoding capable recommended)
- RAM: 4GB minimum (8GB+ recommended for transcoding)
- Storage: Sufficient space for media library
- Network: Gigabit ethernet recommended for 4K streaming
- Media Library: Organized according to TRaSH Guides structure
Recommended Media Structure:
/data/media/
βββ movies/
β βββ Movie Title (2023)/
β β βββ Movie Title (2023).mkv
βββ tv/
β βββ TV Show Name (2020)/
β β βββ Season 01/
β β β βββ S01E01 - Episode Title.mkv
β β β βββ S01E02 - Episode Title.mkv
βββ music/
βββ Artist Name/
β βββ Album Name (2023)/
β β βββ 01 - Track Name.flac
Installationβ
Unraid Docker Templateβ
Jellyfin / Community Applications / Media Servers
Installation Steps:
- Head to the Community Applications store in Unraid
- Search for and click to install Jellyfin
- Configure the container settings:
- WebUI Port: 8096
- Media Paths: Map your media directories
- Config Path:
/mnt/user/appdata/jellyfin
- Network Type: Bridge or custom Docker network
- Configure Volume Mappings:
- Config:
/mnt/user/appdata/jellyfin
β/config
- Movies:
/mnt/user/data/media/movies
β/data/movies
- TV Shows:
/mnt/user/data/media/tv
β/data/tv
- Music:
/mnt/user/data/media/music
β/data/music
- Config:
- Click Apply and wait for the container to pull down and start
- Access the WebUI at
http://YOUR_SERVER_IP:8096
Docker Composeβ
version: '3.8'
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- ./jellyfin-config:/config
- /path/to/media/movies:/data/movies
- /path/to/media/tv:/data/tv
- /path/to/media/music:/data/music
ports:
- "8096:8096"
- "8920:8920" # HTTPS
- "7359:7359/udp" # Auto-discovery
- "1900:1900/udp" # DLNA
devices:
- /dev/dri:/dev/dri # Hardware transcoding (Intel)
# For NVIDIA GPU transcoding:
# runtime: nvidia
# environment:
# - NVIDIA_VISIBLE_DEVICES=all
Installation Steps:
- Save the above configuration as
docker-compose.yml
- Update the media paths to match your library structure
- Configure timezone and user IDs as needed
- Start the container:
docker compose up -d
- Access the WebUI at
http://YOUR_SERVER_IP:8096
Configurationβ
Initial Setupβ
First-Time Configuration:
- Navigate to
http://YOUR_SERVER_IP:8096
- Complete the setup wizard:
- Language: Select your preferred language
- User Account: Create admin user with secure password
- Media Libraries: Add your movie, TV, and music libraries
- Remote Access: Configure external access (optional)
- Metadata Settings: Choose preferred metadata providers
Library Configuration:
-
Movies Library:
- Content Type: Movies
- Display Name: Movies
- Folders:
/data/movies
- Metadata Provider: The Movie Database (TMDb)
-
TV Shows Library:
- Content Type: TV Shows
- Display Name: TV Shows
- Folders:
/data/tv
- Metadata Provider: The Movie Database (TMDb)
-
Music Library:
- Content Type: Music
- Display Name: Music
- Folders:
/data/music
- Metadata Provider: MusicBrainz
User Managementβ
Creating Additional Users:
- Navigate to Dashboard β Users
- Click "Add User"
- Configure user settings:
- Username: User display name
- Password: Secure password
- Library Access: Select available libraries
- Parental Controls: Set content ratings if needed
User Permissions:
- Administrator: Full server management access
- Standard User: Media access only
- Restricted User: Limited content based on ratings
Hardware Transcodingβ
Intel Quick Sync (Recommended):
-
Docker Configuration:
devices:
- /dev/dri:/dev/dri -
Jellyfin Settings:
- Navigate to Dashboard β Playback
- Hardware Acceleration: Intel Quick Sync Video
- Enable Hardware Decoding: Check all supported codecs
- Enable Hardware Encoding: Check all supported codecs
NVIDIA GPU Transcoding:
-
Docker Configuration:
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all -
Jellyfin Settings:
- Hardware Acceleration: NVIDIA NVENC
- Enable Hardware Decoding: H.264, HEVC
- Enable Hardware Encoding: H.264, HEVC
Client Applicationsβ
Supported Platformsβ
Web Browsers:
- Chrome, Firefox, Safari, Edge
- Access via
http://SERVER_IP:8096
Mobile Applications:
- Android: Jellyfin for Android (Google Play)
- iOS: Jellyfin Mobile (App Store)
Streaming Devices:
- Roku: Jellyfin for Roku
- Android TV: Jellyfin for Android TV
- Amazon Fire TV: Jellyfin for Fire TV
- Apple TV: Jellyfin for Apple TV (via App Store)
Desktop Applications:
- Windows: Jellyfin Theater, Jellyfin MPV Shim
- macOS: Jellyfin Theater, Jellyfin MPV Shim
- Linux: Jellyfin Theater, Jellyfin MPV Shim
Media Centers:
- Kodi: Jellyfin for Kodi addon
- Emby: Limited compatibility
Remote Access Configurationβ
Secure Remote Access:
-
HTTPS Setup:
- Navigate to Dashboard β Networking
- Secure Connection Mode: Handled by reverse proxy
- External Domain:
jellyfin.yourdomain.com
-
Reverse Proxy (Nginx):
server {
listen 443 ssl http2;
server_name jellyfin.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://jellyfin:8096;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $server_name;
}
}
Advanced Configurationβ
Plugin Managementβ
Popular Plugins:
- TMDb Box Sets - Enhanced movie collection support
- Trakt - Scrobbling and sync with Trakt.tv
- Subtitle Plugins - Additional subtitle providers
- LDAP Authentication - Enterprise user management
- Webhook - Notifications and automation integration
Installing Plugins:
- Navigate to Dashboard β Plugins
- Click "Catalog"
- Browse available plugins and click "Install"
- Restart Jellyfin to activate plugins
Library Optimizationβ
Metadata Refresh:
# Force metadata refresh for all libraries
# Via Dashboard β Libraries β Scan All Libraries
# Or via CLI (if SSH access available)
curl -X POST "http://localhost:8096/Library/Refresh" \
-H "X-Emby-Token: YOUR_API_KEY"
Database Optimization:
- Scheduled Tasks: Configure automatic library scans
- Image Caching: Enable image extraction for better performance
- Metadata Downloading: Optimize provider priority
Monitoring and Maintenanceβ
System Monitoring:
-
Dashboard Overview:
- Active streams and transcoding
- Server performance metrics
- Recent media additions
-
Log Management:
- Location:
/config/log/
- Log Levels: Debug, Information, Warning, Error
- Log Rotation: Automatic cleanup of old logs
- Location:
Backup Strategy:
# Backup Jellyfin configuration
tar -czf jellyfin-backup-$(date +%Y%m%d).tar.gz /path/to/jellyfin-config/
# Backup database specifically
cp /path/to/jellyfin-config/data/jellyfin.db /backup/location/
Troubleshootingβ
Common Issuesβ
Transcoding Failures:
- Verify hardware acceleration is properly configured
- Check available disk space for transcoding directory
- Review transcoding logs for specific codec errors
- Ensure sufficient CPU/GPU resources
Library Scanning Issues:
- Verify file permissions on media directories
- Check media file naming conventions (TRaSH Guides)
- Review scanning logs for specific errors
- Ensure network connectivity to metadata providers
Playback Problems:
- Check client compatibility with media codecs
- Verify network bandwidth for streaming quality
- Review transcoding settings and profiles
- Test direct play vs. transcoded playback
Remote Access Issues:
- Confirm port forwarding for port 8096
- Check firewall settings on server and router
- Verify reverse proxy configuration
- Test local access before troubleshooting remote
Performance Optimizationβ
Server Optimization:
# Docker resource limits
deploy:
resources:
limits:
cpus: '4.0'
memory: 8G
reservations:
cpus: '2.0'
memory: 4G
Database Optimization:
- Regular database cleanup via scheduled tasks
- Monitor database size and performance
- Consider SSD storage for Jellyfin config directory
Log Analysisβ
Important Log Locations:
# Main Jellyfin logs
/config/log/jellyfin.log
# FFmpeg transcoding logs
/config/log/ffmpeg-*.txt
# Plugin logs
/config/log/plugin_*.log
Log Commands:
# View real-time logs
docker logs -f jellyfin
# Search for specific errors
grep -i "error" /path/to/jellyfin-config/log/jellyfin.log
# Monitor transcoding activity
tail -f /path/to/jellyfin-config/log/ffmpeg-*.txt
Integrationβ
Media Automation Stackβ
Recommended Companions:
- Sonarr - TV show management and downloading
- Radarr - Movie management and downloading
- Prowlarr - Indexer management
- Bazarr - Subtitle management
- Overseerr/Jellyseerr - Request management
Integration Configuration:
- Configure media automation tools to use same directory structure
- Set up webhook notifications between services
- Ensure proper file permissions across all containers
Backup and Syncβ
Automated Backup Script:
#!/bin/bash
# jellyfin-backup.sh
BACKUP_DIR="/backup/jellyfin"
CONFIG_DIR="/path/to/jellyfin-config"
DATE=$(date +%Y%m%d_%H%M%S)
# Create backup directory
mkdir -p "$BACKUP_DIR"
# Backup configuration
tar -czf "$BACKUP_DIR/jellyfin-config-$DATE.tar.gz" "$CONFIG_DIR"
# Keep only last 7 backups
find "$BACKUP_DIR" -name "jellyfin-config-*.tar.gz" -mtime +7 -delete
Special Thanksβ
- Jellyfin Team for their excellent open-source media server platform
- To our fantastic Discord community and our Admins DiscDuck and Hawks for their input and documentation (as always)
Please support the developers and creators involved in this work to help show them some love. β€οΈ
Final Wordsβ
We hope you enjoyed this guide. It was conceptualized, written, and implemented by our Admin Sycotix.
Support Usβ
Our work sometimes takes months to research and develop.
If you want to help support us please consider:
- Liking and Subscribing to our Youtube channel
- Joining our Discord server
- Becoming a paid member on our IBRACORP website
- Donating via Paypal
Thank you for being part of our community!