mirror of
https://github.com/Vateron-Media/XC_VM.git
synced 2026-10-04 04:02:30 +02:00
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).
220 lines
17 KiB
Markdown
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** — необходимо использовать резервную копию имени папки
|
|
- **Структура сезонных папок** — отображаемый заголовок должен быть в имени файла для корректной сортировки
|
|
|
|
---
|
|
|
|
💡 **Совет:** Используйте согласованные имена файлов и папок для точного анализа и автоматической сортировки по сезонам.
|