---
title: NINJA Slideshow
url: https://hernandez.systems/es/ninja-slideshow
lang: es
type: caso
alternate_en: https://hernandez.systems/en/ninja-slideshow
site: hernandez.systems
network: Osky Networks
---

# NINJA Slideshow

> Un sistema de señalización digital con gestión de contenido en tiempo real que reproduce imágenes y videos en bucle en navegadores, Raspberry Pi, Android TV y smart TVs LG y Samsung.

## El problema

Varias pantallas de distintas marcas y sistemas, repartidas en diferentes áreas, tienen que mostrar el mismo contenido actualizado sin que nadie pase a cargarlo una por una. Además, las pantallas quedan encendidas sin supervisión, así que cualquier falla de memoria, de red o de despliegue termina en una pantalla negra.

## La solución

Un sistema de slideshow digital con panel de administración: se suben imágenes y videos, se ordenan con drag & drop y todas las pantallas los reproducen en bucle infinito. Cada cambio llega al instante a todos los clientes por Socket.IO.

Funciona en cualquier navegador moderno, en Raspberry Pi (Chromium en modo kiosco), en Android TV y Google TV (app en Flutter), en LG (app webOS) y en Samsung (app Tizen).

## Cómo funciona

- **Subidas directas al almacenamiento:** los archivos van del navegador a DigitalOcean Spaces con URLs prefirmadas; los de 100 MB o más se suben en partes en paralelo, hasta 2 GB, con barra de progreso y opción de cancelar. El servidor nunca carga el archivo en memoria.
- **Tiempo real:** después de cada subida, borrado o cambio de orden, el servidor avisa a todos los clientes y estos refrescan su lista.
- **Despliegue automatizado:** scripts que encuentran las pantallas en la red, instalan la versión más reciente en todas (LG, Samsung y Android TV, cada una con su herramienta), las encienden por Wake-on-LAN y las apagan al final del día, programados con cron. Un despliegue solo se reporta como exitoso si de verdad se instaló.

## Seguridad

- Autenticación del panel con cookies firmadas (HMAC-SHA256), sin sesiones en el servidor, para funcionar con varias instancias.
- Comparaciones en tiempo constante, límite de intentos de inicio de sesión y de escrituras, y CORS por ruta.
- Content-Security-Policy estricta en producción y validación de nombres de archivo contra una lista permitida.
- El servidor no arranca si falta un secreto o si es demasiado corto.

## Confiabilidad documentada

El repositorio documenta cómo se diagnosticaron y corrigieron fallas reales en Android TV: una fuga de memoria con video, descargas a medias en la caché que cortaban los videos, y una pantalla que se apagaba sola cada 10 minutos. Cada corrección quedó en una versión del cliente.

## Detalles técnicos

| Componente | Tecnología |
|---|---|
| Backend | Express y Socket.IO, en TypeScript |
| Panel web | React, Vite, Tailwind y shadcn |
| Almacenamiento | DigitalOcean Spaces (compatible con S3) |
| Cliente Raspberry Pi y Android TV | Flutter |
| Clientes LG y Samsung | Apps web para webOS y Tizen |

## Estado

Código público en GitHub: [MoscoDJ/NINJA-Slideshow](https://github.com/MoscoDJ/NINJA-Slideshow).

## Servicios relacionados

- [Streaming y sistemas en tiempo real](https://hernandez.systems/es/streaming-y-tiempo-real)
- [Drupal e integraciones](https://hernandez.systems/es/drupal-e-integraciones)
- [Automatización y bots](https://hernandez.systems/es/automatizacion-y-bots)
