Files
manga/README.md
2026-05-01 03:27:33 +03:00

211 lines
9.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Manga Downloader
Загрузчик манги с readmanga.ru и совместимых сайтов. Использует Playwright + Chromium для обхода JS-защиты (DDoS-Guard, антибот).
Работает в двух режимах:
- **Веб-интерфейс** — браузерная панель управления с realtime-прогрессом через WebSocket
- **CLI** — консольные команды через `docker compose run`
📖 Подробная архитектурная документация: [ARCHITECTURE.md](ARCHITECTURE.md)
---
## Требования
- Docker + Docker Compose
---
## Быстрый старт
### 1. Собрать образ
```bash
docker compose build
```
### 2. Запустить веб-интерфейс
```bash
docker compose up -d
```
Откройте **http://localhost:8000** — войдите под учётными данными из `docker-compose.yml`, вставьте URL манги, выберите формат, нажмите «Добавить».
---
## CLI-команды
### Скачать мангу
```bash
# CBZ (по умолчанию)
docker compose run --rm --entrypoint "" manga \
python -m src.cli download https://3.readmanga.ru/magicheskaia_bitva
# PDF
docker compose run --rm --entrypoint "" manga \
python -m src.cli download https://3.readmanga.ru/magicheskaia_bitva --format pdf
# Все форматы сразу
docker compose run --rm --entrypoint "" manga \
python -m src.cli download https://3.readmanga.ru/magicheskaia_bitva --format all
```
### Скачать определённые главы
```bash
# Главы с 1 по 10
docker compose run --rm --entrypoint "" manga \
python -m src.cli download <URL> --chapters 1-10
# Конкретные главы
docker compose run --rm --entrypoint "" manga \
python -m src.cli download <URL> --chapters 1,5,10
```
### Анализировать мангу (список глав без скачивания)
```bash
docker compose run --rm --entrypoint "" manga \
python -m src.cli analyze https://3.readmanga.ru/magicheskaia_bitva
```
---
## Выходные файлы
Файлы сохраняются в `./output/<название манги>/`:
```
output/
Магическая_битва/
v01_ch0001.0.cbz
v01_ch0002.0.cbz
...
```
Состояние хранится в `./state/progress.db` (SQLite). Логи — в `./state/manga.log`.
---
## Параметры CLI
| Флаг | Default | Описание |
|------|---------|---------|
| `--format / -f` | `cbz` | `cbz` \| `pdf` \| `epub` \| `all` |
| `--chapters / -c` | — | Диапазон: `1-10`, `5`, `1,3,7` |
| `--output / -o` | `./output` | Папка для сохранения |
| `--resume` | включён | Пропускать уже скачанные главы |
| `--force / -F` | — | Игнорировать БД, скачать заново |
| `--concurrency` | `4` | Параллельных загрузок |
| `--verbose / -v` | — | Подробный вывод (DEBUG) |
---
## Авторизация и пользователи
Приложение использует многопользовательскую систему с ролями. Доступ к веб-интерфейсу защищён формой входа.
### Системный администратор (bootstrap)
При первом запуске приложение создаёт администратора из переменных окружения:
```yaml
- AUTH_LOGIN=ваш_логин
- AUTH_PASSWORD=ваш_пароль
```
Этот пользователь является **системным администратором** (`is_env_admin`):
- Помечен иконкой 🔒 в списке пользователей
- **Пароль нельзя изменить через интерфейс** — только через `AUTH_PASSWORD` в `docker-compose.yml`
- Нельзя удалить
Сессия сохраняется в браузере на 30 дней, повторный вход не требуется.
### Управление пользователями
Администратор может управлять пользователями через вкладку **⚙️ Настройки** → раздел **Пользователи**:
- **Создать** пользователя с указанием логина, пароля и роли
- **Изменить** роль или пароль существующего пользователя
- **Удалить** пользователя (кроме системного администратора и самого себя)
### Роли
| Роль | Описание |
|------|---------|
| `admin` | Полный доступ: управление пользователями, удаление и принудительная перезагрузка манг, управление источниками, приоритизация очереди |
| `user` | Может добавлять мангу, управлять только своими загрузками |
---
## Конфигурация (docker-compose.yml)
| Переменная | Default | Описание |
|------------|---------|---------|
| `AUTH_LOGIN` | — | Логин системного администратора (создаётся при первом старте) |
| `AUTH_PASSWORD` | — | Пароль системного администратора |
| `CHAPTER_CONCURRENCY` | `3` | Глав загружается параллельно |
| `UPDATE_SCHEDULE` | — | Расписание авто-проверки новых глав (cron-синтаксис). Если пусто — отключено |
| `UPDATE_INTERVAL_HOURS` | — | Устаревший формат: число часов (конвертируется в cron автоматически) |
### Примеры расписания (`UPDATE_SCHEDULE`)
```
0 */6 * * * — каждые 6 часов
0 3 * * * — каждый день в 03:00 UTC
0 3 * * MON — каждый понедельник в 03:00
*/30 * * * * — каждые 30 минут
— (пусто) — планировщик отключён
```
---
## Возобновление прерванной загрузки
Загрузка автоматически продолжается с места остановки — состояние хранится в БД. При перезапуске контейнера незавершённые задачи восстанавливаются в очередь.
---
## Метаданные (Komga и другие читалки)
Каждый скачанный файл содержит полные метаданные серии и главы:
| Формат | Метаданные |
|--------|-----------|
| **CBZ** | `ComicInfo.xml` (Anansi v2.1) — серия, номер, том, описание, жанры, язык, ориентация (право→лево), ссылка на источник |
| **EPUB** | Dublin Core + `calibre:series` + EPUB3 `belongs-to-collection` — серия, описание, порядок глав |
| **PDF** | PDF `/Info` + XMP (Dublin Core) — название, описание, язык, источник |
Для завершённых серий (`pub_status = completed`) в `ComicInfo.xml` записывается поле `<Count>` — Komga отображает прогресс чтения серии.
---
## Редактирование метаданных
Через веб-интерфейс можно изменить название серии, не перекачивая файлы:
1. Кликните на строку манги → откроется окно деталей.
2. Нажмите **✏️ Редактировать название**.
3. Измените «Название (ru)» и/или «Полное название».
4. Нажмите **Сохранить** — метаданные обновятся автоматически во всех скачанных файлах.
> **Важно:** папка на диске при этом **не переименовывается**. Чтобы переименовать папку — используйте отдельную функцию ниже.
---
## Переименование папки
Через веб-интерфейс можно изменить имя папки, в которую сохраняются файлы манги:
1. Кликните на строку манги → откроется окно деталей.
2. Нажмите **📁 Переименовать папку**.
3. Введите новое имя (спецсимволы удалятся автоматически, пробелы заменятся на `_`).
4. Нажмите **Переименовать**.
После переименования:
- Физическая папка на диске будет переименована.
- Пути ко всем уже скачанным файлам обновятся в БД.
- Дозагрузка новых глав продолжится в переименованную папку.