Files
obsidian-vault/wiki/concepts/watchlist-automation.md
T

162 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Watchlist Automation — Полный Flow
namespace: personal
created: '2026-05-20'
updated: '2026-05-27'
last_synced: '2026-05-27'
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 (2026-05-27: migrated to Kraken)
Watchlist pipeline runs entirely on Kraken (migrated from Eagle 2026-05-27).
Eagle previously ran `watchlist-nightly` via SSH; now Kraken runs it locally.
| Job | Расписание | Хост | Скрипт |
|-----|-----------|------|--------|
| `watchlist-nightly` | ежедн. 01:00 | Kraken | `~/.hermes/scripts/watchlist-nightly.sh` |
| `watchlist-discover` | вс 09:00 | Kraken | `~/.hermes/scripts/watchlist-discover.sh` |
**watchlist-nightly.sh** (на Kraken):
1. `sync-vault.sh` (pull) → `process-thumbs --apply``sync-vault.sh` (push)
2. `resolve --recheck --apply``sync-down --apply --batch 5``sync-up --apply``sync-vault.sh` (push)
**Paths on Kraken HDD (UUID 49e8f586-3839-4c5d-a1e1-58bfc3579ade):**
- `/home/kraken/obsidian` → symlink to `/srv/dev-disk-by-uuid-.../obsidian`
- watchlist-sync: `/srv/dev-disk-by-uuid-.../Developer/watchlist-sync`
## 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: добавить перенесённые фильмы в нужные разделы
## Pitfalls
### KP Markdown Link Parsing Bug
Items added from Kinopoisk with full markdown link syntax
`[Title](https://kinopoisk.ru/film/12345/) (2025)` were passed raw to TMDB
search → not found → marked `❓` permanently (`not i.ambiguous` skips on
next run). Fix: commit `2db1ed9` — extract plain title from markdown links
before passing to TMDB. Items incorrectly marked ❓ require manual `--recheck`.
### KP API Endpoint
`api.kinopoisk.dev` redirects to `api.poiskkino.dev/v1.4/movie`. Use the
redirect destination directly to avoid DNS issues.
## 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 питфоллы