Why I Switched from Plex to Jellyfin
If you own a high-quality Remux or 4K movie collection and want to watch it anywhere, Plex is likely the first name that comes to mind. However, Plex charges fees (Plex Pass) for even basic features. Want to use your graphics card for hardware acceleration or enjoy smooth playback on mobile apps? You’ll have to pay up.
That’s why I moved to Jellyfin. It’s a completely open-source project. Every feature from transcoding to mobile apps is 100% free. I used to use CentOS, but on Ubuntu, installing Jellyfin is much easier thanks to the massive community support. With just an old NUC or a basic PC, you can have a high-end streaming system that rivals paid platforms.
Quick Overview of How It Works
Before jumping into the commands, you should understand the two main components for easier debugging later:
- Jellyfin Server: The heart of the system, running on Ubuntu. It scans your hard drives, fetches posters and metadata, and handles transcoding. Transcoding allows heavy 4K movies to stream smoothly on phones over 4G by reducing resolution on the fly.
- Client: The playback application. You can use a web browser, the Swiftfin app on iPhone, or Jellyfin Android on your TV.
How Much Hardware Do You Need?
I recommend using Ubuntu Server 22.04 or 24.04 for maximum stability. For Direct Play within a local network, a Raspberry Pi is sufficient. However, if you plan to share your library with 3-4 friends remotely, prioritize an Intel CPU (7th Gen or newer). Intel’s QuickSync technology is like “magic” for handling 4K movies while keeping the CPU cool.
Detailed Implementation Steps
Step 1: Clean and Update the System
First, update your system to the latest version to avoid library conflicts. This step is simple but crucial.
sudo apt update && sudo apt upgrade -y
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
Step 2: Add the Official Repository
Avoid the default Ubuntu repository version as it’s often outdated. Use the official Jellyfin repository to receive the latest feature updates.
First, create a directory to store the security key:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg
Then, register the software repository with your system:
echo "deb [arch=$( dpkg --print-architecture ) signed-by=/etc/apt/keyrings/jellyfin.gpg] https://repo.jellyfin.org/ubuntu $( lsb_release -c -s ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
Step 3: Installation and Launch
Now, tell Ubuntu to download Jellyfin:
sudo apt update
sudo apt install jellyfin -y
Once installed, check if it’s “alive” with this command:
sudo systemctl status jellyfin
If you see active (running) in green, you’re 90% of the way there.
Step 4: Open the Firewall
Jellyfin uses port 8096 for communication. If your server has UFW enabled, open this port so other devices on your network can find the server:
sudo ufw allow 8096/tcp
Step 5: Web Interface Configuration
Open your browser and enter: http://your-server-ip:8096. The setup steps are quite intuitive, but one common stumbling block is Add Media Library.
Important note: The jellyfin user must have read permissions for your media files. If you add a movie folder but no files appear, run these permission commands:
# Assuming movies are stored in /media/data/movies
sudo chown -R jellyfin:jellyfin /media/data/movies
sudo chmod -R 755 /media/data/movies
Performance Hack: Hardware Acceleration
This is my favorite part. Instead of making the CPU handle all the transcoding, offload it to the graphics card. Go to Dashboard -> Playback and find the Hardware acceleration section:
- Intel: Select QuickSync (The best choice for home servers).
- NVIDIA: Select NVENC (If you are using a dedicated card).
In practice, on my i5-10400 server with QuickSync enabled, I can stream 5 simultaneous 4K to 1080p streams. The CPU load stays around 12%, making it very efficient.
Troubleshooting
If you suddenly can’t access the web interface, don’t panic. Check the logs to find the cause:
sudo tail -f /var/log/jellyfin/jellyfin$(date +%Y%m%d).log
Common issues usually involve the hard drive not being mounted in time or the port being occupied by other Docker services.
Final Thoughts
Building your own media server not only improves your movie-watching experience but is also a great way to practice your Linux skills. Jellyfin offers a perfect balance between features and freedom. Good luck setting up your own premium movie collection!

