⌂ Self-hosting

Jellyfin: a home media server for films, series and music

A practical Jellyfin guide: organising the library, choosing hardware, enabling hardware transcoding and streaming to TVs and phones without stutter.

Anyone who owns a collection of digitised films, series or concerts (from family DVDs to holiday videos) sooner or later wants to watch it comfortably on the TV, tablet or phone. Jellyfin is a free and open media server that does exactly that: it indexes the files, downloads covers and descriptions, remembers where you stopped watching and streams video to the devices in the house.

Why Jellyfin

Jellyfin started as a fork of Emby when Emby became closed source, and since then it has been developed by a community of volunteers. It has no paid plans, reserved features or mandatory accounts with external services: everything, users included, lives on the home server. There are clients for browsers, Android, Android TV, iOS, some smart TVs, and players such as Kodi through an add-on.

Organising the library

The quality of the experience depends almost entirely on how the files are named. Jellyfin recognises content by matching folder and file names against public metadata databases, so it pays to follow the conventions:

Movies/
  Movie Title (1999)/
    Movie Title (1999).mkv
Shows/
  Series Name (2010)/
    Season 01/
      Series Name S01E01.mkv

The year in brackets resolves most ambiguities between identical titles. For personal videos, which have no public metadata, you create a "home videos" library in which only folder names matter.

External subtitles with the same name as the video file, followed by the language code (for example .it.srt), are matched automatically.

Direct play and transcoding

The most important concept to understand is the difference between direct play and transcoding.

  • Direct play: the client supports the file's video, audio and subtitle formats. The server simply sends the data and the CPU load is almost zero.
  • Transcoding: the client does not support something (codec, resolution, image-based subtitles) or there is not enough bandwidth. The server must re-encode the video in real time, a very heavy operation.

This is why the choice of clients matters as much as the server: a player that supports HEVC and the main audio formats avoids most transcodes. Image-based subtitles, such as those on Blu-ray discs, often force you to "burn" them into the video, that is, to transcode.

Hardware acceleration

When transcoding cannot be avoided, the solution is to hand it to the graphics unit's video engine instead of the CPU. Jellyfin supports:

Technology Hardware
Intel Quick Sync (QSV) / VA-API Intel processors with integrated graphics
VA-API / AMF AMD graphics
NVENC/NVDEC NVIDIA cards
VideoToolbox Mac

In my work, the most balanced setup for a household is still a mini PC with a recent Intel processor: it uses little power and handles several simultaneous streams. In Docker you need to pass the graphics device (/dev/dri) to the container and enable acceleration under Playback → Transcoding, selecting the codecs your processor can actually decode.

Users and content control

Each family member can have their own user, with their own watch progress and visible libraries. For children you can restrict which libraries are accessible and set a maximum content rating. For shared TVs, a user with a simple PIN or quick login works well, without exposing the adults' accounts.

Access from outside the home

Watching your library while travelling is handy, but exposure needs thought:

  1. prefer a VPN or a private network between devices, so Jellyfin stays reachable only from your own devices;
  2. if you choose public access, put it behind a reverse proxy with HTTPS and disable login for users without a password;
  3. set a bitrate limit for remote connections in the network settings, so the home line's upload is not saturated.

Remember that the upload speed of a home connection is often the real limit: a high-quality file may need more bandwidth than is available, and the server will be forced to transcode to a lower quality.

Maintenance

  • Scheduled tasks (library scans, chapter extraction, trickplay image generation) can be heavy: schedule them at night.
  • Cache and metadata take up space and should live on an SSD; video files can sit on spinning disks.
  • Backups mainly concern the configuration folder, which holds users, progress and settings: films, if you own the originals, can be rebuilt.

In short

  • Jellyfin is free, needs no external accounts and has clients for almost every device.
  • File and folder names that follow the conventions are the foundation of a tidy library.
  • Direct play is the goal; transcoding should be delegated to graphics hardware.
  • Separate users and limits for children make the service suitable for the whole family.
  • For remote access, a private network and a bitrate limit are the way to go.
MM
Marco Marzaduri

Marco Marzaduri works in cybersecurity, digital forensics and web development. A computer science graduate, he combines rigorous technical analysis with attention to the people who use technology.

Read also