The sky's own schedule joins the orchestra. Unlike world_iss (which begs a web API per position), world_sats fetches TLEs once from Celestrak — the stations plus the named recon birds GAOFEN and COSMOS — caches them to ~/.cache/godverse/tles.txt (24 h freshness, atomic writes, stale-on-failure), and propagates every craft locally with SGP4 at any rate, no per-fix HTTP. For the venue city (--lat/--lon, retargeted by run.py) it computes each craft's elevation above the horizon and emits: /gs/sats/best_elev highest elevation among all tracked (-30..90 deg) /gs/sats/overhead_count how many above 10 deg /gs/sats/iss_lat/iss_lon ISS sweep (available even without world_iss) /gs/sats/recon_elev best elevation among only the GAOFEN/COSMOS watchers /gs/sats/pass.event impulse when any craft crosses rising through 30 deg Wiring: config.json declares the six signals with norm ranges + labels, three starter routes (best_elev -> pad.brightness, pass -> delay.feedback, recon_elev -> lfo.rate) and adds sats.best_elev to the cosmos group; run.py adds the worker to the WORLD profile and the lat/lon retarget set; requirements notes the pure-python sgp4 dep. The worker is import-safe (sits out if sgp4 is absent) and exits politely with no cache and no network. Grimoire + manual entry added. Math ported from GODSIGH's verified satellites layer: TLE -> Satrec.twoline2rv (handles no_kozai), SGP4 -> TEME km, GMST rotation -> WGS-84 geodetic, then an ECEF up-vector for elevation. Verified end-to-end against live Celestrak data: 98 sats tracked, ISS position/altitude plausible, and all signals arrive over the hub WebSocket correctly normalized with their routes active. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
16 lines
696 B
Plaintext
16 lines
696 B
Plaintext
# Godstrument — core (required)
|
|
python-osc>=1.9
|
|
websockets>=12.0
|
|
|
|
# Satellites worker (workers/world_sats.py) — SGP4 propagation from Celestrak TLEs
|
|
# pip install sgp4 # pure-python, no build; worker is import-safe without it
|
|
|
|
# Optional: MIDI output from the hub to Ableton/TouchDesigner via a virtual port
|
|
# pip install python-rtmidi
|
|
# Optional: microphone FFT worker (workers/audio_worker.py)
|
|
# pip install numpy sounddevice
|
|
# Optional: webcam hand-tracking worker (workers/vision_worker.py)
|
|
# pip install opencv-python mediapipe # needs a Python build MediaPipe ships wheels for
|
|
# Optional: MIDI-in worker (workers/midi_worker.py)
|
|
# pip install mido python-rtmidi
|