How to Self-Host Jellyfin: Your Free Netflix at Home
Tutorials March 11, 2026 โ€ข 8 min read

How to Self-Host Jellyfin: Your Free Netflix at Home

H

Hostly Team

Self-Hosting Enthusiast

Build your own streaming platform with Jellyfin. This complete guide covers Docker deployment, hardware transcoding, remote access, and client apps โ€” all for free, forever.

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?

FeatureJellyfinPlexEmby
PriceFree foreverFree + $5/mo or $120 lifetimeFree + $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:

  1. Language โ€” Select your preferred language
  2. Create Admin User โ€” Set a username and strong password
  3. Add Media Libraries โ€” We'll configure these properly next
  4. Metadata Language โ€” Choose language for movie/show info
  5. 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)

  1. Log into your router
  2. Forward port 8096 (TCP) to your server's local IP
  3. 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:

Your media, your server, your rules.