79 lines
4.9 KiB
Markdown
79 lines
4.9 KiB
Markdown
# Manga Reader
|
||
|
||
Lector web de manga autoalojado, con las dos fuentes de
|
||
[Tanko](https://github.com/Alexandro521/Tanko) (`src/servers/`):
|
||
|
||
- **LeerCapitulo** (español, por defecto): mucho más catálogo. El scraper está reescrito para el
|
||
sitio actual y ya no necesita navegador headless (las páginas vienen en el HTML).
|
||
- **MangaDex** (multi-idioma): español = es-la + es combinados. Muchos títulos populares no tienen
|
||
capítulos por licencias; la ficha ofrece buscarlos en LeerCapitulo.
|
||
- Búsqueda, populares y actualizados recientemente.
|
||
- Lector por página (toques/flechas, izq→der o der→izq) o en vertical, modo ahorro de datos.
|
||
- Usuarios con contraseña; el **historial y la página exacta** se guardan en el servidor
|
||
(`data/manga.db`), así que puedes seguir desde cualquier dispositivo/sesión.
|
||
- **Descargas**: botón "⬇ Descargar" en la ficha. Baja el manga entero en segundo plano a
|
||
`/zdata/media/mangas/<Título>/Capitulo NNNN.cbz` (+ `cover.jpg`, `ComicInfo.xml` en cada CBZ),
|
||
compatible con Kavita/Komga/Mihon. Se reanuda tras reinicios; repetirla baja solo los capítulos
|
||
nuevos. Los capítulos descargados se leen desde disco y, sin conexión, la ficha usa los datos guardados.
|
||
- **Novedades**: los mangas que empiezas a leer (o marcas con "Seguir") se revisan cada
|
||
`CHECK_INTERVAL_HOURS` (3 h). El inicio muestra "N caps. nuevos", la ficha marca NUEVO, los
|
||
mangas con copia local descargan lo nuevo solos, y se puede avisar por ntfy o Telegram (Ajustes).
|
||
- **Lector**: una página, doble página (tablet horizontal/PC; portada y páginas apaisadas van solas)
|
||
o vertical. Modo, ajuste y dirección se recuerdan por manga (por defecto: manhwa/manhua en
|
||
vertical, manga por página de derecha a izquierda). Zoom con pellizco, doble toque en el centro,
|
||
Ctrl+rueda o + / − / 0.
|
||
- **Reescalado HD**: en la ficha de un manga descargado, "Reescalar a HD" pasa sus capítulos por
|
||
Real-ESRGAN (`realesr-animevideov3` ×2, en la GPU por Vulkan) y guarda la versión HD en
|
||
`<Título>/.hd/` (carpeta oculta: el CBZ original no se toca y Kavita/Komga no ven duplicados).
|
||
Con el manga marcado, los capítulos que se descarguen después también se reescalan. La lista de
|
||
capítulos marca **HD**, el lector usa la versión HD (se puede desactivar en sus ajustes) y desde
|
||
allí también se reescala un capítulo suelto. En una Intel HD 630 tarda ~13 s por página y cada
|
||
página ocupa ~2,5× más (WebP calidad 85).
|
||
- **Recortes**: en el lector, ✂ y arrastrar sobre un panel lo guarda en "Recortes" con su manga,
|
||
capítulo y página ("Ir a la página" lleva directo allí). Se recorta del original y solo el recorte se
|
||
reescala con Real-ESRGAN (×4, o ×2 si ya mide más de 1200 px; unos segundos). Se guardan en
|
||
`data/clips/` (`<id>.png` original y `<id>-hd.webp`), con nota opcional y descarga.
|
||
- **Estadísticas**: rachas, capítulos y páginas por semana, calendario de actividad, géneros
|
||
favoritos y lo más leído.
|
||
- Las imágenes pasan por el servidor (`/api/img`), solo con URLs firmadas por él (clave en `data/secret`).
|
||
|
||
## Uso
|
||
|
||
```bash
|
||
cp .env.example .env # opcional: ajusta rutas, puerto, usuario…
|
||
docker compose up -d --build
|
||
# http://<ip-del-servidor>:3352
|
||
```
|
||
|
||
El contenedor no depende del sistema operativo: imagen Node fijada (`node:24.22.2-trixie-slim`,
|
||
con Mesa Vulkan y Real-ESRGAN verificado por SHA-256), sin dependencias npm, y todo lo propio de la máquina está en `.env` (ver `.env.example`).
|
||
Sin `.env` arranca igual: puerto 3352 en todas las interfaces y descargas en `./mangas`.
|
||
|
||
El primer usuario puede registrarse siempre; después el registro queda cerrado salvo
|
||
`ALLOW_SIGNUP=true` en `.env`.
|
||
|
||
## Qué guardar / mover a otro servidor
|
||
|
||
| Qué | Dónde | Contenido |
|
||
|---|---|---|
|
||
| Código | este repositorio | se recrea con `git clone` |
|
||
| `.env` | raíz del proyecto (no está en git) | rutas, puerto, PUID/PGID, URL pública |
|
||
| `data/` | raíz del proyecto (no está en git) | `manga.db` (+ `-wal`/`-shm`): usuarios, historial, estadísticas, seguimiento, ajustes; `secret`: clave del proxy de imágenes; `clips/`: recortes |
|
||
| Mangas descargados | `MANGA_DIR_HOST` (aquí `/zdata/media/mangas`) | CBZ + portadas |
|
||
|
||
Pasos en el sistema nuevo:
|
||
|
||
```bash
|
||
git clone <repo> manga-reader && cd manga-reader
|
||
# copiar .env y data/ desde el servidor anterior (con el contenedor parado), y la carpeta de mangas
|
||
id -u; id -g # si no son 1000, ponlos en PUID/PGID del .env
|
||
docker compose up -d --build
|
||
```
|
||
|
||
Para el reescalado HD el host necesita `/dev/dri` (GPU Intel/AMD con Mesa) y `RENDER_GID` en `.env`
|
||
con el grupo `render`. Sin GPU, quita `devices`/`group_add` del compose: todo lo demás funciona igual.
|
||
|
||
Si el usuario del host no coincide con PUID/PGID, el contenedor no arranca y el log dice
|
||
exactamente qué `chown` hacer. Si la carpeta de mangas no existe, Docker la crea como root:
|
||
créala antes (`mkdir -p` con tu usuario) para que las descargas funcionen.
|