4.1 KiB
4.1 KiB
Распознавание контента
Задача
По доступным сигналам определить: это фильм или сериал; каноническое название и год; для сериала — сезон и соответствие файлов сериям; при включённых базах — provider-id. На выходе — план раскладки и оценка уверенности.
Сигналы
- Имя торрента и структура каталогов.
- Список файлов с размерами и расширениями.
- Текстовый контекст от человека.
- Распарсенное сообщение торрент-бота (если пришло через Telegram): название с годом, качество, переводы, magnet — см. пример в BRIEF.md.
Конвейер
- Пред-парс имени релиза дешёвым парсером (
go-ptn): черновые название/год/сезон/серия и качество. Грубо, но бесплатно. - LLM (Anthropic, structured output): получает все сигналы и пред-парс, возвращает структурированный план. Хорошо справляется с русскими релиз-именами, чего не умеет парсер.
- Сверка с базой (опц., если включена TMDB/TVDB): подтверждаем название+год, берём официальный id и каноническое имя.
- Оценка уверенности и решение: авто-раскладка или ревью.
Структура ответа LLM (черновик)
type movie | series
title каноническое название
original_title оригинальное название (если есть)
year год
season номер сезона (для сериала)
provider_hint подсказка для поиска в базе
files[] { src, role: main|episode|subtitle|extra|sample,
season?, episode? }
confidence 0..1 — самооценка модели по полям
notes пояснения, неоднозначности
Модель уверенности
Авто-раскладка только если выполнено всё:
- Самооценка LLM ≥ порога (
recognition.auto_confidence_threshold). - Совпадение с базой (если включена) — единственный сильный матч по названию+году.
- Структурная валидация проходит без предупреждений:
- фильм: ровно один основной видеофайл (семплы/экстра отброшены);
- сериал: число серий бьётся с базой (если есть), нумерация S·E консистентна, без пропусков и дублей.
Иначе план уходит в review. На экране подтверждения всегда видно, почему не авто — это страховка на дорогих файлах.
Что делаем с краёв
- Семплы и «экстра» отбрасываем (эвристики по размеру/имени + LLM).
- Внешние субтитры (
.srt,.ass) привязываем к видео и именуем по Jellyfin (*.ru.srt). - Сезон-паки разбираем по сериям; аниме с абсолютной нумерацией — отдельный крайний случай, см. drafts/ideas.md.
На будущее
go-ptn слабее питоновского guessit. Если точности пред-парса не
хватит — завернуть guessit лёгким сервисом-спутником (один файл рядом
с бинарём). См. drafts/ideas.md.