Обновил readme

This commit is contained in:
2026-06-14 19:48:39 +03:00
parent 81ed58ecff
commit 0e69a86a89
2 changed files with 30 additions and 32 deletions
+26 -28
View File
@@ -1,10 +1,10 @@
# Jellybit # Jellybit
Jellybit — связующий сервис между qBittorrent и Jellyfin. Принимает Jellybit — связующий сервис между qBittorrent и Jellyfin. Принимает
торрент (magnet, `.torrent` или ссылку) вместе с текстовым контекстом, magnet-ссылку вместе с текстовым контекстом, ставит загрузку в
ставит загрузку в qBittorrent, дожидается её завершения, распознаёт qBittorrent, дожидается её завершения, распознаёт содержимое (фильм или
содержимое (фильм или сериал, сезоны и серии) и раскладывает готовые сериал, сезоны и серии) и раскладывает готовые файлы по конвенциям
файлы по конвенциям библиотеки Jellyfin. библиотеки Jellyfin.
Полный замысел и причины — в [BRIEF.md](BRIEF.md). Полный замысел и причины — в [BRIEF.md](BRIEF.md).
@@ -18,8 +18,8 @@ Arr-стек (prowlarr/radarr/sonarr) плохо ложится на русск
## Как работает ## Как работает
1. Точка входа принимает torrent/magnet + контекст (HTTP API, веб-UI 1. Точка входа принимает magnet + контекст (HTTP API, веб-UI,
или Telegram-бот). Telegram-бот или CLI).
2. Загрузка ставится в qBittorrent в выделенную категорию. 2. Загрузка ставится в qBittorrent в выделенную категорию.
3. Сервис отслеживает завершение загрузки. 3. Сервис отслеживает завершение загрузки.
4. По именам файлов, контексту и (опц.) базам метаданных определяется 4. По именам файлов, контексту и (опц.) базам метаданных определяется
@@ -30,13 +30,20 @@ Arr-стек (prowlarr/radarr/sonarr) плохо ложится на русск
При высокой уверенности раскладка выполняется автоматически, иначе — При высокой уверенности раскладка выполняется автоматически, иначе —
уходит на подтверждение человеку. уходит на подтверждение человеку.
Доступ к внешним сервисам (LLM, базы метаданных, Telegram) при
необходимости идёт через HTTP-прокси — задаётся полем `proxy` в
соответствующих секциях конфигурации.
## Статус ## Статус
Ранняя разработка. Готовы каркас (Ф0) и приём + трекинг (Ф1): добавление Рабочий прототип с полным сквозным путём: приём magnet → загрузка в
magnet в qBittorrent, идемпотентность по infohash, поллинг завершения и qBittorrent → распознавание (LLM + опционально базы метаданных
машина состояний (`downloading → completed`, плюс stuck/failed); наружу — TMDB/TVDB/TVMaze) → раскладка в библиотеку хардлинками, автоматически при
REST API, веб-UI и `jellybit add`. Источники кроме magnet (.torrent/url) и уверенном результате либо через подтверждение человеком. Транспорты приёма:
распознавание (Ф2) — дальше. См. [дорожную карту](docs/drafts/roadmap.md). REST API, веб-UI, Telegram-бот и CLI (`jellybit add`).
Из источников пока поддержан magnet; `.torrent` и обычные ссылки — в планах.
См. [дорожную карту](docs/drafts/roadmap.md).
## Документация ## Документация
@@ -79,22 +86,13 @@ jellybit recognize <infohash> --dry-run [--context "..."] --config ./config.toml
## Доставка ## Доставка
Сборка здесь → готовый бинарь копируется на медиа-сервер umbar Рассчитан на домашний медиа-сервер. Артефакты репозитория — статический
(`/home/av/projects/private/umbar`). Деплой-обвязка живёт в umbar. бинарь (`task build`) и `Dockerfile` (упаковка в `distroless/static`). Образ
собирается **на сервере** из доставленного бинаря, поэтому Go-тулчейн на
Артефакты этого репозитория: статический бинарь (`task build`) и `Dockerfile` сервере не нужен. В distroless нет shell/curl, поэтому HEALTHCHECK зовёт сам
(упаковка в `distroless/static`). Образ собирается **на сервере** из бинарь: `jellybit healthcheck` (GET `/healthz` по порту из конфига, exit 0/1).
доставленного бинаря — Go-тулчейн на сервере не нужен. В distroless нет
shell/curl, поэтому HEALTHCHECK зовёт сам бинарь: `jellybit healthcheck`
(GET `/healthz` по порту из конфига, exit 0/1).
Деплой одной командой из umbar (собирает бинарь локально, доставляет, строит
образ на сервере, рендерит конфиг с секретами из vault, поднимает compose):
```sh
inv pl -- jellybit # umbar/playbook-jellybit.yml
```
Контейнер: `user 1000:1000`, порт `8080` на хост, mount `/srv/media` (единая Контейнер: `user 1000:1000`, порт `8080` на хост, mount `/srv/media` (единая
песочница для хардлинков) + data-том с `config.toml`/SQLite, к qBittorrent — песочница для хардлинков) + data-том с `config.toml`/SQLite; к qBittorrent —
через `host.docker.internal`. по сети Docker. Конкретная деплой-обвязка (плейбук, секреты) держится в
отдельном приватном репозитории и в комплект не входит.
+4 -4
View File
@@ -1,6 +1,5 @@
# Пример конфигурации jellybit. Реальный config.toml рендерится Ansible'ом # Пример конфигурации jellybit. Реальный config.toml не коммитится (содержит
# из переменных umbar и не коммитится (секреты — vars/secrets.yml). # секреты). Для локального запуска: db_path -> ./jellybit.db.
# Для локального запуска: db_path -> ./jellybit.db.
[qbittorrent] [qbittorrent]
url = "http://qbit:8989" # по имени сервиса в общей docker-сети url = "http://qbit:8989" # по имени сервиса в общей docker-сети
@@ -58,7 +57,8 @@ auto_confidence_threshold = 0.85
enabled = false enabled = false
token = "" token = ""
allowed_user_ids = [] # пусто = запрет всем (fail-closed) allowed_user_ids = [] # пусто = запрет всем (fail-closed)
web_base_url = "" # напр. "http://umbar:8080" — для кнопки «открыть в вебе» web_base_url = "" # напр. "http://jellybit:8080" — для кнопки «открыть в вебе»
proxy = "" # опц. HTTP-прокси для api.telegram.org
[http] [http]
listen = ":8080" listen = ":8080"