USGS has no colour equirect for Europa/Callisto/Titan/Phobos/Charon, so those
mosaics shipped grayscale. Multiply each by its characteristic hue at render
(bodies.js `tint`; moons.js tint-preserving loader keeps the real surface detail,
adds the iconic colour — Titan orange, Europa/Charon tan, Callisto/Phobos warm).
Io/Ganymede/Triton stay true USGS colour (white multiplier). Flagged in CREDITS as
a directorial (non-data) choice per Part ω.2. User-directed ("colourise the moons").
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|---|---|---|
| assets | ||
| css | ||
| docs | ||
| js | ||
| vendor/three | ||
| .gitignore | ||
| CLAUDE.md | ||
| index.html | ||
| PERIHELION_BRIEF.md | ||
| README.md | ||
| serve.py | ||
| SOLARGOD_BRIEF.md | ||
| verify.html | ||
SOLARGOD ▸ Orrery
A standalone, browser-based 3D solar-system explorer — the interplanetary sibling of GODSIGH, which watches Earth. Float above a compressed-scale ("MEGA") solar system with every world visible at once, moving on real JPL ephemerides; scrub a time bar across centuries; fly the camera into orbit around any planet, its moons circling; toggle TRUE scale and watch the system animate out into its real, humbling emptiness. Live layers plot where Voyager 1, JWST and Parker Solar Probe are right now, plus real asteroids, comets and Earth close-approaches. Everything is client-side, free, and keyless.
Quickstart
python3 serve.py # stdlib only — no npm, no build step
# open http://127.0.0.1:8147
serve.py statically serves the app and proxies the JPL feeds a browser can't call
directly (Horizons / SBDB / CAD — no CORS), with a disk cache in cache/. Three.js
loads from a pinned CDN importmap. The deterministic core (Sun, planets, moons,
orbits, time travel) runs with zero network calls — positions are computed
locally from Keplerian elements; network layers are additive and fail soft.
Verify
Open http://127.0.0.1:8147/verify.html — an in-browser gate runner that checks the ephemeris against JPL Horizons ground truth (hard-coded checkpoints + live queries through the proxy). All 13 gates should read PASS, e.g.:
| Gate | Result |
|---|---|
| Mars / Jupiter / Earth @ 2026-07-15 (heliocentric ecliptic AU) | Δ ≤ 3.3e-4 / 2.9e-3 / 3.9e-5 AU |
| Kepler solver converges at e=0.97 · orbitPath closes · frame round-trips | exact |
| MEGA→TRUE preserves direction (unit dot ≈ 1) | 1.000000000000 |
| Mars @ J2000 · Jupiter @ 1900 vs live Horizons | Δ 4.8e-5 / 2.0e-3 AU |
| Main belt between Mars & Jupiter · Halley aphelion beyond Neptune | pass |
| Voyager 1 @ 2026-07-15 = (−32.07, −136.21, +98.55) AU · JWST hugs Earth | Δ 0.002 / 0.011 AU |
Layers
| Layer | Source | Default | Notes |
|---|---|---|---|
| Planets & orbits | JPL SSD approximate elements (Standish) | on | 8 planets + Pluto, textured, MEGA-compressed orbit paths |
| Body labels | — | on | names; the focused body's children also get distance labels |
| Moons | JPL satellite data | on | 21 moons, per-parent local compression, retrograde Triton |
| Rings | true km, scaled to parent | on | Saturn (textured annulus) · Uranus (schematic) |
| Spacecraft | JPL Horizons (proxy) | on | Voyager 1/2, New Horizons, JWST, Parker, Juno, Lucy, Psyche — live distance + one-way light-time |
| Main belt | JPL SBDB (proxy) | off | ~1500 main-belt asteroids, shared Kepler core |
| Comets | JPL SBDB (proxy) | on | 1P/Halley, 2P/Encke, 67P, 96P — full orbits + anti-sunward 1/r² tail |
| Close approaches | JPL CAD (proxy) | off | ±30-day NEO radar around Earth, miss distance in lunar distances |
Controls
- Focus — click any body (or use the Focus menu) → the camera flies into orbit
around it; breadcrumb
SOL ▸ JUPITER ▸ EUROPA;Escsteps out one level. - MEGA / TRUE — toggle the scale mode; the transition animates over ~2.5 s.
- Body scale — 1× / 100× / 1200× radius exaggeration.
- Time bar — NOW, play/pause, reverse, rate presets (
1× · 1 min/s … 1 yr/s), and a scrubbable 1800–2050 timeline. A LIVE / SCRUBBED chip mirrors GODSIGH. - Info panel — appears on focus: a grimoire card with a physical fact sheet, hand-written prose, a stylized portrait, and live computed facts (distance from Sun & Earth, sunlight age, orbital speed, day & year length). Focusing Earth reveals a link to the GODSIGH world view.
- Shareable URLs — the view serializes to the hash
(
#f=<body>&t=<time>&s=<mega|true>&L=<layers>&cam=…); paste one to reproduce a view. ?debug=1— frame-rate / scale readout.
Architecture
No build step, no framework, plain ES modules. One module owns the truth→view
transform (scale.js); every position is computed in real heliocentric J2000
ecliptic AU first (ephem.js) then compressed. A floating origin subtracts the
focused body's position in float64 before writing to the scene graph, so a focused
planet never jitters at close zoom.
index.html · serve.py · verify.html
css/style.css
js/ config lib ephem bodies scale ui main
js/layers/ planets moons rings spacecraft asteroids comets neos almanac
assets/textures/ (CC BY) · assets/art/grimoire/ (generated)
The full execution spec is SOLARGOD_BRIEF.md.
Credits
- Positions — JPL SSD approximate elements; live feeds via JPL Horizons / SBDB / CAD.
- Textures — Solar System Scope,
CC BY 4.0 (see
assets/textures/CREDITS.md). - Grimoire art — generated locally with MODELBEAST / FLUX (see
assets/art/PROMPTS.md); the aesthetic layer only — real worlds get real data textures. - Built on Three.js.
