Data sources
Observed weather: Open-Meteo Archive API
(https://archive-api.open-meteo.com/v1/archive), daily
temperature_2m_max, temperature_2m_min,
precipitation_sum, retrieved from 1991-01-01 to the current day.
Seed data for featured towns was retrieved on 2026-09-14
(Berlin seed c_52.5_13.4, observed through 2026-09-14).
Underlying data: ERA5 / ERA5-Land reanalysis (Copernicus).
Weather data by Open-Meteo.com, CC-BY 4.0.
Projected climate: Open-Meteo Climate API
(https://climate-api.open-meteo.com/v1/climate), daily, 7 CMIP6
HighResMIP models, window 2031–2050, high-emissions scenario (≈ RCP8.5).
Emission pathways barely differ before ~2050, so the scenario choice matters
little for this window — but it is always labelled.
Models used, by name: CMCC_CM2_VHR4, EC_Earth3P_HR, FGOALS_f3_H, HiRAM_SIT_HR, MPI_ESM1_2_XR, MRI_AGCM3_2_S, NICAM16_8S.
Grid resolution
Every location is snapped to a 0.1° grid cell (≈ 11 km, matching the effective resolution of ERA5-Land over land; ≈ 25 km elsewhere). Everyone inside the same cell sees the same numbers, because they share the same dataset. Mountains and coastlines are smoothed at this resolution.
Metric definitions
| Metric | Definition |
|---|---|
| Hot days | days with daily max ≥ 30.0 °C, per year |
| Frost days | days with daily min < 0.0 °C, per year |
| Heavy-rain days | days with precipitation ≥ a local threshold; the threshold is the 90th percentile of baseline (1991–2020) wet days (≥ 1.0 mm) |
| Longest dry spell | longest run of consecutive days with precipitation < 1.0 mm, averaged over calendar years |
| Summer temperature | mean daily max over June–August, averaged over years |
Windows: baseline 1991–2020 (observed), recent 2021 → latest observation, projected 2031–2050. Per-year values are counts divided by the number of distinct years in the window. Missing days are skipped for counts and means and break runs for dry spells.
Heavy-rain quirk
Projected heavy-rain days can be lower than the baseline. This is not a contradiction: the threshold is derived from observed baseline wet days, and climate models produce too many light-rain days ("drizzle bias"), which shifts their percentile scale. We show it as computed, with the full model spread.
How the charts on the card are drawn
The card is built so that someone who has never read a graph can still follow it. Every chart is paired with a sentence in plain words, and every mark carries a label — no key required.
- The headline panel shows the one measure that carries the human cost (hot days, i.e. days too hot to work outside) three times: the observed 1991–2020 baseline, the observed period since 2021, and the modelled 2031–2050 average. Each small square is one day of a year; solid squares are the average, faded squares are the extra days the models allow for (up to the highest of the 7 models).
- The spread line under the headline panel draws all 7 models separately: one dot each, a band spanning the lowest and the highest, and a filled dot for their average. This is the honest answer — a single number would hide the disagreement.
- The timeline is a proportional time axis from 1991 to 2050. The solid bands are measured periods, the hatched band is the modelled 2031–2050 window, and the vertical line marks today. It makes one point visible that a table of numbers cannot: how much of this has already happened.
- Each of the four remaining measures carries a small comparison chart with the same three windows: a dark blue column for the observed 1991–2020 baseline, a teal column for the observed period since 2021, and an orange column drawn at the projected 2031–2050 ensemble average, with a whisker spanning the min–max spread across the 7 models and one dot per model. A small arrow between the first two columns marks the change that has already happened. Every column carries its value on top and its window below. Column height is relative within the row — compare heights within a row, not across rows. When projections are temporarily unavailable, the orange column and its whisker are omitted.
- The sea-level ruler puts the projected centimetres next to a 1.70 m human silhouette, so the number has a size. It is a rise in the average sea level — never a statement about the depth of water on a street.
The frequency lines ("about one such day every 5 weeks") are a restatement of the same per-year count, not a new metric: the count is divided by 365 and rounded to a readable interval.
Sea level (coastal cells)
For coastal towns with a bundled sea seed, the card shows an additional row. Observed part: linear trend of the PSMSL monthly tide-gauge record (Permanent Service for Mean Sea Level), e.g. +1.87 mm/yr at Delfzijl 1865–2026 for Emden. Projected part: IPCC AR6 regional sea-level projections (FACTS medium-confidence p-box, workflows 1e+1f), high-emissions scenario SSP5-8.5, relative to the 1995–2014 average. We quote the 17–83 % model-outcome range for 2050 (full p05–p95 range in the sentence) — this is a range of model outcomes, not a forecast. Regional values are relative sea level (vertical land motion included via the gauge location), not global average. Data is extracted at build time into seed files; there is no live API call for sea level, so only cells with a generated sea seed (currently Emden, Cuxhaven) show the row. Sea level is not a statement about flooding of specific streets.
Verification
All five metrics exist in two independent implementations — JavaScript
(src/metrics.js) and Python (tools/metric_core.py) —
and both must agree exactly (every output field at 6 decimals) before any
change is merged. Last verified run on real Berlin data: 72 output
fields, 0 mismatches (13,041 observed days, 7 models × 20 years).
The verification harness and current status live in
the repository.
What this tool is NOT
- Not a forecast of individual weather events or disasters.
- Not a real-time alert system.
- Not flood risk: heavy rain here is a proxy metric (days above a local threshold).
- Not own science: we translate published model ensembles, nothing more.
Contribute / contact
The project is open source (MIT) at bitfreedom.net/code/nomyo-ai/MyClimatechange. Seeds for more towns, translations, and issue reports are welcome.
Datenquellen
Beobachtetes Wetter: Open-Meteo Archive API
(https://archive-api.open-meteo.com/v1/archive), täglich
temperature_2m_max, temperature_2m_min,
precipitation_sum, abgerufen vom 1.1.1991 bis zum aktuellen Tag.
Seed-Daten der Beispielstädte wurden am 14.09.2026 abgerufen
(Berlin-Seed c_52.5_13.4, beobachtet bis 14.09.2026).
Zugrundeliegende Daten: ERA5- / ERA5-Land-Reanalyse (Copernicus).
Wetterdaten von Open-Meteo.com, CC-BY 4.0.
Projiziertes Klima: Open-Meteo Climate API
(https://climate-api.open-meteo.com/v1/climate), täglich, 7 CMIP6-HighResMIP-Modelle,
Zeitfenster 2031–2050, hohes Emissionsszenario (≈ RCP8.5). Die Emissionspfade
unterscheiden sich vor ~2050 kaum, daher spielt die Szenariowahl für dieses
Zeitfenster eine geringe Rolle — sie wird dennoch immer ausgewiesen.
Verwendete Modelle, namentlich: CMCC_CM2_VHR4, EC_Earth3P_HR, FGOALS_f3_H, HiRAM_SIT_HR, MPI_ESM1_2_XR, MRI_AGCM3_2_S, NICAM16_8S.
Gitterauflösung
Jeder Ort wird auf eine 0,1°-Gitterzelle gerastet (≈ 11 km, entsprechend der effektiven Auflösung von ERA5-Land über Land; anderswo ≈ 25 km). Alle Personen innerhalb derselben Zelle sehen dieselben Zahlen, weil sie denselben Datensatz teilen. Gebirge und Küstenlinien werden bei dieser Auflösung geglättet.
Metrik-Definitionen
| Metrik | Definition |
|---|---|
| Heiße Tage | Tage mit Tageshöchstwert ≥ 30,0 °C, pro Jahr |
| Frosttage | Tage mit Tiefstwert < 0,0 °C, pro Jahr |
| Tage mit Starkregen | Tage mit Niederschlag ≥ einem lokalen Schwellenwert; dieser ist das 90. Perzentil der Basisniederschlagstage (≥ 1,0 mm) aus 1991–2020 |
| Längste Trockenperiode | längste Folge aufeinanderfolgender Tage mit Niederschlag < 1,0 mm, gemittelt über Kalenderjahre |
| Sommertemperatur | mittleres Tagesmaximum über Juni–August, gemittelt über Jahre |
Zeitfenster: Basis 1991–2020 (beobachtet), aktuell 2021 → letzte Beobachtung, projiziert 2031–2050. Jahreswerte sind Anzahlen geteilt durch die Zahl der verschiedenen Jahre im Fenster. Fehlende Tage werden bei Zählung und Mitteln übersprungen und beenden Folgen bei Trockenperioden.
Eigenheit bei Starkregen
Projizierte Starkregentage können niedriger als der Basiswert ausfallen. Das ist kein Widerspruch: Der Schwellenwert stammt aus beobachteten Basisniederschlagstagen, und Klimamodelle erzeugen zu viele leichte Regentage („Drizzle-Bias“), was ihre Perzentilskala verschiebt. Wir zeigen es so, wie es berechnet ist — mit der vollen Modellspannweite.
Wie die Diagramme auf der Karte entstehen
Die Karte ist so gebaut, dass auch jemand ohne Erfahrung mit Diagrammen ihr folgen kann. Jedes Diagramm steht neben einem Satz in einfacher Sprache, und jede Markierung ist beschriftet — eine Legende ist nicht nötig.
- Die zentrale Kennzahl (heiße Tage, also Tage, an denen es zum Arbeiten draußen zu heiß ist) steht dreimal: beobachtet 1991–2020, beobachtet seit 2021 und modelliert 2031–2050. Jedes kleine Quadrat ist ein Tag des Jahres; gefüllte Quadrate sind der Mittelwert, blasse Quadrate die zusätzlichen Tage, die die Modelle zulassen (bis zum höchsten der 7 Modelle).
- Die Streulinie darunter zeichnet alle 7 Modelle einzeln: je einen Punkt, ein Band vom niedrigsten bis zum höchsten Wert und ein gefüllter Punkt für den Mittelwert. Das ist die ehrliche Antwort — eine einzelne Zahl würde die Uneinigkeit der Modelle verdecken.
- Die Zeitachse läuft maßstäblich von 1991 bis 2050. Die ausgefüllten Bänder sind gemessene Zeiträume, das schraffierte Band ist das modellierte Fenster 2031–2050, die senkrechte Linie markiert heute. So wird sichtbar, wie viel von dieser Geschichte bereits geschehen ist.
- Jede der vier übrigen Kennzahlen trägt ein kleines Vergleichsdiagramm mit denselben drei Fenstern: eine dunkelblaue Säule für die beobachteten 1991–2020, eine türkisfarbene für den beobachteten Zeitraum seit 2021 und eine orange Säule auf dem projizierten 2031–2050-Mittel, mit einer Linie über die Spannweite der 7 Modelle und einem Punkt je Modell. Ein kleiner Pfeil zwischen den ersten beiden Säulen zeigt die bereits eingetretene Veränderung. Jede Säule trägt ihren Wert oben und ihr Zeitfenster unten. Die Höhen sind nur innerhalb einer Zeile vergleichbar. Sind Projektionen vorübergehend nicht verfügbar, entfallen die orange Säule und ihre Linie.
- Das Meeresspiegel-Lineal stellt die projizierten Zentimeter neben eine 1,70 m große Silhouette, damit die Zahl eine Größe bekommt. Es ist ein Anstieg des mittleren Meeresspiegels — niemals eine Aussage über die Wassertiefe auf einer Straße.
Die Häufigkeitszeilen („etwa alle 5 Wochen ein solcher Tag“) sind eine Umformulierung desselben Jahreswerts, keine neue Kennzahl: Der Wert wird durch 365 geteilt und auf ein lesbares Intervall gerundet.
Meeresspiegel (Küstenzellen)
Für Küstenstädte mit hinterlegtem Meeresspiegel-Seed zeigt die Karte eine zusätzliche Zeile. Beobachteter Teil: linearer Trend der monatlichen Tidepegel-Records des PSMSL (Permanent Service for Mean Sea Level), z. B. +1,87 mm/Jahr am Pegel Delfzijl 1865–2026 für Emden. Projizierter Teil: regionale Meeresspiegel-Projektionen des IPCC AR6 (FACTS-P-Box mittlerer Konfidenz, Workflows 1e+1f), hohes Emissionsszenario SSP5-8.5, relativ zum Mittel von 1995–2014. Wir nennen die 17–83-%-Spanne der Modellergebnisse für 2050 (gesamte p05–p95-Spanne im Satz) — dies ist eine Spanne von Modellergebnissen, keine Vorhersage. Die regionalen Werte sind relativer Meeresspiegel (Vertikale Landbewegung über den Pegelstandort eingeschlossen), kein globaler Mittelwert. Die Daten werden zur Build-Zeit in Seed-Dateien extrahiert; es gibt keinen Live-API-Abruf für den Meeresspiegel, daher zeigt nur Zellen mit erzeugtem Sea-Seed (aktuell Emden, Cuxhaven) diese Zeile. Meeresspiegel ist keine Aussage über die Überflutung bestimmter Straßen.
Verifikation
Alle fünf Metriken existieren in zwei unabhängigen Implementierungen — JavaScript
(src/metrics.js) und Python (tools/metric_core.py) —
und beide müssen exakt übereinstimmen (jedes Ausgabefeld auf 6 Dezimalstellen),
bevor eine Änderung gemerged wird. Letzter verifizierter Lauf mit echten Berlin-Daten:
72 Ausgabefelder, 0 Abweichungen (13.041 beobachtete Tage,
7 Modelle × 20 Jahre). Der Verifikations-Stack und der aktuelle Status liegen im
Repository.
Was dieses Tool NICHT ist
- Keine Vorhersage einzelner Wetterereignisse oder Katastrophen.
- Kein Echtzeit-Warnsystem.
- Kein Hochwasserrisiko: Starkregen ist hier eine Proxy-Metrik (Tage über einem lokalen Schwellenwert).
- Keine eigene Wissenschaft: Wir übersetzen publizierte Modell-Ensembles, nichts weiter.
Mitmachen / Kontakt
Das Projekt ist Open Source (MIT) unter bitfreedom.net/code/nomyo-ai/MyClimatechange. Seeds für weitere Städte, Übersetzungen und Fehlermeldungen sind willkommen.