Repository navigation
Releases: bugrauluyurt/homelab-media-stack
Releases · bugrauluyurt/homelab-media-stack
Release list
homelab-media-stack 3.4.1
Immutable
release. Only release title and notes can be modified.
Fixed
- Retry failed scheduled health checks after five minutes with a bounded retry budget, ignore the checker's own retained failed status without hiding other unit failures, and send a recovery notification when a subsequent notifying check passes.
- Let Meeting mode confirm stopped transfers when qBittorrent retains missing-file entries with zero transfer speeds, without resuming those entries or hiding active transfers and API errors.
homelab-media-stack 3.4.0
Immutable
release. Only release title and notes can be modified.
Added
- Add an optional ebooks profile with standard Shelfmark (including its bundled browser) and Calibre-Web Automated, loopback-only setup, existing Prowlarr/download-client integration, isolated ingest and library mounts, endpoint health checks, and consistent Calibre catalogue backups. First-run accounts and Tailscale publication require explicit setup.
homelab-media-stack 3.3.0
Immutable
release. Only release title and notes can be modified.
Added
- Jellyfin viewers can search and download Open Subtitles for playback or save an SRT file to their device from the browser without installing an extension.
homelab-media-stack 3.2.0
Immutable
release. Only release title and notes can be modified.
Added
- Add an optional Proton VPN failover preset with an offline importer for verified P2P server
configurations, an explicit server pool, and setup, refresh and restore instructions. - Treat digest-pinned images as current during update checks without malformed registry requests.
homelab-media-stack 3.1.0
Immutable
release. Only release title and notes can be modified.
Added
- Glance gets a persistent Meeting mode control to pause torrents, optionally for one hour,
preserving manually stopped transfers and retrying after qBittorrent outages.
The control sits below Releases, follows the Glance theme, and shows loading and confirmation states.
homelab-media-stack 3.0.0
Immutable
release. Only release title and notes can be modified.
Breaking
- The repository layout is tidier, and upgrading needs two steps after
git pull: run
scripts/host-install, thenscripts/stack-up.- Scripts are named area first:
health-checkis nowstack-health,updateisstack-update,
backup-configisstack-backup,check-updatesisstack-update-check,notify-failureis
stack-failure-notify,storage-offisdrive-off(the alias too),sync-portis
vpn-port-sync,leak-testisvpn-leak-test,install-hostishost-install,firewallis
host-firewall,install-agentisagent-install,check-indexersisindexers-check,
add-indexers.pyisconfigure-indexers.py,render-scraparr-configisconfigure-scraparr,
throttle-downloadsisdownloads-throttle,watch-activityisactivity-watch,
sync-youtube.pyisyoutube-sync.py,add-viewer.pyisviewer-add.pyandcheckis
repo-check.host-installpoints the installed units at the new names. - The per-app config folders moved into
apps/, sostack-uprecreates the containers that
mount them (gluetun with qBittorrent and slskd, Jellyfin, Glance, Homepage, Grafana,
Prometheus, Scrutiny, Recyclarr). A local edit in one of them survives
git stash && git pull --ff-only && git stash pop. - The unit templates moved to
host/systemd/, and the community files to.github/.
- Scripts are named area first:
Added
repo-checkfails on a missing compose bind source, a broken link to a repo file, a script
without its executable bit or itsRuns:header;stack-healthchecks that installed units run
scripts that exist and that the repo has no root-owned paths.
Fixed
configure-grafana-watch.pyis executable, as the setup guide assumes, and indents its output
like the other configure scripts.- An empty
NTFY_SERVERin.envnow falls back to ntfy.sh in the Python scripts too, as it
already did in the bash ones, instead of sending alerts to an empty address.
homelab-media-stack 2.7.0
Immutable
release. Only release title and notes can be modified.
Changed
- French series (tagged
frenchin Sonarr) grab torrents without the 60-minute wait for Usenet,
so new episodes reach the ratio trackers' swarms early, when seeding them earns ratio. Re-run
configure-arr.pyto apply it. - The ratio-based trackers (Draupnirr, TR4KER) now serve new releases only: the apps grab from their
RSS feeds and interactive search, never from a backlog search, whose old releases cost ratio that
seeding can't earn back. Re-runadd-indexers.pyto apply it.
Fixed
add-indexers.pyno longer stops when a site times out while being added (TorrentProject2 is
down); it reports that one as failed and carries on.
homelab-media-stack 2.6.0
Immutable
release. Only release title and notes can be modified.
Added
- NZBFinder can join NZBgeek as a Usenet indexer: set
NZBFINDER_API_KEYin.envand re-run
configure-arr.py, which adds it to Prowlarr and so to every app.
Changed
- Cleanuparr now removes stalled private torrents too, such as those a tracker refuses for a low
ratio, and watches Lidarr's downloads. Re-runconfigure-cleanuparr.pyto apply it.
homelab-media-stack 2.5.0
Immutable
release. Only release title and notes can be modified.
Added
- The maintenance guide explains how to upgrade the stack itself to a new release, apart from
image updates.
Fixed
- VPN recovery no longer recreates downloaders while the tunnel is unhealthy. The existing
port-sync timer restores stopped or detached downloaders after the VPN recovers, without
restarting unrelated services. Invalid qBittorrent API responses no longer result in guessed
preference writes, and recovery is reported only after port verification. - VPN recovery tests now use a controlled clock and boot time, so release checks also pass
on freshly booted CI runners. Regression coverage preserves the production reboot safeguard
and verifies the recovery delay and restart cooldown without changing runtime behavior. - Agent instructions now explicitly require focused tests, full source checks, regression
coverage and accurate validation results before handing off changes or opening/updating PRs.
homelab-media-stack 2.4.0
Immutable
release. Only release title and notes can be modified.
Added
- A copy of
glance/youtube-channels.jsonin$CONFIG_ROOT/glance/replaces the repository's
sample, so your pinned YouTube channels stay out of git. - Music docs explain ListenBrainz discovery in Needle: each listener connects their ListenBrainz
token in Needle's Settings, Navidrome sends the listens, and missing songs from the weekly
playlists come through slskd intomedia/singles. Lidarr and Tubifarry are unchanged. - The troubleshooting notes cover game searches that always take 30 seconds: one slow indexer
holds Questarr to its timeout, and switching it off in Prowlarr fixes it. - The troubleshooting notes cover a VPN that drops soon after torrents start and recovers about
an hour later: what was observed, the suspected cause, and why DHT stays enabled.
Changed
- Changelog entries are files in
changelog.d/instead of lines under## Unreleased, so pull
requests no longer conflict with each other or with a release.changelog.d/README.mdshows the
format. - Glance's subreddits, stock list and pinned YouTube channels are now generic samples; edit them
inglance/glance.ymlandglance/youtube-channels.json.
Fixed
scripts/checkpasses on a Raspberry Pi 5. ruff's arm64 build crashes on its 16 KiB-page
kernel, so the check skips ruff there and says so; CI still runs it.- Glance's YouTube rows show videos again. YouTube's RSS feed answers 404 for hours at a time, so
sync-youtube.pynow fetches the latest uploads hourly, through the Data API once you are signed
in, and keeps a channel's last videos when it can't be read.arr-youtube.timerruns hourly
instead of weekly; reruninstall-hostto pick up the new schedule. - The plugin description, script messages and comments say "the server" instead of "the Pi",
since the stack runs on any supported machine. - Grafana's network panels show the server's real traffic. node-exporter now runs on the host
network; in a container network it counted only its own container.configure-uptime-kuma.py
updates the URL of a monitor whose service moved, so re-run it after updating.
Security
.gitignoreand the pre-commit hook also keep.env.*copies (.env.bak,.env.local) and
*.local.*files out of commits, not only.envitself.render-scraparr-configandbackup-configcreate the scraparr config and the restic key file
private from the start, instead of making them private right after writing.