About the score

How we collapse cloud cover, moonlight and astronomical darkness into a single 0–10 number — and what we deliberately leave out.

The question

Whether tonight is worth it depends on three things: how much sky you can see (clouds), how dark it is (sun and moon) and where you are (light pollution). The score combines the first two. Light pollution shapes what is visible from your location, but it isn’t part of the number.

Three scores per night

  • HeadlineAverage across the full astronomical-darkness window (sun ≥ 18° below the horizon). The honest answer to “how good is tonight overall”.
  • Peak 2hThe best two-hour slice of the night. Use it when you only have a short window to step outside.
  • Prime 21–01What you actually get if you head out around 21:00 and turn in around 01:00, regardless of when astronomical darkness starts.

The formula

The score combines clearness (the share of sky not covered by cloud) and darkness (how little the moon brightens the sky), with a soft visibility gate.

score      = visibility × (clearness × 0.6 + darkness × 0.4) / 10
clearness  = 100 − cloudCover%
darkness   = 100 − moonPenalty
visibility = min(1, clearness / 30)

The visibility factor recognises that clouds gate everything: if it’s mostly overcast, even a perfectly dark sky earns no points. Above 30% clearness, visibility = 1 and the formula reduces to the plain weighted average. Below 30%, the score scales linearly to zero.

The moon penalty

Moon illumination is tiered, with a discount for late-night windows when the moon is more likely to be setting.

  • Less than 25% lit (new or crescent moon): no penalty.
  • 25–75% lit (around quarter moon): penalty equals illumination × 0.5.
  • More than 75% lit (gibbous or full moon): penalty equals illumination × 1.0.
  • If the window starts between 00:00 and 03:00 AND illumination is over 50%, the penalty is multiplied by 0.6.

What’s not in the score

  • Light pollution (Bortle class, derived from VIIRS satellite data) shapes the “Visible Tonight” deep-sky list, not the number.
  • Wind, humidity and precipitation are visible in the timeline if you scroll, but they don’t change the score.
  • Forecast confidence. We don’t downgrade the score when the weather model is uncertain — we trust the forecast and let the next refresh correct it.

Worked example: a clouded-out night

Amsterdam · 5 May 2026

Cloud cover (avg)
100%
Moon
Waning Gibbous · 83%
Calculation
moonPenalty(83, 23) = 83 × 1.0 = 83
clearness  = 100 − 100 = 0
darkness   = 100 − 83  = 17
visibility = min(1, 0 / 30) = 0
raw        = 0 × (0×0.6 + 17×0.4) / 10 = 0.0
Score
0.0
Stay inside. The visibility gate collapses the score to zero — there is nothing to see through 100% cloud.

Worked example: a great night

Same place · clear sky, crescent moon

Cloud cover (avg)
8%
Moon
Waxing Crescent · 15%
Calculation
moonPenalty(15, 23) = 0     (< 25% bracket)
clearness  = 100 − 8   = 92
darkness   = 100 − 0   = 100
visibility = min(1, 92 / 30) = 1
raw        = 1 × (92×0.6 + 100×0.4) / 10 = 9.52
Score
9.5
Drop everything and go outside. Crescent moon, mostly clear sky, full astronomical darkness.

Sources

  • Open-Meteo: hourly cloud cover, sun and moon times, wind, humidity.
  • VIIRS Day/Night Band: light pollution, used to estimate Bortle class for the “Visible Tonight” list.

Update cadence

Forecasts refresh every 30 minutes upstream. The score endpoint caches at the edge for 30 minutes (s-maxage=1800). The seven-night forecast updates daily.

Back to home
How the StarsOut score works