Manga Reader

Lector web de manga autoalojado, con las dos fuentes de 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

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:

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.

S
Description
Lector de manga autoalojado (MangaDex, LeerCapitulo, M440): descargas CBZ, reescalado HD, modo sin conexión y app instalable.
Readme
1.2 MiB
Languages
JavaScript 94.2%
CSS 5.4%
Dockerfile 0.2%
HTML 0.2%