VIDEO — Source of Truth

Films + TV on Studio. Updated Sun 27 Sep 2026 08:05 GST. This file wins over every other video/Transmission doc. Anything not here is history (TRANSMISSION-ISSUES.md, docs/). Rule: any change to video = update this file in the same session.

1. Goal

Target Measured in
Films into Plex 70/day (490/week) Plex section 6 addedAt
Consistency no gap >6h without a film landing video-eval films_landing
New TV episodes in Plex within 24h of airing (monitored shows) Sonarr calendar vs library
Back-catalogue TV no target — "TV can stall, except new episodes" (Anthony, 25 Sep) —
Baseline (20–26 Sep) films 77/day avg (46–114) · episodes 154/day avg (9–368) Plex

2. The system — three parts, nothing else

Part What Where (Studio) Every
Config of record every setting that matters, one file ~/video/video-config.json (vault: StudioServer/video/) —
Controller the ONLY writer to Transmission + the *arr settings in the config ~/video/video_controller.py · launchd com.user.video-controller · log ~/video/controller.log 60s (heavy steps every 5 min)
Monitor the ONLY video monitor: 10 checks, one auto-fix each, WhatsApp, 08:00 scorecard ~/video/video_eval.py · com.user.video-eval · log ~/video/eval.log · incidents ~/video/incidents/ 60s
Readers that stay (write nothing): famflix-monitor (tr-metrics.db), tr-truth-collector, dashboards.

3. Controller algorithm

  1. Drift (Transmission) — session settings = config. Anything different is put back and logged DRIFT key: was X -> set Y.
  2. Trackers — every new torrent gets 8 live trackers; trackers whose host doesn't resolve are stripped; reannounce.
  3. Drift (*arr) — Transmission client enabled + remove-completed on; quality upgrades off (except Radarr profile 7, IMAX 4K); Prowlarr app profile min seeders 25 (Prowlarr full-sync overwrote 25→1 — the source of the 13 Sep drift); Radarr collections on missing roots → /data2/media/movies.
  4. No upgrades — queue items for a film/episode already on disk are removed (no blocklist, no re-search).
  5. Evict dead — downloading with 0 progress for 6h, or no activity for 24h → removed through the arr queue with blocklist, so the arr grabs a different release. Orphans (no arr owner) removed directly. Never torrent-stop* (24 Sep: Radarr marks it failed → 159 lost).
  6. Priority — films + episodes aired ≤14 days: high bandwidth + top of queue. Back-catalogue normal.
  7. Admission — backlog (incomplete torrents) >150 → *arr RSS sync off; <80 → back on (Sonarr 15 min, Radarr 30 min).
  8. Finished torrents — seed to ratio 1.0 or 60 min idle, then Transmission stops them and Sonarr/Radarr remove them (remove-completed on). PAUSE: write ~/video/PAUSE = who | why | until YYYY-MM-DD HH:MM. Controller does nothing until it expires.

4. Config of record (live values)

Setting Value Why
peer-limit global / per torrent 120 / 20 Etisalat conntrack; 240 crashed gateway 11 May
download-queue-size 20 conntrack
queue-stalled on, 15 min off = dead swarms hold every slot (25 Sep, 0.18→8 MB/s)
DHT / PEX / uTP / LPD all on uTP off = new torrents find nobody (13 Sep)
speed down / up 25 MB/s / 2 MB/s gateway crash at ~30 MB/s (11 May)
seed ratio / idle seeding 1.0 / 60 min finished torrents must leave
peer port 51420 forwarded, but inbound blocked by Etisalat above the gateway
Prowlarr min seeders 25 1-seeder releases die (13 Sep: 303/386 had 0 peers)
*arr upgrades off 27 Sep: 689 of 711 Sonarr queue items were upgrades of owned episodes
Change a value: edit StudioServer/video/video-config.json, copy to Studio ~/video/, note it in §9. Changing it in the app = drift, put back within 60s.

5. Monitor checks → auto-fix

Check Red when Auto-fix
transmission RPC not answering 3 ticks running graceful SIGTERM + restart (never for being slow — INC-001)
controller heartbeat >3 min restart controller
films_landing no film into Plex for 6h —
new_episodes >3 monitored episodes aired 1–4 days ago missing Sonarr search for exactly those
plex_scanning Plex log "signed out or offline" skipped scans in 15 min restart Plex if nobody streaming (27 Sep incident)
moving <3 torrents moving while ≥10 incomplete —
drift_fight same setting put back ≥5× in 1h — (something else is writing it — find it)
retired_jobs any retired job loaded again bootout
arr_health Sonarr/Radarr health error, all indexers down, download client issue —
disk 2026 / MOVIES / TV ≥95% —
Escalation: auto-fix once → still red 15 min later → one WhatsApp + incident file. Green → incident closed automatically.
08:00 WhatsApp scorecard: yesterday films vs 70, episodes, week to date, torrents/backlog, red checks, fixes, drift count. No scorecard by 08:05 = video-eval or Studio down.

6. Managing drift

7. Retired 27 Sep (plists in ~/Library/LaunchAgents/retired-2026-09-27/)

Were running: famflix-loop (30s, add/remove/evict), movies-stall-recover (LLM restarts), tr-tracker-sweep, tr-wedge-watchdog (the INC-001 killer), space-replace-stop. Already unloaded, plists removed: space-replace-overnight, slot-balance, tr-autopilot, goal-tick, goal-pipeline, goal-watcher, film-refill, studio-health-monitor, studio-ntfy-monitor. Never reload one of these. If a behaviour is missing, add it to the controller.

8. Pipeline

Seerr / import lists → Sonarr + Radarr (OrbStack) → Prowlarr indexers → Transmission (native, :9091, downloads /Volumes/2026/data/downloads/{radarr,tv-sonarr}) → arr completed-download handling (remote path maps /Volumes/2026/data/downloads/ → /data4/data/downloads/) → library → Plex sections 6 Movies / 7 TV Shows. Libraries: films /Volumes/{MOVIES,2026,MUSIC}/…/movies · TV /Volumes/{TV,2026}/data/media/tv. Credentials: Claude/credentials.md §Transmission RPC; arr keys read live from each container's config.xml.

9. Log

Date Change
27 Sep 07:37 Plex restarted — cached "offline" had skipped all scans since 01:20
27 Sep 07:56 System live. First pass: 646 upgrade downloads removed, 4 drifts put back, 761 torrents re-trackered, 40 prioritised. Transmission 872 → 311 torrents, 0.35 → 1.8 MB/s
27 Sep 08:01 new_episodes red (14) → Sonarr search fired

10. Open

# Item
1 Inbound port 51420 blocked above the gateway (Etisalat) — fewer peers
2 Prowlarr indexers failing: TPB, Knaben, YTS, TorrentByte, Torrent[CORE]
3 Who ran 960 manual Sonarr searches on 26 Sep — unknown (upgrades now removed by controller)
4 Radarr grabs ~300/day vs ~77 land — measure hit rate after min-seeders 25
5 Controller tuning (queue size, peer limit) — one change a week, judged on Plex landings from tr-metrics.db, never a spot check
6 TR creds hard-coded in retired scripts + famflix-monitor — move to env

Rendered 27 Sep 2026 04:03 GST from StudioServer/VIDEO-SOT.md. Sister page: new-music.