---
title: What we may build on today
summary: For each open weather source: one concrete thing this site could draw for Lisbon and Madeira this week, the size of the data, the attribution line to print, and what it needs first.
---
# What we may build on today

> Kept by incident.meteorology@web-summit.dinis, 11 November 2026, 03:00 UTC

[Where a forecast comes from](index.md) · [licences](licences.md) · [open sources](sources.md) · [as data](build-on.json)

Dinis: "the places where we can add ridiculous value". Each item below is a **proposal** (ours, a hypothesis about what would be worth building); the licence, the size and the attribution line beside it are **facts** read at the source, each on the source's own page here. Nothing below is built yet; no image and no model field is in git. Any model output we show follows the rule already on [Storm Charles through the chain](charles.md): IPMA's warnings first, "a model's output, read at the publisher, evidence", no average, no pick. Not a warning service.

| | What we could draw | From | May we transform it | Size | Needs first |
|---|---|---|---|---|---|
| 1 | [The storm from space, one hour behind](#the-storm-from-space-one-hour-behind) | [Meteosat (geostationary)](nodes/obs-meteosat.md) | **yes, with attribution** | An 800 × 640 JPEG of the box at 01:00 UTC on 11 November was 51,729 bytes  | A person registers in EUMETSAT's user portal and accepts the licence for Meteosat level 1 data an hour old or more (no fee) |
| 2 | [The model's own map, cut to our box: gusts and pressure from GFS](#the-models-own-map-cut-to-our-box-gusts-and-pressure-from-gfs) | [GFS (NOAA/NCEP)](nodes/model-gfs.md) | **yes** | 1,702 bytes for the surface gust of one step over 32 to 40 N, 18 to 8 W  | A GRIB2 decoder outside the build (a tool that writes the small JSON; the build stays dependency-free) |
| 3 | [Measured gusts at three airports, every half hour](#measured-gusts-at-three-airports-every-half-hour) | [Airport observations (METAR)](nodes/obs-airport-metar.md) | **yes** | 0 | Nothing new: the data room already reads LPPT this way (incident.meteorologist@ has LPMA as a suggestion). |
| 4 | [How sure is the model: the spread of ECMWF's 51 runs](#how-sure-is-the-model-the-spread-of-ecmwfs-51-runs) | [ECMWF ensemble (ENS)](nodes/model-ecmwf-ens.md) | **yes, with attribution** | One global field is 0 | A GRIB2 decoder outside the build; ECMWF asks for restraint (500 to 2000 simultaneous connections for everyone) |
| 5 | [A second model at 7 km: ICON-EU maximum gusts](#a-second-model-at-7-km-icon-eu-maximum-gusts) | [ICON (DWD)](nodes/model-icon.md) | **yes, with attribution** | About 1 | A GRIB2 decoder; only the latest runs stay on the server (about a day), so history must be copied as it is published. |
| 6 | [Six models for one place, as numbers](#six-models-for-one-place-as-numbers) | [Open-Meteo](nodes/data-open-meteo.md) | **yes, with attribution** | 18 KB for two places × six models × four variables × 48 hours  | The free API is for non-commercial use, under 10,000 calls a day: a decision for Dinis if the site ever carries advertising. |
| 7 | [A second official opinion for any point](#a-second-official-opinion-for-any-point) | [MET Norway weather API (api.met.no)](nodes/data-metno-api.md) | **yes, with attribution** | 3 KB gzipped per place  | An identifying User-Agent and caching, as their terms ask |
| 8 | [IPMA's own data, redrawn](#ipmas-own-data-redrawn) | [IPMA open data (api.ipma.pt)](nodes/data-ipma-open.md) | **unclear** | 2 to 93 KB per file  | Non-profit use only, and the terms are silent on storing and changing: a person should ask IPMA (a draft for incident.media@'s outreach). |
| 9 | [The sea: waves from the regional model](#the-sea-waves-from-the-regional-model) | [IBI wave analysis and forecast (Copernicus Marine)](nodes/model-ibi-waves.md) | **unclear** | Not probed: needs a free account | A free account (a person registers); the licence document read in full ("transform" is unclear until then). |
| 10 | [What a machine-learned model made of it](#what-a-machine-learned-model-made-of-it) | [ECMWF AIFS](nodes/model-ecmwf-aifs.md) | **yes, with attribution** | As for IFS: 0 | A GRIB2 decoder |

## The storm from space, one hour behind

**One of the two to lead with.** **Proposal.** One Meteosat picture an hour for the box from Madeira to Lisbon (28 to 44 N, 25 to 5 W): the airmass composite, where a deepening low shows as a dark dry slot curling into the cloud, and the infrared image; a strip of the last 24 hours that a reader can scrub, each frame stamped with its own time and "one hour old or more".

**Why it adds value.** No Portuguese news site shows the storm itself with its time and its licence. The hour rule turns a restriction into a format: a dated record of what the storm looked like, not a live feed.

- **Source:** [Meteosat (geostationary)](nodes/obs-meteosat.md)
- **Licence (fact):** [EUMETSAT licence for Meteosat level 1 data with a latency of one hour or more: any purpose, attribution, no redistribution of the original numerical data](https://user.eumetsat.int/resources/user-guides/data-registration-and-licensing), read 11:36 UTC, 11 Nov: read yes, after registering and accepting the licence; store yes; show yes, as an image or product we make from it, with attribution; never the original numerical data; transform yes, with attribution
- **The data:** EUMETView WMS, layers msg_fes:rgb_airmass and msg_fes:ir108 (also mtg_fd:li_afa, lightning flash area, and eps:m01_ascat_wind, winds over the sea measured by Metop), asked for a box and a time.
- **Size:** An 800 × 640 JPEG of the box at 01:00 UTC on 11 November was 51,729 bytes (airmass) and 52,047 bytes (infrared), probed at 02:56 UTC and not kept. 24 frames a day is about 1.2 MB: a display vault, never git.
- **The line to print:** "Contains modified EUMETSAT Meteosat data 2026" (EUMETSAT's own wording: "[Contains modified] EUMETSAT [Meteosat/Metop] [data/product] [Year]")
- **What it needs first:** A person registers in EUMETSAT's user portal and accepts the licence for Meteosat level 1 data an hour old or more (no fee). Dinis lifts design rule 9 for this one source. The images go to a display vault (incident.archivist@). Never an image newer than one hour: that needs a broadcaster's licence. Whether a picture drawn by EUMETView counts as "what we make" or as their product is the one point to confirm with EUMETSAT.

## The model's own map, cut to our box: gusts and pressure from GFS

**One of the two to lead with.** **Proposal.** A small map of the Atlantic from Madeira to Lisbon with the pressure lines and the gust field of each GFS run, drawn by us from the numbers; and beside it the same hour from the four previous runs, so a reader sees the low move south or weaken from run to run ("less wind for Lisbon?" as five small maps).

**Why it adds value.** Public domain: the only global model we may redraw, recolour, animate and republish with no condition. Every other site shows a picture of this data; we can show the data and how it changed.

- **Source:** [GFS (NOAA/NCEP)](nodes/model-gfs.md)
- **Licence (fact):** [US government work: public domain](https://www.weather.gov/disclaimer), read 11:30 UTC, 11 Nov: read yes; store yes; show yes; transform yes
- **The data:** NOMADS grib filter: one variable, one level, one box, one time step per request (surface gust; mean sea level pressure; 10 m wind).
- **Size:** 1,702 bytes for the surface gust of one step over 32 to 40 N, 18 to 8 W (probed 02:29 UTC). Decoded to a grid of 33 × 41 values it is about 8 KB of JSON per step and variable: small enough for git. 4 runs a day.
- **The line to print:** "NOAA/NCEP GFS, run <HH> UTC <date>, read <time> UTC. Public domain." (credit is asked, not required)
- **What it needs first:** A GRIB2 decoder outside the build (a tool that writes the small JSON; the build stays dependency-free). The conductor's conditions for any model output: IPMA's warnings first, "a model's output, read at NOAA, evidence", no pick, no average.

## Measured gusts at three airports, every half hour

**Proposal.** One strip for Lisbon, Madeira and Porto Santo airports: each METAR's wind and gust, with IPMA's warned gust for the same hour above it and the TAF below it.

**Why it adds value.** The only open gust measurements for Portugal. Madeira (LPMA) reported 27 kt at 02:00 UTC and is not yet in the data room.

- **Source:** [Airport observations (METAR)](nodes/obs-airport-metar.md)
- **Licence (fact):** [US government work: public domain](https://www.weather.gov/disclaimer), read 11:30 UTC, 11 Nov: read yes; store yes; show yes; transform yes
- **The data:** NOAA Aviation Weather Center API: /api/data/metar?ids=LPPT,LPMA,LPPS&format=json and /api/data/taf.
- **Size:** 0.9 KB for two airports (probed 02:29 UTC).
- **The line to print:** "METAR and TAF issued in Portugal, read at NOAA Aviation Weather Center <time> UTC."
- **What it needs first:** Nothing new: the data room already reads LPPT this way (incident.meteorologist@ has LPMA as a suggestion).

## How sure is the model: the spread of ECMWF's 51 runs

**Proposal.** For the grid cell nearest Lisbon and Funchal: the range of gusts across the 51 ensemble members, hour by hour, as a band; the single high-resolution run as a line inside it.

**Why it adds value.** A single number hides the uncertainty that the forecasters are weighing. The band is the honest picture, and it is what IPMA's own charts page (ECMWF only) does not show.

- **Source:** [ECMWF ensemble (ENS)](nodes/model-ecmwf-ens.md)
- **Licence (fact):** [CC BY 4.0, with ECMWF's Terms of Use](https://www.ecmwf.int/en/forecasts/datasets/open-data), read 11:28 UTC, 11 Nov: read yes; store yes; show yes, with attribution; transform yes, with attribution
- **The data:** ECMWF open data, stream "enfo": the .index beside each file gives the byte range of each member's field, so only the gust fields are fetched.
- **Size:** One global field is 0.3 to 0.5 MB (probed: 500,611 bytes); 51 members × the steps of one day is of the order of 100 MB to fetch per run, a few KB to keep once cut to two points.
- **The line to print:** "Copyright © 2026 European Centre for Medium-Range Weather Forecasts (ECMWF). Source: ECMWF open data, CC BY 4.0. Cut to two grid points by us."
- **What it needs first:** A GRIB2 decoder outside the build; ECMWF asks for restraint (500 to 2000 simultaneous connections for everyone). The ensemble file layout was not probed in this pass.

## A second model at 7 km: ICON-EU maximum gusts

**Proposal.** The same small map as for GFS, from DWD's ICON-EU, which covers mainland Portugal and Madeira at about 7 km: the coast and the Tagus estuary begin to show.

**Why it adds value.** A finer grid than any global model, under CC BY 4.0, from a body that publishes every field.

- **Source:** [ICON (DWD)](nodes/model-icon.md)
- **Licence (fact):** [CC BY 4.0 (legal notice of dwd.de; the open data server names the same terms)](https://www.dwd.de/EN/service/legal_notice/legal_notice.html), read 11:30 UTC, 11 Nov: read yes; store yes; show yes, with attribution; transform yes, with attribution
- **The data:** opendata.dwd.de/weather/nwp/icon-eu/grib/<HH>/vmax_10m/: one file per hour of forecast.
- **Size:** About 1.2 MB per file, bzip2 (probed); cut to our box, a few KB of JSON.
- **The line to print:** "Source: Deutscher Wetterdienst (ICON-EU, run <HH> UTC <date>), CC BY 4.0. Cut to the box and redrawn by us."
- **What it needs first:** A GRIB2 decoder; only the latest runs stay on the server (about a day), so history must be copied as it is published.

## Six models for one place, as numbers

**Proposal.** What charles.html already shows as a table, as a strip per model for Lisbon and Funchal: gust, mean wind, rain, pressure, hour by hour.

**Why it adds value.** One request, plain JSON, no decoder: the fastest way to put models side by side.

- **Source:** [Open-Meteo](nodes/data-open-meteo.md)
- **Licence (fact):** [CC BY 4.0 for the data; the free API is for non-commercial use](https://open-meteo.com/en/licence), read 11:29 UTC, 11 Nov: read yes, non-commercial use on the free API; store yes; show yes, with attribution; transform yes, with attribution
- **The data:** api.open-meteo.com/v1/forecast with models=…; each model's run time at /data/<model>/static/meta.json.
- **Size:** 18 KB for two places × six models × four variables × 48 hours (probed 02:49 UTC).
- **The line to print:** "Weather data by Open-Meteo.com (CC BY 4.0); models: ECMWF, NOAA, DWD, Météo-France, Met Office."
- **What it needs first:** The free API is for non-commercial use, under 10,000 calls a day: a decision for Dinis if the site ever carries advertising.

## A second official opinion for any point

**Proposal.** For any place a reader picks (a parish, a bridge): MET Norway's point forecast, which outside the Nordic area is ECMWF's, post-processed.

**Why it adds value.** A national service that serves the whole world as open data with a clear licence.

- **Source:** [MET Norway weather API (api.met.no)](nodes/data-metno-api.md)
- **Licence (fact):** [NLOD 2.0 and CC BY 4.0](https://api.met.no/doc/License), read 11:29 UTC, 11 Nov: read yes; store yes; show yes, with attribution; transform yes, with attribution
- **The data:** api.met.no/weatherapi/locationforecast/2.0/complete?lat=…&lon=…
- **Size:** 3 KB gzipped per place (probed).
- **The line to print:** "Data from MET Norway (NLOD 2.0, CC BY 4.0)."
- **What it needs first:** An identifying User-Agent and caching, as their terms ask. Already in the data room for Lisbon.

## IPMA's own data, redrawn

**Proposal.** What the site already draws: warnings by district and hour, stations, the automatic forecast (which IPMA says is statistical processing of ECMWF and AROME).

**Why it adds value.** The primary source for Portugal; nobody else shows its changes over time.

- **Source:** [IPMA open data (api.ipma.pt)](nodes/data-ipma-open.md)
- **Licence (fact):** [IPMA's own terms on api.ipma.pt: personal or public use, never for profit or offence, the source always named](https://api.ipma.pt/), read 11:28 UTC, 11 Nov: read yes; store unclear; show yes, non-profit, with the source named; transform unclear
- **The data:** api.ipma.pt (mapped by incident.ipma@ under sources/ipma/).
- **Size:** 2 to 93 KB per file (incident.weatherwatch@'s reads).
- **The line to print:** "Fonte: IPMA", on every use.
- **What it needs first:** Non-profit use only, and the terms are silent on storing and changing: a person should ask IPMA (a draft for incident.media@'s outreach).

## The sea: waves from the regional model

**Proposal.** Significant wave height off Lisbon and Madeira beside IPMA's rough-sea warning ("5 to 7 metres, up to 13 metres maximum").

**Why it adds value.** The sea state closes the port and floods the riverside; no page ties the wave forecast to the warning.

- **Source:** [IBI wave analysis and forecast (Copernicus Marine)](nodes/model-ibi-waves.md)
- **Licence (fact):** [Copernicus Marine service licence (free of charge, attribution)](https://marine.copernicus.eu/access-data), read 11:30 UTC, 11 Nov: read yes, with a free account; store yes; show yes, with attribution; transform unclear
- **The data:** Copernicus Marine, product IBI_ANALYSISFORECAST_WAV_005_005.
- **Size:** Not probed: needs a free account.
- **The line to print:** "Generated using E.U. Copernicus Marine Service Information", with the product's DOI.
- **What it needs first:** A free account (a person registers); the licence document read in full ("transform" is unclear until then).

## What a machine-learned model made of it

**Proposal.** ECMWF's AIFS beside its physics model IFS for the same hours: where the two agree and differ on the track of the low.

**Why it adds value.** The open question in forecasting this year, shown on a real storm with real data, both under CC BY 4.0.

- **Source:** [ECMWF AIFS](nodes/model-ecmwf-aifs.md)
- **Licence (fact):** [CC BY 4.0, with ECMWF's Terms of Use](https://www.ecmwf.int/en/forecasts/datasets/open-data), read 11:28 UTC, 11 Nov: read yes; store yes; show yes, with attribution; transform yes, with attribution
- **The data:** ECMWF open data, aifs-single (61 steps in the 12 UTC run of 10 November).
- **Size:** As for IFS: 0.3 to 0.5 MB per global field.
- **The line to print:** "Copyright © 2026 ECMWF. Source: ECMWF open data (AIFS and IFS), CC BY 4.0."
- **What it needs first:** A GRIB2 decoder. AIFS publishes no gusts in its open output: pressure and mean wind only.
