ALL PLANETS

How we get the colours

No telescope has ever photographed these planets in colour — most have never been seen as more than a wobble in their star's light. Every swatch on this site is a physics prediction: we model the light each planet reflects, light it with its own star, and convert the result to a colour exactly the way a human eye would. Four steps, from starlight to hex code — plus the one place we can check the whole thing against a real measured spectrum.

STEP 1

Model the light the planet reflects

A planet has no light of its own — its colour is written in what it reflects. From the planet's temperature, size and likely cloud state we model its — reflectivity at every visible wavelength, 380 to 780 . Chemistry sculpts its shape: eats red light ( turn blue-green), brightens the blue end, thick reflect everything and push the whole planet toward cream-white, and cloud-free absorb almost everything and stay near-black.

with thick clouds: flat + bright CH₄ absorption eats the red 380 nm780 nm reflectivity

The spectrum is a vector A(λ) sampled 380–780 nm in 5 nm steps (81 samples). Three engines can produce it, picked per planet:

  • Parametric archetype model (most planets): temperature and size place the planet on a continuous blend of archetypes — cloudy Jupiter, methane Neptune, rocky world, hot Jupiter — each a sum of physically-motivated terms: a Rayleigh component ∝ λ−4, Gaussian methane absorption bands (centred near 619, 727 and 790 nm), a flat cloud-deck term, and alkali-metal (Na 589 nm) darkening for the hottest giants.
  • : precomputed Jupiter/Neptune-class albedo spectra at varying star–planet distances, and cloud states — the reference set used by the Roman Coronagraph community.
  • : NASA's open-source code, run for selected well-characterised targets.

Every page's data card states which engine produced its spectrum, and tags each input as measured, computed or assumed.

NOT A STEP · HOW WE KNOW

How a spectrum is measured for real

Step 1 makes a curve up — carefully, from physics, but up. It is only worth anything because real spectra exist to check it against, and measuring one is refreshingly mechanical: light passes through a narrow slit, hits a — a mirror ruled with thousands of fine lines — and comes out fanned into a rainbow. A CCD, the same sensor as a phone camera's, sits in that rainbow and counts photons at every wavelength at once: that is , one exposure, hundreds of wavelengths.

reflected lightfrom the planet slit grating CCD counts at each wavelength divide by the light that arrived → the fraction reflected: A(λ)

That gives counts, not reflectivity. Divide by the light that fell on the planet in the first place — the Sun, or a Sun-like star, through the same instrument — and everything the instrument smeared onto the light divides out with it. What is left is : the same step 1 tries to predict.

Fanning the light out is only one way to do it, and the choice comes down to how many photons you have to spend:

SPLIT IT
Grating or prism, as above: every wavelength in one exposure. The richest data and the greediest for light — this is where the measured spectra on this site come from.
FILTER IT
Measure the total light through one filter, then another. Each filter is a single point on the spectrum: coarse, but it works on targets far too faint to fan out. Exactly what Roman's three bands do — step 5.
INTERFERE IT
Interfere the beam with a delayed copy of itself and the spectrum falls out of the maths instead of the optics — . Voyager and Cassini read the giant planets' this way, no grating at all.

Five worlds here are measured, not modelled. Jupiter, Saturn, Uranus and Neptune use full-disk spectra Erich Karkoschka recorded at ESO in 1995; Earth uses a calibrated composite of real observations. They skip step 1 and run steps 2–4 identically to every exoplanet — which makes them the calibration check: if real Neptune data comes out Neptune blue, the machinery is worth trusting on a planet nobody has ever seen. See it on Neptune's page →

No exoplanet here has a measured visible spectrum. The planet is roughly a billion times fainter than the star a hair's breadth beside it on the sky, so its light is swamped long before it reaches any grating. The famous measured spectra from JWST and Hubble are , taken during — starlight strained through the edge of an atmosphere: brilliant for chemistry, silent on visible colour. That needs the star blocked first: a , step 5.

With the planet and a solar analogue observed through the same instrument, the instrument's response and the Sun's own spectrum both cancel in the ratio, leaving the geometric albedo of a fully lit disc:

p(λ) = [ Fp(λ) / F(λ) ] · (r / 1 AU)² · (Δ / Rp

where r is the planet's distance from the Sun, Δ its distance from the telescope and Rp its radius. A ground-based spectrum also carries Earth's own atmosphere stamped on top (the O₂ and H₂O bands); those come out by observing a bare standard star at the same airmass and dividing again.

Getting the planet's light away from its star's is the other half of the problem, and it has its own menu. Watch the star dim as the planet crosses it, and the size of the dip at each wavelength maps the atmosphere's absorption (, or transmission spectroscopy — the JWST and Hubble results). Let the planet slip behind the star instead and subtract the two views, leaving its own emission. Block the star outright with a and disperse what survives — reflected light, and Roman's route. Or lean on polarisation: scattered planet light is polarised and starlight is not, so can pull one out of the other, which is a mode of Roman's 575 nm channel. Earth needs a trick of its own, since we cannot step back far enough to see it whole: earthshine — the unlit part of the Moon, lit by a full Earth — is our planet handed back to us as a single dot of reflected light.

The two measured files this site ships:

  • Karkoschka (1998), Icarus 133, 134–146 — CCD spectrophotometry at ESO, July 1995, 300–1050 nm at 1 nm resolution (0.4 nm sampling). Uranus and Neptune are true geometric albedo (0° phase); Jupiter and Saturn are full-disk albedo at 6.8° and 5.7° phase, where the shape of the curve — the part that sets the colour — is essentially unchanged. Via NASA's PDS Atmospheres Node; public domain.
  • Payne, A., Villanueva, G. L., Kofman, V., et al. (2026), “A Comprehensive Spectroscopic Reference of the Solar System and Its Application to Exoplanet Direct Imaging”, Planetary Science Journal, doi:10.3847/PSJ/ae2feb — Earth's disk-integrated geometric albedo, 0.1–2.5 µm: a calibrated composite of EPOXI photometry, earthshine spectroscopy, LCROSS and satellite data, standardised to geometric albedo. We ship earth_albedo.csv from Zenodo record 17470005 verbatim, © the authors, used under CC BY 4.0 and offered here with no warranties of any kind, as §5 of that licence sets out. Interpolated onto our 5 nm grid; otherwise unmodified.

Both are interpolated onto the same 5 nm grid the models use, and nothing downstream is told the difference — the record simply carries the tag instead of a model engine name.

STEP 2

Light it with its own star

A mirror is only as colourful as what it reflects. The same planet looks different under a cool red dwarf than under a Sun-like star, so we multiply the albedo spectrum by the 's own spectrum — modelled as a at the star's measured . The product is the reflected light that would actually leave the planet and reach an observer.

A(λ) planet × S(λ) star = F(λ) reflected light

The star's spectrum is Planck's law at its Teff (from the ):

Bλ(T) = (2hc² / λ⁵) · 1 / (ehc/λkBT − 1) F(λ) = A(λ) · Bλ(Teff)

A blackbody is a deliberate v1 simplification: real stellar spectra carry absorption lines, but at the precision of a perceived colour the smooth curve is an excellent stand-in. Swapping in PHOENIX/Kurucz model atmospheres later changes only this step.

STEP 3

Convert it the way your eye would

A spectrum is thousands of numbers; an eye reduces them to one colour. We run the reflected light through the — the standard model of human colour vision — which collapses the whole spectrum into three numbers (), and from there to an hex code. This is the exact machinery used to design camera sensors and displays — pointed at a planet.

ȳ 380 nm780 nm weight the spectrum by each curve, sum → X, Y, Z → #hex

Each tristimulus value is the spectrum weighted by one matching function and summed (the CIE 1931 2° observer):

X = ∫ F(λ) x̄(λ) dλ    Y = ∫ F(λ) ȳ(λ) dλ    Z = ∫ F(λ) z̄(λ) dλ

Then XYZ → linear sRGB via the standard 3×3 matrix (), followed by the sRGB . Two honesty conventions on top:

  • Brightness. Planets are dim — rendered at true nearly every swatch would be near-black. So a swatch shows the planet's colour identity at a fixed display luminance (Y = 0.60), and the true reflected brightness is reported separately — the Y BRIGHT readout on every planet page.
  • . Some modelled colours are more saturated than a screen can show. If the colour falls outside sRGB we desaturate it just enough to reach the edge of the displayable range (keeping hue and lightness), and flag it — the GAMUT · OOG readout.

The conversions use the colour-science library, not hand-rolled maths.

STEP 4

Grow a palette from the base colour

One colour becomes a designer palette: the base hue stepped through a five-stop , plus computed from slices of the actual spectrum — for example, the colour of just the light at the edge of a methane absorption band. The accents aren't decorative inventions; they are step 3 re-run on a narrow wavelength window.

Ramp stops: the base colour converted to a lightness-controlled space, its lightness replaced by five evenly spaced targets from 0.18 to 0.88, hue and chroma held. The ramp deliberately carries the planet's hue rather than its exact colour — every base swatch is pinned to one display luminance, so a stop sitting at the planet's own lightness would crowd the tints. The exact computed colour is the swatch and hex above. Spectral accents: restrict F(λ) to a window [λ₁, λ₂] (e.g. around a CH₄ band edge), re-run the CIE conversion on that slice alone, and keep the resulting colour, labelled with its source wavelength. Palettes export as hex, CSS variables or an swatch file for design tools.

STEP 5 · THE ROMAN VIEW

What survives three filters?

NASA's will be the first to measure reflected visible light from planets like these — but its sees through just four , all in the orange-to- half of the spectrum. Every planet page shows the same colour twice: the prediction, and the colour rebuilt from only what would catch. The gap between them — the readout — is how much of the planet's colour identity Roman's filter set preserves.

Roman is blind here 575 730825 nm 380

Each band is modelled as a ; the measurement it would take is the star-weighted mean albedo inside the band:

valueband = ∫band A(λ)·S(λ) dλ / ∫band S(λ) dλ

Bands: 575 nm (10% width), 730 nm (15%, the channel) and 825 nm (10%) — the three supported , as listed in Roman's own Coronagraph Primer. A fourth filter at 660 nm is installed on the instrument but was never characterised on the ground, so it is not a supported observing mode and is not modelled here. To get a colour back we interpolate the three samples across the visible grid and re-run step 3. Below 575 nm Roman receives zero information — precisely the blue-violet region where many of these planets live — so the reconstruction holds the spectrum flat there rather than inventing data. That honesty is why blue planets lose the most colour in the Roman view. For Roman's ~dozen , real measured will one day replace the band values — the only real colours any of these planets will ever have. See the target board →

Planet and star parameters come from the NASA Exoplanet Archive. Every page states its model assumptions — cloud state, metallicity, spectrum engine — and tags each value as , or . , not photographed — that's the whole point. Every source, credited in full →

ALL PLANETS