9.2 KiB
Manga Downloader
Загрузчик манги с readmanga.ru и совместимых сайтов. Использует Playwright + Chromium для обхода JS-защиты (DDoS-Guard, антибот).
Работает в двух режимах:
- Веб-интерфейс — браузерная панель управления с realtime-прогрессом через WebSocket
- CLI — консольные команды через
docker compose run
📖 Подробная архитектурная документация: ARCHITECTURE.md
Требования
- Docker + Docker Compose
Быстрый старт
1. Собрать образ
docker compose build
2. Запустить веб-интерфейс
docker compose up -d
Откройте http://localhost:8000 — войдите под учётными данными из docker-compose.yml, вставьте URL манги, выберите формат, нажмите «Добавить».
CLI-команды
Скачать мангу
# 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
Скачать определённые главы
# Главы с 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
Анализировать мангу (список глав без скачивания)
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)
При первом запуске приложение создаёт администратора из переменных окружения:
- 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 /Info + XMP (Dublin Core) — название, описание, язык, источник |
Для завершённых серий (pub_status = completed) в ComicInfo.xml записывается поле <Count> — Komga отображает прогресс чтения серии.
Редактирование метаданных
Через веб-интерфейс можно изменить название серии, не перекачивая файлы:
- Кликните на строку манги → откроется окно деталей.
- Нажмите ✏️ Редактировать название.
- Измените «Название (ru)» и/или «Полное название».
- Нажмите Сохранить — метаданные обновятся автоматически во всех скачанных файлах.
Важно: папка на диске при этом не переименовывается. Чтобы переименовать папку — используйте отдельную функцию ниже.
Переименование папки
Через веб-интерфейс можно изменить имя папки, в которую сохраняются файлы манги:
- Кликните на строку манги → откроется окно деталей.
- Нажмите 📁 Переименовать папку.
- Введите новое имя (спецсимволы удалятся автоматически, пробелы заменятся на
_). - Нажмите Переименовать.
После переименования:
- Физическая папка на диске будет переименована.
- Пути ко всем уже скачанным файлам обновятся в БД.
- Дозагрузка новых глав продолжится в переименованную папку.