Root cause of 'track does not start': the server re-broadcast incoming frames as
binary (Buffer), so the browser output page received Blobs, JSON.parse failed,
and every command (playTrack, etc.) was silently dropped — only the text-encoded
lastEffect sync got through. Broadcast as text now; net.js also handles Blob
defensively. Also: no-store for app assets + kiosk --disk-cache-size=1 so
redeploys always take effect; /api/clients debug endpoint; /api/peaks duration.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Queue cards expand to a detail panel with the waveform, elapsed/total/remaining
times, draggable in/out handles, scrub-to-seek and a 'pausa dopo' gap.
- /api/peaks now also returns exact duration (samples/8000) so non-playing tracks
have correct times/trim without relying on the output media probe.
- Service worker switched to network-first (+v2) so UI updates aren't masked by
a stale cache; output.js probeDurations hardened (load()+timeout fallback).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Drop --use-gl=egl (disabled the GPU on Chromium 149) and let Chromium pick the
default ANGLE/GLES backend with --ignore-gpu-blocklist -> hardware WebGL2.
- Launch kiosk via 'cage -- bash kiosk.sh' so a non-executable bit after rsync
no longer breaks startup.
- output.js reports gpuInfo (webgl2 + renderer) on load for remote diagnostics.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New separate project (the Electron Mac app stays untouched). Reuses the visual
engine (WebGL shaders, effect catalog, Web Audio) verbatim and replaces Electron
IPC with a Node HTTP+WebSocket server:
- server.js: serves the kiosk output page + mobile control PWA, relays the same
ctl/rpt JSON protocol over WebSocket, plus REST for media library/upload,
JSON state (pads), waveform peaks and MP4 recording (ffmpeg).
- public/js/net.js: window.djv shim over WebSocket+HTTP so output.js runs intact.
- public/index.html + control.js: touch-first mobile remote (effects, media/queue,
ticker, pads, audio/EQ, fullscreen + recording).
- PWA (manifest + service worker + generated icons).
- scripts/: Chromium kiosk launcher + install-pi.sh (systemd units for Pi 5).
Verified: REST endpoints, WebSocket relay both directions, control PWA loads the
2958-effect catalog and renders. (Headless WebGL output not testable without GPU.)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>