--- title: Watchlist Automation — Полный Flow namespace: personal created: '2026-05-20' updated: '2026-05-22' last_synced: '2026-05-22' type: concept tags: - kraken - watchlist - automation - synthesis confidence: 0.9 --- # Watchlist Automation — Полный Flow Синтез: как `family/documents/movies-watchlist.md` превращается в скачанный контент. Объединяет [[tech/arr-stack-kraken]], [[concepts/kraken-media-stack]], [[tech/hermes-docker-kraken]]. ## Полная цепочка ``` [вс 09:00] watchlist-discover ← KP API топ фильмов 2024-2025 ↓ добавляет в секцию "Новинки 👍/👎" movies-watchlist.md Alex ставит 👍 / 👎 ↓ [ежедн 09:00] watchlist-resolve ← SSH Кракен → resolve → commit [ежедн 10:00] watchlist-sync-down → process-thumbs (перемещает 👍 → начало списка) → sync-down (добавляет батч в Radarr/Sonarr) ↓ Radarr (7878) / Sonarr (8989) → Prowlarr (9696) → RuTracker / Kinozal(M) / NoNaMe / etc. → Transmission (9091) → /media/movies-radarr или /media/series-sonarr ↓ router.py (Custom Script) → читает жанры из NFO/TMDb → symlink в /media/{movies,cartoons,documentaries,...}/ ↓ Jellyfin (8096) → rescan → виден контент ``` ## Статусы в movies-watchlist.md | Символ | Значение | Действие | |--------|---------|---------| | `[ ]` | не смотрел, в очереди | sync-down добавляет в Radarr/Sonarr | | `[x]` | просмотрено | sync-up из Jellyfin watched history | | `⬇️` | добавлено в Radarr/Sonarr | ждёт скачки | | `👍` | нравится (новинка) | process-thumbs переносит в начало → попадёт в sync-down | | `👎` | не хочу (новинка) | process-thumbs перемещает в `## Новинки👎` | | `🗓️` | upcoming (ещё не вышел) | discover помечает, не скачивается | | `❓` | не найдено / ambiguous | ждёт ручного уточнения | | `🧟‍♀️` | horror (genre_id=27) | информационный маркер | ## Структура секций movies-watchlist.md ``` ## Новинки - 👍/👎 ← discover добавляет сюда ## Фильмы ← основной список, отступ 2 пробела ( - [ ]) ## Мультфильмы ## Аниме ## Новинки👎 ← ← без пробела перед 👎 ## Связанные заметки ``` **Важно:** `process_thumbs` автоматически определяет отступ из `## Фильмы` и сохраняет при переносе. `SECTION_THUMBDN = "## Новинки👎"` (без пробела) — должно точно совпадать с заголовком. ## Cron Jobs на Eagle Два shell-script крона (не агентные — детерминированы): | Job | ID | Расписание | Скрипт | |-----|-----|-----------|--------| | `watchlist-nightly` | `93619b22b330` | ежедн. 01:00 | `~/.hermes/scripts/watchlist-nightly.sh` | | `watchlist-discover` | `8f219dfe8f0f` | вс 09:00 | `~/.hermes/scripts/watchlist-discover.sh` | **watchlist-nightly.sh** (Mac → Kraken → Mac): 1. `sync-vault.sh` (pull Mac) → `process-thumbs --apply` → `sync-vault.sh` (push Mac) 2. SSH Kraken: `sync-vault.sh` (pull) → `resolve --recheck --apply` → `sync-down --apply --batch 5` → `sync-up --apply` → `sync-vault.sh` (push) ## Discover — Фильтрация | Тип | Порог | |-----|-------| | Мировые | IMDb ≥ 7.0 или KP ≥ 7.0 | | Российские | KP ≥ 8.5 (защита от накрутки) | | Upcoming | год ≥ текущий−1 | | Минимум голосов | IMDb ≥ 1000 или KP ≥ 500 | KP API endpoint: `https://api.poiskkino.dev/v1.4/movie` (redirect с api.kinopoisk.dev). ## *arr Stack — Индексеры (Prowlarr) | ID | Имя | Тип | Примечание | |----|-----|-----|-----------| | 1 | RuTracker | semi-private | блокирует при rate limit на сутки | | 2 | RuTor | public | поиск по imdbid | | 3 | Byrutor | public | | | 4 | NoNaMe Club | semi-private | анонимный | | 5 | Kinozal | semi-private | резерв | | 6 | Kinozal (M) | semi-private | магнет ✅ — без grab limit, **предпочтительный** | **Pi-hole pitfall:** блокирует `skyhook.sonarr.tv` → Sonarr/Radarr поиск молча не запускается. Фикс: `dns: [8.8.8.8]` в docker-compose.yml. ## Router Script — Маршрутизация по жанру После импорта Sonarr/Radarr: `router.py --apply` создаёт symlinks: - Animation (не R/18+) → `/media/cartoons/` или `/media/cartoons-series/` - Documentary → `/media/documentaries/` или `/media/documentaries-series/` - Прочее → `/media/movies/` или `/media/series/` Kopirует NFO + постер рядом с symlink (Jellyfin не видит метадату через symlink напрямую). ## Open Tasks (2026-05-20) - 🟡 Передавать Transmission locations через router script при каждом импорте (сейчас вручную) - 🔴 rsync невыполненных фильмов с HTPC на Кракен (`Фильмы не перенесенные с htpc на кракен.md`) - 🟡 Watchlist sync-up: добавить перенесённые фильмы в нужные разделы ## watchlist-sync — Python CLI Репо: `~/Developer/watchlist-sync` (GitHub: `mallexxx/watchlist-sync`). ``` watchlist-sync resolve — TMDB + KP API → ID, тип (movie/tv) watchlist-sync sync-down — добавить батч (max 5) в Radarr/Sonarr, поставить ⬇️ watchlist-sync sync-up — Jellyfin watched → [x] в .md ``` **Резолвер:** TMDB `/search/multi` + KP fallback. Пороги: `min_rating: 6.0`, `min_score: 0.75`. При 2+ кандидатах → `❓` (LLM разрешает в cron каждые 6ч, нерешённые → уточнение в Zulip). **Stage 2 (после ≥50 просмотров):** AI-curated recommendations — три списка (с женой / один / семья) на основе TMDB профиля, добавляются в конец watchlist как `## 🤖 Рекомендации (YYYY-WNN)`. Jellyfin library mapping: Movies → `movies`, Cartoons → `mixed` (movies + episodes). ## See Also - [[tech/arr-stack-kraken]] — детальные питфоллы *arr стека - [[tech/arr-stack-taiga]] — *arr stack на Тайге (аналогичная архитектура) - [[concepts/kraken-media-stack]] — полная архитектура медиасервера - [[tech/hermes-docker-kraken]] — Hermes на Кракене - [[tech/jellyfin-transcode-rpi5]] — Jellyfin PGS/ASS питфоллы