# 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//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 `/.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). - **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://: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 | | Mangas descargados | `MANGA_DIR_HOST` (aquí `/zdata/media/mangas`) | CBZ + portadas | Pasos en el sistema nuevo: ```bash git clone 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.