chore(deps): update plexguide/huntarr to v9.4.3 - autoclosed #4170

Closed
renovate-bot wants to merge 1 commits from renovate/unified-plexguidehuntarr into main
Collaborator

This PR contains the following updates:

Package Update Change
ghcr.io/plexguide/huntarr minor 9.3.79.4.3
plexguide/huntarr minor 9.3.79.4.3

Release Notes

plexguide/huntarr (plexguide/huntarr)

v9.4.3

Compare Source

Release Notes — Resource Optimization & Scheduler Fixes

🧠 RAM Optimization — Media Hunt Disable Fully Stops Background Processes

Disabling Media Hunt in General Settings now completely halts all related background activity, reducing RAM usage to near-zero for those subsystems.

What's gated by enable_media_hunt = false:
Component Before After
NZB Hunt child process Stayed alive, respawned on crash Immediately killed, blocked from respawning
NZB Hunt idle watcher thread Ran every 60s unconditionally Checks flag → kills child if disabled, does no work
Tor Hunt child process Stayed alive, respawned on crash Immediately killed, blocked from respawning
Tor Hunt idle watcher thread Ran every 60s unconditionally Checks flag → kills child if disabled, does no work
Indexer Hunt health check Made network calls every hour Skips all work (including network calls) when disabled
Movie Hunt / TV Hunt background loops Ran full processing cycles Skips entirely, sleeps 60s between checks
Files Modified:
  • src/primary/apps/nzb_hunt/download_process.py — Added _media_hunt_enabled() check to _ensure_alive() and _start_idle_watcher()
  • src/primary/apps/tor_hunt/tor_hunt_process.py — Added _media_hunt_enabled() check to _ensure_alive() and _start_idle_watcher()
  • src/primary/routes/indexer_hunt/health.py — Gated _health_check_loop() behind enable_media_hunt flag
  • src/primary/background.py — Skips movie_hunt and tv_hunt processing cycles when disabled
Key Design Decision:

All checks use load_settings("general", use_cache=False) to bypass the 30-second settings cache, ensuring toggles take effect immediately without restarting.


🚫 P2P Disabled by Default (Tor Hunt)

Tor Hunt's P2P functionality is now disabled by default on new installs via the enable_p2p setting.

Behavior:
  • enable_p2p defaults to False when the setting is missing
  • When disabled:
    • TorHuntManager._p2p_enabled() returns False
    • No torrent child process is spawned
    • No libtorrent sessions are created
    • Zero RAM overhead from torrent subsystem
  • Uses use_cache=False for immediate toggle effect
Files Modified:
  • src/primary/apps/tor_hunt/tor_hunt_manager.py_p2p_enabled() defaults to False, reads fresh from DB

🔒 Requestarr API Gate — enable_requestarr Now Enforced Backend

Previously, disabling Requests in General Settings only hid the sidebar link. All API endpoints remained fully accessible.

Now:
  • All /api/requestarr/* routes return HTTP 503 with {"disabled": true} when enable_requestarr is false
  • Non-requestarr routes (like /api/settings/feature-flags) are not affected
  • Re-enabling restores full API access immediately
Implementation:

Uses app.before_request() with a path check — avoids Flask's restriction on modifying blueprints after registration.

Files Modified:
  • src/primary/web_server.py — Added _requestarr_gate() as app-level before_request handler

📅 Scheduler Fixes — Per-Instance Schedules for All Apps

Fixed a critical bug where per-instance schedules for Whisparr, Eros, and all other apps were silently being saved as "Global Apps" and lost on page refresh.

Root Cause (3 layers):
  1. Race condition on page load — Two competing populateInstanceDropdown functions existed: an inline script (fires at DOM parse time, before settings loaded) and a JS module (fires after async fetch). The inline version always ran first with empty data, setting the hidden scheduleApp field to global.

  2. Async dropdown overwrite — Every navigation to the Scheduling section triggered refreshSchedulingInstances(), which rebuilt the instance dropdown from scratch and destroyed the user's current selection.

  3. Bundle out of sync — The compiled bundle-features.js had the old code baked in without fixes.

Fixes Applied:
Fix Description
Event-driven re-population After async settings fetch completes, dispatches huntarr:scheduler-instances-ready event. The inline script listens for it and re-populates with real data.
Selection preservation populateInstanceDropdown() now saves previousVal before clearing options, then restores it after rebuild. Prevents async refresh from resetting user's choice.
addSchedule DOM fallback If the hidden scheduleApp field is stale/global but the visible dropdown shows a non-global app, re-derives the values from live DOM elements.
deleteSchedule cross-bucket search If a schedule isn't found in the expected bucket (legacy misroute), searches ALL buckets before giving up. Prevents silent delete failures.
Memory leak fix last_executed_actions dict now prunes stale date-keyed entries from previous days each scheduler cycle, preventing unbounded growth.
Apps Affected (all fixed):

Sonarr, Radarr, Lidarr, Readarr, Whisparr, Eros, Movie Hunt, TV Hunt

Files Modified:
  • frontend/static/js/modules/features/scheduling.js — All frontend fixes
  • frontend/static/js/dist/bundle-features.js — Bundle kept in sync
  • frontend/templates/components/scheduling_section.html — Inline script fixes
  • src/primary/scheduler_engine.py — Memory leak fix in `check_and_execute_schedules()

v9.4.2

Compare Source

  • Fixed incorrect label (suppose to be media hunt, not movie hunt)

v9.4.1

Compare Source

This release is a massive overhaul of Huntarr — the architecture has been simplified by removing SABnzbd/NZBGet in favor of the built-in NZB Hunt, the entire UI has been modernized with a premium glassmorphism design, and powerful new automation features like Disk Space Pause and Search Order Toggle give you smarter control over your media hunting. Security has been hardened, the menu system has been rebuilt from scratch, and the Requestarr experience is now on par with standalone apps like Overseerr.

  • 🔀 Search Order Toggle — Choose how missing items are searched: Random, Newest First, or Oldest First. Sorted by release/air date so you control what gets grabbed first.
  • 💾 Disk Space Pause — Huntarr now reads disk space from your *arr apps before each cycle and automatically pauses hunting when any root folder drops below your configured threshold. Set to 0 to disable.
  • 🎛️ Per-User Smart Filters — Completely rebuilt filter system with auto-save, keyword blacklists, content rating dropdowns, and per-user preferences that persist across sessions and devices.
  • 🏗️ Simplified Architecture — Removed SABnzbd, NZBGet, and the download clients page entirely. NZB Hunt and Index Master handle everything natively with zero external dependencies.
  • 🎨 Premium UI Modernization — Full glassmorphism redesign across Requestarr, Smart Hunt, menus, and settings. Rigid multi-grid layout system, infinite scroll, animated cards, and frosted glass styling throughout.
  • 📦 Request Bundles — Group multiple instances (e.g., 1080p + 4K Radarr) into a single bundle. One request hits all bundled instances simultaneously with fault-tolerant cascading.
  • 🔒 Security Hardening — Non-owner users are now fully isolated to only their allowed actions. Users can self-manage passwords, 2FA, and Plex account linking from their own profile.
  • 🔗 IMDB & TMDB Links — Advanced request pages now include direct links to IMDB and TMDB so users can research titles before requesting. TV shows now display full metadata (network, seasons, episode count).
  • 📡 New Notification Providers — Added Gotify, Ntfy, and LunaSea alongside existing Discord, Telegram, Pushover, Email, and Apprise support.
  • 🌐 Proxy Support & External URLs — Route outbound traffic through HTTP/SOCKS4/SOCKS5 proxies, and configure separate internal vs. external URLs for your *arr apps.

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

This PR contains the following updates: | Package | Update | Change | |---|---|---| | ghcr.io/plexguide/huntarr | minor | `9.3.7` → `9.4.3` | | [plexguide/huntarr](https://github.com/plexguide/huntarr) | minor | `9.3.7` → `9.4.3` | --- ### Release Notes <details> <summary>plexguide/huntarr (plexguide/huntarr)</summary> ### [`v9.4.3`](https://github.com/plexguide/Huntarr.io/releases/tag/9.4.3) [Compare Source](https://github.com/plexguide/huntarr/compare/9.4.2...9.4.3) Release Notes — Resource Optimization & Scheduler Fixes #### 🧠 RAM Optimization — Media Hunt Disable Fully Stops Background Processes Disabling **Media Hunt** in General Settings now **completely halts all related background activity**, reducing RAM usage to near-zero for those subsystems. ##### What's gated by `enable_media_hunt = false`: | Component | Before | After | | ----------------------------------------- | -------------------------------- | ------------------------------------------------------ | | **NZB Hunt child process** | Stayed alive, respawned on crash | Immediately killed, blocked from respawning | | **NZB Hunt idle watcher thread** | Ran every 60s unconditionally | Checks flag → kills child if disabled, does no work | | **Tor Hunt child process** | Stayed alive, respawned on crash | Immediately killed, blocked from respawning | | **Tor Hunt idle watcher thread** | Ran every 60s unconditionally | Checks flag → kills child if disabled, does no work | | **Indexer Hunt health check** | Made network calls every hour | Skips all work (including network calls) when disabled | | **Movie Hunt / TV Hunt background loops** | Ran full processing cycles | Skips entirely, sleeps 60s between checks | ##### Files Modified: - `src/primary/apps/nzb_hunt/download_process.py` — Added `_media_hunt_enabled()` check to `_ensure_alive()` and `_start_idle_watcher()` - `src/primary/apps/tor_hunt/tor_hunt_process.py` — Added `_media_hunt_enabled()` check to `_ensure_alive()` and `_start_idle_watcher()` - `src/primary/routes/indexer_hunt/health.py` — Gated `_health_check_loop()` behind `enable_media_hunt` flag - `src/primary/background.py` — Skips `movie_hunt` and `tv_hunt` processing cycles when disabled ##### Key Design Decision: All checks use `load_settings("general", use_cache=False)` to bypass the 30-second settings cache, ensuring toggles take effect **immediately** without restarting. *** #### 🚫 P2P Disabled by Default (Tor Hunt) Tor Hunt's P2P functionality is now **disabled by default** on new installs via the `enable_p2p` setting. ##### Behavior: - `enable_p2p` defaults to `False` when the setting is missing - When disabled: - `TorHuntManager._p2p_enabled()` returns `False` - No torrent child process is spawned - No libtorrent sessions are created - Zero RAM overhead from torrent subsystem - Uses `use_cache=False` for immediate toggle effect ##### Files Modified: - `src/primary/apps/tor_hunt/tor_hunt_manager.py` — `_p2p_enabled()` defaults to `False`, reads fresh from DB *** #### 🔒 Requestarr API Gate — `enable_requestarr` Now Enforced Backend Previously, disabling **Requests** in General Settings only hid the sidebar link. All API endpoints remained fully accessible. ##### Now: - All `/api/requestarr/*` routes return **HTTP 503** with `{"disabled": true}` when `enable_requestarr` is `false` - Non-requestarr routes (like `/api/settings/feature-flags`) are **not affected** - Re-enabling restores full API access immediately ##### Implementation: Uses `app.before_request()` with a path check — avoids Flask's restriction on modifying blueprints after registration. ##### Files Modified: - `src/primary/web_server.py` — Added `_requestarr_gate()` as app-level `before_request` handler *** #### 📅 Scheduler Fixes — Per-Instance Schedules for All Apps Fixed a critical bug where **per-instance schedules for Whisparr, Eros, and all other apps** were silently being saved as "Global Apps" and lost on page refresh. ##### Root Cause (3 layers): 1. **Race condition on page load** — Two competing `populateInstanceDropdown` functions existed: an inline script (fires at DOM parse time, before settings loaded) and a JS module (fires after async fetch). The inline version always ran first with empty data, setting the hidden `scheduleApp` field to `global`. 2. **Async dropdown overwrite** — Every navigation to the Scheduling section triggered `refreshSchedulingInstances()`, which rebuilt the instance dropdown from scratch and destroyed the user's current selection. 3. **Bundle out of sync** — The compiled `bundle-features.js` had the old code baked in without fixes. ##### Fixes Applied: | Fix | Description | | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Event-driven re-population** | After async settings fetch completes, dispatches `huntarr:scheduler-instances-ready` event. The inline script listens for it and re-populates with real data. | | **Selection preservation** | `populateInstanceDropdown()` now saves `previousVal` before clearing options, then restores it after rebuild. Prevents async refresh from resetting user's choice. | | **`addSchedule` DOM fallback** | If the hidden `scheduleApp` field is stale/global but the visible dropdown shows a non-global app, re-derives the values from live DOM elements. | | **`deleteSchedule` cross-bucket search** | If a schedule isn't found in the expected bucket (legacy misroute), searches ALL buckets before giving up. Prevents silent delete failures. | | **Memory leak fix** | `last_executed_actions` dict now prunes stale date-keyed entries from previous days each scheduler cycle, preventing unbounded growth. | ##### Apps Affected (all fixed): Sonarr, Radarr, Lidarr, Readarr, **Whisparr**, **Eros**, Movie Hunt, TV Hunt ##### Files Modified: - `frontend/static/js/modules/features/scheduling.js` — All frontend fixes - `frontend/static/js/dist/bundle-features.js` — Bundle kept in sync - `frontend/templates/components/scheduling_section.html` — Inline script fixes - `src/primary/scheduler_engine.py` — Memory leak fix in \`check\_and\_execute\_schedules() ### [`v9.4.2`](https://github.com/plexguide/Huntarr.io/releases/tag/9.4.2) [Compare Source](https://github.com/plexguide/huntarr/compare/9.4.1...9.4.2) - Fixed incorrect label (suppose to be media hunt, not movie hunt) ### [`v9.4.1`](https://github.com/plexguide/huntarr/blob/HEAD/CHANGELOG.md#Huntarr-v941--Changelog) [Compare Source](https://github.com/plexguide/huntarr/compare/9.3.7...9.4.1) This release is a massive overhaul of Huntarr — the architecture has been simplified by removing SABnzbd/NZBGet in favor of the built-in NZB Hunt, the entire UI has been modernized with a premium glassmorphism design, and powerful new automation features like Disk Space Pause and Search Order Toggle give you smarter control over your media hunting. Security has been hardened, the menu system has been rebuilt from scratch, and the Requestarr experience is now on par with standalone apps like Overseerr. - 🔀 **Search Order Toggle** — Choose how missing items are searched: Random, Newest First, or Oldest First. Sorted by release/air date so you control what gets grabbed first. - 💾 **Disk Space Pause** — Huntarr now reads disk space from your \*arr apps before each cycle and automatically pauses hunting when any root folder drops below your configured threshold. Set to 0 to disable. - 🎛️ **Per-User Smart Filters** — Completely rebuilt filter system with auto-save, keyword blacklists, content rating dropdowns, and per-user preferences that persist across sessions and devices. - 🏗️ **Simplified Architecture** — Removed SABnzbd, NZBGet, and the download clients page entirely. NZB Hunt and Index Master handle everything natively with zero external dependencies. - 🎨 **Premium UI Modernization** — Full glassmorphism redesign across Requestarr, Smart Hunt, menus, and settings. Rigid multi-grid layout system, infinite scroll, animated cards, and frosted glass styling throughout. - 📦 **Request Bundles** — Group multiple instances (e.g., 1080p + 4K Radarr) into a single bundle. One request hits all bundled instances simultaneously with fault-tolerant cascading. - 🔒 **Security Hardening** — Non-owner users are now fully isolated to only their allowed actions. Users can self-manage passwords, 2FA, and Plex account linking from their own profile. - 🔗 **IMDB & TMDB Links** — Advanced request pages now include direct links to IMDB and TMDB so users can research titles before requesting. TV shows now display full metadata (network, seasons, episode count). - 📡 **New Notification Providers** — Added Gotify, Ntfy, and LunaSea alongside existing Discord, Telegram, Pushover, Email, and Apprise support. - 🌐 **Proxy Support & External URLs** — Route outbound traffic through HTTP/SOCKS4/SOCKS5 proxies, and configure separate internal vs. external URLs for your \*arr apps. </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNS44IiwidXBkYXRlZEluVmVyIjoiNDMuMjUuNyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=-->
renovate-bot added the image label 2026-02-23 09:01:49 +00:00
renovate-bot added 1 commit 2026-02-23 09:01:50 +00:00
chore(deps): update plexguide/huntarr to v9.4.1
All checks were successful
lint-test-helm / lint-helm (pull_request) Successful in 24s
99c71d50f4
renovate-bot changed title from chore(deps): update plexguide/huntarr to v9.4.1 to chore(deps): update plexguide/huntarr to v9.4.2 2026-02-23 11:03:44 +00:00
renovate-bot force-pushed renovate/unified-plexguidehuntarr from 99c71d50f4 to 898ac069e6 2026-02-23 11:03:46 +00:00 Compare
renovate-bot force-pushed renovate/unified-plexguidehuntarr from 898ac069e6 to 77c9b5f9df 2026-02-23 11:06:32 +00:00 Compare
renovate-bot force-pushed renovate/unified-plexguidehuntarr from 77c9b5f9df to d48843a1c3 2026-02-23 14:06:19 +00:00 Compare
renovate-bot force-pushed renovate/unified-plexguidehuntarr from d48843a1c3 to c93815ae79 2026-02-23 16:03:36 +00:00 Compare
renovate-bot changed title from chore(deps): update plexguide/huntarr to v9.4.2 to chore(deps): update plexguide/huntarr to v9.4.3 2026-02-23 16:03:37 +00:00
renovate-bot force-pushed renovate/unified-plexguidehuntarr from c93815ae79 to dd911d2301 2026-02-23 16:07:06 +00:00 Compare
renovate-bot changed title from chore(deps): update plexguide/huntarr to v9.4.3 to chore(deps): update plexguide/huntarr to v9.4.3 - autoclosed 2026-02-23 17:03:22 +00:00
renovate-bot closed this pull request 2026-02-23 17:03:23 +00:00
All checks were successful
lint-test-helm / lint-helm (pull_request) Successful in 54s
render-manifests-automerge / render-manifests-automerge (pull_request) Has been skipped
render-manifests-merge / render-manifests-merge (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.