# earth (earth.nullschool.net, open-source version)

- Author: Cameron Beccario
- Source: https://github.com/cambecc/earth
- Commit: 5f091f0c3b60aa38a996a886985bacb3673d16c3 (master, 2016-09-03); files taken from `public/` as published in the repo (no build step)
- Licence: MIT (./LICENSE)
- Bundled libraries (the copies already in the repo's `public/libs`, same versions the page loads from cdnjs): d3 3.3.10 (BSD-3), topojson 1.1.0 (BSD-3), backbone 1.1.0 (MIT), underscore 1.6.0 (MIT), when 2.6.0 (MIT), d3.geo.projection/polyhedron v0 from d3-plugins (BSD-3), M+ FONTS subset (M+ licence: free use/copy/distribution). Texts in ./LICENSE-third-party.txt (taken from the npm packages of the same versions).
- Vendored files: index.html (original page, kept for reference), favicon.ico, styles/ (minus the unused Mono Social Icons font), libs/ (minus qunit), data/earth-topo*.json, data/oscar/* (from the repo), LICENSE

## Data snapshot (replaces the live feed)
- Weather: NOAA/NCEP Global Forecast System (GFS) 1.0° analysis, cycle 2026-10-28 18:00 UTC (f000), downloaded once on 2026-10-29
  from NOMADS (https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_1p00.pl, variables UGRD VGRD TMP RH PRMSL PWAT CWAT at 10 m/2 m,
  1000/850/700/500/250/70/10 hPa, MSL and entire atmosphere). US Government work: public domain.
  Converted with ./snapshot-tools/gfs-to-earth-json.py (pygrib) into the same JSON layout the original reads
  (grib2json-style records; NetCDF-style JSON for relative humidity and air density) under data/weather/2026/10/28/1800-*.json.
  Values are rounded (wind/temperature 0.1, RH 1 %, MSLP 1 Pa). Air density is derived as rho = p / (287.05 * T) at each isobaric level
  (the live site derives its own; earth only offers it at isobaric levels).
- Ocean currents: the OSCAR 2014-01-31 sample (data/oscar/) that ships in the repo (ESR/NASA PO.DAAC OSCAR, as distributed by the author).
- Coastlines/lakes: data/earth-topo*.json from the repo, built from Natural Earth (public domain).

## Added by Web Curio
stage.html, this file, LICENSE-third-party.txt, snapshot-tools/gfs-to-earth-json.py, data/weather/2026/10/28/* (the snapshot).

## Modifications to the original
- stage.html (from index.html via stage.py): strict CSP + sandbox shim; cdnjs scripts removed and the repo's local copies
  (already present in a commented-out block) used instead; absolute paths (/libs, /styles, /favicon.ico) made relative;
  apple-touch-icon and hreflang links removed; the Facebook "community" sponsor box, the 日本語 link, the about link and the
  Facebook/Twitter icons removed; one line of text added to the menu naming the data snapshot.
- libs/earth/1.0.0/products.js: data paths made relative; the "current" layer is mapped to the bundled snapshot
  (SNAPSHOT_DATE/SNAPSHOT_HOUR) and its displayed date is the snapshot's real time instead of "now".
- libs/earth/1.0.0/micro.js: topology path made relative.
- libs/earth/1.0.0/earth.js: clicking "earth" opens the menu even inside an iframe (the original opened earth.nullschool.net in a new tab when embedded).
- styles/styles.css: font URLs made relative.
- Omitted: the Japanese page (jp/), about page, test/ and qunit, preview/cover images.
- Known limitation: only one weather time is bundled, so the ‹ › « » time-step controls show "not found" for other times; "Now" returns to the snapshot.
  The "show my location" button needs geolocation, which the sandbox does not grant.
