Files
novelasvm/docs/INDEX.md

5.7 KiB

NovelasVM

Plataforma web aliada de Afterlife para ejecutar y probar novelas visuales directamente en el navegador. Soporta multiples motores: Ren'Py (WebAssembly), Unity WebGL, proyectos HTML5 personalizados y ONScripter-RU/Umineko Web.

Información general

Campo Valor
VMID 111
Host Proxmox Cisco1 (192.168.10.185)
IP estática 192.168.10.111
Gateway 192.168.10.254
DNS 8.8.8.8, 8.8.4.4
Recursos 8 vCPUs, 16 GB RAM, 150 GB disco
SO Ubuntu 24.04 LTS
Usuario admin novelas
Web http://192.168.10.111

Estructura de directorios

/opt/novelas/
├── bin/
│   ├── build-novela.sh       # Script principal: compila y publica novelas
│   └── detect-engine.sh      # Detecta el motor de un proyecto
├── builds/                   # Builds intermedias generadas
├── projects/                 # Proyectos fuente de novelas
├── tools/
│   └── renpy/                # Ren'Py SDK 8.3.4 + web package
├── config/
│   └── nginx-snippet.template# Plantilla para snippets nginx
├── templates/
│   └── portal/               # Plantillas del portal web (NO USADAS EN RUNTIME)
└── docs/
    ├── README.md             # Esta documentación
    └── DESIGN.md             # Sistema de diseño del portal

/var/www/novelas/             # Raíz servida por nginx
├── index.html                # Portal principal
├── assets/                   # CSS, JS e iconos del portal
│   ├── styles.css
│   ├── app.js
│   └── icons/
├── games.json                # Catálogo global de juegos
└── games/
    ├── demo/                 # The Question (Ren'Py)
    ├── web-demo/             # Ejemplo HTML5
    ├── unity-demo/           # Ejemplo Unity WebGL
    └── umineko/              # Solo cover.jpg; juego en contenedor Docker

/etc/nginx/snippets/novelas-games/
└── *.conf                    # Headers COOP/COEP por juego Ren'Py

Motores soportados

Motor Detección automática Compilación Headers COOP/COEP
Ren'Py project.json o game/script.rpy Si, via renpy.sh launcher web_build Si
Unity WebGL Build/, TemplateData/ e index.html No, copia directa No
Web genérico index.html No, copia directa No
ONScripter estándar 0.txt, nscript.dat, ons.cfg Copia + OnscripterYuri web No
ONScripter-RU / Umineko *.file + default.cfg Contenedor Docker umineko_web_asm No

Cómo agregar una novela visual

  1. Coloca el proyecto en /opt/novelas/projects/<nombre>.
  2. (Opcional) Añade un archivo meta.json en la raíz del proyecto:
    {
      "title": "Mi Novela",
      "subtitle": "Subtítulo opcional",
      "description": "Breve descripción de la novela.",
      "author": "Tu nombre",
      "version": "1.0",
      "cover": "/games/mi-novela/cover.jpg"
    }
    
  3. Ejecuta como root o con sudo:
    /opt/novelas/bin/build-novela.sh <nombre> /opt/novelas/projects/<nombre>
    
    También puedes forzar el motor:
    /opt/novelas/bin/build-novela.sh <nombre> /opt/novelas/projects/<nombre> renpy
    
  4. La novela quedará disponible en http://192.168.10.111/games/<nombre>/.

Umineko no Naku Koro ni (ONScripter-RU Web)

Umineko utiliza el motor ONScripter-RU compilado a WebAssembly mediante el proyecto umineko_web_asm. Se sirve desde un contenedor Docker dedicado y se accede a traves de una redireccion en nginx.

Estructura

/opt/novelas/tools/umineko-web-asm/    # Fuente del contenedor
├── run-umineko-web.sh                 # Script para levantar/actualizar
├── docker-compose.yml
└── ...

/opt/novelas/projects/umineko/          # Archivos del juego
/var/www/novelas/games/umineko/cover.jpg # Portada para el portal

URL

  • Portal: http://192.168.10.111/games/umineko/ (redirige al contenedor)
  • Directa: http://192.168.10.111:8081/

Gestión del contenedor

# Levantar o recrear
cd /opt/novelas/tools/umineko-web-asm
./run-umineko-web.sh

# Detener
docker-compose down

# Estado
docker ps
docker logs -f umineko-web-asm_umineko-web_1

Modos de hosting

Edita run-umineko-web.sh para cambiar HOSTING_MODE:

  • local (actual): sirve los archivos originales. Inicio rapido.
  • production: convierte PNG→WebP, MP4→WebM, etc. Tarda en iniciar la primera vez.
  • remote: el usuario sube sus propios archivos desde el navegador.

Portal web

El portal principal (http://192.168.10.111/) muestra el catálogo de novelas disponibles con:

  • Diseño moderno y responsive.
  • Selector de temas: oscuro, claro e inmersivo.
  • Tarjetas con portada, metadatos y badge del motor.
  • Carga dinámica desde /games.json.

La preferencia de tema se guarda en localStorage del navegador.

Servicios instalados

  • nginx (puerto 80)
  • ufw (firewall: 22, 80, 443)
  • docker + docker-compose
  • nodejs + npm
  • python3 + pip
  • xvfb (para compilar Ren'Py Web sin display)

Diseño

El sistema de diseño del portal está documentado en /opt/novelas/docs/DESIGN.md. Se inspiró en los design systems de designmd.ai y define tokens para los tres temas visuales.

Notas de seguridad

  • Cambiar el password de root y del usuario novelas si aun no se ha hecho.
  • Considerar habilitar HTTPS con Caddy o certbot.
  • Evaluar autenticación si las novelas son privadas.
  • Los headers Cross-Origin-Opener-Policy y Cross-Origin-Embedder-Policy solo se aplican a juegos Ren'Py, ya que son los unicos que requieren SharedArrayBuffer. Unity WebGL y juegos web genericos no los necesitan y podrian romperse con ellos.