Ir al contenido
Nicolás Amorosi

Código abierto, para iglesias

Lumina Live

Durante un culto, una persona maneja la pantalla: un himno, un pasaje bíblico, las diapositivas del sermón, un video. Lumina Live es la app de escritorio para esa tarea —una ventana de control para quien opera y una de proyección para todos los demás— y desde octubre de 2026 es de código abierto, con instaladores para Windows, macOS y Linux.

El problema

Lumina Live —WorshipApp hasta octubre de 2026— nació para reemplazar a EasyWorship. Es el tercer intento: antes hubo un proyecto, hoy archivado, y una versión en JavaScript plano.

Quienes operan ya conocen el flujo en dos pasos de EasyWorship —elegir, revisarlo en la vista previa y recién entonces mandarlo en vivo—, así que el reemplazo lo conserva.

Restricciones

  • Corre en Windows, macOS y Linux; desarrollada en una Mac.
  • Uso en vivo: si el proyector se desconecta, la imagen vuelve sola al reconectarlo; si la ventana de proyección se cierra, vuelve exactamente como estaba.
  • Sin conexión: todo local, incluido el texto bíblico y su búsqueda.
  • Las diapositivas llegan como archivos de PowerPoint, entre ellos himnarios .pps que avanzan solos y traen la música adentro.
  • Código abierto bajo GPL-3.0: el código, su documentación y sus tests son públicos, en inglés, para quien quiera contribuir.

Qué construí

Una app Electron con una separación estricta: el proceso principal es dueño del estado y la base de datos, quien opera trabaja en una ventana de control, y la ventana de proyección es una función pura de la última salida que recibió. Si se reabre, el proceso principal reenvía esa salida y la pantalla vuelve exactamente como estaba.

Valores seguros por defecto —renderers en sandbox, web security activado—, con los archivos locales servidos por un protocolo propio worship:// por id, nunca por ruta.

SQLite con Drizzle para programas de culto, la biblioteca de medios y la Biblia —viene con la Reina-Valera 1909, de dominio público, y otras versiones se importan desde cinco formatos—, con búsqueda de texto completo FTS5 que ignora acentos: escribir “senor” encuentra “Señor”.

Cualquier video o audio se reproduce: lo que Chromium no puede decodificar lo convierte en segundo plano un FFmpeg incluido, sin tocar el original. La interfaz está en español, inglés, italiano y portugués, y los diccionarios se tipan entre sí: un texto faltante no compila.

Lo difícil

Ventana de control

Quien opera encola canciones, pasajes, diapositivas

Contrato IPC tipado

Proceso principal

Dueño del estado y de SQLite; reenvía la última salida

ProjectionOutput

Ventana de proyección

Una función pura de la última salida

Pipeline de diapositivas

  1. .pptx
  2. LibreOffice
  3. PDF
  4. pdf.js
  5. WebP
  6. (Cacheado por contenido)
La ventana de proyección solo dibuja la última salida que recibió, así que siempre se puede reconstruir. Las diapositivas pasan por LibreOffice y pdf.js.

Un único contrato IPC tipado

Cada mensaje entre procesos se declara una sola vez, en un único tipo de contrato. Un handler faltante o mal tipado no compila, y los errores vuelven como un resultado tipado en lugar de excepciones cruzando procesos.

PowerPoint sin PowerPoint

Automatizar PowerPoint por COM ataba la app a Office. El pipeline actual convierte .pptx a PDF con LibreOffice headless, renderiza cada página a WebP con pdf.js y cachea el resultado por contenido, esquivando que LibreOffice exporta a PNG solo la primera diapositiva. Los tiempos y el audio se leen directo del XML de la presentación.

Leerlo como un desconocido

Antes de abrir el repositorio se revisó toda su historia en busca de claves, tokens y rutas locales, la licencia se acordó con el autor de la primera versión y se verificó la Biblia incluida. Su ortografía —«y fué la luz», «ha dado á su Hijo»— la delató como la Reina-Valera de 1909, de dominio público, y no la edición de 1960, con derechos de autor, que decía ser. Se le cambió el nombre, con una migración para las instalaciones existentes.

Un espacio en la ruta

Los paquetes de Linux se probaron en contenedores con el sandbox de Chromium activado de verdad (la suite end-to-end lo apaga). Así apareció un .deb que no arrancaba: instalado en “/opt/Lumina Live”, la ruta del helper del sandbox se partía en el espacio. Ahora se instala en /opt/lumina-live y conserva el nombre del producto en el menú.

Resultado

  • Publicado como código abierto el 23 de octubre de 2026: versión 2.2.0-beta.4, con instaladores para Windows, macOS y Linux (Linux todavía experimental).
  • 403 tests unitarios y 104 end-to-end, la suite end-to-end corrida contra la app empaquetada.
  • Lo que sigue: la 2.2.0 estable, cuando esta beta haya pasado por un culto real.

Este proyecto es de código abierto: el código, los issues y las versiones son públicos en GitHub. Las figuras son ilustraciones.