02de5302c9
- Implemented Hydra visualizations in `web_realart/public/hydra/app.js` and `index.html`. - Created WebGL visualizer using Three.js and WebGPU in `web_realart/public/webgl/app.js` and `index.html`. - Developed main landing page in `web_realart/public/index.html` to showcase different visualizations. - Set up WebSocket server in `web_realart/server.js` to relay OSC messages to web clients. - Added health check API endpoint for monitoring server status.
152 lines
6.7 KiB
Markdown
152 lines
6.7 KiB
Markdown
# Schéma OSC — data_feeds
|
||
|
||
Diffusion : UDP `127.0.0.1:57121` (SuperCollider) **et** `127.0.0.1:57123`
|
||
(openFrameworks). Tous les arguments sont des floats sauf mention contraire.
|
||
|
||
## Méta
|
||
|
||
| Route | Args | Description |
|
||
|-------------------|---------------------|--------------------------------------|
|
||
| `/data/heartbeat` | `uptime_sec` | Émis toutes les 5 s par le pont |
|
||
|
||
## Sismique — `usgs`
|
||
|
||
Source : <https://earthquake.usgs.gov/>
|
||
|
||
| Route | Args | Notes |
|
||
|---------------------|-------------------------------------|--------------------------------|
|
||
| `/data/usgs/event` | `mag lon lat depth_km age_sec` | Un par séisme nouveau |
|
||
| `/data/usgs/rate` | `events_per_hour` | Fenêtre glissante 1 h |
|
||
|
||
## Météo spatiale — `swpc`
|
||
|
||
Source : NOAA SWPC (DSCOVR, GOES, planetary index).
|
||
|
||
| Route | Args | Notes |
|
||
|-------------------|-----------------------------------|----------------------------------------|
|
||
| `/data/swpc/wind` | `speed_kms density_pcm3 temp_K` | typique 300–800 km/s |
|
||
| `/data/swpc/bz` | `Bz_nT Bt_nT` | Bz < 0 = orage géomag possible |
|
||
| `/data/swpc/kp` | `Kp a_index` | Kp ∈ [0..9] |
|
||
| `/data/swpc/xray` | `short_Wm2 long_Wm2 flare_norm` | `flare_norm` 0..1 sur classes A→X |
|
||
|
||
## Réseau électrique — `netzfrequenz`
|
||
|
||
Source : Mainsfrequenz.de WebSocket (mesure ~200 ms à Karlsruhe).
|
||
|
||
| Route | Args | Notes |
|
||
|--------------------------------|-------------|------------------------------------|
|
||
| `/data/netzfrequenz/freq` | `hz` | typiquement 49.95 .. 50.05 |
|
||
| `/data/netzfrequenz/dev` | `delta_hz` | `hz - 50.0` |
|
||
| `/data/netzfrequenz/time_dev` | `sec` | Dérive intégrée (horloge synchrone)|
|
||
|
||
## Foudre — `blitzortung`
|
||
|
||
Source : LightningMaps WebSocket relay (réseau Blitzortung).
|
||
|
||
| Route | Args | Notes |
|
||
|-----------------------------|-------------------------------|----------------------|
|
||
| `/data/blitzortung/strike` | `lat lon age_sec multiplicity`| Un par impact |
|
||
| `/data/blitzortung/rate` | `strikes_per_min` | Fenêtre 60 s |
|
||
|
||
## Aviation — `opensky`
|
||
|
||
Source : OpenSky Network REST (anonyme : 15 s max).
|
||
|
||
| Route | Args | Notes |
|
||
|------------------------|-----------------------------------------------------|------------------------|
|
||
| `/data/opensky/count` | `n` | Aéronefs dans la bbox |
|
||
| `/data/opensky/plane` | `"icao24" lon lat alt_m vel_ms heading_deg` | Un par avion par poll |
|
||
|
||
Note : `icao24` est une string ; côté oF elle est hashée djb2 16 bits en float.
|
||
|
||
## Mix électrique France — `rte_eco2mix`
|
||
|
||
Source : RTE Open API (OAuth2 client_credentials, gratuit).
|
||
|
||
| Route | Args |
|
||
|-------------------|-------------------------------------------------------------------|
|
||
| `/data/rte_eco2mix/mix` | `nuclear gas coal oil hydro wind solar bio` (MW) |
|
||
|
||
Côté SC, `~feeds[\rte_renew_pct]` calcule `(hydro+wind+solar+bio)/total`.
|
||
|
||
## Social — `bluesky`
|
||
|
||
Source : Jetstream WebSocket (firehose posts publics).
|
||
|
||
| Route | Args | Notes |
|
||
|----------------------|----------------------------|--------------------------------------|
|
||
| `/data/bluesky/post` | `text_len lang_hash` | Echantillonné selon `sample_rate` |
|
||
| `/data/bluesky/rate` | `posts_per_sec` | Fenêtre 10 s |
|
||
|
||
## Bitcoin — `mempool`
|
||
|
||
Source : mempool.space WebSocket.
|
||
|
||
| Route | Args |
|
||
|----------------------|---------------------------------------|
|
||
| `/data/mempool/tx` | `value_btc fee_sat_vb` |
|
||
| `/data/mempool/block`| `height tx_count reward_btc` |
|
||
|
||
## GitHub — `github`
|
||
|
||
Source : `/events` API publique (60 req/h sans token).
|
||
|
||
| Route | Args |
|
||
|----------------------|-------------------------------|
|
||
| `/data/github/event` | `type_hash repo_hash` |
|
||
|
||
## Pose / webcam — `pose`
|
||
|
||
Source : webcam locale (cv2.VideoCapture) + détection YOLOv8-pose
|
||
(17 keypoints COCO). Tourne dans `data_feeds/feeds/pose.py`.
|
||
|
||
**Attention** : sur macOS, **une seule application** peut ouvrir la
|
||
webcam à la fois. Si le worker pose tourne, désactiver
|
||
`localCapture` dans `WebcamVis` côté oF (et inversement).
|
||
|
||
| Route | Args |
|
||
|----------------------|---------------------------------------------------------------|
|
||
| `/data/pose/count` | `n` (nombre de personnes) |
|
||
| `/data/pose/person` | `idx cx cy w h conf` (bbox normalisée 0..1) |
|
||
| `/data/pose/skel` | `idx avg_conf x0 y0 c0 ... x16 y16 c16` (53 args si emit_kp) |
|
||
| `/data/pose/bone` | `kp_a kp_b` (annoncé statiquement à la connexion, 16 paires) |
|
||
|
||
Layout COCO (17 keypoints) :
|
||
|
||
```text
|
||
0 nose 5 sho_l 6 sho_r
|
||
1 eye_l 2 eye_r 7 elb_l 8 elb_r
|
||
3 ear_l 4 ear_r 9 wri_l 10 wri_r
|
||
11 hip_l 12 hip_r
|
||
13 kne_l 14 kne_r
|
||
15 ank_l 16 ank_r
|
||
```
|
||
|
||
Côté SC, helper de lecture :
|
||
|
||
```supercollider
|
||
~poseKp.(\wri_r); // → (x:, y:, c:) pour le sujet 0
|
||
~feeds[\pose_count]; // nombre de sujets
|
||
~feeds[\pose_persons][0]; // (cx:, cy:, w:, h:, conf:)
|
||
```
|
||
|
||
## GCN — `gcn`
|
||
|
||
Source : NASA GCN Classic over Kafka (auth).
|
||
|
||
| Route | Args |
|
||
|----------------------|-------------------------------------------|
|
||
| `/data/gcn/alert` | `mission_hash ra_deg dec_deg err_arcmin` |
|
||
|
||
## Conventions
|
||
|
||
- **Strings → hash** : tout argument string non-essentiel est encodé en
|
||
hash djb2 16 bits (`0..65535`) pour rester compatible numérique côté
|
||
SynthDef et shaders. Le pont Python et `OscClient` utilisent la même
|
||
fonction.
|
||
- **Age** : pour les événements horodatés (USGS, Blitzortung), un
|
||
`age_sec` est inclus pour permettre de filtrer les vieux événements
|
||
qui arriveraient en burst après une coupure réseau.
|
||
- **Idempotence** : tous les `OSCdef` côté SC sont libérés et recréés
|
||
à chaque chargement de `control/data_feeds.scd`.
|