Files
jellybit/docs/specs/recognition.md
T

4.1 KiB
Raw Blame History

Распознавание контента

Задача

По доступным сигналам определить: это фильм или сериал; каноническое название и год; для сериала — сезон и соответствие файлов сериям; при включённых базах — provider-id. На выходе — план раскладки и оценка уверенности.

Сигналы

  • Имя торрента и структура каталогов.
  • Список файлов с размерами и расширениями.
  • Текстовый контекст от человека.
  • Распарсенное сообщение торрент-бота (если пришло через Telegram): название с годом, качество, переводы, magnet — см. пример в BRIEF.md.

Конвейер

  1. Пред-парс имени релиза дешёвым парсером (go-ptn): черновые название/год/сезон/серия и качество. Грубо, но бесплатно.
  2. LLM (Anthropic, structured output): получает все сигналы и пред-парс, возвращает структурированный план. Хорошо справляется с русскими релиз-именами, чего не умеет парсер.
  3. Сверка с базой (опц., если включена TMDB/TVDB): подтверждаем название+год, берём официальный id и каноническое имя.
  4. Оценка уверенности и решение: авто-раскладка или ревью.

Структура ответа 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           пояснения, неоднозначности

Модель уверенности

Авто-раскладка только если выполнено всё:

  1. Самооценка LLM ≥ порога (recognition.auto_confidence_threshold).
  2. Совпадение с базой (если включена) — единственный сильный матч по названию+году.
  3. Структурная валидация проходит без предупреждений:
    • фильм: ровно один основной видеофайл (семплы/экстра отброшены);
    • сериал: число серий бьётся с базой (если есть), нумерация S·E консистентна, без пропусков и дублей.

Иначе план уходит в review. На экране подтверждения всегда видно, почему не авто — это страховка на дорогих файлах.

Что делаем с краёв

  • Семплы и «экстра» отбрасываем (эвристики по размеру/имени + LLM).
  • Внешние субтитры (.srt, .ass) привязываем к видео и именуем по Jellyfin (*.ru.srt).
  • Сезон-паки разбираем по сериям; аниме с абсолютной нумерацией — отдельный крайний случай, см. drafts/ideas.md.

На будущее

go-ptn слабее питоновского guessit. Если точности пред-парса не хватит — завернуть guessit лёгким сервисом-спутником (один файл рядом с бинарём). См. drafts/ideas.md.