# Пример конфигурации jellybit — единый справочник по всем секциям и полям. # Реальный config.toml не коммитится (содержит секреты), заполняется деплоем. # Секретные поля здесь оставлены пустыми. По умолчанию загрузчик ищет # config.toml в рабочей директории; путь переопределяется опцией --config=path. # Для локального запуска укажите существующие каталоги и db_path -> ./jellybit.db. [general] # Общие настройки приложения. timezone = "UTC" # таймзона ОТОБРАЖЕНИЯ времени в веб-UI (IANA, напр. "Europe/Moscow"); хранение всегда в UTC. Пусто → UTC [qbittorrent] url = "http://qbit:8989" # адрес qBittorrent WebUI; в docker-сети — по имени сервиса username = "admin" # логин WebUI password = "" # секрет: пароль WebUI; обязателен, заполняет деплой category = "jellybit" # категория для добавляемых jellybit раздач (push, savepath) tag = "jellybit" # тег для усыновления существующих раздач (pull, не двигает файлы) savepath = "/srv/media/downloads" # куда qBittorrent кладёт загрузки (задаём при добавлении) path_map = {} # фолбэк: префикс save_path → хост-префикс, напр. {"/data" = "/srv/media"}; обычно пуст [paths] # Медиа-песочница на хосте. Каждый путь: абсолютный, без traversal (`..`) и # должен существовать как доступный каталог (проверяется на старте). Целевые # movies/series и источник downloads монтируются под единый корень (/srv/media). downloads = "/srv/media/downloads" # источник: где лежат загрузки qBittorrent (только читаем/линкуем) movies = "/srv/media/movies" # целевой каталог фильмов для Jellyfin (раскладка хардлинками) series = "/srv/media/series" # целевой каталог сериалов для Jellyfin (раскладка хардлинками) [storage] db_path = "/data/jellybit.db" # путь к файлу SQLite на persistent-томе; обязателен [llm] type = "openai-compat" # провайдер распознавания; допустимо: openai-compat # LLM на хосте (LM Studio) из bridged-контейнера — через host.docker.internal. base_url = "http://host.docker.internal:1234/v1" # эндпоинт LLM; пусто = распознавание выключено api_key = "" # секрет: ключ LLM; обязателен, если задан base_url (заполняет деплой) model = "qwen2.5-32b-instruct" # имя модели на эндпоинте proxy = "" # опц. HTTP-прокси для удалённых эндпоинтов; пусто = без прокси timeout = "120s" # таймаут запроса к LLM; Go-duration (s/m/h) max_retries = 3 # попыток получить валидный ответ LLM; целое ≥ 0 [metadata.tmdb] enabled = false # включить провайдера TMDB; без матча авто-раскладку не делаем api_key = "" # секрет: ключ TMDB; обязателен, если enabled (заполняет деплой) proxy = "" # опц. HTTP-прокси; пусто = без прокси timeout = "10s" # таймаут запроса к TMDB; Go-duration (s/m/h) language = "ru-RU" # локаль названий в ответе TMDB; пусто = ru-RU [metadata.tvdb] enabled = false # включить провайдера TVDB api_key = "" # секрет: ключ TVDB; обязателен, если enabled (заполняет деплой) proxy = "" # опц. HTTP-прокси; пусто = без прокси timeout = "10s" # таймаут запроса к TVDB; Go-duration (s/m/h) [metadata.tvmaze] enabled = false # включить провайдера TVMaze; без ключа, только сериалы (тег [tvdbid-…] из externals) proxy = "" # опц. HTTP-прокси; пусто = без прокси timeout = "10s" # таймаут запроса к TVMaze; Go-duration (s/m/h) [jellyfin] enabled = false # включить пересканирование медиатеки после раскладки url = "http://jellyfin:8096" # адрес Jellyfin; обязателен, если enabled (в docker-сети — по имени сервиса) api_key = "" # секрет: API-ключ Jellyfin (Dashboard → API Keys); обязателен, если enabled proxy = "" # опц. HTTP-прокси; пусто = без прокси timeout = "10s" # таймаут запроса к Jellyfin; Go-duration (s/m/h) [worker] poll_interval = "5s" # как часто опрашивать qBittorrent; Go-duration (s/m/h) stuck_after = "1h" # сколько ждать прогресса, прежде чем счесть раздачу зависшей; Go-duration magnet_timeout = "24h" # страховочный предел ожидания метаданных magnet (не рабочий механизм: ожившие задачи воскрешаются сверкой); Go-duration source_missing_threshold = 3 # подряд тиков сверки без раздачи в qBittorrent, чтобы счесть источник удалённым (дебаунс) [recognition] auto_confidence_threshold = 0.85 # порог авто-раскладки без ревью; доля 0.0–1.0 [telegram] enabled = false # включить Telegram-бота token = "" # секрет: токен бота; обязателен, если enabled (заполняет деплой) allowed_user_ids = [] # allowlist Telegram user id (целые); пусто = запрет всем (fail-closed) web_base_url = "" # база для deep-link «открыть в вебе», напр. "http://jellybit:8080"; пусто = без кнопки proxy = "" # опц. HTTP-прокси для api.telegram.org; пусто = без прокси [http] listen = ":8080" # адрес прослушивания HTTP-сервера; формат [host]:port trusted_subnets = [] # allowlist подсетей (CIDR); ПОКА НЕ ПРИМЕНЯЕТСЯ (деплой только в LAN), зарезервировано [log] level = "info" # уровень логирования; одно из: debug, info, warn, error format = "json" # формат логов; одно из: json, text