From 0e69a86a896c58327716db6132b8476449aabad0 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sun, 14 Jun 2026 19:48:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20re?= =?UTF-8?q?adme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 54 ++++++++++++++++++++++----------------------- config.example.toml | 8 +++---- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index a4bc3ba..f56016d 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # Jellybit Jellybit — связующий сервис между qBittorrent и Jellyfin. Принимает -торрент (magnet, `.torrent` или ссылку) вместе с текстовым контекстом, -ставит загрузку в qBittorrent, дожидается её завершения, распознаёт -содержимое (фильм или сериал, сезоны и серии) и раскладывает готовые -файлы по конвенциям библиотеки Jellyfin. +magnet-ссылку вместе с текстовым контекстом, ставит загрузку в +qBittorrent, дожидается её завершения, распознаёт содержимое (фильм или +сериал, сезоны и серии) и раскладывает готовые файлы по конвенциям +библиотеки Jellyfin. Полный замысел и причины — в [BRIEF.md](BRIEF.md). @@ -18,8 +18,8 @@ Arr-стек (prowlarr/radarr/sonarr) плохо ложится на русск ## Как работает -1. Точка входа принимает torrent/magnet + контекст (HTTP API, веб-UI - или Telegram-бот). +1. Точка входа принимает magnet + контекст (HTTP API, веб-UI, + Telegram-бот или CLI). 2. Загрузка ставится в qBittorrent в выделенную категорию. 3. Сервис отслеживает завершение загрузки. 4. По именам файлов, контексту и (опц.) базам метаданных определяется @@ -30,13 +30,20 @@ Arr-стек (prowlarr/radarr/sonarr) плохо ложится на русск При высокой уверенности раскладка выполняется автоматически, иначе — уходит на подтверждение человеку. +Доступ к внешним сервисам (LLM, базы метаданных, Telegram) при +необходимости идёт через HTTP-прокси — задаётся полем `proxy` в +соответствующих секциях конфигурации. + ## Статус -Ранняя разработка. Готовы каркас (Ф0) и приём + трекинг (Ф1): добавление -magnet в qBittorrent, идемпотентность по infohash, поллинг завершения и -машина состояний (`downloading → completed`, плюс stuck/failed); наружу — -REST API, веб-UI и `jellybit add`. Источники кроме magnet (.torrent/url) и -распознавание (Ф2) — дальше. См. [дорожную карту](docs/drafts/roadmap.md). +Рабочий прототип с полным сквозным путём: приём magnet → загрузка в +qBittorrent → распознавание (LLM + опционально базы метаданных +TMDB/TVDB/TVMaze) → раскладка в библиотеку хардлинками, автоматически при +уверенном результате либо через подтверждение человеком. Транспорты приёма: +REST API, веб-UI, Telegram-бот и CLI (`jellybit add`). + +Из источников пока поддержан magnet; `.torrent` и обычные ссылки — в планах. +См. [дорожную карту](docs/drafts/roadmap.md). ## Документация @@ -79,22 +86,13 @@ jellybit recognize --dry-run [--context "..."] --config ./config.toml ## Доставка -Сборка здесь → готовый бинарь копируется на медиа-сервер umbar -(`/home/av/projects/private/umbar`). Деплой-обвязка живёт в umbar. - -Артефакты этого репозитория: статический бинарь (`task build`) и `Dockerfile` -(упаковка в `distroless/static`). Образ собирается **на сервере** из -доставленного бинаря — Go-тулчейн на сервере не нужен. В distroless нет -shell/curl, поэтому HEALTHCHECK зовёт сам бинарь: `jellybit healthcheck` -(GET `/healthz` по порту из конфига, exit 0/1). - -Деплой одной командой из umbar (собирает бинарь локально, доставляет, строит -образ на сервере, рендерит конфиг с секретами из vault, поднимает compose): - -```sh -inv pl -- jellybit # umbar/playbook-jellybit.yml -``` +Рассчитан на домашний медиа-сервер. Артефакты репозитория — статический +бинарь (`task build`) и `Dockerfile` (упаковка в `distroless/static`). Образ +собирается **на сервере** из доставленного бинаря, поэтому Go-тулчейн на +сервере не нужен. В distroless нет shell/curl, поэтому HEALTHCHECK зовёт сам +бинарь: `jellybit healthcheck` (GET `/healthz` по порту из конфига, exit 0/1). Контейнер: `user 1000:1000`, порт `8080` на хост, mount `/srv/media` (единая -песочница для хардлинков) + data-том с `config.toml`/SQLite, к qBittorrent — -через `host.docker.internal`. +песочница для хардлинков) + data-том с `config.toml`/SQLite; к qBittorrent — +по сети Docker. Конкретная деплой-обвязка (плейбук, секреты) держится в +отдельном приватном репозитории и в комплект не входит. diff --git a/config.example.toml b/config.example.toml index 4f1aa66..56eef28 100644 --- a/config.example.toml +++ b/config.example.toml @@ -1,6 +1,5 @@ -# Пример конфигурации jellybit. Реальный config.toml рендерится Ansible'ом -# из переменных umbar и не коммитится (секреты — vars/secrets.yml). -# Для локального запуска: db_path -> ./jellybit.db. +# Пример конфигурации jellybit. Реальный config.toml не коммитится (содержит +# секреты). Для локального запуска: db_path -> ./jellybit.db. [qbittorrent] url = "http://qbit:8989" # по имени сервиса в общей docker-сети @@ -58,7 +57,8 @@ auto_confidence_threshold = 0.85 enabled = false token = "" allowed_user_ids = [] # пусто = запрет всем (fail-closed) -web_base_url = "" # напр. "http://umbar:8080" — для кнопки «открыть в вебе» +web_base_url = "" # напр. "http://jellybit:8080" — для кнопки «открыть в вебе» +proxy = "" # опц. HTTP-прокси для api.telegram.org [http] listen = ":8080"