Commit Graph

3 Commits

Author SHA1 Message Date
Jakub Zych
0a73f7e254 Music daemon + cross-source sync via OBS WebSocket
Music persistence across scene switches by extracting playback into a
separate browser source (music/index.html) — single source instance
shared across scenes via OBS's "Add Existing", so it doesn't restart on
scene change.

Loading and Game overlays subscribe to mpd:state CustomEvents over OBS
WebSocket; the daemon broadcasts at 1 Hz plus on every track change.
File-based command pipeline lets bash control playback without a
WebSocket client of its own:

- vendor/obs-ws-mini.js — minimal WS v5 client with HMAC-SHA256 auth,
  hard timeout, close-rejection, and a pure-JS SHA-256 fallback for
  CEF file:// origins where crypto.subtle is unavailable.
- setup.sh — generates vendor/obs-config.js from the OBS plugin config;
  checks the live socket instead of the (lagging) config file.
- music/index.html — invisible audio worker. Plays through a shuffled
  queue with hardened error/stall recovery, polls loading/cmd.js for
  bash-issued commands, broadcasts mpd:state via WS. Includes a
  diagnostic status block (visible if the source's eye-icon is on).
- loading/index.html — strips local audio playback; subscribes to
  mpd:state to drive the now-playing terminal line live. Removes the
  redundant trailing prompt; terminal lines anchor at the bottom.
- loading/playlist.sh — rebuilt as subcommand API:
    sync (default), skip, prev, pause, resume, status
  control commands write loading/cmd.js (id, type, ts), which the
  daemon polls every 250ms.
- loading/convert.sh — strips video tracks from .webm music downloads
  to audio-only m4a (~95% smaller, ~20× faster decode); fixes the
  CPU pegging from CEF decoding 1080p VP9 video for music playback.
- .gitignore — track manifests, ignore generated wrappers + secrets +
  the audio cache.
2026-04-26 02:33:50 +02:00
Jakub Zych
704e126adc Landing: telemetry collector, doomguard watermark, SIGNAL centering
- telemetry.sh: bash collector for static device + OBS profile specs.
  Default mode wraps telemetry.json → telemetry.js (script-tag-loaded
  global, dodging file:// fetch CORS in CEF). --collect re-reads
  hardware + OBS basic.ini / streamEncoder.json.
- index.html: footer subtitle now rotates real CPU/MEM/GPU/OBS data
  with soft 400ms crossfade; SIGNAL group re-centered via 3-col grid;
  doomguard watermark behind everything with periodic "tune-in"
  spikes through the noise canvas.
- telemetry.json: hand-edited cosmetic version of collected specs.
- .gitignore: track telemetry.json (source), ignore telemetry.js
  (build artifact) and *.manual backups.
2026-04-26 00:47:59 +02:00
Jakub Zych
6decec66cc Initial commit: OBS scene collection, profile, landing overlay
Tracked: scene JSON (Untitled + pre-migration backups), landing/
overlay (HTML + static-hum.wav), profile encoder/basic settings,
rtmp-services metadata, modules list, ini files, CLAUDE.md.

Ignored via .gitignore: stream keys (**/service.json), obs-websocket
password (plugin_config/obs-websocket/), logs/, profiler_data/,
.sentinel/, OBS-managed *.bak and *.json.v1 sidecars.
2026-04-25 23:19:57 +02:00