NovelasVM

Plataforma web aliada de Afterlife para alojar, compilar y ejecutar novelas visuales directamente desde el navegador.

NovelasVM es una solución autoalojada multi-motor pensada para equipos que necesitan probar, distribuir o archivar novelas visuales sin depender de servicios de terceros. Soporta Ren'Py, Unity WebGL, proyectos HTML5 genéricos y ONScripter-RU (Umineko Web).


Tabla de contenidos

  1. Características principales
  2. Requisitos
  3. Instalación rápida
  4. Arquitectura general
  5. Motores soportados
  6. Uso básico
  7. El portal web
  8. Umineko Web
  9. Documentación adicional
  10. Seguridad
  11. Licencia y créditos

Características principales

  • Multi-motor: Ren'Py, Unity WebGL, HTML5 genérico, ONScripter-RU/Umineko.
  • Portal moderno: catálogo con tarjetas, portadas, metadatos y selector de tres temas (oscuro, claro, inmersivo).
  • Compilación automatizada: script build-novela.sh que detecta el motor, compila si es necesario y publica.
  • Configuración nginx optimizada: cache de assets, headers COOP/COEP condicionales para Ren'Py Web.
  • Soporte de Umineko Web: contenedor Docker con ONScripter-RU compilado a WebAssembly.
  • Diseño extensible: tokens CSS, sistema de diseño documentado en DESIGN.md.

Requisitos

Hardware recomendado

Componente Mínimo Recomendado
CPU 4 vCPUs 8 vCPUs
RAM 8 GB 16 GB
Disco 50 GB 150 GB (Umineko requiere ~15 GB)
Red Acceso LAN IP fija o dominio

Software

  • Ubuntu 22.04/24.04 LTS
  • nginx
  • Docker + docker-compose
  • Python 3
  • Node.js + npm
  • xvfb
  • p7zip-full
  • git
  • Ren'Py SDK 8.3.4+ con web package

Instalación rápida

# 1. Clonar este repositorio
git clone https://git.consultoria-as.com/consultoria-as/novelasvm.git
cd novelasvm

# 2. Ejecutar el script de instalación
sudo bash scripts/setup.sh

# 3. Copiar el portal a /var/www/novelas
sudo cp -r var-www/* /var/www/novelas/
sudo chown -R www-data:www-data /var/www/novelas

# 4. Recargar nginx
sudo nginx -t && sudo nginx -s reload

Para la instalación detallada paso a paso, consulta docs/INSTALL.md.


Arquitectura general

┌─────────────────────────────────────────────────────────────────┐
│                         Navegador                                │
│                                                                  │
│   http://192.168.10.111/         http://192.168.10.111:8081/    │
│         │                                    │                   │
│         ▼                                    ▼                   │
│  ┌──────────────┐                   ┌──────────────────┐        │
│  │  Portal web  │                   │ Umineko Web      │        │
│  │  (nginx 80)  │ ─── redirect ───▶ │ (Docker/nginx 80)│        │
│  └──────────────┘                   └──────────────────┘        │
│         │                                                        │
│         ▼                                                        │
│  ┌──────────────┐                                                │
│  │ Juegos web   │                                                │
│  │ /var/www/... │                                                │
│  └──────────────┘                                                │
└─────────────────────────────────────────────────────────────────┘

/opt/novelas/          Código, proyectos y herramientas
/var/www/novelas/      Raíz servida por nginx

Para más detalles técnicos, consulta docs/ARCHITECTURE.md.


Motores soportados

Motor Script/carpetas esperadas Compilación Notas
Ren'Py project.json o game/script.rpy Sí (renpy.sh web_build) Requiere COOP/COEP
Unity WebGL Build/, TemplateData/, index.html No Copia directa
Web genérico index.html No Copia directa
ONScripter 0.txt, nscript.dat, ons.cfg No Usa OnscripterYuri web
ONScripter-RU / Umineko *.file, default.cfg, chiru.file Contenedor Docker Motor específico

Más información en docs/ENGINES.md.


Uso básico

Agregar una novela

sudo /opt/novelas/bin/build-novela.sh <slug> /opt/novelas/projects/<slug> [motor]

Ejemplos:

# Ren'Py
sudo /opt/novelas/bin/build-novela.sh demo /opt/novelas/projects/demo

# Unity WebGL
sudo /opt/novelas/bin/build-novela.sh mi-juego /opt/novelas/projects/mi-juego unity

# Web genérico
sudo /opt/novelas/bin/build-novela.sh web-novel /opt/novelas/projects/web-novel web

Metadatos opcionales

Crea un archivo meta.json en la raíz del proyecto:

{
  "title": "Mi Novela",
  "subtitle": "Subtítulo opcional",
  "description": "Breve descripción.",
  "author": "Autor",
  "version": "1.0",
  "cover": "/games/mi-novela/cover.jpg"
}

El portal web

El portal principal está en /var/www/novelas/ y ofrece:

  • Catálogo dinámico cargado desde /games.json.
  • Selector de temas: oscuro, claro, inmersivo.
  • Tarjetas con portada, título, subtítulo, badge del motor, descripción.
  • Diseño responsive y accesible (sin emojis, iconos SVG).

Para personalizar el diseño, revisa docs/DESIGN.md y docs/PORTAL.md.


Umineko Web

Umineko utiliza un motor especial que corre dentro de un contenedor Docker.

# Iniciar
sudo /opt/novelas/bin/umineko-web.sh start

# Detener
sudo /opt/novelas/bin/umineko-web.sh stop

# Reiniciar
sudo /opt/novelas/bin/umineko-web.sh restart

# Ver logs
sudo /opt/novelas/bin/umineko-web.sh logs

URL: http://192.168.10.111/games/umineko/

Más detalles en docs/UMINEKO.md.


Documentación adicional


Seguridad

  • Cambia las contraseñas de root y del usuario novelas tras la instalación.
  • Considera habilitar HTTPS con certbot o Caddy.
  • No publiques el repositorio si incluye assets con copyright.
  • Los headers COOP/COEP solo se aplican a juegos Ren'Py; no se aplican globalmente.

Lee más en docs/SECURITY.md.


Licencia y créditos

El código de la plataforma (scripts, portal, documentación) se provee tal cual para uso interno de Afterlife / Consultoría AS.

Componentes de terceros:

  • Ren'Py SDK: MIT
  • OnscripterYuri: licencia del proyecto original
  • Umineko Web (umineko_web_asm): por VictoriqueMoe y colaboradores
  • Fuentes Google (Inter, JetBrains Mono): SIL Open Font License

Los juegos publicados por los usuarios conservan sus propias licencias.

Description
Plataforma web para alojar y ejecutar novelas visuales multi-motor (RenPy, Unity WebGL, HTML5, ONScripter-RU/Umineko)
Readme 64 KiB
Languages
CSS 35.5%
JavaScript 27.6%
Shell 22%
HTML 14.9%