Media
A full self-hosted media pipeline, pinned to a single node with local SSD storage.
Every service in this group has its own page documenting how it runs: the values it is deployed with, and the trade-offs behind those choices.
| Service | What it does |
|---|---|
| Bazarr | Fetches and syncs subtitles for everything Sonarr and Radarr download |
| FlareSolverr | Solves Cloudflare challenges so Prowlarr can reach protected indexers |
| Jellyfin | Media server that streams the shared library to every screen in the house |
| Prowlarr | Manages the torrent indexers and feeds them to Sonarr, Radarr, and qBittorrent |
| qBittorrent | The download workhorse: pulls torrents to the media NAS and seeds them back |
| Radarr | Watches for movie releases, grabs them, and hands them to the download stack |
| Seerr | Where the household requests films and shows; approvals flow into Radarr and Sonarr |
| Sonarr | Watches for new TV episodes, grabs them, and hands them to the download stack |
| Tdarr | Transcodes and optimises the library so files play efficiently on every device |
| Whisper | Turns audio into text with local speech-to-text models |
Chart values
The services in this group share one source of truth. ArgoCD deploys them from a single chart, and the chart renders every service with exactly the values below, so the values live here on the group page rather than being repeated on each service page.
########################################
### Name of the project - Many variable
########################################
global:
projectName: media-systems
hostMediaMountPath: /mnt/ssd-large/media
configBasePath: /mnt/ssd-small/media-systems-config
timeZone: Europe/London
userID: 1000
nodeSelector:
kubernetes.io/hostname: opi5-worker-5-genai
tolerations:
- key: opi5.cluster/role
operator: Equal
value: data
effect: NoSchedule
##################################
### Applications configuration ###
##################################
applications:
bazarr:
name: bazarr
image: registry.opi5cluster.co.uk/media-systems/bazarr:1.6.0
configMount: /config
seriesMount: /data/movies
moviesMount: /data/tvshows
usePostgres: true
configExtension: yaml
ports:
http: 6767
flaresolverr:
name: flaresolverr
image: registry.opi5cluster.co.uk/media-systems/flaresolverr:v3.5.0
logLevel: info
logHtml: false
captchaSolver: none
usePostgres: false
ports:
http: 8191
jellyfin:
name: jellyfin
image: registry.opi5cluster.co.uk/media-systems/jellyfin:10.11.11
configMount: /config
seriesMount: /data/series
moviesMount: /data/movies
animeMount: /data/anime
othersMount: /data/others
## Expose to be able to reach jellyfin from the TV
LoadBalancerIP: 192.168.1.9
usePostgres: false
ports:
http: 8096
seerr:
name: seerr
image: registry.opi5cluster.co.uk/media-systems/seerr:v3.4.1
configMount: /app/config
usePostgres: false
ports:
http: 5055
prowlarr:
name: prowlarr
image: registry.opi5cluster.co.uk/media-systems/prowlarr:2.5.2
configMount: /config
usePostgres: true
configExtension: xml
ports:
http: 9696
qbittorrent:
name: qbittorrent
image: registry.opi5cluster.co.uk/media-systems/qbittorrent:5.2.3
configMount: /config/qBittorrent
downloadMount: /downloads
usePostgres: true
configExtension: conf
ports:
http: 8090
torrent: 6881
radarr:
name: radarr
image: registry.opi5cluster.co.uk/media-systems/radarr:6.3.0
configMount: /config
downloadMount: /downloads
mediaMount: /
usePostgres: true
configExtension: xml
ports:
http: 7878
sonarr:
name: sonarr
image: registry.opi5cluster.co.uk/media-systems/sonarr:4.0.19
configMount: /config
downloadMount: /downloads
mediaMount: /
usePostgres: true
configExtension: xml
ports:
http: 8989
tdarr:
name: tdarr
image: registry.opi5cluster.co.uk/media-systems/tdarr:2.86.01
configMount: /app/configs
serverMount: /app/server
logsMount: /app/logs
cacheMount: /cache
usePostgres: false
ports:
http: 8265
server: 8266
whisper:
name: whisper
image: registry.opi5cluster.co.uk/media-systems/whisper:v1.10.0
model: small
usePostgres: false
ports:
http: 9000 Source: media-systems/values.yaml