Geometry is not something to learn
Distances, areas, the sphere, the vertical: these are known. Giving attention physical radii and true area weights spends the parameters on the atmosphere instead of on rediscovering the globe.
A probabilistic model of the atmosphere whose attention works in kilometres on the real sphere, not in cells on a flat grid. Five-day global weather, a full-atmosphere rollout, and — for a tropical cyclone — track, intensity, rapid intensification and landfall, every number with an uncertainty attached.
Packages: naturev1 0.10.0 · ihelix 0.5.1 · Python ≥ 3.10 ·
Developer: Nathan · Origin: Jamaica
NatureV1 is an 89.18-million-parameter model of the atmosphere built from scratch by CorX Labs in Jamaica. It reads the last 30 hours of reanalysis — six frames, 89 channels, a 1.5° global grid — and forecasts global surface weather out to five days, steps the whole atmosphere forward to three, and, for a tropical cyclone, says where it will go, how strong it will get, whether it will intensify rapidly and whether it will come ashore. Every number it produces carries an uncertainty.
Two design decisions carry most of the weight. The engine underneath, iHELIX, gives every attention head a physical radius in kilometres over great-circle distance, so the parameters are spent on the atmosphere rather than on rediscovering the shape of the planet. And because best-track labels are desperately scarce, the backbone is frozen before the hurricane heads train: roughly a million parameters ever see a label, on top of a backbone that learned from about 2×1011 free values in reanalysis.
Training is in progress, and no forecast skill is claimed. The Hugging Face repository holds the live checkpoints of the first full run, mirrored while it trains. The scorecards that decide whether this model is any good are produced by the training pipeline itself and do not exist yet. Do not use NatureV1 for real decisions. For a live storm, use the National Hurricane Center.
Three kinds of output come out of one forward pass. Leads are 6, 12, 18, 24, 36, 48, 72, 96 and 120 hours.
| Group | Output | Form |
|---|---|---|
| Global weather | 2 m temperature, mean sea-level pressure, 10 m wind, precipitation | Mean and 90% interval at every grid point |
| Weather type — clear through thunderstorm to snow | A category at every grid point | |
| Full-state rollout — all 86 prognostic channels, surface to 50 hPa | Stepped 6 h at a time on its own forecast to 72 h, as an ensemble, with mass conservation | |
| Tropical cyclone | Track | Six weighted scenarios, each with a tilting uncertainty ellipse per lead — the cone is drawn by the model, not looked up in a table |
| Consensus track | Learned track, two physics-only steering tracks (frozen analysis, and the model’s own rollout) and extrapolation, blended with per-lead weights; every member reported alongside the blend | |
| Intensity | Maximum wind and minimum central pressure per lead, with intervals and the Saffir–Simpson category | |
| Rapid intensification | Probability of a 25, 30 and 35 kt gain in 24 h, plus the expected change | |
| Landfall | Probability by each lead, and the most likely window | |
| Core structure | Peak eyewall wind, radius of maximum wind, and 34/50/64 kt wind radii by quadrant | |
| Anywhere | A local forecast for any point on Earth | Physical units, read off the gridded fields |
The storm also reports its own environment, read out of the model's atmosphere rather than supplied from outside: deep-layer steering flow, 200–850 hPa shear, mid-level humidity and ocean temperature. Those are, deliberately, the same quantities that operational statistical-dynamical intensity schemes such as SHIPS are built on — climatology, persistence and a handful of environmental predictors. Handing them to the heads explicitly is cheaper than hoping a million parameters rediscover them from 55,000 labels.
Most weather transformers flatten the globe into a sequence of tokens and let the model
learn geography from data. iHELIX keeps the geometry instead. A domain is
composed from spherical, periodic, linear and logarithmic axes:
Geometry.globe() is the Earth's surface, and
Geometry.atmosphere() is a spherical shell whose vertical axis is
log-pressure — so 1000→500 hPa is the same distance as 500→250 hPa, which is what
the atmosphere actually thinks.
The practical consequence of “FieldGrid is data, not architecture” is that the same trained model reads ERA5's regular 240 × 121 grid, a 4,096-point Fibonacci mesh, or the irregular pixel footprints of a satellite scan. The grid is an argument, not a rebuild.
A 1.5° grid cell is about 165 km across. It cannot see an eyewall, and it does not know how fast the storm was moving twelve hours ago. So the storm path does not ask the mesh to carry everything: it pools the mesh twice, and then hands the heads the things a coarse reanalysis cannot show.
Everything new starts at exactly zero effect. The state head opens as persistence, the ensemble noise as nothing, the environment inputs as nothing. That is not a detail of initialisation — it is what makes it safe to add a capability to a model that is already training. Adding one can never make an existing checkpoint worse, and uncertainties open at climatological spread rather than at a confident guess.
There are on the order of 55,000 Atlantic best-track points in all of recorded history, and no engineering makes more. Several of the fields are far thinner than that: radius of maximum wind only entered HURDAT2 with the 2021 season, and quadrant wind radii only go back to 2004. Spending 89 million parameters on that many labels would be a way of memorising the Atlantic.
So the labels are spent on as few parameters as possible, and everything else is learned from reanalysis, which is effectively free.
| Stage | What trains | Data | Objective |
|---|---|---|---|
| 1 — Pretraining | The whole backbone | Years of ERA5, every surface channel at every lead | Area-weighted Gaussian negative log-likelihood — roughly 2×1011 supervised values |
| 1b — Rollout | The residual state head | ERA5, stepped on its own forecast | Curriculum to 12 steps (72 h), 2-member CRPS ensemble, mass conserved |
| 2 — Storm heads | ~1M parameters only — the backbone is frozen | HURDAT2 Atlantic best tracks, 1979 onward | Early stopping on seasons never trained on; consensus weights fitted afterwards on those held-out seasons |
Freezing the backbone has a second payoff that is purely practical: it can be run once per storm into a cached feature bank, after which the heads train in seconds per epoch. A design that would otherwise be slow to iterate on becomes fast to iterate on, which is how a solo project gets anywhere at all.
This is as much a part of the model as anything above it. A forecast that cannot say I don't know is not a cautious forecast — it is a dangerous one.
{"available": false, "reason": …}. The
training record travels inside the checkpoint, so this survives being loaded
somewhere else.trustworthy: false, and the live satellite forecast is refused outright.The scoring follows what operational centres actually do: area-weighted RMSE and anomaly correlation against persistence and climatology on identical batches, in physical units, with a 1% margin before anything is called skill. The storm scorecard adds the baselines a forecaster would really reach for — a storm that stays put, straight extrapolation, and the physics-only steering track — and scores the consensus leave-one-season-out.
Beating extrapolation and persistence is the bar. Beating steering is what the learned part is for.
Nothing that establishes skill. The first full training run is in progress. What has been verified end to end is the mechanism: staging, all three training stages, the scorecards and the hindcast run on real ERA5 and HURDAT2 data at reduced scale, with 236 tests covering the physics, the label pairing, the resilience paths and the honesty rules. One hindcast has been run, below. It is one storm, and one storm proves nothing on its own. When the run finishes, the scorecards go here verbatim.
Forecast issued at 18Z on 30 August 2019, from the 1.5° ERA5 analysis at that moment. Dorian is a hard case for anyone: it stalled over the Bahamas and then turned north.
The short version: the physics-only steering track got the overall drift of the storm roughly right with no learning involved. It beat straight-line extrapolation from 48 hours onward and kept its error flat at long range. It is still a crude forecast — about three times the error of an official NHC forecast.
The steering column holds that flow frozen at the issue-time analysis for all five days, so it never sees how the atmosphere actually changed. It has no trained parameters, so its score does not depend on how training is going.
| Lead | Steering | Extrapolation | Rollout-steer | Model, top scenario (17%) | Consensus |
|---|---|---|---|---|---|
| 6 h | 14 | 17 | 14 | 18 | 16 |
| 24 h | 177 | 161 | 180 | 186 | 182 |
| 36 h | 279 | 268 | 283 | 278 | 278 |
| 48 h | 382 | 397 | 389 | 384 | 390 |
| 72 h | 546 | 651 | 554 | 550 | 619 |
| 96 h | 650 | 920 | 656 | 650 | 824 |
| 120 h | 531 | 1,012 | 569 | 528 | 921 |
Kilometres, great-circle distance from the best track. Lowest error in each row in bold; ties both bold.
| Lead | Forecast | Actual | Missed by |
|---|---|---|---|
| 6 h | 62 kt | 115 kt | 53 kt |
| 24 h | 62 kt | 130 kt | 68 kt |
| 36 h | 62 kt | 145 kt | 83 kt |
| 48 h | 63 kt | 160 kt | 97 kt |
| 72 h | 65 kt | 125 kt | 60 kt |
| 96 h | 63 kt | 95 kt | 32 kt |
| 120 h | 61 kt | 95 kt | 34 kt |
The model never gives one track for a hurricane. It proposes six scenarios and puts a probability on each, and the model column above is the one it rated most likely. The 17% in that column’s header is the probability it gave that track — not how far training had got.
With six scenarios, an even split is 100 ÷ 6 = 16.7%. So the model’s favourite track carried exactly the share it would get if all six were rated equally likely: it did not yet favour any path over another. That fits the rest of the table. Corrections this small leave six scenarios that are all nearly the steering track, with nothing to choose between them.
What a trained model should look like. The top scenario should carry clearly more than 17% — for a storm with an obvious path, perhaps 40–60%. Where the path genuinely splits, as with Dorian’s stall or a turn north against a run straight into Florida, two scenarios should both carry real weight.
When the run finishes, this is the first number to check. If the top scenario is still sitting near 17%, the hurricane heads have learned nothing beyond steering. If it has moved, the heads are telling paths apart — and whether they tell them apart correctly is what the storm scorecard measures.
NHC’s five-year Atlantic average is about 66 km at 24 h and 168 km at 72 h. Steering was 177 and 546 km on this storm — roughly three times worse. That is an average over many storms set against a single difficult case, so it is not a fair head-to-head, and the stall made Dorian an unusually hard track for everyone. It is there for scale.
Bottom line. The steering track is a solid floor: it is what physics alone can do from one snapshot. The learned model’s job is to cut those 382, 546 and 531 km numbers. Whether it does will show in the final storm scorecard across every held-out storm — not in this one hindcast.
Do not use NatureV1 for real decisions. Training is unfinished, no scorecard exists, and no independent party has verified anything. For a live storm, the National Hurricane Center is the authority.
The whole pipeline — install, staging, three training stages, scorecards, and publishing
only if it earned it — is one cell, colab_naturev1.py, shipped with the
package. Every setting is at the top. It runs in marimo, Colab, Jupyter or a plain
script.
pip install "naturev1[all]"
Load a checkpoint and ask it what it has actually been trained to do:
import torch
from huggingface_hub import hf_hub_download
from ihelix import fibonacci_sphere
from naturev1 import NatureV1, NatureConfig, build_forecast
path = hf_hub_download("Sigmandndnns/NatureV1-500", "checkpoints/stage1/latest.pt")
payload = torch.load(path, map_location="cpu", weights_only=False)
config = NatureConfig.from_dict(payload["config"])
model = NatureV1(config, fibonacci_sphere(config.latent_points,
num_neighbours=config.latent_neighbours,
cluster_size=config.latent_cluster))
model.load_state_dict(payload["model"])
print(model.trained_heads()) # steps each output has received; 0 = never trained, never shown
build_forecast turns a forward pass into the forecast bundle — track scenarios
with cones, the consensus and its members, landfall, intensity, rapid intensification,
eyewall structure and a point forecast — in physical units with 90% intervals, with every
untrained section marked unavailable:
bundle = build_forecast(
outputs,
config.lead_times_hours,
issued,
storm_center=(lat, lon),
trained=model.trained_heads(),
)
| Path | What it is |
|---|---|
checkpoints/stage1/latest.pt | Stage one, pushed every 10 minutes while training |
checkpoints/rollout/latest.pt | Stage 1b, once it starts |
checkpoints/stage2/latest.pt | Hurricane heads, once they start |
checkpoints/storm_bank_*.pt | Cached frozen-backbone features for the storm heads |
staging/era5*.npy | Normalised ERA5 staging, mirrored so a new session needs no re-download |
staging/stats.json, batch.json | Normalisation statistics and the measured batch size |
Licence. Apache-2.0, for both naturev1 and
ihelix. The data it trains on has its own terms: ERA5 via
WeatherBench 2
and HURDAT2 from the
National Hurricane Center.
Three convictions run through the whole stack, and each one is a bet about where the parameters should go.
Distances, areas, the sphere, the vertical: these are known. Giving attention physical radii and true area weights spends the parameters on the atmosphere instead of on rediscovering the globe.
About 55,000 Atlantic best-track points exist and no engineering makes more. The backbone learns from free reanalysis; a million parameters learn from the labels, with the physics handed to them explicitly.
Every output carries an uncertainty, every untrained head is hidden, every number is bounds-checked, and nothing is believed until it beats persistence.
The engine is not a one-off either. iHELIX grew out of
HELIX, the linear-context language architecture published as
helix-lm — the temporal strand that carries state across the six input frames
is the same gated delta-rule recurrence, applied to time instead of to text.
An 89.18M-parameter probabilistic model of the atmosphere. Given the last 30 hours of ERA5 reanalysis it forecasts global surface weather to five days, rolls the whole atmosphere forward to 72 hours, and — for a tropical cyclone — predicts where it goes, how strong it gets, whether it intensifies rapidly and whether it makes landfall, every number with an uncertainty. The first full training run is in progress and no forecast skill is claimed yet.
No. Training has not finished, no scorecard exists, and nothing about its skill has been established. It also runs on reanalysis, which is published days after the fact, so there is no real-time path even once it is trained. For a live storm, use the National Hurricane Center.
Most weather transformers flatten the globe into tokens and leave the model to work out geography from data. Here every head is given a physical radius in kilometres, with compact support, and attends over great-circle distance — 120 km for fronts and convection, up to 1,600 km for synoptic scale. Points carry true area weights and a local east/north/up frame, so “20 km north” means the same thing at the equator and at 80° latitude.
Because the labels are scarce in a way no engineering fixes. The whole Atlantic best-track record is on the order of 55,000 points, and the rarest fields are far thinner — radius of maximum wind only entered HURDAT2 with the 2021 season, quadrant wind radii only go back to 2004. So the backbone learns from roughly 2×1011 free values in reanalysis, then freezes, and only about a million parameters ever see a label. It also makes iteration fast: the frozen backbone runs once per storm into a cached feature bank, after which the heads train in seconds per epoch.
Because the difference from a steering track is a much easier target than the track itself. A physics-only steering track — the path a storm takes if it is simply carried by the thickness-weighted 850–200 hPa flow around it, plus climatological beta drift — needs no training at all. The learned part is then only responsible for what steering gets wrong: beta drift anomalies, trough interactions, recurvature timing. It also means the model has a sensible answer before it has learned much.
Four tracks are blended with per-lead weights fitted on held-out seasons: the learned track; a steering track from the issue-time analysis, held frozen; the same steering calculation run on the model’s own rolled-out atmosphere; and straight extrapolation. This copies something operational forecasting established long ago: consensus aids routinely beat every individual model that goes into them. Every member is reported alongside the blend, so you can see what the consensus was made of rather than taking one number on trust.
Until the weights are fitted the blend is unweighted — and on the Dorian hindcast that made it worse than steering alone at long range, dragged down by extrapolation.
An output whose head has never received a training step is not shown at all — it comes back as unavailable, and the training record travels inside the checkpoint. A forecast from an input path that was never trained on, such as the satellite path today, is flagged untrustworthy, and the live satellite forecast is refused outright. Every number is bounds-checked first: no 400 kt hurricane, no pressure outside 850–1100 hPa, no probabilities that fail to sum to one. And a checkpoint is published only if it beats persistence on held-out data by a margin.
Nothing that establishes skill. One hindcast has been run, on Hurricane Dorian from 18Z on 30 August 2019. The physics-only steering track had errors of 177 km at 24 h, 382 at 48, 546 at 72 and 531 at 120. Straight extrapolation was better before 48 h (161 km at 24) and far worse after (651 at 72, 1,012 at 120).
The model’s own track — the most likely of the six scenarios it proposes — stayed within 10 km of steering at every lead, and the model gave it 17%: exactly the share each of six scenarios gets under an even split. It did not yet favour any path, and its corrections to steering were still tiny. Intensity failed: about 62 kt flat against a 160 kt peak. For scale, NHC’s five-year Atlantic average is about 66 km at 24 h and 168 km at 72, so steering was roughly three times worse on this storm — one hard storm against an average over many, which is not a fair head-to-head. The full tables are above.
Watch it train
Stage one is mirrored to Hugging Face every ten minutes. The scorecards that decide whether any of this works are produced by the pipeline itself, and will be published here whether they are flattering or not.