Go to file
monsterrobotparty bcb05f051e 🎨 closer: colourise the grayscale moons — directorial hue tint (opus)
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>
2026-07-16 13:24:38 +10:00
assets 🎨 closer: colourise the grayscale moons — directorial hue tint (opus) 2026-07-16 13:24:38 +10:00
css 🌘 closer: event band — the ±2 yr window gets its own full-width strip (opus) 2026-07-16 13:17:37 +10:00
docs 📖 almanac: knowing — info panel, live facts, grimoire art, real textures, README (opus) 2026-07-16 00:56:41 +10:00
js 🎨 closer: colourise the grayscale moons — directorial hue tint (opus) 2026-07-16 13:24:38 +10:00
vendor/three 🛳 vessel: vendor three@0.170.0 (offline) + deep-time epoch mode (opus) 2026-07-16 10:28:23 +10:00
.gitignore 🌞 genesis: scaffold — serve.py proxy+cache, importmap renderer, sky, sun, HUD, time bar, floating-origin bootstrap (opus) 2026-07-16 00:04:41 +10:00
CLAUDE.md 🔑 brief: MODELBEAST agent credential pre-provisioned — source agent.env, no friction (fable) 2026-07-15 23:31:10 +10:00
index.html 🛳 vessel: vendor three@0.170.0 (offline) + deep-time epoch mode (opus) 2026-07-16 10:28:23 +10:00
PERIHELION_BRIEF.md 📋 perihelion: Part ω — closer lane, orchestrator mode canonized, deferred items (fable) 2026-07-16 10:33:24 +10:00
README.md 📖 almanac: knowing — info panel, live facts, grimoire art, real textures, README (opus) 2026-07-16 00:56:41 +10:00
serve.py 🌑 neargod: real orbits for close approaches — CAD des → SBDB sbdb.api full-prec elements → shared Kepler core (ephem.smallBodyEcl); true marker + 25%-opacity ellipse per NEO, per-object fail-soft to the wave-1 schematic ring, honest 'N real · M schematic · CAD+SBDB' status; +sbdb_lookup upstream; +verify gate (opus) 2026-07-16 09:46:45 +10:00
SOLARGOD_BRIEF.md 🔑 brief: MODELBEAST agent credential pre-provisioned — source agent.env, no friction (fable) 2026-07-15 23:31:10 +10:00
verify.html 🌘 closer: event band — the ±2 yr window gets its own full-width strip (opus) 2026-07-16 13:17:37 +10:00

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.

SOLARGOD

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; Esc steps 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 18002050 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

  • PositionsJPL SSD approximate elements; live feeds via JPL Horizons / SBDB / CAD.
  • TexturesSolar 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.