Watch Folder — Автоматический импорт медиа
Watch Folder — система автоматического импорта контента. Она мониторит локальные директории (или rclone-ремоуты) на наличие новых видеофайлов, парсит имена для извлечения метаданных (название, год, сезон, эпизод), запрашивает TMDB для получения обложек и описаний, и создаёт записи фильмов/сериалов в базе данных — без ручного вмешательства.
Как это работает
Пошагово
- Админ создаёт Watch Folder в admin-панели (Watch Folder → Add) или через API (
create_watch_folder). Конфигурация включает: путь к директории, тип контента (movie/series), целевую категорию, букеты, парсер и назначенный сервер.
- Крон
cron:watch запускается периодически (интервал контролируется scan_offset — секунды между сканами). Он выбирает из watch_folders активные папки, у которых last_run превысил offset.
- Обнаружение файлов — крон использует
find для локальных директорий или rclone lsjson для облачных/удалённых хранилищ. Файлы фильтруются по разрешённым расширениям (по умолчанию: mp4, mkv, avi, mpg, flv, 3gp, m4v, wmv, mov, ts). Файлы, уже присутствующие в streams.stream_source, пропускаются.
- Проверка стабильности — файлы, изменённые менее 30 секунд назад, пропускаются (чтобы не импортировать частично загруженные файлы).
- Параллельная обработка — каждый новый файл отправляется в команду
watch_item (через shell_exec), до thread_count элементов запускается параллельно через Multithread.
- WatchItem парсит имя файла с помощью PTN или guessit (см. документацию парсеров ниже), запрашивает метаданные через TMDB API и вставляет запись в
streams (для фильмов) или streams_series + streams_episodes (для сериалов).
- Привязка к букетам — импортированные элементы автоматически добавляются в заданные букеты.
Конфигурация
Настройки Watch Folder (для каждой папки)
| Настройка |
Описание |
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 — импортировать только с parsed-названием |
ignore_no_match |
Импортировать, даже если TMDB не вернул результат |
auto_subtitles |
Автоматически обнаруживать .srt, .sub, .sbv рядом с видео |
fallback_title |
Использовать имя папки как название, если парсер не извлёк его |
read_native |
Читать оригинальное название из TMDB |
movie_symlink |
Создавать симлинки вместо ссылки на оригинальный путь |
auto_encode |
Автоматически перекодировать импортированный контент |
auto_upgrade |
Заменить существующую версию худшего качества при совпадении TMDB ID |
duplicate_tmdb |
Разрешить множественный импорт с одинаковым TMDB ID |
ffprobe_input |
Запустить ffprobe на файле для извлечения метаданных кодека |
extract_metadata |
Извлечь дополнительные метаданные из файла |
Глобальные настройки
| Настройка |
Где |
Описание |
tmdb_api_key |
Админка → Настройки |
Обязательно — ключ TMDB API. Без него Watch не запустится |
fallback_parser |
Админка → Настройки |
Парсер, используемый при отказе основного |
alternative_titles |
Админка → Настройки |
Искать альтернативные названия в TMDB |
max_genres |
Админка → Настройки |
Максимум жанров для привязки к элементу |
Админ-панель и API
Страницы в админ-панели
| Страница |
Описание |
| Watch Folder → List |
Список всех настроенных папок со статусом |
| Watch Folder → Add |
Создание/редактирование watch folder |
| Watch Folder → Settings |
Глобальные настройки (парсер, TMDB) |
| Watch Folder → Logs |
Просмотр логов сканирования и ошибок |
API-действия
| Действие |
Описание |
get_watch_folders |
Список всех watch folders |
get_watch_folder |
Получить папку по ID |
create_watch_folder |
Создать новую watch folder |
edit_watch_folder |
Обновить существующую |
delete_watch_folder |
Удалить watch folder |
reload_watch_folder |
Принудительное пересканирование |
enable_watch |
Включить все watch folders |
disable_watch |
Выключить все watch folders |
kill_watch |
Убить все запущенные watch-процессы |
CLI
Парсеры
Доступны два парсера имён файлов. Парсер извлекает структурированные метаданные (название, год, сезон, эпизод, разрешение, кодек) из имени видеофайла.
Выбор парсера
| Парсер |
Лучше подходит для |
| PTN |
Простые имена с пробелами: San Andreas 2015 720p.mkv |
| guessit |
Имена с точками: The.Matrix.1999.1080p.BluRay.mkv |
Основной парсер задаётся для каждой watch folder. Глобальная настройка fallback_parser используется, когда основной парсер не находит совпадение.
1️⃣ PTN Parser
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 |
Название: The Martian, Год: 2015, Разрешение: 540p, Видео: x264, Аудио: AAC2.0, Группа: FGT |
Сериалы
| Пример имени файла |
Разбор |
friends.s02e01.720p.bluray-sujaidr.mkv |
Название: Friends, Сезон: 2, Эпизод: 1, Разрешение: 720p, Формат: bluray, Группа: sujaidr |
Mr Robot S01E05 HDTV x264-KILLERS[ettv].mp4 |
Название: Mr Robot, Сезон: 1, Эпизод: 5, Формат: HDTV, Видео: x264, Группа: KILLERS |
2️⃣ guessit Parser
Guessit поддерживает сложные форматы, включая точечные разделители и мультиязычные названия.
Фильмы
| Пример имени файла |
Разбор |
The.Matrix.1999.1080p.BluRay.x264.DTS-FGT.mkv |
Название: The Matrix, Год: 1999, Разрешение: 1080p, Видео: x264, Аудио: DTS, Группа: FGT |
Inception.2010.720p.BRRip.x264.AAC-ETRG.mkv |
Название: Inception, Год: 2010, Разрешение: 720p, Видео: x264, Аудио: AAC, Группа: ETRG |
Сериалы
| Пример имени файла |
Разбор |
Breaking.Bad.S03E07.720p.BluRay.x264-REWARD.mkv |
Название: Breaking Bad, Сезон: 3, Эпизод: 7, Разрешение: 720p, Видео: x264, Группа: REWARD |
Game.of.Thrones.S05E09.1080p.WEB-DL.DD5.1.H.264-NTb.mkv |
Название: Game of Thrones, Сезон: 5, Эпизод: 9, Разрешение: 1080p, Видео: H.264, Аудио: DD5.1, Группа: NTb |
Fallback to Folder Name
Если имя файла не содержит название сериала, включите опцию Fallback to Folder Name:
| Пример пути |
Разбор |
/path/to/Show Name/S01E01 720p WEB-DL.mkv |
Название: Show Name, Сезон: 1, Эпизод: 1 |
/path/to/Show.Name/S01E01.720p.WEB-DL.mkv |
Название: Show Name, Сезон: 1, Эпизод: 1 |
Разделение по папкам с сезонами
Если нужно разложить эпизоды по папкам:
| Пример пути |
Разбор |
/path/to/Show Name/Season 01/Show Name S01E01 720p WEB-DL.mkv |
Название: Show Name, Сезон: 1, Эпизод: 1 |
/path/to/Show.Name/Season.01/Show.Name.S01E01.720p.WEB-DL.mkv |
Название: Show Name, Сезон: 1, Эпизод: 1 |
RTL-языки
Для сериалов на RTL-языках:
- Имя файла не должно содержать название сериала
- Включите опцию Fallback to Folder Name
| Пример пути |
Разбор |
/path/to/Show Name/S01E01 (year).mp4 |
Название: Show Name, Сезон: 1, Эпизод: 1, Год: year |
/path/to/Show Name/Season 01/S01E01 (year).mp4 |
Название: Season 01, Сезон: 1, Эпизод: 1, Год: year |
⚠️ Важно: для RTL-языков название сериала берется только из имени папки.
Резюме
- PTN Parser — простые имена файлов, локальные форматы
- guessit Parser — поддержка точечных разделителей, мультиязычных названий, Fallback к имени папки
- RTL-языки — обязательно использовать Fallback к имени папки
- Разделение по сезонам — название сериала должно присутствовать в имени файла
💡 Совет: используйте однородные имена файлов и папок для корректного парсинга и автоматической сортировки сериалов по сезонам.