Las pestanas de capa de la barra superior no valian: mezclaban navegar por el
panel con elegir sobre que se trabaja, y sacaban del panel de directo. Se
quitan y todo pasa a MOTORES, con dos decisiones separadas:
DONDE -> fila 'Donde se ve': SALIDA o una capa del mapping (+ crea una).
QUE -> las pastillas: combinaciones guardadas por el usuario.
Pinchar una pastilla la manda al destino elegido: con SALIDA cambia el motor
global, con una capa cambia SOLO esa capa y el resto sigue igual. Con una capa
elegida sus ajustes salen en MOTORES (la tarjeta de propiedades se mueve, no
se duplica: dos formularios para lo mismo se desincronizan a la primera).
Las pastillas son configurables: motor + preset + ajustes y su nombre, con
'Configurar pastillas'. Persisten en data/slots.json (gitignorado, es de cada
instalacion). De fabrica vienen los cinco motores de siempre, asi que quien
actualice se encuentra lo mismo que tenia. Hydra, Mezcla y projectM nativo
solo pueden ir a la salida, y al intentar mandarlos a una capa se dice.
Comprobado en Chromium por CDP, no con --dump-dom: ese fotografia el DOM al
cargar, antes de que llegue el estado por socket, y daba falsos "esta vacio".
Verificado que disparar sobre una capa deja el motor global intacto, que la
tarjeta de propiedades va y vuelve de su sitio, y que las pastillas nuevas se
guardan en disco.
De paso, dos fallos que aparecieron al probarlo:
- Restaurar la vista guardada corria al principio del fichero y llamaba a
codigo que usa variables declaradas con let mas abajo: ReferenceError que
se llevaba por delante el resto del script (socket incluido) y dejaba el
panel en blanco. Ahora se restaura al final.
- #card-destino no estaba en la lista de 'order' del CSS, asi que caia a 0 y
se colaba encima de las pastillas pese a ir despues en el HTML.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Mapping
- Los clips salian del reves: mapper.js activaba UNPACK_FLIP_Y_WEBGL, pero el
modelo va con origen arriba-izquierda y texImage2D ya sube la primera fila
en t=0, asi que el flip la mandaba al final. Comprobado renderizando el
mapper real en Chromium headless con una fuente mitad roja / mitad azul.
- projectM se puede usar YA en una capa: los .milk de data/presets-projectm se
traducen a Butterchurn en el navegador al elegirlos (milkdrop-preset-
converter). La capa MilkDrop gana 'biblioteca' (butter | projectm) sin
cambiar su firma, para no recrear el contexto WebGL al cambiar de una a otra.
Medido: 100/100 presets de una muestra convierten, 84/84 de los que llevan
shaders warp/comp; ~7 ms por preset.
- Cada capa tiene su pestana arriba y su propia vista, y '+ CAPA' crea una y
entra en ella: con varias capas, ir y volver a MAPPING no era viable.
- Dos capas MilkDrop sin preset ya no salen identicas (cogian el indice 0):
cada instancia elige uno al azar y lo escribe en el estado.
- Una capa nueva ya no nace en la fuente "motor", que es el lienzo del motor
activo y hacia que dos capas ensenaran lo mismo.
Galeria de visuales
- scripts/catalogar-visuales.py: ficha de cada clip (pelicula, personajes,
duracion) y, sobre todo, si es una silueta de verdad y cuanta figura tiene.
Distingue silueta de corte crudo por el negro puro del fondo: 0,63-0,90
frente a 0,04-0,06, sin zona gris.
- El panel lista los clips agrupados por pelicula, con nombre legible y aviso
de los que casi no tienen figura, en vez del nombre del archivo.
- Soporte de siluetas con canal alfa (.webm VP9): transparencia de verdad, sin
recorte por luminancia. El shader del mapper ya la respeta.
Documentacion
- docs/visuales.md nuevo; pendiente.md al dia con lo hecho y lo que queda.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Anade docs/assets/panel.png (captura del panel de control) al README y a uso.md como ejemplo del panel, y docs/assets/demo.mp4 (video corto de FOSFENO en marcha) al README. El video se recomprimio de 80 MB a 4,7 MB para no inflar el repositorio.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Anade tres imagenes a docs/assets/ y las enlaza en la documentacion: raspberry-pi-5.jpg en requisitos.md, y milkdrop.jpg e hydra.png en uso.md, junto a la descripcion de los motores. Actualiza docs/assets/README.md con la lista de imagenes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Primera version. Cinco motores (projectM, Butterchurn, Hydra, Shaders GLSL y mezclador VJ con camara y video), panel de control web, deteccion de BPM propia, pantalla de conexion con codigo QR, instalador robusto para Raspberry Pi 4 y 5 y documentacion completa en docs/.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>