LabHub

Blog

Self-Hosted Media and Homelab 2026 — Jellyfin / Immich / Navidrome / Audiobookshelf / arr Stack / Tdarr Deep Dive

한국어English日本語

Prologue — The 2025 Crack, the 2026 Reshuffle

In spring 2025, Plex announced a price hike and a paywall on remote streaming on the same day. The question "why am I paying to watch my own content on my own server from my own phone?" carpeted r/selfhosted and r/Plex for a week, and the next week the Jellyfin wiki and GitHub issue tracker exploded with traffic. The community started calling it the "Plex Exodus."

By lucky timing, Jellyfin had just stabilized its 10.10 release. AV1 decode, Intel Arc / N100 iGPU hardware transcoding, HDR tone mapping, Trickplay thumbnails — most of what Plex had been holding behind its paid tier started working for free in the open-source camp.

This piece maps the self-hosted media homelab as it settled by May 2026 after that crack. Video (Jellyfin/Plex/Emby), photos (Immich/Photoprism), music (Navidrome), audiobooks (AudioBookshelf), comics and ebooks (Komga/Kavita), automation (the arr stack), transcoding (Tdarr/Unmanic/FileFlows), and the hardware and remote-access layer that holds it all up.

By the end you should know how far a single N100 mini PC can go, how far one NAS can carry a whole family's media stack, and that the cost lands well below a year of Netflix.


1. The 2026 Self-Hosted Map — Life After the Plex Affair

As of May 2026, the self-hosted media stack roughly arranges itself like this.

CategoryFlagship toolLicenseOne-line take
Video serverJellyfinGPLThe 2026 standard. First-choice Plex sub
Video serverPlexCommercialStill UX leader, but paywalling fast
Video serverEmbyMixedMiddle ground, losing momentum
Photo libraryImmichAGPLDe facto Google Photos replacement
Photo libraryPhotoprismAGPLStrong as a static gallery
MusicNavidromeGPLSubsonic-compatible, Spotify vibe
AudiobooksAudioBookshelfGPLAudiobooks plus podcasts
ComicsKomgaMITCBZ/CBR specialist with OPDS
Comics + booksKavitaGPLCombined comics + ebooks + manga
AutomationSonarr/Radarr/etc.GPLThe spine of media automation
IndexerProwlarrGPLSingle hub for arr indexers
SubtitlesBazarrGPLAuto-fetch subtitles for the library
RequestsJellyseerrMITIntegrated requests for Jellyfin/Plex
RequestsOverseerrMITPlex-only requests
DownloadsqBittorrentGPLDe facto torrent client
DownloadsSABnzbd / NZBGetGPLUsenet clients
TranscodingTdarr / UnmanicGPLLibrary-wide batch transcoding
TranscodingFileFlowsMixedWorkflow-based pipeline
CleanupFileBotCommercialBest-in-class filename normalization
GuidesTRaSH-GuidesCC BY-NC-SAThe bible of arr quality profiles

One change jumps off that table. Almost every core piece of 2026 self-hosted media has landed under a strong open-source license — GPL, AGPL, or MIT. While Plex slid from free toward partial paywall, the open-source side moved the other way and caught up or passed Plex on the things Plex used to be uniquely good at.

The minimal 2026 homelab

The baseline for "I want a family media stack without dedicating a room to it" usually looks like:

Total hardware bill around USD 350 to 450 plus disks. Electricity for an N100 averages 8 to 12 W — a couple of dollars a month. Cheaper than the combined cost of Netflix, Disney+, Apple Music, and Audible inside a year.


2. Jellyfin 10.10 — Solid Transcoding At Last

For years Jellyfin earned the same complaint. "On paper it does everything Plex does. In practice transcoding breaks." The 10.9 / 10.10 series in 2024 to 2025 finally moved that needle.

What 10.10 brought

Bring it up with one Compose file

# docker-compose.yml
services:
  jellyfin:
    image: jellyfin/jellyfin:10.10.4
    container_name: jellyfin
    user: '1000:1000'
    network_mode: host
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /mnt/media/movies:/media/movies:ro
      - /mnt/media/tv:/media/tv:ro
      - /mnt/media/music:/media/music:ro
    devices:
      - /dev/dri:/dev/dri # Intel QSV / AMD VAAPI
    restart: unless-stopped
    environment:
      - JELLYFIN_PublishedServerUrl=https://jellyfin.example.com

Passing /dev/dri to the container is the single line that turns on N100, Arc, and iGPU transcoding. Host networking is there so DLNA discovery works.

Does the N100 really sustain N parallel transcodes?

Benchmark in one breath. Direct-play 1080p H.264 with AAC: unlimited. 4K HEVC HDR transcoded to 1080p H.264 SDR: about 1.5 to 2 concurrent on an N100. Add an Arc A380 (around USD 100) and you jump to six to eight concurrent. 4K Dolby Vision Profile 7 is still finicky — keep client-side direct play in mind for those titles.

Where Jellyfin still trails

Switching from Plex to Jellyfin — checklist


3. The Plex 2025 Affair — What Changed

In April 2025 Plex announced two things at once.

  1. A Plex Pass price increase. Monthly, yearly, and lifetime all went up 30 to 50 percent.
  2. A remote-streaming paywall. Watching your own server from outside your network — previously free — was gated behind Plex Pass or the new Remote Watch Pass.

The second one was the lightning rod. The whole identity of a self-hosted media server is "my data, my device, anywhere." Putting a gate on the "anywhere" part hit a nerve. The most-quoted comment on r/selfhosted was something like:

My internet, my electricity, my disks, my files. And to watch them from outside I have to pay Plex? Then maybe Plex was never the right answer.

What Plex still does well

To be fair, Plex still wins on several fronts.

Stay on Plex if

Leave Plex if

Where Emby sits

Emby is wedged between Plex and Jellyfin. Its core is partly open source, with key features behind the Emby Premiere subscription. By 2026 its momentum has clearly faded, and new open-source contributions flow almost entirely to Jellyfin. People with smoothly running Emby servers stay; new homelabs rarely start there.


4. Immich — The Google Photos Answer

Photos are a different category from video. The volume of data added daily, the urgency of backup, the family-wide sharing, and — especially after the end of free Google Photos — the appetite for a serious alternative all exploded together. By 2026, Immich effectively owns that seat.

What Immich does well

A Compose excerpt

services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:release
    container_name: immich_server
    volumes:
      - /mnt/photos:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file: .env
    depends_on:
      - redis
      - database
    ports:
      - '2283:2283'
    restart: always

  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:release
    container_name: immich_ml
    volumes:
      - ./model-cache:/cache
    env_file: .env
    restart: always

  redis:
    image: redis:7-alpine
    container_name: immich_redis
    restart: always

  database:
    image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0
    container_name: immich_postgres
    env_file: .env
    volumes:
      - ./postgres:/var/lib/postgresql/data
    restart: always

Postgres ships with pgvector / vectorchord extensions. That is what powers cosine-similarity searches over CLIP embeddings.

Operational traps

Immich vs Photoprism vs PhotoStructure

ItemImmichPhotoprismPhotoStructure
LicenseAGPLAGPLCommercial
Mobile appsExcellentDecentSparse
Semantic searchCLIP, strongTensorFlow, decentWeak
BackendPostgres + pgvector + RedisMariaDBSQLite
Ops overheadMediumLowLow
MomentumVery activeModerateSlowing

Photoprism still appeals if you want to treat your photos as a catalog and run mobile auto-backup with a different tool. PhotoStructure is good at merging multiple libraries but its 2026 momentum is low.


5. Navidrome and AudioBookshelf — Music and Audiobooks

A Subsonic-API-compatible music server. Lays a Spotify-style UX over your own library.

services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000
    ports:
      - '4533:4533'
    environment:
      ND_LOGLEVEL: info
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ''
      ND_SCANSCHEDULE: '@every 6h'
      ND_LASTFM_ENABLED: 'true'
    volumes:
      - ./data:/data
      - /mnt/music:/music:ro
    restart: unless-stopped

Artist/Album/01 - Track.flac is the safest tree layout. Normalize metadata in MusicBrainz Picard once and Navidrome will love you.

AudioBookshelf

An audiobook plus podcast server. The thing Plexamp does not do well.

Audiobook files are big — 1 to 2 GB per title is common. Keep them on a separate NAS path and mount read-only.

services:
  audiobookshelf:
    image: ghcr.io/advplyr/audiobookshelf:latest
    ports:
      - '13378:80'
    volumes:
      - /mnt/audiobooks:/audiobooks
      - /mnt/podcasts:/podcasts
      - ./config:/config
      - ./metadata:/metadata
    environment:
      - TZ=Asia/Seoul
    restart: unless-stopped

Where Plexamp and Subsonic fit

Plexamp is still a top-tier experience for Plex users. The 2026 consensus is that Navidrome plus a polished Subsonic client has largely caught up.


6. Komga and Kavita — Comics and Ebooks

Two strong contenders almost evenly split the comic and ebook self-hosting share.

Komga

Kavita

Picking criteria are simple. Comic-heavy library: Komga. Mixed comics, ebooks, and magazines: Kavita. Plenty of people run both and split libraries by content type.

services:
  komga:
    image: gotson/komga:latest
    ports:
      - '25600:25600'
    volumes:
      - ./config:/config
      - /mnt/comics:/data
    environment:
      - TZ=Asia/Seoul
    restart: unless-stopped

  kavita:
    image: jvmilazz0/kavita:latest
    ports:
      - '5000:5000'
    volumes:
      - ./kavita-config:/kavita/config
      - /mnt/books:/books
    environment:
      - TZ=Asia/Seoul
    restart: unless-stopped

Ebook conversion and cleanup

File format matters for a comic and book library. A lot of people run Calibre on the side to normalize EPUB, clean metadata, and tidy cover art. Add Calibre-Web on top for a slick web OPDS experience.


7. The arr Stack — Sonarr / Radarr / Lidarr / Readarr / Prowlarr / Bazarr

The arr stack is still the spine of media automation in 2026 — same shape, sturdier in the joints.

Role split

ToolDomainOne-liner
SonarrTV showsTracks new episodes and queues downloads
RadarrMoviesManages the film collection
LidarrMusicTracks artists and albums
ReadarrEbooks + audiobooksActive fork work as of 2026
WhisparrAdultRadarr variant
ProwlarrIndexer hubSingle entry point for indexers
BazarrSubtitlesMirrors the Sonarr / Radarr library

The flow in one picture

Request system or wishlist seeds an entry → arr tool searches via Prowlarr-managed indexers → download client (qBittorrent / SABnzbd) gets the job → upon completion files move to the import path with normalized names → library refresh → Bazarr fetches subtitles → Jellyfin or Plex reloads metadata.

What Prowlarr changed

The old way: configure indexers separately in Sonarr, Radarr, Lidarr, and so on. Prowlarr collapses that into a single hub. Add an indexer once and every arr picks it up automatically. Passwords, cookies, and RSS URLs all live in one place.

Bazarr — the subtitle endgame

Bazarr mirrors the Sonarr / Radarr library and pulls subtitles from OpenSubtitles, Subscene, Addic7ed, Subdivx, and others automatically. Language priorities (for example Korean, then English, then Japanese), score thresholds, forced-subtitle handling, sync corrections — it manages all of that. Practically a requirement for multi-language families.

A docker-compose snippet

services:
  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Seoul
    volumes:
      - ./sonarr/config:/config
      - /mnt/media:/media
      - /mnt/downloads:/downloads
    ports:
      - '8989:8989'
    restart: unless-stopped

  radarr:
    image: lscr.io/linuxserver/radarr:latest
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Seoul
    volumes:
      - ./radarr/config:/config
      - /mnt/media:/media
      - /mnt/downloads:/downloads
    ports:
      - '7878:7878'
    restart: unless-stopped

  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Seoul
    volumes:
      - ./prowlarr/config:/config
    ports:
      - '9696:9696'
    restart: unless-stopped

  bazarr:
    image: lscr.io/linuxserver/bazarr:latest
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Seoul
    volumes:
      - ./bazarr/config:/config
      - /mnt/media:/media
    ports:
      - '6767:6767'
    restart: unless-stopped

This is where most first-time arr setups break. The download folder and the media folder have to live on the same filesystem so hardlinks can connect them; that is what lets a file be seeded and also live in the library without doubling disk usage. Recommended layout:

Mount /data as a single tree into the containers. Splitting /data/torrents and /data/downloads breaks hardlinks.


8. Jellyseerr and Overseerr — Request Systems

Where do you receive "can you add this movie" requests from family? Slack and chat threads forget. The request system fills that gap.

Overseerr — Plex pedigree

Jellyseerr — Overseerr fork with Jellyfin and Emby support

Operating tips


9. qBittorrent and SABnzbd — Download Clients

qBittorrent

The de facto torrent client. Light, with a category and tag system that maps neatly to the arr stack, and a clean web UI.

Gluetun — the VPN container pattern

services:
  gluetun:
    image: qmcgaw/gluetun
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    environment:
      - VPN_SERVICE_PROVIDER=mullvad
      - VPN_TYPE=wireguard
      - WIREGUARD_PRIVATE_KEY=$$WIREGUARD_PRIVATE_KEY
      - SERVER_CITIES=Stockholm
    ports:
      - '8080:8080' # qBittorrent webui
      - '6881:6881' # torrent traffic
      - '6881:6881/udp'
    restart: unless-stopped

  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    network_mode: 'service:gluetun'
    depends_on:
      - gluetun
    environment:
      - PUID=1000
      - PGID=1000
      - WEBUI_PORT=8080
    volumes:
      - ./qbittorrent/config:/config
      - /data/torrents:/data/torrents
    restart: unless-stopped

All qBittorrent network traffic is forced through Gluetun's VPN tunnel. If Gluetun dies, qBittorrent loses internet — built-in kill switch.

SABnzbd / NZBGet — Usenet

Usenet lives in its own universe. You need an indexer subscription and a Usenet provider (SuperNews, Newshosting, Eweka), but speeds saturate the line reliably, there is no seeding obligation, and tracking risk is essentially nil.


10. Tdarr, Unmanic, FileFlows — Transcoding Orchestration

Libraries get huge fast. One 8K Blu-ray remux is 80 GB; one season of a show is 200 GB. Combine that with a family member whose client only supports H.264 and live transcoding starts burning CPU. The answer is to transcode in advance, in bulk.

Tdarr

Unmanic

FileFlows

A sample policy — library standardization

Encode the policy into Tdarr and you can move a 5 TB library to 2.5 TB within a month. The catch: encoding equals CPU and GPU time equals electricity equals wall-clock days. A standalone N100 takes days per 4K HEVC encode. An NVIDIA NVENC card or an Arc A380 cuts that to something usable.

FileBot — the cleanup endgame

FileBot is not an encoder — it is the gold standard for normalizing filenames and folder structures. The kind of fix-the-old-library, Korean-and-Japanese-collection, family-video-import scenarios that the arr stack cannot auto-detect. Commercial license but one-time purchase.


11. TRaSH-Guides — The arr Configuration Bible

TRaSH-Guides (https://trash-guides.info) is the community-maintained reference for arr quality, naming, and folder structure. By 2026 it is fair to say that the vast majority of people running the arr stack seriously follow it.

What it covers

Recyclarr — arr configuration as YAML

# recyclarr.yml
sonarr:
  main:
    base_url: http://sonarr:8989
    api_key: !env_var SONARR_API_KEY

    quality_definition:
      type: series

    custom_formats:
      - trash_ids:
          - 9b27ab6498ec0f31a3353992e19434ca # WEB-DL
          - 6a7b462c80caa912f46c8c6e1eb0a31f # Korean
        quality_profiles:
          - name: WEB-1080p

radarr:
  main:
    base_url: http://radarr:7878
    api_key: !env_var RADARR_API_KEY

    quality_definition:
      type: movie

Run Recyclarr on cron daily and the latest TRaSH recommendations propagate into your arr instances automatically. The value compounds as you add more instances.

A five-step on-ramp

  1. Unify the folder layout with the TRaSH recommendation first (/data/media, /data/torrents).
  2. Set Sonarr and Radarr filename formats to the TRaSH conventions.
  3. Add one or two key Custom Formats (for example x265 penalty, Korean, HDR10).
  4. Start with one baseline profile such as WEB-1080p or BluRay-2160p.
  5. Adopt Recyclarr to keep future updates synchronized.

12. Hardware — N100, Synology, UnRAID, TrueNAS Scale, Proxmox

N100 / N305 mini PCs — the 2026 default

Intel N100 / N305 mini PCs went mainstream between 2024 and 2025. Beelink, MINISFORUM, GMKtec, and ASUS NUC 11 to 14 are the common brands.

Enough for a family media server on its own. SATA bays are limited so plan an external USB HDD or a separate NAS.

Synology — still dominant, with caveats

Synology had a noisy 2025 — a new 7th-generation lineup and tighter first-party HDD compatibility requirements on some models. By 2026:

UnRAID — the de facto media-homelab OS

UnRAID supports mixed-size HDDs, per-disk spin-down, and an optional ZFS pool. The most popular media-homelab choice.

TrueNAS Scale — the ZFS answer

A ZFS-based NAS OS for people who take data integrity, snapshots, and replication seriously.

Proxmox VE — virtualization king

If you want one host running many VMs and containers (not just media), Proxmox is the answer.

Disks — RAID is not backup

This is one of the self-hosting commandments.


13. Remote Access — Tailscale, Cloudflare Tunnel, WireGuard

Tailscale — the first answer

Ninety percent of homelabs end here.

Cloudflare Tunnel — when you need a public surface

For sharing something with people outside your family — say, a Jellyseerr that a friend uses, or a public blog. Run cloudflared on your server and Cloudflare brokers your domain back to it without opening any ports.

Bare WireGuard

The lightest and fastest VPN protocol. Tailscale uses it internally. Running it bare means handling key distribution, handshakes, and dynamic DNS yourself. By 2026 most self-hosters have moved on to Tailscale or Netbird.


14. Korean and Japanese Homelab Scenes

Korea

Japan

Both countries


15. Security, Backup, Operations — Five Things That Bite

  1. Validate your VPN-container kill switch. Once a month, kill Gluetun and confirm qBittorrent loses internet rather than leaking to your ISP.
  2. Backups: 3-2-1. One original, one separate disk, one cloud. One restore rehearsal per quarter.
  3. Logs and alerts. Watchtower auto-updating containers is risky. Diun for notifications plus manual review is the better stance.
  4. Certificate and token expiry. Bazarr / Sonarr API keys, Cloudflare API tokens, WireGuard keys — keep them in a separate vault.
  5. Legal gray zones. Parts of the self-hosted media workflow (especially indexers and trackers) sit under jurisdiction-specific rules. Know what you are pulling and from where.

16. References

Comments

No comments yet.

Sign in to leave a comment