FOSFENO/scripts/start-projectm.sh
hacklab 8dd58bb293 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>
2026-07-27 00:19:30 +02:00

29 lines
1.2 KiB
Bash
Executable file

#!/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="${FOSFENO_PM_PATH:-$DIR/data/presets-projectm}"
ARGS=()
if [ -d "$PRESETS" ]; then
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[@]}"