Mapping in-browser (Fase 1) + trabajo en curso

Projection mapping editable desde el navegador, sin herramientas externas:
- web/stage/mapper.js (nuevo): compositor WebGL que texturiza el motor activo
  sobre superficies deformables (homografia por vertice: keystone correcto).
- Editor con raton en el escenario (crear, arrastrar esquinas, mover, borrar)
  y previsualizacion arrastrable en el panel (raton/tactil) para editar desde
  el movil sin tocar la ventana de visuales.
- Backend: estado "mapping" + evento set_mapping, persistido en data/mapping.json
  (ignorado en git). Seccion "Mapping" en el panel + texto de ayuda.
- Solo motores web (butterchurn/hydra/shaders/mixer); projectM no se mapea.
- .gitignore: excluye config de runtime (mapping.json, pm-favoritos.json).

Incluye ademas trabajo en curso previo sin commitear (server.py, stage.js,
panel.js/css, ayuda.json, hydra-sketches.json, problemas.md,
start-projectm.sh), subido junto a peticion del autor.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
hacklab 2026-07-27 00:19:30 +02:00
parent 0b1546cecc
commit 8dd58bb293
12 changed files with 1815 additions and 85 deletions

View file

@ -1,13 +1,29 @@
#!/usr/bin/env bash
# Lanza projectM nativo a pantalla completa. Lo invoca el servidor cuando
# se selecciona el motor "projectM" desde el panel.
#
# El servidor pasa los ajustes del panel por variables de entorno:
# FOSFENO_PM_PATH carpeta de presets (categoria o preset fijo)
# FOSFENO_PM_DURATION segundos por visual
# FOSFENO_PM_SHUFFLE orden aleatorio (1/0)
DIR="$(cd "$(dirname "$0")/.." && pwd)"
PRESETS="$DIR/data/presets-projectm"
PRESETS="${FOSFENO_PM_PATH:-$DIR/data/presets-projectm}"
# projectMSDL (frontend SDL2 de projectM v4). La ruta de presets se puede
# fijar tambien en ~/.config/projectMSDL/projectMSDL.properties
ARGS=()
if [ -d "$PRESETS" ]; then
exec projectMSDL --presetPath "$PRESETS"
else
exec projectMSDL
ARGS+=(--presetPath "$PRESETS")
fi
[ -n "${FOSFENO_PM_DURATION:-}" ] && ARGS+=(--presetDuration "$FOSFENO_PM_DURATION")
[ -n "${FOSFENO_PM_SHUFFLE:-}" ] && ARGS+=(--shuffleEnabled "$FOSFENO_PM_SHUFFLE")
# Pantalla completa sin bordes (sin cambiar la resolucion del proyector):
# asi los relanzamientos no dejan una ventana flotante, solo un parpadeo.
ARGS+=(--fullscreen 1 --exclusive 0)
# Y siempre en el monitor donde esta el escenario (lo detecta el servidor):
# sin esto, cada relanzamiento aterriza en la pantalla donde este el raton.
if [ -n "${FOSFENO_PM_MONITOR:-}" ] && [ "$FOSFENO_PM_MONITOR" != "0" ]; then
ARGS+=(--monitor "$FOSFENO_PM_MONITOR")
fi
exec projectMSDL "${ARGS[@]}"