Files
AV-Live/docs/DATA_FEEDS_OSC.md
T
L'électron rare 02de5302c9 feat: add realart web application with Hydra, WebGL, and OSC data feeds
- 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.
2026-05-11 07:21:04 +02:00

152 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 300800 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`.