8.0 KiB
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
- Características principales
- Requisitos
- Instalación rápida
- Arquitectura general
- Motores soportados
- Uso básico
- El portal web
- Umineko Web
- Documentación adicional
- Seguridad
- 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.shque 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
docs/INSTALL.md— Instalación detallada.docs/ARCHITECTURE.md— Arquitectura y flujo de datos.docs/ENGINES.md— Guía por motor.docs/PORTAL.md— Personalización del portal.docs/THEMES.md— Sistema de temas.docs/API.md— Especificación degames.jsony metadatos.docs/TROUBLESHOOTING.md— Solución de problemas.docs/SECURITY.md— Consideraciones de seguridad.docs/UMINEKO.md— Integración de Umineko Web.docs/DESIGN.md— Sistema de diseño.
Seguridad
- Cambia las contraseñas de root y del usuario
novelastras 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.