# Конвенции раскладки Jellyfin Целевые имена и структура, в которые jellybit раскладывает файлы хардлинками. Источники: [Movies](https://jellyfin.org/docs/general/server/media/movies), [Shows](https://jellyfin.org/docs/general/server/media/shows). ## Фильмы ``` movies/ Дюна Часть вторая (2024) [tmdbid-693134]/ Дюна Часть вторая (2024).mkv Дюна Часть вторая (2024).ru.srt ``` - Папка и файл — `Название (Год)`. - provider-id в имени папки (`[tmdbid-...]`) добавляется при работе с базой — снимает неоднозначность для русских названий, которые Jellyfin иначе может опознать неверно. - Внешние субтитры — `Имя.[.flag].srt` (флаги `forced`/`sdh`/ `default`/`hi`), напр. `…ru.forced.srt`; база имени совпадает с именем видеофайла. Пары VobSub — `.idx` + `.sub`. ## Сериалы ``` series/ Название (2024) [tvdbid-123456]/ Season 01/ Название (2024) S01E01.mkv Название (2024) S01E02.mkv ``` - provider-id — на папке сериала. - Сезоны — `Season 01`, файлы — `... SxxEyy`. ## Сопоставление источник → цель Источник берём по пути из qBittorrent (`save_path`/`content_path` + относительное имя, после трансляции `path_map` в хост-путь). Для каждого распознанного **файла** (не каталога) создаётся **хардлинк** в `paths.movies`/`paths.series`; целевые каталоги — `mkdir` (0755, `1000:1000`). Исходный файл остаётся на месте (раздача продолжается), inode общий — диск не дублируется. Целевое имя строится из распознанных полей и **санитизируется** (без разделителей пути, `..`, управляющих символов); финальный путь обязан быть строго под библиотекой. Существующую цель **не перезаписываем** (тот же inode → готово; другой файл → коллизия → review). Инварианты и undo — в [architecture.md](architecture.md) → «Раскладка файлов». Требование: целевой и исходный каталоги — на одной ФС (внутри контейнера jellybit это обеспечивает mount `/srv`). ## Крайние случаи - **Многофайловый фильм** (части) — стэкинг по точному токену Jellyfin (`… - part1`/`cd1`); точный формат уточнить при реализации. - **Редакции** — `Имя (Год) [edition-Director's Cut]` либо отдельные версии в папке фильма. - **Двойная серия** в одном файле — `… SxxEyy-Eyy`. - **Спецвыпуски** — `Season 00`. - **Сезон-пак** — серии в один `Season xx`; смешанный пак — по per-file сезонам. - **Несколько аудиодорожек** — обычно внутри mkv, не наша забота. - **Аниме с абсолютной нумерацией** — пересчёт в S·E, отдельная проработка ([drafts/ideas.md](../drafts/ideas.md)).