# ✨ Раскладывать раздачу-копию 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`.