Skip to content

Checking the NOAA OVATION feed

How Glow calculates aurora viewing

Answer

Glow shows live and computed inputs side by side: the NOAA OVATION cell, SunCalc darkness, NWS cloud for US points and NASA POWER's long-term cloud average everywhere else. It never merges them into a promise, never reprints planetary Kp as local, and shows nothing when a feed is older than 2 hours.

OVATION cells

NOAA's Space Weather Prediction Center publishes the OVATION aurora model as a JSON file with an observation time, a forecast time and a list of [longitude, latitude, value] cells at 1 degree spacing, longitudes 0 to 359. Glow validates the file shape, drops cells with non-integer coordinates or values outside 0 to 100, and rounds values to whole percent.

For a point, Glow rounds latitude to the nearest whole degree and wraps longitude onto the 0 to 359 axis, then reads that one cell. Duluth at 46.78N 92.11W reads cell latitude 47, longitude 268. If the feed is current but the cell is missing, the page says the cell is empty rather than calling the feed stale.

The mode label comes from the two timestamps. When the forecast time is at least 20 minutes after the observation time, the value is labeled an OVATION 30 to 90 minute forecast. When it is less, the value is labeled Kp-based fallback: SWPC drives the model from the Kp index when solar wind data are missing. Of that case the product page says: "When this occurs, there is no forecast lead time."

Freshness: a feed whose observation time is in the future, or whose observation or forecast time is more than 2 hours old, is rejected. The rejection happens on every cache read, so a cached feed cannot age into use.

NWS cloud

For US coordinates Glow calls the api.weather.gov points endpoint, which returns the forecast office and grid square, then reads the gridpoint forecast's skyCover series. Each value has a validity interval in ISO 8601 form, which Glow parses to a start and end.

The live reading takes the interval that contains the retrieval time. If none does, it takes the next interval that starts within 6 hours and labels it a lookahead. The cloud tool keeps every interval that overlaps tonight's civil night. Coordinates are rounded to 2 decimals before lookup. Requests identify Glow in the User-Agent and time out after 3 seconds.

Outside rough boxes around the contiguous US, Alaska, Hawaii and Puerto Rico, Glow does not call NWS and shows cloud as not available. Inside them, a 404 or timeout shows as "NWS returned no skyCover". No other cloud model is substituted.

Darkness

Civil night is sun altitude at or below -6 degrees, nautical at -12 and astronomical at -18. A night runs from local noon on its date to local noon the next day. Glow samples SunCalc's sun altitude every 5 minutes across that span (15 minutes for full-year scans) and interpolates each threshold crossing linearly, which gives durations to about a minute with no special case for polar day or polar night.

"No sunrise" is not darkness. SunCalc flags a day with no sunrise when the sun stays below -0.833 degrees, but Tromsø's December noon still sits above -6 degrees, so Glow counts it as twilight. The live darkness row uses the same -6 degree rule.

The SWPC window of 22:00 to 02:00 is applied in the chosen IANA time zone for the night's date, so daylight saving time moves it with the clock, as SWPC's wording implies.

Moon

Moon-up minutes are those when SunCalc's moon altitude is above 0 degrees. Moon-free dark minutes are civil-night minutes with the moon below the horizon. Illumination and phase are read at local midnight. New and full moon instants come from Meeus, Astronomical Algorithms, chapter 49, with the 14 largest periodic terms and a 69 second delta T, then shown as dates in the chosen time zone.

Geomagnetic latitude

Glow uses a centered dipole from the IGRF-14 degree 1 coefficients at epoch 2025.0. With B0 the root sum of squares of the three terms, the north geomagnetic pole sits at colatitude arccos(-g10 / B0) and longitude atan2(-h11, -g11): 80.79N 72.76W. A point's geomagnetic latitude is 90 degrees minus its angular distance from that pole, computed by rotating the point into the dipole frame. Unit tests check the pole and a hand-worked Minneapolis example.

Matching a dipole latitude to SWPC's G-scale rows is labeled approximate everywhere, because SWPC does not state the coordinate system behind its typical latitudes.

Oval edge and Kp per town

SWPC's tips page gives a rule of thumb for the equatorward edge of the oval: about 66 degrees geomagnetic at Kp 0, moving about 2 degrees toward the equator per Kp step. Glow writes it as edge = 66 - 2 x Kp. The Kp a town needs is the smallest whole Kp from 0 to 9 whose edge is at or below the town's dipole latitude; below 48 degrees Glow says "beyond Kp 9". SWPC calls the relationship approximate, and Glow labels it so.

Distances to the edge run along the geomagnetic meridian at 111.2 km per degree. Storm-level pages divide SWPC's per-cycle counts by 11, the cycle length on the NOAA scales page, to give yearly averages, and say that real storms are not spread evenly.

Storm level by band

The storm level a town needs depends on which band its dipole latitude falls in. Above 75 degrees the quiet oval can lie equatorward of the town, and storms push it farther away. From 60 to 75 degrees, SWPC's best-viewing band, no storm is needed; the page gives the Kp that puts the average oval edge overhead. From 55 to 60 degrees, G1 (Kp 5) or less usually brings aurora into view. Below 55 degrees Glow picks the lowest NOAA level whose typical viewing latitude, 55, 50, 45 or 40 degrees for G2 to G5, reaches the town.

The two SWPC rules answer different questions. The storm scale's latitudes say where aurora has been seen, often low on the horizon; the tips-page edge rule says when the oval sits overhead, so it gives a higher Kp for the same town.

The place atlas

Glow's 1,218 towns come from GeoNames cities15000 and cities5000 with admin1CodesASCII and countryInfo, retrieved 2026-09-30 under CC BY 4.0. 1,186 northern towns have 15,000 people or more and sit at 55 degrees geomagnetic or higher, or are US and Canadian towns of 50,000 or more from 50 degrees. 32 southern towns from cities5000 have 10,000 people or more at 45 degrees south geomagnetic or beyond. Sections of larger towns (GeoNames feature code PPLX) are left out.

A town within 15 km of a larger indexed town, with the same dipole latitude rounded to half a degree, the same Kp and a dark season within 3 days, keeps its page but carries noindex and a canonical link to the larger town. That leaves 720 indexed town pages. Month pages are indexed for 168 towns: those at 60 degrees geomagnetic or more, towns of 100,000 or more at 55 degrees or more, and the 10 featured towns. Comparison pages pair each of those with up to three others, same region first, then within 500 km.

Darkness figures on town pages are precomputed with SunCalc for 2026: civil, nautical and astronomical night on the 15th of each month, the dark season, the no-darkness run and solar midnight on December 15 and June 15. Dates shift by about a day between years, and the data build is rerun each year. Country and region hubs are indexed with 3 and 5 indexed towns respectively.

Cloud climatology

Outside the US, and beside the live NWS value inside it, Glow shows NASA POWER's monthly mean cloud amount (parameter CLOUD_AMT) for 2001 to 2020, from the CERES SYN1deg product on a 1 degree grid. The data build requested 381 cells from https://power.larc.nasa.gov/api/temporal/climatology/point once each, at one request a second, cached the replies on disk and rounded to whole percent. Retrieved 2026-09-30; the build is rerun yearly. NASA POWER data are NASA open data; Glow cites POWER as the source.

The value is a mean over all hours, day and night, not a night cloud figure and never a forecast. The best-month score multiplies civil night on the 15th by one minus that month's cloud share. It compares months and towns; it is not a count of hours of aurora.

Kp history

The Kp archive reads the GFZ Potsdam file of 3-hour Kp from 1932-01-01 to 2026-09-29, retrieved 2026-09-30. Kp, ap and Ap are CC BY 4.0; the file's sunspot column carries CC BY-NC 4.0 and is not read. Values after 2026-08-31 are GFZ nowcasts that can still change.

A day reaches a level when its highest 3-hour Kp reaches the whole value: G1 at 5, G2 at 6, G3 at 7, G4 at 8 and G5 at 9. Minus values such as 5- (4.67) do not count up. A storm event joins 3-hour blocks at Kp 8 or more that start within 24 hours of each other; the record has 194 such events, and the 111 with more than one block are indexed. Town and month pages use the 1996 to 2025 record: for each calendar month, the share of days that reached the Kp putting SWPC's average oval edge over the town.

Time zones for typed points

Typed coordinates take the IANA time zone of the nearest GeoNames town of 15,000 or more, searched in the 5 degree tile that holds the point and the eight tiles around it. Within 50 km the tools label the point by that town; the zone select can override the guess. With no town within 300 km, the zone comes from longitude, one hour per 15 degrees. The town search reads the same GeoNames list in three-letter shards.

The sitemap is an index of child sitemaps: core pages, country and region hubs, town pages per country, month pages, comparisons and the Kp archive, each under 50,000 URLs, with the build date of its data as lastmod.

Rankings and seasons

Best nights rank by moon-free civil-dark minutes inside 22:00 to 02:00 local, ties broken by total moon-free dark minutes, then by date. The dark season is Glow's own stated rule: at least 4 hours of civil night between 18:00 and 06:00 local, as the longest run of days joined across New Year. The no-darkness season is the longest run of nights with no civil night. Equinox and solstice instants come from the sun's apparent longitude (Meeus, chapter 25) found by bisection.

The southern edge is, for each feed longitude, the lowest northern latitude whose cell meets the threshold. The 1000 km line sits 9.0 degrees further south: SWPC's 1000 km over 111.2 km per degree. Distances use the haversine formula on a 6,371 km sphere.

Guides and page families

Guides are typed content modules. Any figure computed for a town, such as a dipole latitude or the civil night on a given 15th, is written as a token and filled in at render time, so prose and tables cannot drift apart. Quotes are pulled from the ledger by key, never retyped.

Month pages show each month's next occurrence: a March page read in September shows next March. Each town-month page computes every night of the month, the civil night on the 15th for the country's other month-page towns and the months either side, and the equinox or solstice when one falls inside. Comparison, ranking and region pages use the same computed profile as the place pages. Their sentences are generated from each page's own numbers, and a unit test checks that sibling pages never share a paragraph.

Verification table

Every figure Glow quotes rather than computes, with its source URL and the date it was checked. The sources ledger adds the verbatim excerpt for each.

FigureValueSource URLDate checked
G1 Minor stormKp = 5; 1700 per cycle (900 days per cycle)https://www.spaceweather.gov/noaa-scales-explanation2026-09-30
G2 Moderate stormKp = 6; 600 per cycle (360 days per cycle)https://www.spaceweather.gov/noaa-scales-explanation2026-09-30
G3 Strong stormKp = 7; 200 per cycle (130 days per cycle)https://www.spaceweather.gov/noaa-scales-explanation2026-09-30
G4 Severe stormKp = 8, including a 9-; 100 per cycle (60 days per cycle)https://www.spaceweather.gov/noaa-scales-explanation2026-09-30
G5 Extreme stormKp = 9; 4 per cycle (4 days per cycle)https://www.spaceweather.gov/noaa-scales-explanation2026-09-30
Kp 0 to 2 wordingKp 0 to 2https://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Kp 3 to 5 wordingKp 3 to 5https://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Kp 6 to 7 wordingKp 6 to 7https://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Kp 8 to 9 wordingKp 8 to 9https://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
OVATION forecast lead30 to 90 minuteshttps://www.spaceweather.gov/products/aurora-30-minute-forecast2026-09-30
Lead time sourceSolar wind travel time from L1https://www.spaceweather.gov/products/aurora-30-minute-forecast2026-09-30
Viewing distance1000 kmhttps://www.spaceweather.gov/products/aurora-30-minute-forecast2026-09-30
Viewing distance, tips page1000 km (600 miles)https://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Best time of night10 PM to 2 AM local timehttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Best seasonsAround the equinoxeshttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Full moonDiminishes apparent brightnesshttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
IGRF-14 degree 1 coefficients, 2025.0g10 -29350.0 nT, g11 -1410.3 nT, h11 4545.5 nThttps://www.ngdc.noaa.gov/IAGA/vmod/coeffs/igrf14coeffs.txt2026-09-30
Aurora causeElectrons colliding with the upper atmospherehttps://www.swpc.noaa.gov/phenomena/aurora2026-09-30
Aurora height80 to 500 kmhttps://www.swpc.noaa.gov/phenomena/aurora2026-09-30
Auroral ovalsCentered on the magnetic poleshttps://www.swpc.noaa.gov/phenomena/aurora2026-09-30
Best viewing zoneAbout 60 to 75 degrees; more than half of nightshttps://www.swpc.noaa.gov/phenomena/aurora2026-09-30
Substorm timingNear midnighthttps://www.swpc.noaa.gov/phenomena/aurora2026-09-30
Clear and dark sky neededMidnight sun prevents viewinghttps://www.swpc.noaa.gov/phenomena/aurora2026-09-30
K-index range0 to 9; 5 or more is a stormhttps://www.swpc.noaa.gov/products/planetary-k-index2026-09-30
K-index interval3 hourshttps://www.swpc.noaa.gov/products/planetary-k-index2026-09-30
Kp observatories13 observatories, 44 to 60 degrees geomagnetichttps://www.swpc.noaa.gov/products/planetary-k-index2026-09-30
Estimated Kp magnetometers8 stationshttps://www.swpc.noaa.gov/products/planetary-k-index2026-09-30
Estimated Kp chart updatesEvery minutehttps://www.swpc.noaa.gov/products/planetary-k-index2026-09-30
K-index originJulius Bartels, 1938https://www.swpc.noaa.gov/products/planetary-k-index2026-09-30
K labelKennziffer, characteristic digithttps://www.swpc.noaa.gov/products/planetary-k-index2026-09-30
K-index watchesKp 5, 6, 7, 8 and abovehttps://www.swpc.noaa.gov/products/planetary-k-index2026-09-30
K-index warningsKp 4, 5, 6, 7 and abovehttps://www.swpc.noaa.gov/products/planetary-k-index2026-09-30
K-index alertsKp 4 to 9https://www.swpc.noaa.gov/products/planetary-k-index2026-09-30
Oval edge at Kp 0About 66 degrees geomagnetic, 2 degrees per Kphttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Oval edge frameGeomagnetic latitudehttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Kp and latitude caveatApproximate averageshttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
North magnetic poleAbout 400 km from the geographic polehttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Low Kp under the ovalKp 3 or 4https://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Summer at high latitudeUsually no aurora viewinghttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Active hours widenToward evening and morning with activityhttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Equinox stormsTendency toward larger stormshttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Darkness near equinoxesChanges rapidlyhttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Kp 6 to 7 reachNorthern edge of the United Stateshttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Kp 8 to 9 reachOverhead in the northern stateshttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
Viewing equatorwardHundreds of kmhttps://www.spaceweather.gov/content/tips-viewing-aurora2026-09-30
L1 distance1.6 million kmhttps://www.spaceweather.gov/products/aurora-30-minute-forecast2026-09-30
OVATION probabilityLinear in aurora intensityhttps://www.spaceweather.gov/products/aurora-30-minute-forecast2026-09-30
OVATION 2020In operations since 2020https://www.spaceweather.gov/products/aurora-30-minute-forecast2026-09-30
Original OVATION limitReliable to Kp 7https://www.spaceweather.gov/products/aurora-30-minute-forecast2026-09-30
DaylightAurora not visiblehttps://www.spaceweather.gov/products/aurora-30-minute-forecast2026-09-30
CME travel timeSeveral days; as short as 18 hourshttps://www.swpc.noaa.gov/phenomena/geomagnetic-storms2026-09-30
Storm driverSouthward solar wind magnetic fieldhttps://www.swpc.noaa.gov/phenomena/geomagnetic-storms2026-09-30
High-speed streamsCreate CIRshttps://www.swpc.noaa.gov/phenomena/geomagnetic-storms2026-09-30
Civil twilightSun 6 degrees below the horizonhttps://aa.usno.navy.mil/faq/RST_defs2026-09-30
Nautical twilightSun 12 degrees below the horizonhttps://aa.usno.navy.mil/faq/RST_defs2026-09-30
Astronomical twilightSun 18 degrees below the horizonhttps://aa.usno.navy.mil/faq/RST_defs2026-09-30
Astronomical nightSunlight below starlighthttps://aa.usno.navy.mil/faq/RST_defs2026-09-30
Sunrise definitionZenith distance 90.8333 degreeshttps://aa.usno.navy.mil/faq/RST_defs2026-09-30
NWS sky condition basisOctants of opaque cloudhttps://forecast.weather.gov/glossary.php?letter=s2026-09-30
Solar cycle length11 yearshttps://www.spaceweather.gov/noaa-scales-explanation2026-09-30
NWS sky condition: Clear / Sunny0/8 of the skyhttps://forecast.weather.gov/glossary.php?letter=s2026-09-30
NWS sky condition: Mostly Clear / Mostly Sunny1/8 to 2/8 of the skyhttps://forecast.weather.gov/glossary.php?letter=s2026-09-30
NWS sky condition: Partly Cloudy / Partly Sunny3/8 to 4/8 of the skyhttps://forecast.weather.gov/glossary.php?letter=s2026-09-30
NWS sky condition: Mostly Cloudy / Considerable Cloudiness5/8 to 7/8 of the skyhttps://forecast.weather.gov/glossary.php?letter=s2026-09-30
NWS sky condition: Cloudy8/8 of the skyhttps://forecast.weather.gov/glossary.php?letter=s2026-09-30

What Glow never shows

  • A combined aurora score or a promise of a sighting.
  • A planetary Kp value presented as a local forecast.
  • An OVATION value from a feed older than 2 hours, or a filled-in value for a missing cell.
  • A cloud forecast from any source other than NWS. Outside the US only NASA POWER's long-term average appears, labelled as one.
  • Any figure that is neither computed from a named input nor quoted from the ledger with a verified date.

Places and caching

The 10 featured places are a curated extract of GeoNames cities15000 curated extract. Place coordinates and IANA time zones from GeoNames (CC BY 4.0). Retrieved 2026-09-10, license CC BY 4.0. The atlas above extends the same source.

Live pages send Cache-Control: no-store so a value cannot outlive its feed in edge HTML. The OVATION file is cached in memory and the Worker Cache API for 5 minutes, 1 minute after a miss. NWS points are cached for an hour and grids for 15 minutes. Computed pages are cached for an hour in browsers and a day at the edge. The atlas, the Kp year and storm tables and the GeoNames town list are stored in a Cloudflare D1 database; the 3-hour Kp series and the map coastline are files in Cloudflare R2. Both are rebuilt only when the data build is rerun.

Errors and wrong figures: use the contact page. The sources ledger lists every cited figure with its verified date.