Plex used to be the answer for “I have a hard drive full of movies and want to watch them on my TV.” Then Plex started showing ads, requiring sign-in, gating features behind subscriptions, and breaking the offline path. Jellyfin is the fork that didn’t go down that road — fully open source, no cloud account, no ads, no premium tier. The cost is that the client situation is messier and the Roku app — historically the rough spot — is still rough.
Here’s what an actually-working Jellyfin setup looks like in 2026: a small Linux box with an Intel iGPU doing hardware transcoding, the right client per device, and the gotchas that bite people coming from Plex.
The hardware that matters
- An Intel CPU with QuickSync — every Intel from 8th-gen onwards (i3-8100, i5-8400, etc.) has built-in hardware video transcoding via the iGPU. A used N100 mini-PC for $150 is the sweet spot in 2026: low power, plenty of QSV horsepower for 4-5 simultaneous 1080p transcodes.
- An old NUC works too. A 6th-gen NUC from 2017 will hardware-transcode 1080p just fine; even 4K HEVC if it’s 7th-gen+.
- Storage — wherever your media lives. NAS over NFS works; local USB drives work; a fat SSD inside the box works. Jellyfin doesn’t care.
- Avoid Apple Silicon for the server itself — Jellyfin’s hardware-transcoding support on M1/M2/M3 is nascent and not as smooth as Intel. The iGPU on a $150 N100 box outperforms a $2000 Mac mini for transcoding throughput.
Install (Docker, the easy path)
# /opt/jellyfin/docker-compose.yml
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
user: 1000:1000
network_mode: host # required for DLNA discovery
volumes:
- ./config:/config
- ./cache:/cache
- /srv/media:/media:ro
devices:
- /dev/dri:/dev/dri # Intel iGPU for hardware transcoding
restart: unless-stopped
environment:
- JELLYFIN_PublishedServerUrl=http://192.168.1.50:8096Two lines that matter:
devices: /dev/dri:/dev/driexposes the iGPU into the container. Without this, Jellyfin transcodes on CPU, and your 4K streams will smoke a small box.network_mode: hostis what makes DLNA / Bonjour discovery work — clients on the LAN find the server by broadcast. With Docker’s default bridge network, none of that works without messing with macvlan.
Bring it up:
cd /opt/jellyfin
docker compose up -d
# wait ~30 seconds, then visit http://<server-ip>:8096The first-run wizard is straightforward: language, admin user, library path (point at your /media mount). After this, Jellyfin scans the library — for a few-thousand-file library this takes 10-30 minutes the first time, near-instant on subsequent scans.
Enabling hardware transcoding
Dashboard → Playback → Transcoding:
- Hardware acceleration: Intel QuickSync (QSV).
- QSV device:
/dev/dri/renderD128(the default). - Enable hardware decoding for: tick H264, H265/HEVC, VP9, AV1 (if your CPU supports them — N100 supports all four).
- Enable hardware encoding: on.
- Enable Tone mapping: on (handles HDR → SDR for non-HDR clients).
- Throttle transcodes: on.
Test by playing a 4K HEVC file from a 1080p client (e.g. an old TV). On the Jellyfin dashboard’s Active Devices view, the transcoding indicator should show “QSV (Intel Quick Sync)” — not “Software”. If it’s software, the iGPU isn’t being used; check that /dev/dri exists on the host and is mapped into the container.
The client situation, by device
- Apple TV. Excellent. The official Jellyfin app on tvOS is solid, supports HDR, Dolby Atmos passthrough, plays nice with the Apple TV remote. This is the best Jellyfin client experience.
- iPhone / iPad. Excellent. Native iOS app + Swiftfin (a community alternative that’s faster to my taste). Background audio, Picture-in-Picture, AirPlay all work.
- Android phones / tablets. Excellent. The Android app is mature, Findroid is a popular alternative.
- Smart TVs (LG webOS, Samsung Tizen, Android TV). Good on Android TV / Google TV (the official app is solid). Mediocre on LG webOS (the community LG app exists, with quirks). Bad on Samsung Tizen — Samsung makes it hard to side-load apps; the official Jellyfin Tizen app exists but installation is convoluted.
- Roku. The historical pain point. The official Roku app is OK now (it was missing for years; community devs eventually shipped one in 2023). Subtitle handling and 4K HEVC playback are still inconsistent. If your house is Roku-only, accept that you’ll do more transcoding than you would with an Apple TV.
- Web browser. Always works. The Jellyfin web UI renders fine in any modern browser; useful for the laptop fallback.
The library that doesn’t get re-scanned for hours
The single thing most new Jellyfin users do wrong is library naming. Jellyfin uses filename heuristics to match files to TheMovieDB / TheTVDB metadata. If your files are named movie.mkv or S01E03.mp4, matching fails and you get a wall of red entries.
The naming patterns that just work:
/media/movies/Inception (2010)/Inception (2010).mkv
/media/tv/Severance/Season 01/Severance - S01E03 - In Perpetuity.mkv
/media/tv/The Bear/Season 02/The Bear - S02E01 - Beef.mkvYear in parens for movies. SnnEee for episodes. Episode title optional but useful. With this scheme, Jellyfin matches everything in one pass and you get correct posters, descriptions, cast lists.
The tool that automates this is FileBot (paid but worth it once) or tinyMediaManager (free, less polished). Either one renames a messy folder of downloads into the canonical layout in one batch.
When Plex is still better
- Casting outside your home. Plex’s relay handles port-forwarding-less remote streaming. Jellyfin requires you to either set up Tailscale on every viewing device or open a port at home with a reverse proxy + SSL. Doable, but not zero-config.
- Sharing with family who aren’t technical. Plex’s account system lets you invite people; Jellyfin requires you to create local accounts and explain the URL.
- Music with great UX. Plexamp is a beautiful music client. Jellyfin’s mobile music apps are functional but less polished.
For the “I just want my own movies / shows on my TV without ads or accounts,” Jellyfin won me over after a month of dual-running it alongside Plex. The hardware-transcoded 4K-to-1080p stream looked identical, the apps were fine, and one less corporate account in the world feels good.
Photo: Home theater room by Curtis Adams on Pexels.
