- Portadas: se reescalan (×4/×2) solo las de mangas en historial o seguidos; caché en data/covers/. - Colas (antes Descargas): cola de descargas y de reescalado HD con progreso, tiempo restante, reintentar/detener, recortes y portadas pendientes; biblioteca descargada en tarjetas verticales. - Refresco de Colas sin parpadeo: solo se actualiza lo que cambia. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
86 lines
5.5 KiB
Markdown
86 lines
5.5 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).
|
||
- **Portadas HD**: las portadas de los mangas que sigues o tienes en el historial se reescalan solas en
|
||
segundo plano (×4 las pequeñas, ×2 el resto; ~4 s cada una) y desde entonces se sirven en HD. Las
|
||
de búsquedas y populares se quedan como están. Caché en `data/covers/` (se puede borrar: se regeneran).
|
||
- **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.
|
||
- **Colas** (antes "Descargas"): descargas en curso y en espera, cola de reescalado HD por manga
|
||
(capítulo y página en curso, siguientes, tiempo restante, errores con "Reintentar", "Detener"),
|
||
recortes y portadas pendientes, y debajo la biblioteca descargada con su tamaño; todo en tarjetas
|
||
verticales con portada, como el historial.
|
||
- **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; `covers/`: portadas HD (caché) |
|
||
| 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.
|