๐ Chapter 03 โ Videos & Jellyfin
Stream movies, TV shows, and family videos to every device in the house โ and to the phone on the road.
Learning Objectives
- Install and configure Jellyfin with hardware-accelerated transcoding
- Organize a media library for automatic metadata fetching
- Stream to TVs, phones, tablets, browsers, and game consoles
- Set up remote access so the family can watch from anywhere
Why Jellyfin
Jellyfin is a free media server that turns your NAS into a Netflix-for-your-own-content. Point it at a folder of video files, and it:
- Downloads metadata (titles, posters, episode lists, ratings) automatically
- Transcodes video on-the-fly for any device that asks
- Tracks playback position (where you stopped, what's next)
- Streams to browsers, smart TVs, phones, tablets, Roku, Apple TV, Fire TV, Nvidia Shield, Kodi, etc.
- Supports multiple users with separate watch histories
Why Jellyfin over Plex or Emby? Jellyfin is fully open source, free, and doesn't have a "premium" tier. Plex and Emby are fine products but their best features require a subscription.
Library organization
Jellyfin's metadata fetching is automatic โ if the files are named correctly. The convention:
The pattern: <Show Name> - S<##>E<##> - <Episode Title>.<ext>. Jellyfin parses this and fetches metadata. Misnamed files end up in a "Unknown" section that you can rename manually.
Movies
One folder per movie, with the year in the filename. Jellyfin uses the year to disambiguate remakes and find the right metadata.
TV shows
One folder per show, with subfolders per season. The show name in the folder path is what Jellyfin matches against its metadata database.
Home videos
Home videos don't have IMDB metadata. They go in their own "Home Videos" library, which Jellyfin treats as a flat folder. You can add custom metadata per video if you want.
Setting up libraries in Jellyfin
- Open Jellyfin (at
http://<nas>:8096). - Go to Dashboard โ Libraries โ Add Library.
- Choose content type: Movies, TV Shows, Music, Home Videos, etc.
- Set the folder:
/mnt/tank/Media/Movies(or wherever your library lives). - Set the metadata language: English (or your preference).
- Set the country: United States (or your country, for metadata sources).
- Enable "Fetch metadata from the internet" and "Fetch poster art."
- Save. Jellyfin will scan the folder and start fetching metadata.
The first scan takes a while. After that, new files are detected automatically (Jellyfin has a "library scan" scheduled task that runs every hour by default).
Hardware transcoding
When you play a video, three things can happen:
- Direct play: the device plays the file as-is. No CPU used on the NAS. Fastest, lowest quality adjustment.
- Direct stream: the file is remuxed (repackaged) but not re-encoded. Minimal CPU.
- Transcode: the file is re-encoded on-the-fly to match the device's requirements. Heavy CPU/GPU use.
Transcoding kicks in when the device can't play the original format. The most common cases:
- A 4K HEVC video being watched on a 1080p device
- An HDR video being watched on an SDR display
- A high-bitrate video being watched over slow Wi-Fi or cellular
For a 4-person family with mostly 1080p content, CPU transcoding is usually fine. For 4K HDR, you want hardware transcoding. The TrueNAS Jellyfin app exposes hardware acceleration settings in the app config.
If you have an Intel CPU with integrated graphics (most modern Intel chips)
Intel QuickSync is a hardware video encoder built into Intel CPUs. Configure Jellyfin to use it for transcoding. The TrueNAS app has a "hardware transcoding" toggle that, when set to "Intel QuickSync" (or "VAAPI" for Linux), enables this. Throughput goes from ~2-3 simultaneous 1080p transcodes on CPU to ~10+ on QuickSync.
If you have an NVidia GPU
Even better. NVENC is faster than QuickSync. Pass the GPU through to the Jellyfin container. Configuration is more involved but the throughput is real.
If you have neither
CPU-only works. For a 4-person family, expect to be able to transcode 1-2 1080p streams simultaneously on a modern CPU. If everyone is watching the same movie (direct play) or if everyone can direct-play their own content, transcoding is rare.
Users and access
Jellyfin has its own user system, separate from TrueNAS users. Create a Jellyfin user for each family member (or for each device):
- One user per family member (they get their own watch history, recommendations, parental controls)
- OR one user per "device" (the living room TV, the bedroom TV) if multiple people share the same TV
For TK's build: one user per family member. The TVs in the house each have a "Family TV" user, and the actual people log in on their own devices with their own accounts.
Client apps
Jellyfin has official and unofficial clients for every platform:
- Web: every modern browser. Just go to the Jellyfin URL.
- iOS / iPadOS / tvOS: "Jellyfin" in the App Store. The tvOS app is particularly good.
- Android / Android TV / Fire TV: "Jellyfin" in the Play Store. The Android TV app is the right way to use Jellyfin on a TV.
- Roku: official Jellyfin channel.
- Kodi: with the Jellyfin add-on. For power users who already use Kodi.
- Infuse (iOS/tvOS): third-party but excellent, especially for direct play of any format.
For most families: the web UI on laptops, the official Jellyfin app on phones and tablets, the official Jellyfin app on smart TVs. That's it.
Remote access
When the family is away from home, they can still watch their media. The flow:
- Tailscale is running on the phone (Chapter 08 of Volume 1).
- Open the Jellyfin app on the phone.
- Connect to the Jellyfin server using the Tailscale IP (e.g.
http://100.x.y.z:8096). - Browse the library. Play a movie. Jellyfin transcodes it (or direct-streams, depending on the network) and sends it to the phone.
This works anywhere in the world with no extra configuration. Tailscale handles the secure tunnel; Jellyfin handles the streaming.
Streaming a 4K HDR movie over cellular can use 7+ GB/hour. For remote streaming, set Jellyfin to transcode to 1080p or lower by default. The streaming quality setting in the Jellyfin app controls this per-device.
Library best practices
- One root folder per library. Don't mix Movies and TV Shows in the same folder.
- Don't put other files in the library folder. A stray .DS_Store or Thumbs.db doesn't break Jellyfin, but it's cleaner to keep the folder pure.
- Use the standard naming convention. Misnamed files are the #1 reason metadata doesn't fetch. Rename to match before adding to the library.
- Run a library scan after adding files. Automatic scans run hourly, but if you want to watch something now, force a scan from the dashboard.
Hardware considerations
| Scenario | CPU needs | GPU help? | Notes |
|---|---|---|---|
| Direct play (most common) | Minimal | None | Just needs to serve bytes over the network |
| 1 stream transcoding 1080p | Modern i5 | Nice to have | QuickSync or NVENC recommended for multiple streams |
| 1 stream transcoding 4K | Recent i7 / Ryzen 7 | Highly recommended | Software 4K transcoding is rough on most CPUs |
| 4 streams simultaneously | Recent i7 / Ryzen 7 | Almost required | Hardware transcode is the right answer |
Engineering Note
Jellyfin is one of the highest-leverage apps you can install. It replaces Netflix, Disney+, Hulu, and the family's DVD collection with the family's own NAS. The cost is a TV app setup; the benefit is "we never pay for streaming again, and we own everything we watch."
The setup time is real but front-loaded: organize the library once, configure hardware transcoding once, install the TV apps once. After that, the family uses it forever. The maintenance is low: a library scan after adding new content, occasional metadata refreshes, periodic app updates.
Summary
Jellyfin is the family media server. Movies in one folder, TV shows in another, with the right naming convention. Hardware transcoding (Intel QuickSync or NVENC) makes 4K possible on consumer hardware. Client apps for every platform. Tailscale for remote access. The success metric: the family watches their media through Jellyfin, not through another streaming service.
Checklist
- โฌ Organize your media into Movies/TV Shows folders with proper naming
- โฌ Add the libraries in Jellyfin; verify metadata fetches correctly
- โฌ Configure hardware transcoding if available
- โฌ Create a Jellyfin user per family member
- โฌ Install the Jellyfin app on every TV, phone, and tablet in the house
- โฌ Verify: from the living room TV, you can browse and play a movie
- โฌ Verify: from your phone over Tailscale, you can browse and play the same movie
Looking Ahead
Chapter 04 is documents. Paperless-ngx is to physical paperwork what Immich is to phone photos. The principle is the same: scan once, search forever, organized automatically. But the workflows are different โ paper documents are scanned, not auto-uploaded, and the categories (taxes, warranties, medical) are more structured than photos.