Correct and extend folder docs for Docker Essentials, Watchdogs, Media and Arrs Stack
The docs had drifted from the scripts — a script that no longer exists, three wrong variable names, a reversed run order, and seven scheduled scripts that were never documented at all.
This commit is contained in:
@@ -200,6 +200,75 @@ Lidarr configured — no HOST1_LIDARR_URL means nothing runs.
|
||||
| `playback_aware_lidarr_discovery.sh` | Behavior-driven music discovery — Emby plays → Last.fm similar → Lidarr | Weekly |
|
||||
| `playback_aware_radarr_discovery.sh` | Behavior-driven movie discovery — Emby watches → TMDB recommendations → Radarr | Weekly |
|
||||
| `playback_aware_sonarr_discovery.sh` | Behavior-driven TV discovery — Emby episodes → TMDB TV recommendations → Sonarr | Weekly |
|
||||
| `arr_download_orphan_cleaner.sh` | Clear orphaned completed downloads out of the SABnzbd Completed folders | Daily |
|
||||
| `sonarr_classification_scan.sh` | Detect series sitting in the wrong root (anime / kids / general); `--move` acts | Daily |
|
||||
| `radarr_classification_scan.sh` | Same for movies, plus junk-metadata detection via `--remove-junk` | Daily |
|
||||
| `lidarr_duplicate_artist_cleanup.sh` | Remove phantom zero-file duplicate artists; flag real ones for review | Daily |
|
||||
| `arr_cache_prefill.sh` | Warm the shared tracked-data cache so consumers never read cold | Array start + every 4hr |
|
||||
| `arr_corruption_scan.sh` | ffprobe every tracked video for corrupt headers; `--remediate` deletes + re-searches | Weekly |
|
||||
| `arr_full_rescan.sh` | Force a real disk↔database reconciliation on all three arrs | Weekly |
|
||||
|
||||
---
|
||||
|
||||
## ━━━ THE NEWER LAYERS ━━━
|
||||
|
||||
The original folder was "delete what the arrs no longer track". These were added as distinct
|
||||
failure modes surfaced — each exists because something went wrong that the cleanups could not
|
||||
have caught.
|
||||
|
||||
### 🗑️ Download-Side Orphans — `arr_download_orphan_cleaner.sh`
|
||||
|
||||
Every cleanup script here walks the **library** side. Nothing walked the **download** side —
|
||||
so completed downloads the arrs had stopped tracking accumulated in SABnzbd's Completed
|
||||
folders indefinitely. Discovered as **755 GB of orphaned TV downloads, oldest from 2022**,
|
||||
filling the cache pool to 89%.
|
||||
|
||||
Classifies every entry as TRACKED / RECENT / JUNK / REDUNDANT / IMPORTABLE / UNMATCHED and
|
||||
acts only on the ones it can justify. The queue is a hard gate: if it cannot be read, the arr
|
||||
is skipped entirely, because without it there is no way to tell an active import from an
|
||||
orphan. A run total over `DOWNLOAD_ORPHAN_MAX_DELETE_GB` aborts — an abnormally large delete
|
||||
is the visible symptom of a partial queue fetch.
|
||||
|
||||
### 🎭 Wrong-Root Detection — `sonarr_classification_scan.sh` + `radarr_classification_scan.sh`
|
||||
|
||||
Overseerr lets any user request content into the wrong root folder — kids shows into general
|
||||
TV, anime into Kids_Tv_Shows. These classify every item from metadata alone (genre,
|
||||
certification, network/studio, original language) and report where the computed classification
|
||||
disagrees with the folder the item actually sits in.
|
||||
|
||||
Report-only by default. `--move` acts on forward misplacements and adult-content-in-kids-root
|
||||
leaks. It deliberately does **not** move non-anime content out of the anime root — deliberate
|
||||
style placements (Western animation grouped with anime by choice) are genuine judgment calls.
|
||||
|
||||
Both poll the arr's async move command to completion before verifying, because `moveFiles=true`
|
||||
flips the database instantly while the physical move is still queued behind others.
|
||||
|
||||
### 🎨 Phantom Artists — `lidarr_duplicate_artist_cleanup.sh`
|
||||
|
||||
MusicBrainz duplicates leave two Lidarr entries for one artist, one holding the files and one
|
||||
holding nothing. Removes only the zero-file side, with `deleteFiles=false` so nothing on disk
|
||||
is touched. Pairs where both sides hold files are flagged for review, never auto-resolved.
|
||||
|
||||
Gated on the tracked-count floor shared with `lidarr_cleanup.sh` — during a library-wide desync
|
||||
both sides of a real duplicate can read as zero-file phantoms.
|
||||
|
||||
### 🩺 Corruption + Reconciliation — `arr_corruption_scan.sh` + `arr_full_rescan.sh`
|
||||
|
||||
`arr_corruption_scan.sh` ffprobes tracked video files for corrupt headers. Report-only unless
|
||||
`--remediate`, which deletes the file record and triggers an explicit re-search. Requires
|
||||
repeat detections across separate runs before acting, so a transient probe failure cannot
|
||||
delete a healthy file.
|
||||
|
||||
`arr_full_rescan.sh` forces a genuine disk↔database reconciliation. Organic scans only touch
|
||||
files involved in an import, so an untouched library silently drifts — confirmed when Lidarr
|
||||
reported **~23% of its true track count** for 1,004 of 1,357 artists with no scan running and
|
||||
every file present on disk.
|
||||
|
||||
### ⚡ Cache Warmth — `arr_cache_prefill.sh`
|
||||
|
||||
Populates the shared tracked-data cache at array start and every 4 hours, so consumers never
|
||||
pay a cold fetch. Pure enhancement: nothing depends on it having run, and every consumer still
|
||||
writes through on a cold cache.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user