From 816898083474035243bcaf0c2b6d0f17f7d0af2d Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Sat, 16 May 2026 19:02:12 +0600 Subject: [PATCH] Failed to authenticate. API Error: 401 Invalid authentication credentials [2026-05-16] vault sync --- family/projects/media-toolbox-kraken.md | 13 +++ personal/projects/library-app.md | 111 ++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 personal/projects/library-app.md diff --git a/family/projects/media-toolbox-kraken.md b/family/projects/media-toolbox-kraken.md index 090f244f..b06bd4c4 100644 --- a/family/projects/media-toolbox-kraken.md +++ b/family/projects/media-toolbox-kraken.md @@ -372,6 +372,19 @@ docker run --rm ... media-pipeline:kraken \ - ✅ **rsync с HTPC завершён** — 303 фильма, 206 мультиков, 72 серии, 46 документалок (2.2TB) - ✅ **unresolved.json маунтится** — `-v $(pwd)/unresolved.json:/config/unresolved.json` +⚠️ **Обязательный pipeline.providers в config.json** — если `tmdb`/`kinopoisk` отсутствуют в блоке → disabled → 213 skipped вместо 278+ applied! +```json +"pipeline": { + "providers": { + "tmdb": { "enabled": true, "language": "ru-RU" }, + "kinopoisk": { "enabled": true }, + "torrent": { "enabled": true }, + "webSearch": { "enabled": true }, + "aiAgent": { "enabled": false } + } +} +``` + ### Запуск pipeline (правильная команда) ```bash cd /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/docker/media-pipeline diff --git a/personal/projects/library-app.md b/personal/projects/library-app.md new file mode 100644 index 00000000..cc2a6fb6 --- /dev/null +++ b/personal/projects/library-app.md @@ -0,0 +1,111 @@ +# Library App + +Персональный веб-сайт для библиотеки книг на TrueNAS. + +## Назначение + +Замена inpxer — полноценный сайт для просмотра коллекции Flibusta (687k книг) + личных книг, с отметками статуса чтения, связями между книгами и графом. + +## Деплой + +- **Контейнер:** `library-app` на TrueNAS (mallexxx.duckdns.org) +- **Домен:** `library.mallexxx.duckdns.org` +- **Расположение:** `/mnt/RED_2TB/docker/library/` +- **Сеть:** `caddy_default` + +## Данные + +### Монтирования + +| Хост | Контейнер | Режим | +|------|-----------|-------| +| `/mnt/RED_2TB/storage/Downloads/fb2.Flibusta.Net` | `/library` | ro | +| `/mnt/RED_2TB/storage/books` | `/books` | ro | +| `/mnt/RED_2TB/docker/library/data` | `/data` | rw | + +### SQLite файлы в `/data/` + +**`books.db`** — пересоздаётся при каждом старте контейнера из INPX (≈10 сек): +```sql +books(id, author, genre, title, series, format, date, lang, zip_file) +``` + +**`library.db`** — персистентный, никогда не удалять: +```sql +read_log(book_id, status, date_updated, rating, notes, created_at) + -- status: 'read' | 'reading' | 'want' + +relations(book_id, related_id, type, weight, fetched_at) + -- type: 'same_author' | 'same_series' | 'same_genre' | 'openlibrary' +``` + +## Статусы книг + +| Статус | Значение | +|--------|----------| +| `read` | Прочитано | +| `reading` | Читаю сейчас | +| `want` | Буду читать | + +## Источники связей между книгами + +Связи строятся при **первом открытии** любой книги, кэшируются в `relations`: + +1. **`same_author`** — все книги того же автора (из books.db, мгновенно) +2. **`same_series`** — книги той же серии (из books.db, мгновенно) +3. **`same_genre`** — топ-20 книг жанра по дате (из books.db, мгновенно) +4. **`openlibrary`** — "readers also read" через OpenLibrary API (async, ~300ms) + +Повторное открытие: кэш используется. Фоновое обновление — раз в 30 дней (поле `fetched_at`). + +## Стек + +- **Backend:** Python + FastAPI (JSON API) +- **Frontend:** Vue 3 (CDN, no build) + Tailwind CSS (CDN) — mobile-first SPA +- **Граф:** vis.js (CDN) +- **Контейнер:** python:3.12-slim, uvicorn + +## Страницы + +| URL | Описание | +|-----|----------| +| `/` | Главная — поиск, жанры (без взрослых), новинки | +| `/book/{id}` | Страница книги — статус, связи, скачать | +| `/my` | Мои книги — read/reading/want с фильтрами | +| `/graph` | Граф прочитанных книг и связей | +| `/adult` | Взрослые жанры — отдельная страница, нет ссылки с главной | + +## Взрослый контент + +Жанры-теги в `/data/adult_genres.txt` — один жанр на строку. По умолчанию: +``` +love_erotica +erotik +sex_sf +adv_sex +prose_sex +``` + +Эти жанры исключены из главной страницы и поиска по умолчанию. Доступны только через `/adult`. + +## Ссылки на скачивание + +- **Flibusta (inpxer):** `https://books.mallexxx.duckdns.org/download/{id}` +- **Личные книги:** `https://docs.mallexxx.duckdns.org/books/{path}` (FileBrowser) + +## Entrypoint + +```bash +# 1. Rebuild books.db из INPX (~10 сек) +python inpx2db.py /library/flibusta_fb2_local.inpx /data/books.db + +# 2. Init library.db (если не существует) +python init_db.py /data/library.db + +# 3. Запуск сервера +uvicorn main:app --host 0.0.0.0 --port 8080 +``` + +## История + +- **2026-05-16** — проект инициирован. Бенчмарк: INPX parse+SQLite build = 10.1s, DB = 209MB.