# Real-ESRGAN (ncnn-vulkan) para el reescalado HD. Solo se guardan los modelos de anime ×2 (capítulos) y ×4 (recortes).
FROM debian:trixie-slim AS esrgan
ARG ESRGAN_URL=https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesrgan-ncnn-vulkan-20220424-ubuntu.zip
ARG ESRGAN_SHA256=e5aa6eb131234b87c0c51f82b89390f5e3e642b7b70f2b9bbe95b6a285a40c96
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl unzip && rm -rf /var/lib/apt/lists/*
RUN curl -fsSL -o /tmp/esr.zip "$ESRGAN_URL" \
 && echo "$ESRGAN_SHA256  /tmp/esr.zip" | sha256sum -c - \
 && mkdir -p /opt/realesrgan/models && cd /tmp && unzip -q esr.zip -d esr \
 && install -m 755 esr/realesrgan-ncnn-vulkan /opt/realesrgan/ \
 && cp esr/models/realesr-animevideov3-x2.* esr/models/realesr-animevideov3-x4.* /opt/realesrgan/models/

# Versión fijada: node:sqlite aún es experimental y una actualización silenciosa podría romperlo.
# Debian (no Alpine): Real-ESRGAN necesita glibc y los controladores Vulkan de Mesa.
FROM node:24.22.2-trixie-slim
ENV NODE_ENV=production NODE_NO_WARNINGS=1 \
    UPSCALER_BIN=/opt/realesrgan/realesrgan-ncnn-vulkan \
    MESA_SHADER_CACHE_DIR=/tmp/mesa-cache
RUN apt-get update && apt-get install -y --no-install-recommends tzdata libvulkan1 mesa-vulkan-drivers libgomp1 webp \
 && rm -rf /var/lib/apt/lists/*
COPY --from=esrgan /opt/realesrgan /opt/realesrgan
WORKDIR /app
COPY app/ ./
# Usuario por defecto; docker-compose.yml lo sustituye por PUID:PGID.
USER node
EXPOSE 3352
HEALTHCHECK --interval=60s --timeout=5s --start-period=20s CMD node -e "fetch('http://127.0.0.1:3352/api/me').then(r=>process.exit(r.status<500?0:1),()=>process.exit(1))"
CMD ["node", "server.js"]
