4.3 KiB
Jellybit
Jellybit — связующий сервис между qBittorrent и Jellyfin. Принимает
торрент (magnet, .torrent или ссылку) вместе с текстовым контекстом,
ставит загрузку в qBittorrent, дожидается её завершения, распознаёт
содержимое (фильм или сериал, сезоны и серии) и раскладывает готовые
файлы по конвенциям библиотеки Jellyfin.
Полный замысел и причины — в BRIEF.md.
Зачем
Arr-стек (prowlarr/radarr/sonarr) плохо ложится на русские трекеры, аниме и ручные раздачи. Jellybit намеренно сокращает путь: одна точка входа → готовая раскладка для Jellyfin, без каталога индексаторов и сложных правил качества. Распознавание делает LLM, которому помогает переданный человеком контекст и (опционально) внешние базы метаданных.
Как работает
- Точка входа принимает torrent/magnet + контекст (HTTP API, веб-UI или Telegram-бот).
- Загрузка ставится в qBittorrent в выделенную категорию.
- Сервис отслеживает завершение загрузки.
- По именам файлов, контексту и (опц.) базам метаданных определяется фильм/сериал и нужная раскладка.
- Файлы хардлинкаются в библиотеку Jellyfin — источник остаётся в раздаче, место на диске не дублируется.
При высокой уверенности раскладка выполняется автоматически, иначе — уходит на подтверждение человеку.
Статус
Ранняя разработка. Готовы каркас (Ф0) и приём + трекинг (Ф1): добавление
magnet в qBittorrent, идемпотентность по infohash, поллинг завершения и
машина состояний (downloading → completed, плюс stuck/failed); наружу —
REST API, веб-UI и jellybit add. Источники кроме magnet (.torrent/url) и
распознавание (Ф2) — дальше. См. дорожную карту.
Документация
- docs/specs/ — спецификации: целевое устройство системы. Начать с architecture.md.
- docs/adr/ — журнал архитектурных решений (почему так).
- docs/drafts/ — черновики: планы, идеи, нерешённое.
Стек
Go (один статический бинарь), SQLite (modernc.org/sqlite + sqlx,
миграции goose), HTTP — chi + html/template + htmx, конфигурация —
TOML, логи — структурированный JSON (slog). Подробнее — в
architecture.md.
Разработка
Нужны Go 1.26 и Task. Полный список задач —
task --list.
cp config.example.toml config.toml # локально: db_path -> ./jellybit.db
task setup # golangci-lint + git-хуки lefthook
task tidy # go mod tidy
task run # go run ./cmd/jellybit --config ./config.toml
task test lint # тесты и golangci-lint
task build # статический бинарь (linux/amd64) для сервера
task image # docker-образ из готового бинаря
Доставка
Сборка здесь → готовый бинарь копируется на медиа-сервер umbar
(/home/av/projects/private/umbar). Деплой-обвязка живёт в umbar.