Last updated 10 September 2026
Most weather apps buy their rain forecast in. Helder computes its own, on its own server: radar comes in, we work out where the showers are heading, run twenty variants to get at the uncertainty, and blend that gradually into a numerical weather model — so you get one continuous forecast out to 24 hours instead of a hard seam after two.
This page explains how that works and shows what we measure so far, including where it comes off worse. At the bottom is the scoreboard, where fourteen sources are checked against measured reality every hour — ours among them.
Why the Netherlands. The engine runs on the radar composite of the Dutch weather service (KNMI) and on their UWC-W model, so the nowcast covers the Netherlands and a margin around it. Everywhere else the app falls back on global sources — NEXRAD and NOAA HRRR in North America, ECMWF elsewhere. The method below is not specific to the Netherlands; the data licence is.
Every five minutes our server fetches the KNMI radar composite: the two radars at Den Helder and Herwijnen, merged into one map of the Netherlands and its surroundings on a one-kilometre grid. That is a measurement, not a forecast — it is what is falling out of the sky right now. We keep the images for three weeks, because without a past you cannot verify anything.
From the last six radar images we read off the motion using optical flow, the same technique video software uses to work out how pixels shift between two frames. That gives a motion field: for every patch of map an arrow saying how fast and which way. We then advect the most recent image along those arrows (semi-Lagrangian extrapolation). For the first half hour that appears to work surprisingly well: showers hold their shape longer than you would think.
A single advected image pretends the future is settled, and it is not. So we run twenty variants with pySTEPS — an ensemble. The trick in STEPS is that it decomposes precipitation into scales: large rain areas stay recognisable for hours, small convective cells live about half an hour. Each ensemble member gets noise that imitates that behaviour, so the twenty members diverge roughly the way real showers do. Out of that spread comes not just "how many millimetres" but also "what are the odds it gets wet where you are".
After an hour or two there is nothing usable left in the radar image: showers form and die, and extrapolation cannot see that coming. For that you need a model that actually solves the atmosphere. We use UWC-W, the KNMI's HARMONIE configuration at 2 km, which publishes a fresh run every hour.
The handover is gradual rather than a switch: the first quarter of an hour is radar only, after an hour it is half and half, after four hours it is pure model. And because a model only gives hourly totals, we advect those fields along the same motion field and interpolate between the hours — otherwise you watch a model shower jump forward once an hour instead of drifting across the map.
Each run produces 64 steps out to 24 hours: every five minutes for the first two hours, then quarter-hourly, then hourly. For every step we store the field, the uncertainty band and a map image. The app draws its rain strip, rain graph, 8- and 24-hour map and rain alerts from those.
Below, the current run is playing: the last hour of measured radar, then eight hours ahead. It refreshes every five minutes, so what you see here is never older than that.
Where it runs. A single machine at Hetzner in Nuremberg (4 cores, 8 GB). Python with pySTEPS and eccodes; a run takes about two minutes and uses a gigabyte. Every five minutes, day and night. Results go through Redis to the API, and the app only ever talks to that API. There is no team and no data centre: this is one person with a hobby server.
A forecast you never check is an opinion. So we measure ourselves, every quarter of an hour, at twelve locations across the Netherlands. The truth is what the KNMI radar actually measured there. Every hour we record what fourteen sources promised for the next 1 to 24 hours, and later we compare promise against measurement.
| Source | Mean error (mm) | Wet or dry correct |
|---|---|---|
| Helder — ensemble | 0.238 | 65% |
| Helder — blended with UWC-W | 0.255 | 63% |
| KNMI nowcast | 0.274 | 62% |
| Helder — radar only | 0.283 | 61% |
| KNMI UWC-W | 0.242 | 60% |
| KNMI HARMONIE | 0.281 | 59% |
| OpenWeatherMap | 0.321 | 58% |
| Google Weather | 0.261 | 57% |
| Apple Weather | 0.284 | 55% |
| MET Norway | 0.227 | 54% |
| Google — minute series | 0.217 | 47% |
| ECMWF | 0.272 | 47% |
| ECMWF AIFS | 0.278 | 39% |
Snapshot over the last 72 hours, 828 comparisons per source, 12 locations. Green = best of all sources.
Here is how we read that, with the necessary caution. On the question will it rain, our ensemble seems to be doing well: over this period it comes out on top, slightly ahead of the KNMI's own nowcast. On the question how many millimetres, MET Norway and Google's minute series are closer. We think that fits how an ensemble works: averaging twenty variants flattens the peaks, which appears to sharpen the probability question and blunt the amount question. There is probably something to be won there.
An important caveat. This covers 72 hours and twelve locations. That is enough to see whether something works, but far too little to say who is "best": one rainy week with the right kind of showers could reshuffle the order. We publish the standings because we think a forecast ought to be checked, not because we think the matter is settled. Come back in a month.
The ensemble numbers themselves: a CRPS of 0.204 against a mean error of 0.238 for the ensemble mean. That the first number is lower suggests the probability distribution is worth more than the single value — the spread does seem to add something. The Brier score for "will it get wet" comes out at 0.085, where 0.25 would be guessing.
| Source | Mean error (°C) | Systematic |
|---|---|---|
| Google Weather | 0.71 | +0,07 |
| MET Norway | 0.80 | +0,16 |
| Apple Weather | 0.81 | +0,43 |
| ECMWF | 0.85 | +0,01 |
| ECMWF AIFS | 0.93 | −0,04 |
| KNMI UWC-W | 1.09 | +0,60 |
| KNMI HARMONIE | 1.10 | +0,58 |
| OpenWeatherMap | 1.34 | +0,69 |
Truth: the ten-minute observations from the KNMI station network.
This is where we come off worse. For the Netherlands Helder shows HARMONIE's temperature, and in this period that model appears to run a good half degree warm against the stations; Google and Apple do better. We put it here because it is what we measure. It is on the list: we have the real temperature at the same spot every ten minutes, so we think we can subtract that difference from the coming hours on a decaying weight.
All open data or open source, credited in the app under Settings → Sources.