Files
XC_VM/docs/ru/info/watch_folder.md
T
Divarion_D d4da90f37b fix(docs): translate bold spans atomically and auto-prune orphaned ru pages
The line-by-line web translator reordered words inside `**bold**` spans and
misplaced/dropped the markers, producing `**LB` or `****` (empty bold). Mask
each `**...**` as ONE atomic sentinel: translate the inner text on its own,
then store the whole balanced `**inner**` — the engine never sees the markers
and cannot reorder or collapse them. Also harden the anthropic prompt to keep
emphasis balanced.

Auto-prune: after translating, delete generated docs/ru files whose docs/en
source no longer exists (renamed/removed) and drop now-empty dirs, so the tree
mirrors docs/en 1:1 (removes the stale development/modules.md and
guides/geoip-and-device-detection.md).

Bump PROMPT_VERSION to 6 to invalidate the contaminated cache and regenerate
docs/ru (0 broken bold spans remaining, aside from pre-existing multi-line
bold that spans a soft line break).
2026-08-27 18:07:43 +03:00

220 lines
17 KiB
Markdown

# Папка просмотра — Автоматический импорт мультимедиа
Watch Folder - это автоматизированная система импорта контента. Он отслеживает локальные каталоги (или пульты дистанционного управления rclone) в поисках новых видеофайлов, анализирует их названия для извлечения метаданных (название, год, сезон, серия), ищет в базе данных TMDB обложки и описания и создает записи о фильмах/сериалах в базе данных — и все это без ручного вмешательства.
---
## как это работает
```
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Watch Folder │────▶│ WatchCron │────▶│ WatchItem │
│ (directory on │ │ scans for new │ │ parses filename │
│ disk / rclone) │ │ files, filters │ │ queries TMDB │
│ │ │ already imported │ │ creates DB row │
└──────────────────┘ └──────────────────┘ └──────────────────┘
│
▼
┌──────────────────┐
│ Bouquet update │
│ (auto-assign │
│ to bouquets) │
└──────────────────┘
```
### Шаг за шагом
1. **Администратор создает папку наблюдения** в панели администратора (Папка просмотра → Добавить) или через API (`create_watch_folder`). Конфигурация включает в себя: путь к каталогу, тип контента (фильм/сериал), целевую категорию, букеты, настройки парсера и назначенный сервер.
2. **Задание Cron `cron:watch`** выполняется периодически (регулируется параметром `scan_offset` — секунды между сканированиями). Он запрашивает таблицу `watch_folders` для активных папок, в которых `last_run` превышено смещение.
3. **Обнаружение файлов** — cron использует `find` для локальных каталогов или `rclone lsjson` для облачных/удаленных подключений. Файлы фильтруются по разрешенным расширениям (по умолчанию: `mp4, mkv, avi, mpg, flv, 3gp, m4v, wmv, mov, ts`). Файлы, уже присутствующие в `streams.stream_source`, пропускаются.
4. **Проверка стабильности** — файлы, измененные менее 30 секунд назад, пропускаются (чтобы избежать импорта частично загруженных файлов).
5. **Параллельная обработка** — каждый новый файл отправляется команде `watch_item` (через `shell_exec`), параллельно запуская до `thread_count` элементов с помощью `Multithread`.
6. **Элемент наблюдения** анализирует имя файла с помощью PTN или guessit (смотрите документацию по синтаксическому анализу ниже), преобразует метаданные с помощью TMDB API и вставляет запись в `streams` (для фильмов) или `streams_series` + `streams_episodes` (для сериалов).
7. **Назначение букета** — импортированные элементы автоматически добавляются в настроенные букеты.
---
## Конфигурация
### Просмотр настроек папки (для каждой папки)
|Установка|Описание|
|---------|-------------|
| `directory` |Локальный путь для сканирования (например, `/mnt/media/movies/`)|
| `rclone_dir` |удаленный путь к rclone (альтернатива локальному каталогу)|
| `type` |Тип содержимого: `movie` или `series`|
| `server_id` |Сервер, на котором выполняется сканирование|
| `category_id` |Целевая категория для импортируемого контента|
| `bouquets` |Автоматическое назначение этим букетам|
| `fb_category_id` |Резервная категория (в случае сбоя в сопоставлении жанров TMDB)|
| `fb_bouquets` |Резервные букеты|
| `allowed_extensions` |Расширения файлов для сканирования (пустые = список по умолчанию)|
| `language` |Предпочтительный язык TMDB для метаданных|
| `active` |Включить/отключить эту папку|
### Логические параметры
|Вариант|Описание|
|--------|-------------|
| `disable_tmdb` |Пропустить поиск в TMDB — импортировать файл только с разобранным заголовком|
| `ignore_no_match` |Импорт, даже если TMDB не возвращает результата|
| `auto_subtitles` |Автоматическое определение `.srt`, `.sub`, `.sbv` файлов рядом с видео|
| `fallback_title` |Используйте имя папки в качестве заголовка, если синтаксический анализатор не может ее извлечь|
| `read_native` |Чтение собственного заголовка из TMDB|
| `movie_symlink` |Создавайте символические ссылки вместо ссылок на исходный путь|
| `auto_encode` |Автоматическое кодирование импортированного содержимого|
| `auto_upgrade` |Замените существующую версию более низкого качества, если идентификатор TMDB совпадает|
| `duplicate_tmdb` |Разрешить многократный импорт с одним и тем же идентификатором TMDB|
| `ffprobe_input` |Запустите ffprobe в исходном файле для извлечения метаданных кодека|
| `extract_metadata` |Извлечение дополнительных метаданных из файла|
### Глобальные настройки
|Установка|Где|Описание|
|---------|-------|-------------|
| `tmdb_api_key` |Администратор → Настройки|**Требуемый** — Ключ API TMDB. Без него Watch не будет работать|
| `fallback_parser` |Администратор → Настройки|Синтаксический анализатор, используемый при сбое основного синтаксического анализатора|
| `alternative_titles` |Администратор → Настройки|Поиск альтернативных названий в базе данных TMDB|
| `max_genres` |Администратор → Настройки|Максимальное количество жанров, назначаемых для каждого элемента|
---
## Панель администратора и API
### Страницы панели администратора
|Страница|Описание|
|------|-------------|
|Смотреть папку → Список|Просмотр всех настроенных папок наблюдения со статусом|
|Посмотреть папку → Добавить|Создание/редактирование папки наблюдения|
|Папка просмотра → Настройки|Глобальные настройки просмотра (синтаксический анализатор, конфигурация TMDB)|
|Просмотр папки → Журналы|Просмотр результатов сканирования и ошибок|
### Действия администратора API
|Действие|Описание|
|--------|-------------|
| `get_watch_folders` |Перечислите все папки для просмотра|
| `get_watch_folder` |Получить единую папку по идентификатору|
| `create_watch_folder` |Создайте новую папку наблюдения|
| `edit_watch_folder` |Обновите существующую папку наблюдения|
| `delete_watch_folder` |Удалить папку наблюдения|
| `reload_watch_folder` |Принудительное немедленное повторное сканирование|
| `enable_watch` |Включить все папки наблюдения|
| `disable_watch` |Отключите все папки наблюдения|
| `kill_watch` |Уничтожьте все запущенные процессы наблюдения|
### КЛИ
```bash
# Normal cron execution (usually triggered automatically)
sudo -u xc_vm /home/xc_vm/console.php cron:watch
# Force scan a specific folder (by ID)
sudo -u xc_vm /home/xc_vm/console.php cron:watch 5
```
---
## Анализаторы
Доступны два средства анализа имен файлов. Средство анализа извлекает структурированные метаданные (название, год, сезон, эпизод, разрешение, кодек) из имени видеофайла.
### Выбор синтаксического анализатора
|Синтаксический анализатор|Лучше всего для|
|--------|----------|
| **PTN** | Simple filenames with spaces: `San Andreas 2015 720p.mkv` |
| **guessit** | Dot-separated filenames: `The.Matrix.1999.1080p.BluRay.mkv` |
Установите основной синтаксический анализатор для каждой папки просмотра. Глобальный параметр `fallback_parser` используется, когда основной синтаксический анализатор не возвращает совпадений.
---
## 1️⃣ Синтаксический анализатор PTN
PTN parser поддерживает синтаксический анализ файлов фильмов и телешоу с типичными шаблонами именования.
### Фильмы
|Пример файла|Проанализированные данные|
|-------------|-------------|
| `San Andreas 2015 720p WEB-DL x264 AAC-JYK.mkv` |Название: *San Andreas*, Год выпуска: 2015, Разрешение: 720p, Видео: x264, Аудио: AAC, Группа: JYK|
| `The Martian 2015 540p HDRip KORSUB x264 AAC2 0-FGT.mp4` |Название: "Марсианин", Год выпуска: 2015, Разрешение: 540p, Видео: x264, Аудио: AAC2.0, Группа: FGT|
### Телевизионные шоу
|Пример файла|Проанализированные данные|
|-------------|-------------|
| `friends.s02e01.720p.bluray-sujaidr.mkv` |Название: *Друзья*, Сезон: 2, Серия: 1, Разрешение: 720p, Формат: bluray, Группа: sujaidr|
| `Mr Robot S01E05 HDTV x264-KILLERS[ettv].mp4` |Название: *Мистер Робот*, Сезон: 1, Серия: 5, Формат: HDTV, Видео: x264, Группа: KILLERS|
---
## 2️⃣ синтаксический анализатор догадок
Guessit поддерживает более сложные имена файлов, включая разделители точек и многоязычные заголовки.
### Фильмы
|Пример файла|Проанализированные данные|
|-------------|-------------|
| `The.Matrix.1999.1080p.BluRay.x264.DTS-FGT.mkv` |Название: "Матрица", Год выпуска: 1999, Разрешение: 1080p, Видео: x264, Аудио: DTS, Группа: FGT|
| `Inception.2010.720p.BRRip.x264.AAC-ETRG.mkv` |Название: *Начало*, Год выпуска: 2010, Разрешение: 720p, Видео: x264, Аудио: AAC, Группа: ETRG|
### Телевизионные шоу
|Пример файла|Проанализированные данные|
|-------------|-------------|
| `Breaking.Bad.S03E07.720p.BluRay.x264-REWARD.mkv` |Название: "Во все тяжкие", Сезон: 3, Серия: 7, Разрешение: 720p, Видео: x264, Группа: REWARD|
| `Game.of.Thrones.S05E09.1080p.WEB-DL.DD5.1.H.264-NTb.mkv` |Название: *Игра престолов*, Сезон: 5, Серия: 9, Разрешение: 1080p, Видео: H.264, Аудио: DD5.1, Группа: NTb|
---
### Возврат к имени резервной папки
Если имя файла не содержит отображаемого заголовка, включите **Возврат к имени резервной папки**:
|Пример пути к файлу|Проанализированные данные|
|-----------------|-------------|
| `/path/to/Show Name/S01E01 720p WEB-DL.mkv` |Название: *Название сериала*, Сезон: 1, Серия: 1|
| `/path/to/Show.Name/S01E01.720p.WEB-DL.mkv` |Название: *Название сериала*, Сезон: 1, Серия: 1|
#### Структура сезонных папок
Если вы хотите, чтобы эпизоды были отсортированы по папкам сезонов, имя файла должно содержать название шоу:
|Пример пути к файлу|Проанализированные данные|
|-----------------|-------------|
| `/path/to/Show Name/Season 01/Show Name S01E01 720p WEB-DL.mkv` |Название: *Название сериала*, Сезон: 1, Серия: 1|
| `/path/to/Show.Name/Season.01/Show.Name.S01E01.720p.WEB-DL.mkv` |Название: *Название сериала*, Сезон: 1, Серия: 1|
---
### Языки RTL
Для показов на языках RTL (арабский, иврит и т.д.):
- Имя файла **не должно содержать названия шоу**
- Включить **Возврат к имени резервной папки**
|Пример пути к файлу|Проанализированные данные|
|-----------------|-------------|
| `/path/to/Show Name/S01E01 (year).mp4` |Название: *Название сериала*, Сезон: 1, Серия: 1, Год выпуска: `year`|
| `/path/to/Show Name/Season 01/S01E01 (year).mp4` |Название: *Сезон 01*, Сезон: 1, Серия: 1, Год выпуска: `year`|
> ❗️ Примечание: Для языков RTL название показа берется только из названия папки.
---
### Резюме
- **Анализатор PTN** — простые имена файлов, локальные форматы
- **синтаксический анализатор догадок** — поддерживает имена, разделенные точками, многоязычные заголовки, возврат к имени папки
- **Языки RTL** — необходимо использовать резервную копию имени папки
- **Структура сезонных папок** — отображаемый заголовок должен быть в имени файла для корректной сортировки
---
💡 **Совет:** Используйте согласованные имена файлов и папок для точного анализа и автоматической сортировки по сезонам.