Deep Space Twin

An empty scene framed for something far larger than a solar system: a galaxy, or a black hole. Extends Astro Twin. Both subjects here are procedural rather than catalogued, and that is deliberate — at this scale there is no ephemeris to be faithful to, so the honest thing is a generator you control rather than a table you cannot check. celestial.addGalaxy builds a Points cloud from a logarithmic spiral: arms and windings set the sweep, a square-root radial bias keeps surface density roughly even instead of piling stars into the centre, a Gaussian scatter that tightens outward makes an arm read as an arm rather than as a bare curve, and a separate bulge fraction fills the core. Colour runs from a warm core to blue-white arms, which is the real stellar-population gradient. 'barred' straightens the inner arms; 'elliptical' drops the disc and keeps the spheroid. It is SEEDED, so state alone reproduces a galaxy exactly — change the seed for a different one, keep it and the same galaxy comes back on every reload and for every viewer. celestial.addBlackHole is where a number you type has a real consequence: massSolar sets the Schwarzschild radius at 2.95 km per solar mass, so 10 solar masses is a 30 km horizon and Sagittarius A*'s 4.3 million is 12.7 million km. The DRAWN horizon is set separately, because at any honest scale a stellar-mass hole is sub-pixel beside its own disk — but everything else is expressed in horizon radii, so the PROPORTIONS are right even where the absolute size is not: the disk's inner edge sits at the innermost stable circular orbit at 3 horizon radii, and the photon ring at 1.5. The disk's temperature falls outward as r^-3/4, as a thin accretion disk's does, so the inner edge is white-hot and the rim is red; spin beams the limb rotating toward you brighter. What you will NOT see is the far side of the disk lensed over the top, or the starfield bent around the shadow — that needs a screen-space pass, and this engine renders without a compositor. The disk, the photon ring and the shadow are real; the light path is not bent, and no amount of tuning will make it so. Both subjects take a starfield behind them well: load one from the sky stack as a backdrop, and drop skyRadius if you want the galaxy to sit in front of the sky rather than inside it. For a twin, this is the survey and simulation plate — a run's parameters as KPIs, a detector's channel health as LEDs, a candidate list as markers you can toggle in groups, a rate that fires a threshold rule when a run drifts out of bounds.