MEDIA STACK STATUS
[ OK ] Requests
[ OK ] Indexers
[ OK ] Downloaders
[ OK ] Processing
[ OK ] Library
[ OK ] Playback

Mijn homelab draait voor een groot deel om media. Films, series en IPTV, volledig self-hosted en geautomatiseerd. In deze post leg ik mijn complete media-stack uit: van aanvraag tot het moment dat iets in Jellyfin verschijnt.

Dit is geen “ik heb tool X geïnstalleerd” verhaal, maar hoe alles samenwerkt.

Overzicht#

Mijn media-stack bestaat uit de volgende lagen:

  • Requests → Seerr, Wizarr
  • Indexers → Prowlarr
  • Downloaders → qBittorrent, SABnzbd
  • Automation → Radarr, Sonarr, Bazarr
  • Processing → Unpackerr, qbit_manage, cross-seed, Cleanuparr
  • Library & playback → Jellyfin
  • Monitoring → Jellystat

Mijn media-stack draait grotendeels in Docker binnen één LXC op Proxmox, met één belangrijke uitzondering: Jellyfin.

Jellyfin draait in een aparte Debian LXC zonder Docker, omdat dit betere prestaties geeft bij hardware transcoding en directe GPU-toegang.


1. Requests (wat wil ik kijken?)#

Gebruikers (of ikzelf) vragen content aan via:

  • Seerr → films en series aanvragen
  • Wizarr → onboarding en gebruikersbeheer

Dit voorkomt dat ik handmatig dingen moet zoeken of toevoegen.

👉 Alles begint hier.


2. Indexers (waar vind ik content?)#

Ik gebruik Prowlarr als centrale indexer manager.

Waarom:

  • één plek voor al mijn indexers
  • integratie met Radarr en Sonarr
  • makkelijk beheer van API keys en categorieën

Prowlarr stuurt zoekopdrachten door naar mijn downloaders.


3. Downloaders (het echte werk)#

Mijn setup:

  • qBittorrent → torrents
  • SABnzbd → usenet

Waarom beide:

  • torrents voor snelheid en availability
  • usenet voor betrouwbaarheid en completeness

Downloads gaan naar gescheiden locaties:

  • /downloads → tijdelijke data
  • /ratio → torrents voor seeding
  • /media → uiteindelijke library

👉 Scheiding voorkomt chaos.


4. Automation (*arr stack)#

Hier gebeurt de magie.

  • Radarr → films
  • Sonarr → series
  • Bazarr → subtitles

Wat ze doen:

  • zoeken automatisch naar releases
  • selecteren op kwaliteit (via Recyclarr)
  • sturen downloads naar qBittorrent/SABnzbd
  • importeren automatisch naar je library

Ik gebruik ook:

  • Recyclarr → consistente quality profiles
  • Profilarr / Suggestarr → aanbevelingen en profielbeheer

👉 Dit is de kern van de automatisering.


5. Processing (waar veel setups stuklopen)#

Hier zit het verschil tussen “werkt” en “werkt goed”.

Mijn stack:

  • Unpackerr → pakt downloads automatisch uit

  • qbit_manage → houdt torrents netjes (cleanup, tagging, ratio)

  • cross-seed → zoekt betere matches voor bestaande torrents

  • Cleanuparr → ruimt oude/ongebruikte bestanden op

👉 Zonder deze laag wordt je library snel rommelig.


6. Library & Playback#

Alles komt uiteindelijk hier uit:

  • Jellyfin

Waarom Jellyfin?#

  • volledig self-hosted
  • geen afhankelijkheid van externe diensten
  • volledige controle over je library

Aanvullend#

  • Jellystat → statistieken, gebruik en inzicht

Waarom Jellyfin buiten Docker draait#

Jellyfin is de enige service in mijn stack die niet in Docker draait, maar direct in een Debian LXC.

De reden is simpel: performance en hardware toegang.

Problemen met Docker#

In mijn eerdere setup draaide Jellyfin in Docker, maar daar liep ik tegen het volgende aan:

  • GPU passthrough was minder stabiel
  • hardware transcoding werkte niet altijd consistent
  • extra lagen (Docker → LXC → host) zorgden voor overhead

Waarom LXC beter werkt#

Door Jellyfin direct in een LXC te draaien:

  • heb ik directere toegang tot de GPU
  • werkt hardware transcoding stabieler
  • is performance merkbaar beter bij meerdere streams

Conclusie#

👉 Voor de rest van mijn stack is Docker ideaal
👉 Maar voor Jellyfin kies ik bewust voor performance boven uniformiteit


7. De volledige flow#

Zo loopt alles van begin tot eind:

  1. Request via Seerr
  2. Prowlarr zoekt indexers af
  3. Download via qBittorrent of SABnzbd
  4. Unpackerr verwerkt bestanden
  5. Radarr/Sonarr importeren naar library
  6. Cleanuparr ruimt op
  7. Jellyfin indexeert content
  8. Jellystat monitort gebruik

👉 Geen handmatige stappen nodig.


8. Waarom deze setup?#

Mijn doelen:

  • zo min mogelijk handmatig werk
  • duidelijke scheiding tussen downloads en library
  • consistente kwaliteit
  • makkelijk uitbreidbaar

Wat ik bewust vermijd:

  • alles in één map dumpen
  • afhankelijk zijn van één tool
  • onduidelijke workflows

9. Wat nog beter kan#

Mijn volgende stappen:

  • betere monitoring (alerts op storage en failures)
  • verdere automatisering van requests
  • optimaliseren van IPTV integratie
  • documentatie (zoals deze blog 😄)

Conclusie#

Mijn media-stack is geen verzameling losse tools, maar een pipeline.

Van aanvraag tot playback loopt alles automatisch en voorspelbaar. Dat maakt het niet alleen makkelijker in gebruik, maar ook beter te beheren.

In volgende posts ga ik dieper in op specifieke onderdelen, zoals:

  • Jellyfin + IPTV
  • mijn downloadpipeline
  • storage en folder structuur