Root README.md : - Hero updated : 20 feeds, SMPL-X body mesh, 3 launch modes - Section Real-world feeds reorganisee en 7 categories avec les 9 nouvelles sources (openmeteo, openaq, iss, volcano, social_buzz, gdelt, wikimedia, tides, atc) - Section Web data-only ajoutee : dashboard / map / control sur :3211 + sync SC <- web_bridge.scd sur :57125 - Liste des launch modes : Full / Data-only / Body Mesh - Architecture details : 4 nouvelles entrees data_feeds/README.md : - Intro : 20 sources (vs 11 avant) - Table OSC schema completee avec les 9 nouvelles routes launcher/README.md : refactor complet - Section 3 modes avec leur stack - AV-Live-Body panneau de reglages (5 sections) - Table de routage process spawnes - Carte OSC ports 57121-57130 data_only_viz/web/README.md : nouveau fichier - Architecture diagram bidir - Description detaillee des 3 pages - Variables d'env + protocole WebSocket
4.3 KiB
data_only_viz/web — Dashboard data-only
Pont bidirectionnel Express + WebSocket pour le mode Data-only (et Body Mesh) d'AV-Live. Sert 3 pages temps reel et fait le bridge entre :
- les 20 feeds Python (
data_feeds/bridge.py) sur OSC:57124 - le navigateur via WebSocket
- SuperCollider (
sclang) sur OSC:57121(out) et:57125(sync in) - openFrameworks (
oscope-of) sur OSC:57123pour lesvizMode
Architecture
data_feeds bridge.py
| OSC :57124
v
server.js (Express :3211 + WS) <----- SC sync :57125 (/sync/*)
|
+---> dashboard.html (cards + sparklines SVG vanilla)
+---> map.html (Leaflet dark + markers temps reel)
+---> control.html (sliders + scenes + viz modes + XY pad)
|
v WS -> OSC out
:57121 SC (/control/* /scene/play /xy/*)
:57123 oF (/control/vizMode)
Demarrage
cd data_only_viz/web
npm install # une fois
HTTP_PORT=3211 node server.js
# ou via le launcher : mode dataOnly ou bodyMesh -> "Dashboard data-only"
URLs :
http://127.0.0.1:3211/dashboard.htmlhttp://127.0.0.1:3211/map.htmlhttp://127.0.0.1:3211/control.html
Pages
/dashboard.html
Grille responsive de 18 cards live, une par source de donnees. Chaque card affiche :
- valeur courante (numerique formate)
- ligne sub (contexte : unite, timestamp, info secondaire)
- sparkline SVG vanilla 100x30, dernieres 64-128 valeurs
- classe
.alert/.warn/.greenselon seuils (ex: Kp >= 6 alert, PM2.5 > 35 alert, tone GDELT < -5 alert)
Cards couvertes : usgs, swpc (kp/wind/bz/xray), blitzortung, opensky, bluesky, openmeteo, openaq, iss (pos + pass), volcano, social_buzz (reddit/hn/pulse), netzfrequenz, gdelt, wikimedia (rate + edits), tides + moon, atc, pose, mempool, github, rte_eco2mix (mix + co2).
/map.html
Leaflet dark fullscreen (CartoDB) avec :
- markers ephemeres (TTL 60 s) : seismes (pink), foudre (jaune), avions (vert), volcans (orange), GDELT events (purple)
- 1 marker ISS persistant (bleu, contour blanc) qui suit la position temps reel
- HUD coin haut-gauche : statut connexion + compteur d'events
- liens vers dashboard et control
/control.html
Surface de controle 3 colonnes :
| Colonne | Contenu | Endpoint OSC |
|---|---|---|
| Synthes & mix | 7 sliders : master_gain, cutoff, reso, reverb_mix, delay_time, delay_feedback, tempo | /control/<name> -> SC :57121 |
| Scenes audio + retour SC | 10 boutons scenes (cavity/geo/body/weather/flight/pulse/quiet/all/full/stop) + labels BPM/Beat/RMS/Voies retournes par SC | /scene/play <name> -> SC :57121 |
| Modes visuels + XY pad | 9 boutons (storm/tunnel/plasma/kaleido/voronoi/metaballs/stars/bars/hands3d) + XY pad pour FX | /control/vizMode <idx> -> oF :57123/xy/{x,y} <f> -> SC :57121 |
Les sliders envoient sur drag (input event). Les boutons scenes et viz toggle visuellement actif. Le XY pad envoie sur pointerdown/pointermove (Y inverse pour avoir up=1).
Variables d'environnement
HTTP_PORT=3211 # port HTTP + WS
OSC_DATA_IN=57124 # feeds IN
OSC_SYNC_IN=57125 # SC sync IN
SC_HOST=127.0.0.1
SC_PORT_OUT=57121 # /control/* /scene/* /xy/*
OF_PORT_OUT=57123 # /control/vizMode
Protocole WebSocket
Tous les messages WS sont du JSON :
// server -> browser (feed) :
{ t: 1715600000000, kind: "feed", feed: "usgs", sub: "event",
args: [lat, lon, mag] }
// server -> browser (SC sync) :
{ t: 1715600000000, kind: "sync", sub: "bpm", args: [120.0] }
// browser -> server (control) :
{ path: "/control/master_gain", args: [0.8] }
{ path: "/scene/play", args: ["body"] }
{ path: "/xy/x", args: [0.42] }
{ path: "/control/vizMode", args: [3] }
Le serveur replay les ~100 derniers events a chaque nouvelle connexion WS (ring buffer 500 entrees).
Cote SC : sound_algo/control/web_bridge.scd
Charge automatiquement par boot.data-only.scd apres
data_feeds.scd. Installe les OSCdef /control/* /scene/play
/xy/* sur :57121, et pousse /sync/bpm|beat|rms|voices vers
NetAddr("127.0.0.1", 57125) a 4 Hz via une Routine AppClock.
Variable d'env ~webState partagee pour debug REPL :
~webState.postln; // -> ( masterGain: 0.8, cutoff: 1200, ... )