Files
jellybit/tasks/items/disc-image-releases.md
T
av 5992d75b57 задачи: переписана disc-image-releases под проверенное поведение Jellyfin
- BDMV раскладывается каталогом, VIDEO_TS и .iso уходят в review: DVD-каталог
  Jellyfin распознаёт, но не проигрывает
- добавлены «Затрагивает» и критерии приёмки, задача проходит tasks.py ready
2026-08-10 20:12:06 +03:00

74 lines
6.7 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.
# ✨ Раскладывать раздачу-копию Blu-ray (BDMV) каталогом целиком
- **Тип:** feature
- **Категория:** Ядро продукта
- **Зачем:** раздача-образ Blu-ray разбирается пофайлово и едет в библиотеку россыпью .m2ts, а Jellyfin умеет такой каталог целиком
- **Теги:** goal:complex-releases
Иногда для очень редкого фильма качается не один видеофайл, а полная копия
диска — каталог `BDMV/` (Blu-ray) или `VIDEO_TS/` (DVD). Раскладка сегодня
сопоставляет источник цели пофайлово, поэтому такая раздача едет в библиотеку
россыпью: каждый `.m2ts` из `BDMV/STREAM/` претендует на отдельный фильм или
серию. Станет наблюдаемо иначе: раздача с `BDMV/` в корне попадает в библиотеку
одним элементом и играется, а раздача с `VIDEO_TS/` или единственным `.iso`
уходит в ревью с названной причиной, а не раскладывается вслепую.
Что выяснено про Jellyfin (проверено 2026-08-10 по документации, исходникам
резолвера и трекеру; развёрнута версия 10.11):
- **BDMV работает.** Сканер распознаёт папку с вложенным `BDMV` как один элемент
(`MovieResolver``VideoType.BluRay`), прямое воспроизведение идёт. Каталог
`BDMV` обязан быть **непосредственным ребёнком** папки фильма — то есть форма
`Название (Год) [tmdbid-…]/BDMV/…`, которую мы и печатаем сейчас.
- **VIDEO_TS не играет.** Элемент в библиотеке появляется, воспроизведение
падает или виснет много лет подряд (баг в `DvdLib`); заведённые о нём задачи
закрыты как устаревшие, в заметках 10.10 и 10.11 починки нет. Поэтому DVD
раскладывать не будем: элемент, который не запускается, хуже честного ревью.
- **ISO вне поддержки** по прямому заявлению документации Jellyfin.
- Ограничения, действующие и на рабочий BDMV: несколько версий, разбиение на
части и внешние дорожки с субтитрами в дисковом каталоге не поддерживаются, а
извлечение картиночных субтитров на лету из него сломано.
## Затрагивает
- `layout.Plan` и `layout.PlanFile` — публичные типы пакета: план сегодня это
перечень файлов с ролями, дерево каталога-образа им не выражается;
- `layout.Role` и `layout.Kind` — роль файла образа и вид целевой ссылки;
- таблица `file_link` и её миграция — если для образа заводится свой вид ссылки;
- построение целевого пути в `layout` — имя цели для файла образа задаётся его
относительным путём внутри `BDMV/`, а не печатается из названия и года;
- требование «Сопоставление источник → цель хардлинками» спеки `file-layout`
оно сейчас говорит «для каждого распознанного файла (не каталога)»;
- требование «Роли файлов на краях раздачи» спеки `recognition``.m2ts` внутри
`BDMV/` не серии и не мусор;
- переход в `review` с новой причиной (`spec recognition`) — для `VIDEO_TS` и
`.iso`;
- промпт распознавания, если признак образа снимается до обращения к LLM.
## Критерии приёмки
- раздача с каталогом `BDMV` в корне раскладывается зеркалом дерева: каждый файл
под `BDMV/` получает хардлинк, а сам `BDMV` оказывается непосредственным
ребёнком папки фильма — оракул: тест раскладки на фикстуре дерева раздачи;
- ни один `.m2ts` из `BDMV/STREAM/` не попадает в план отдельным фильмом или
серией — оракул: тест построения плана;
- раздача с каталогом `VIDEO_TS` в корне и раздача, где весь видеоматериал это
`.iso`, уходят в `review` с причиной, называющей формат — оракул: тест
перехода состояния плюс текст причины в карточке;
- каждая цель дерева проходит существующую проверку «строго под библиотекой» —
оракул: тест на раздачу, где относительное имя файла содержит `..`.
Двигает «Завершение» цели в части «образ диска раскладывается без ручного
вмешательства либо честно уходит в ревью с названной причиной».
## Рамки
Исходная раздача не трогается — только чтение и `link(2)`. Ремукс, распаковка
`.iso` и любое перекодирование в задачу не входят. Воспроизведение проверяется
человеком вручную на umbar: гейт против живого Jellyfin не ходит. Поддержка
внешних субтитров к дисковому каталогу не делается — её нет у самого Jellyfin.
Связано: `openspec/specs/recognition/spec.md` (роли файлов, переход в ревью),
`openspec/specs/file-layout/spec.md` (целевые имена фильма, сопоставление
хардлинками), пакеты `recognize`, `layout`.