211 lines
9.2 KiB
Markdown
211 lines
9.2 KiB
Markdown
# 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. Нажмите **Переименовать**.
|
||
|
||
После переименования:
|
||
- Физическая папка на диске будет переименована.
|
||
- Пути ко всем уже скачанным файлам обновятся в БД.
|
||
- Дозагрузка новых глав продолжится в переименованную папку.
|