Netflix costs $15-23/month. Disney+ wants another $14. HBO Max, Hulu, Amazon Prime โ the streaming bills add up fast. But what if you already own the movies and shows you want to watch? What if you could stream them beautifully to any device, from anywhere, without monthly fees or content that disappears when licenses expire?
That's exactly what Jellyfin delivers. It's a free, open-source media server that organizes your personal movie and TV collection, fetches gorgeous metadata and artwork, and streams to virtually any device. No account required. No tracking. No premium tiers. Just your media, your way.
In this comprehensive guide, we'll deploy Jellyfin from scratch, configure hardware transcoding for smooth playback, set up remote access, and explore the best client apps. By the end, you'll have your own Netflix โ but better.
Why Jellyfin Over Plex or Emby?
| Feature | Jellyfin | Plex | Emby |
|---|---|---|---|
| Price | Free forever | Free + $5/mo or $120 lifetime | Free + $5/mo or $119 lifetime |
| Account Required | โ No | โ Yes (Plex servers) | โ Yes |
| Open Source | โ LGPL | โ Proprietary | โ Proprietary |
| Hardware Transcoding | โ Free | โ ๏ธ Plex Pass only | โ ๏ธ Premiere only |
| Mobile Sync | โ Free | โ ๏ธ Plex Pass only | โ ๏ธ Premiere only |
| Live TV/DVR | โ Free | โ ๏ธ Plex Pass only | โ ๏ธ Premiere only |
| Privacy | โ No telemetry | โ ๏ธ Usage tracking | โ ๏ธ Some telemetry |
Jellyfin gives you everything for free. Hardware transcoding, mobile downloads, live TV โ features that cost $120+ on Plex are included at no cost. And because it's open source, there's no company that can change the rules, add ads, or shut down the service.
Prerequisites
Before we begin, you'll need:
- A server or PC โ Any computer with 2GB+ RAM (4GB+ recommended for transcoding)
- Docker installed โ We'll use Docker for clean deployment
- Media files โ Movies, TV shows, or music you want to stream
- Storage โ Enough space for your library (external drives work great)
๐ก Hardware for Transcoding
If you want to transcode video (convert formats on-the-fly for devices that can't play the original), you'll benefit from:
- Intel Quick Sync โ Intel CPUs from Haswell (4th gen) onward
- NVIDIA NVENC โ GTX 1050+ or any Quadro
- AMD VCE/VCN โ RX 400 series onward
Step 1: Create the Directory Structure
Organize your media and configuration:
mkdir -p ~/jellyfin/{config,cache}
mkdir -p ~/media/{movies,tv,music}
Your media should be organized like this for best results:
~/media/
โโโ movies/
โ โโโ The Matrix (1999)/
โ โ โโโ The Matrix (1999).mkv
โ โโโ Inception (2010)/
โ โ โโโ Inception (2010).mp4
โ โโโ ...
โโโ tv/
โ โโโ Breaking Bad/
โ โ โโโ Season 1/
โ โ โ โโโ Breaking Bad - S01E01 - Pilot.mkv
โ โ โ โโโ ...
โ โ โโโ Season 2/
โ โ โโโ ...
โ โโโ ...
โโโ music/
โโโ Artist Name/
โ โโโ Album Name/
โ โโโ 01 - Song.flac
โ โโโ ...
โโโ ...
Step 2: Deploy Jellyfin with Docker
Create a docker-compose.yml file:
# docker-compose.yml for Jellyfin
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
user: 1000:1000 # Match your user ID (run 'id' to check)
ports:
- "8096:8096" # Web UI
- "8920:8920" # HTTPS (optional)
- "7359:7359/udp" # Auto-discovery
- "1900:1900/udp" # DLNA (optional)
environment:
- JELLYFIN_PublishedServerUrl=http://your-server-ip:8096
volumes:
- ./config:/config
- ./cache:/cache
- /path/to/media:/media:ro # Read-only recommended
# For Intel Quick Sync hardware transcoding:
# devices:
# - /dev/dri:/dev/dri
Start Jellyfin:
docker compose up -d
Wait about 30 seconds, then access the web interface at http://your-server-ip:8096.
Step 3: Initial Setup Wizard
The first-time setup wizard guides you through configuration:
- Language โ Select your preferred language
- Create Admin User โ Set a username and strong password
- Add Media Libraries โ We'll configure these properly next
- Metadata Language โ Choose language for movie/show info
- Remote Access โ Enable if you want to stream outside your home
Step 4: Configure Media Libraries
Go to Dashboard โ Libraries โ Add Media Library.
Movies Library
- Content type: Movies
- Display name: Movies
- Folders:
/media/movies - Preferred metadata language: Your language
- Enable real-time monitoring: โ (auto-detect new files)
TV Shows Library
- Content type: Shows
- Display name: TV Shows
- Folders:
/media/tv - Metadata downloaders: Enable TheMovieDB and TheTVDB
Music Library
- Content type: Music
- Display name: Music
- Folders:
/media/music
Click Save, then go to Dashboard โ Scheduled Tasks โ Scan All Libraries to start indexing.
Step 5: Enable Hardware Transcoding
Hardware transcoding uses your GPU to convert video formats, dramatically reducing CPU usage and enabling more simultaneous streams.
Intel Quick Sync (Most Common)
Update your docker-compose.yml:
services:
jellyfin:
# ... other config ...
devices:
- /dev/dri:/dev/dri
group_add:
- "109" # 'render' group ID โ check with: getent group render
Then in Jellyfin: Dashboard โ Playback โ Transcoding:
- Hardware acceleration: Intel QuickSync (QSV)
- Enable hardware decoding for: H264, HEVC, VP9, AV1 (if supported)
- Enable hardware encoding: โ
- Enable Tone mapping: โ (for HDR content)
NVIDIA GPU
Install the NVIDIA Container Toolkit first:
# Ubuntu/Debian
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update && sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Update docker-compose.yml:
services:
jellyfin:
# ... other config ...
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
In Jellyfin settings, select Nvidia NVENC as the hardware acceleration method.
Step 6: Set Up Remote Access
To stream outside your home network, you have several options:
Option A: Port Forwarding (Simple)
- Log into your router
- Forward port 8096 (TCP) to your server's local IP
- Access via your public IP or a dynamic DNS service
Option B: Reverse Proxy with HTTPS (Recommended)
Use Nginx Proxy Manager or Caddy for secure access:
# Caddyfile example
jellyfin.yourdomain.com {
reverse_proxy localhost:8096
}
This gives you automatic HTTPS via Let's Encrypt.
Option C: Tailscale/VPN (Most Secure)
For maximum security, use Tailscale or WireGuard to access your home network privately without exposing ports to the internet.
Step 7: Install Client Apps
Jellyfin has clients for virtually every platform:
Official Apps
- Android โ Google Play or F-Droid
- iOS/iPadOS โ App Store
- Android TV โ Google Play
- Amazon Fire TV โ Amazon App Store
- Roku โ Roku Channel Store
- Web Browser โ Works on any device with a browser
Third-Party Apps (Often Better)
- Infuse (iOS/tvOS/macOS) โ Premium player with excellent codec support
- Swiftfin (iOS/tvOS) โ Native Swift client, very smooth
- Finamp (iOS/Android) โ Music-focused client for Jellyfin
- Jellyfin Media Player (Desktop) โ Based on mpv, excellent playback
- Kodi + Jellyfin addon โ Full Kodi experience with Jellyfin backend
Step 8: Advanced Configuration
Subtitles
Go to Dashboard โ Playback โ Subtitles:
- Subtitle downloading: Enable OpenSubtitles plugin
- Preferred subtitle language: Set your language
- Burn-in subtitles: Enable if clients can't display them
Users & Parental Controls
Dashboard โ Users lets you:
- Create separate accounts for family members
- Set content ratings limits (G, PG, PG-13, R, etc.)
- Restrict access to specific libraries
- Limit transcoding or bandwidth
Plugins
Explore Dashboard โ Plugins โ Catalog for extras:
- OpenSubtitles โ Auto-download subtitles
- Trakt โ Sync watch history with Trakt.tv
- Fanart โ Additional artwork
- TMDb Box Sets โ Group movie collections
- Intro Skipper โ Detect and skip TV intros
Performance Tuning
Transcoding Quality
In Dashboard โ Playback โ Transcoding:
- Thread count: 0 (auto) or match your CPU cores
- Transcoding temp path: Use an SSD if possible
- Throttle transcodes: โ (saves resources)
Client Settings
For best experience, set clients to Direct Play when possible. This streams the original file without transcoding:
- Ensure your files are in compatible formats (H.264 MP4/MKV for most devices)
- Use clients that support your media's codecs natively
- Infuse and VLC handle almost everything without transcoding
Backup & Maintenance
What to Backup
# Backup your config directory
tar -czf jellyfin-backup-$(date +%Y%m%d).tar.gz ./config
The config directory contains your libraries, user data, metadata, and settings. Your media files should be backed up separately.
Updates
# Update Jellyfin
docker compose pull
docker compose up -d
Jellyfin updates frequently with bug fixes and features. Check the releases page for changelogs.
Troubleshooting
"Playback Failed" Errors
- Check if hardware transcoding is working: Dashboard โ Playback โ Transcoding โ Test
- Try switching to software transcoding temporarily
- Ensure the client supports the codec (or enable transcoding)
- Check Jellyfin logs: Dashboard โ Logs
Metadata Not Loading
- Verify your folder naming matches conventions (Movie Name (Year))
- Check your API keys for TheMovieDB/TheTVDB in plugin settings
- Try identifying items manually: right-click โ Identify
Transcoding Too Slow
- Enable hardware transcoding (Intel QSV is usually easiest)
- Reduce transcoding quality from 1080p to 720p
- Pre-transcode files to compatible formats using Handbrake
Jellyfin vs Plex: Real-World Comparison
After running both for years, here's my honest take:
- Plex has a more polished UI and better discover features (watchlists, ratings, etc.)
- Jellyfin is more customizable, faster for large libraries, and doesn't require internet for authentication
- Plex Pass features (hardware transcoding, mobile downloads) are free in Jellyfin
- Jellyfin works 100% offline โ Plex requires internet to authenticate
For most home users, Jellyfin is the better choice. You get everything Plex offers, minus the account requirement and telemetry.
Frequently Asked Questions
Can I share my library with friends?
Yes. Create user accounts in Dashboard โ Users. Each user gets their own watch history and settings. For remote access, set up HTTPS via reverse proxy.
Does Jellyfin work with my smart TV?
Most likely. Jellyfin has apps for Android TV, Samsung Tizen, LG webOS, and Roku. For TVs without apps, the web interface works in any browser, or you can use a Chromecast/Fire TV stick.
How much storage do I need?
It depends on your collection. A typical 1080p movie is 4-10GB. 4K movies can be 20-80GB. Start with what you have and expand with external drives as needed.
Can I use Jellyfin for live TV?
Yes! Jellyfin supports live TV and DVR with compatible tuners (HDHomeRun, etc.) or M3U playlists from IPTV services. Go to Dashboard โ Live TV to configure.
What's the best format for my media?
H.264 video in MKV or MP4 containers with AAC audio plays on virtually everything without transcoding. For 4K, HEVC/H.265 is more efficient but requires newer devices.
Conclusion
Jellyfin transforms your personal media collection into a professional streaming service. No subscriptions, no accounts, no tracking โ just your movies and shows, beautifully organized and available anywhere.
The setup takes less than an hour. The result lasts forever. Start streaming your way.
Next steps:
- Explore our Jellyfin vs Plex vs Emby comparison for a deeper dive
- Check out Jellyfin on Hostly for quick-start templates
- Browse all media server alternatives
Your media, your server, your rules.