Docs pass: update headers and READMEs for all new scripts

Script headers (6 files):
- Add OPERATIONAL SAFEGUARDS section to all discovery + emby sync scripts
- Add STATE FILES section to all 3 discovery scripts
- Add CONFIGURATION section to emby_to_*_sync.sh
- Rename USAGE → RUNTIME MODES in emby_to_*_sync.sh (doc standard)
- Fix SONARR_DISCOVERY_MONITOR_MODE default doc: "future" → "all"

Media/README-Media.md:
- Remove "WIP prototype" label; describe all 3 discovery scripts
- Add discovery scripts to scripts table and HOW THE SCRIPTS RELATE diagram
- Add weekly discovery schedule block to EXECUTION ORDER section
- Update intro to mention behavior-driven discovery

Media/Manual-Media.md:
- Add configuration reference sections for all 3 discovery scripts
- Add flag reference sections for all 3 discovery scripts

Tools/README-Tools.md:
- Add "Library Sync Bootstrap" category and emby_to_*_sync.sh to scripts table
- Add emby sync scripts to HOW THE SCRIPTS RELATE diagram

Tools/Manual-Tools.md:
- Update emby sync notes: search commands now fire immediately after add

README.md:
- Update Media folder description to include discovery
- Update weekly schedule to show discovery scripts
- Update README table entry for Media
This commit is contained in:
Gmer4Lfe
2026-05-20 17:48:30 -04:00
parent 644225c4dc
commit 649a3b7b62
11 changed files with 328 additions and 25 deletions
+114
View File
@@ -216,6 +216,64 @@ LIDARR_ART_SLEEP_BETWEEN=1 # seconds between fanart.tv API calls (rate li
---
### Lidarr Discovery
```bash
LIDARR_DISCOVERY_THRESHOLD=70 # minimum score for Stage 1 seeds and Stage 2 adds
LIDARR_DISCOVERY_LOOKBACK_DAYS=7 # Emby play history window in days
LIDARR_DISCOVERY_MIN_PLAYS=3 # min plays before an artist is evaluated as a seed
LIDARR_DISCOVERY_MAX_ADDS=5 # max seeds (Stage 1) and max adds (Stage 2) per run
LIDARR_DISCOVERY_USER_CAP_PCT=35 # max % any one user contributes to play weight
LIDARR_DISCOVERY_REJECT_COOLDOWN=30 # days before re-evaluating a Stage 2 reject
LIDARR_DISCOVERY_HISTORY="$DATA_DIR/lidarr_discovery_history.db"
```
Requires `HOST*_LASTFM_API_KEY` in `master_host*.conf`.
---
### Radarr Discovery
```bash
RADARR_DISCOVERY_THRESHOLD=52 # minimum score to add a candidate
RADARR_DISCOVERY_LOOKBACK_DAYS=30 # Emby watch history window in days
RADARR_DISCOVERY_MAX_SEEDS=5 # max seed movies from Stage 1
RADARR_DISCOVERY_MAX_ADDS=5 # max movies to add per run
RADARR_DISCOVERY_MIN_VOTE_COUNT=100 # min TMDB votes for a candidate
RADARR_DISCOVERY_MIN_RATING=60 # min TMDB vote_average × 10 (60 = 6.0/10)
RADARR_DISCOVERY_REJECT_COOLDOWN=60 # days before re-evaluating a rejected movie
RADARR_DISCOVERY_SEED_LIBRARIES=("Movies") # Emby libraries to draw seeds from
RADARR_DISCOVERY_HISTORY="$DATA_DIR/radarr_discovery_history.db"
```
Requires `HOST*_TMDB_API_KEY` in `master_host*.conf`.
---
### Sonarr Discovery
```bash
SONARR_DISCOVERY_THRESHOLD=52 # minimum score to add a candidate
SONARR_DISCOVERY_LOOKBACK_DAYS=14 # Emby episode history window in days
SONARR_DISCOVERY_MAX_SEEDS=5 # max seed series from Stage 1
SONARR_DISCOVERY_MAX_ADDS=3 # max shows to add per run (TV is a larger commitment)
SONARR_DISCOVERY_MIN_VOTE_COUNT=50 # min TMDB votes for a candidate
SONARR_DISCOVERY_MIN_RATING=65 # min TMDB vote_average × 10 (65 = 6.5/10)
SONARR_DISCOVERY_REJECT_COOLDOWN=60 # days before re-evaluating a rejected show
SONARR_DISCOVERY_USER_EPISODE_CAP=8 # max episodes per user in seed scoring
SONARR_DISCOVERY_MONITOR_MODE="all" # "all" = all seasons monitored; "future" = upcoming only
SONARR_DISCOVERY_HISTORY="$DATA_DIR/sonarr_discovery_history.db"
# SONARR_EMBY_LIBRARIES is shared with emby_to_sonarr_sync — see Orchestrator Job Order
```
Requires `HOST*_TMDB_API_KEY` in `master_host*.conf`.
> **MONITOR_MODE note:** Use `"all"` (default) to have Sonarr search all existing seasons
> after adding a show. `"future"` only marks upcoming seasons as monitored — shows where
> all seasons have already aired will appear unmonitored and Sonarr will not search for them.
---
### Orchestrator Job Order
```bash
@@ -634,3 +692,59 @@ Show configuration and API key status.
`lidarr_missing_art.sh --log`
Verbose per-album, per-artist output.
---
### playback_aware_lidarr_discovery.sh
`playback_aware_lidarr_discovery.sh`
Score Emby play history, run Last.fm getSimilar on top artists, add candidates above
threshold to Lidarr. Triggers ArtistSearch immediately after each successful add.
`playback_aware_lidarr_discovery.sh --dry-run`
Score and rank all Stage 1 seeds and Stage 2 candidates. No Lidarr API calls. No writes
to history file. Shows exactly what would be added and at what score.
`playback_aware_lidarr_discovery.sh --status`
Show config values, history file path and size, and API key status.
`playback_aware_lidarr_discovery.sh --log`
Verbose per-artist scoring output for both stages.
---
### playback_aware_radarr_discovery.sh
`playback_aware_radarr_discovery.sh`
Score recently watched Emby movies, run TMDB recommendations on seeds, add candidates
above threshold to Radarr. Triggers MoviesSearch immediately after each successful add.
`playback_aware_radarr_discovery.sh --dry-run`
Score and rank all Stage 1 seeds and Stage 2 candidates. No Radarr API calls. No writes
to history file.
`playback_aware_radarr_discovery.sh --status`
Show config values, history file path and size, and API key status.
`playback_aware_radarr_discovery.sh --log`
Verbose per-movie scoring output for both stages.
---
### playback_aware_sonarr_discovery.sh
`playback_aware_sonarr_discovery.sh`
Score recently watched Emby series (weighted by user diversity), run TMDB TV
recommendations on seeds, add candidates above threshold to Sonarr. Triggers SeriesSearch
immediately after each successful add.
`playback_aware_sonarr_discovery.sh --dry-run`
Score and rank all Stage 1 seeds and Stage 2 candidates. No Sonarr API calls. No writes
to history file.
`playback_aware_sonarr_discovery.sh --status`
Show config values, history file path and size, and API key status.
`playback_aware_sonarr_discovery.sh --log`
Verbose per-series scoring output — shows user diversity, recency, and volume scores per
seed; breadth, rating, and votes scores per candidate.