Media
Bazarr
Subtitles Provider service that works closely with sonarr and radarr. It
extracts subtitles from downloaded media, making it easier for media players
such as jellyfin or plex to display subtitles in a simple format without
forcing transcoding. There is also a feature to synchronize subtitles with the
audio when the quality is low, which helps ensure they display correctly while
watching media. In addition, Bazarr supports using whisper-ai to autogenerate
subtitles from the media file when no other providers are available.
It took some time to tweak the settings to get it right for my setup. The most
important setting I found was to use the embedded subtitles provider to
automatically extract subtitles from the file. Also, it's a good idea to change
the hearing-impaired extension to sdh, as Jellyfin may parse hi as Hindi.
Cleanuparr
A small project I added to my media services that automatically handled cleaning
up items stuck in sonarr and radarr queues. It also has features to
automatically block certain malicious content from being downloaded, which
helped when my server encountered problematic torrents. I tried using its
blacklisting feature, but found it restrictive for some trackers; fortunately it
allows handling public and private torrents separately.
ErsatzTV
Deprecated 12/25
ErsatzTV is an IPTV provider service that can create live channels using your
existing media library. It was handy when I wanted continuous background
playback without selecting content manually. Defining a channel is simple and
the service randomly generates a schedule based on the media you select. I
rarely use it now; tuning into a channel in jellyfin sometimes takes several
minutes to display content.
This was a fun service to experiment with, but I rarely used it in production — it mostly filled out my Jellyfin page.
Jellyfin
One of the best services I have configured, Jellyfin streams content from my media library to any device. Configuration is straightforward aside from transcoding. Learning how to enable and tune media transcoding took time: essentially transcoding decodes and re-encodes media/audio/subtitle formats to be compatible with the target device.
Through jellyfin I discovered the hardware needed to provide good transcoding
performance and learned a lot about Intel QSV. This is probably my most used
service. I also recently added SSO for easier browser logins.
GPU Configuration
Using an Intel iGPU or dGPU is a simple passthrough into the container: mount
/dev/dri and enable hardware transcoding. For NVIDIA GPUs you also need the
container toolkit referenced in docker.mdx.
JellyPlex Watched
Deprecated 12/25
When testing plex I found that migrating from jellyfin risks losing watch
history. JellyPlex-Watched synchronized watch history between the two and was
easy to set up.
Jellyseerr
I tried multiple media request services (ombi, requestarr) before finding
jellyseerr. It's a clone of overseerr tailored to Jellyfin and provides a
clean UI for requesting media to be downloaded via sonarr and radarr. I
configured default settings for TV shows and movies to control content quality.
Currently movies can be downloaded up to 4k, while shows are capped at 1080p.
Jellyseerr integrates with jellyfin for authentication, so no separate
accounts are required.
Lidarr
Deprecated 12/31/24
I tested Lidarr as an album organizer, but it did not fit my use case. Many tracks in my collection couldn't be matched, so I eventually stopped using it and managed music metadata manually.
Navidrome
Navidrome is a music streaming service similar in purpose to Jellyfin but
focused on audio. It was simple to configure. Early on I had issues with parsing
m3u playlists due to Windows vs Linux path formatting; I wrote a script to
convert playlist paths to a Unix-compatible format.
Notifiarr
notifiarr is not self-hosted here; I run a client that connects to the
notifiarr server. I keep it because it produces neat Discord messages for media
updates. Some hosted applications in my stack also offer direct support for
Notifiarr.
Plex
I explored the plex ecosystem, including the sonic sage music feature. The
UI is polished and many users prefer it over Jellyfin. However, I dislike the
extra advertising and bundled content. Plex is currently running a full library
scan in my setup; a neat feature is adaptive streaming quality based on
bandwidth.
Profilarr
Deprecated 1/25/26
Profilarr was a configurable UI for managing profiles and was similar to
Recyclarr. It offered opinionated, prebuilt profiles based on Trash Guides which
made syncing to radarr and sonarr straightforward. For some profiles you can
lock scope to a specific service (e.g., Radarr), which caused initial confusion
but worked well once configured.
Over time I became frustrated with Profilarr's sync databases and the lack of some profiles (anime). I eventually switched back to Recyclarr.
Prowlarr
Prowlarr manages a custom list of torrent trackers and queries them to provide
download compatibility for radarr and sonarr. It can synchronize tracker
information into those services and supports prioritization. Early on I relied
on public trackers; over time I moved to private trackers for better quality. I
also use Prowlarr to search for books.
Radarr
Radarr handles movie imports. It synchronizes trackers from Prowlarr and sends
downloads to qbittorrent. Completed torrents are tagged and processed (copied
or hardlinked) so media servers like jellyfin can discover them. I define
quality profiles to rank desired content; these profiles are now managed by
recyclarr.
Deprecated 11/1/25
Recyclarr
When configuring quality profiles for sonarr and radarr I found Trash
Guides. Trash Guides provide regexes that help rank
results during searches. Recyclarr lets you centralize profiles and synchronize
them to Sonarr and Radarr, and it polls Trash Guides to keep profiles up to
date.
I created custom profiles for different content types. Currently Sonarr prefers
1080p (blu-ray not remux) and Radarr prefers 4k (blu-ray not remux). I also
avoided formats like true-hd that can force expensive audio transcoding.
Recyclarr also sets naming schemes that are friendly for jellyfin.
I revisited Recyclarr after earlier issues and improved my configuration and
monitoring (I added apprise to notify on sync changes and failures).
Sonarr
Sonarr handles TV-show imports. It synchronizes trackers from Prowlarr and downloads content with proper categories and hardlinking. Quality profiles for Sonarr are also managed by recyclarr.
Watchstate
A lightweight dashboard for tracking watched/played state across media services.
Deployed at watchstate.dripdrop.pro in this repo's compose with the image
ghcr.io/arabcoders/watchstate. It's proxied behind traefik and exposes both
a web UI and an API used by other integrations.
Whisper
Deprecated 3/26/26
A handy addition to bazarr, Whisper leverages a whisper-ai model to parse
audio tracks and auto-generate subtitles. It's used as a fallback when other
subtitle providers fail and is reasonably accurate. Running the GPU model with
the NVIDIA 3060 performed well; I later tuned VFIO binding to better share the
GPU and unload the model when idle.
Removed due to little usage from bazarr.