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
- Coloca el proyecto en
/opt/novelas/projects/<nombre>. - (Opcional) Añade un archivo
meta.jsonen 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" } - Ejecuta como root o con sudo:
También puedes forzar el motor:
/opt/novelas/bin/build-novela.sh <nombre> /opt/novelas/projects/<nombre>/opt/novelas/bin/build-novela.sh <nombre> /opt/novelas/projects/<nombre> renpy - 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
novelassi 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-PolicyyCross-Origin-Embedder-Policysolo se aplican a juegos Ren'Py, ya que son los unicos que requierenSharedArrayBuffer. Unity WebGL y juegos web genericos no los necesitan y podrian romperse con ellos.