| ID |
google-weathernext2-forecast-operational-virtual
|
| Spatial domain | Global |
| Spatial resolution | 0.25 degrees (~20km) |
| Time domain | Forecasts initialized 2025-01-01 00:00:00 UTC to Present |
| Time resolution | Forecasts initialized every 6 hours |
| Forecast domain | Forecast lead time 6-360 hours (0.25-15 days) ahead |
| Forecast resolution | 6 hourly |
STAC (browse) · validation report
WeatherNext 2 is Google's second-generation, global, medium-range, probabilistic weather forecasting model.
This data product is an archive of past and present Google WeatherNext 2 forecasts from 2025 onward, optimized for spatial (map) access patterns. Forecasts are identified by an initialization time (init_time) denoting the start time of the model run as well as by the ensemble_member, and step forward along the lead_time dimension. A new forecast is initialized every 6 hours.
Variables on pressure levels live in the pressure_level group. The spatial dimensions y and x hold latitude and 0-360 degree longitude.
| WeatherNext 2 forecasts, historical and operational, virtual (Github) | |
| WeatherNext 2 forecasts, historical and operational, virtual (Colab) |
import dynamical_catalog # dynamical-catalog>=1.0.0
ds = dynamical_catalog.open("google-weathernext2-forecast-operational-virtual", chunks=None)
day10 = ds.sel(init_time=ds.init_time[-1], lead_time="240h", ensemble_member=slice(0, 3), y=slice(25, 75), x=slice(270, 359.75))
(day10["wind_u_100m"] ** 2 + day10["wind_v_100m"] ** 2) ** 0.5
# Variables with a vertical dimension live in the pressure_level group
ds_pressure = dynamical_catalog.open("google-weathernext2-forecast-operational-virtual", group="pressure_level", chunks=None)
ds_pressure["geopotential_height"].sel(init_time="2026-01-01T00", lead_time="24h", pressure_level=500).mean("ensemble_member")
import dynamical_catalog # dynamical-catalog>=1.0.0
ds = dynamical_catalog.open("google-weathernext2-forecast-operational-virtual", chunks=None)
day10 = ds.sel(init_time=ds.init_time[-1], lead_time="240h", ensemble_member=slice(0, 3), y=slice(25, 75), x=slice(270, 359.75))
(day10["wind_u_100m"] ** 2 + day10["wind_v_100m"] ** 2) ** 0.5
# Variables with a vertical dimension live in the pressure_level group
ds_pressure = dynamical_catalog.open("google-weathernext2-forecast-operational-virtual", group="pressure_level", chunks=None)
ds_pressure["geopotential_height"].sel(init_time="2026-01-01T00", lead_time="24h", pressure_level=500).mean("ensemble_member")
import icechunk
import pystac
import xarray as xr
catalog = pystac.Catalog.from_file("https://stac.dynamical.org/catalog.json")
collection = catalog.get_child("google-weathernext2-forecast-operational-virtual")
asset = collection.assets["icechunk-https"]
authorize = icechunk.containers_credentials({"https://wn.dynamical.org/chunks/": icechunk.Credentials.HttpAccess()})
repo = icechunk.Repository.open(
icechunk.http_storage(asset.href),
authorize_virtual_chunk_access=authorize,
)
session = repo.readonly_session("main")
ds = xr.open_zarr(session.store, chunks=None)
day10 = ds.sel(init_time=ds.init_time[-1], lead_time="240h", ensemble_member=slice(0, 3), y=slice(25, 75), x=slice(270, 359.75))
(day10["wind_u_100m"] ** 2 + day10["wind_v_100m"] ** 2) ** 0.5
# Variables with a vertical dimension live in the pressure_level group
ds_pressure = xr.open_zarr(session.store, group="pressure_level", chunks=None)
ds_pressure["geopotential_height"].sel(init_time="2026-01-01T00", lead_time="24h", pressure_level=500).mean("ensemble_member")
import icechunk
import pystac
import xarray as xr
catalog = pystac.Catalog.from_file("https://stac.dynamical.org/catalog.json")
collection = catalog.get_child("google-weathernext2-forecast-operational-virtual")
asset = collection.assets["icechunk-https"]
authorize = icechunk.containers_credentials({"https://wn.dynamical.org/chunks/": icechunk.Credentials.HttpAccess()})
repo = icechunk.Repository.open(
icechunk.http_storage(asset.href),
authorize_virtual_chunk_access=authorize,
)
session = repo.readonly_session("main")
ds = xr.open_zarr(session.store, chunks=None)
day10 = ds.sel(init_time=ds.init_time[-1], lead_time="240h", ensemble_member=slice(0, 3), y=slice(25, 75), x=slice(270, 359.75))
(day10["wind_u_100m"] ** 2 + day10["wind_v_100m"] ** 2) ** 0.5
# Variables with a vertical dimension live in the pressure_level group
ds_pressure = xr.open_zarr(session.store, group="pressure_level", chunks=None)
ds_pressure["geopotential_height"].sel(init_time="2026-01-01T00", lead_time="24h", pressure_level=500).mean("ensemble_member")
| min | max | units | |
|---|---|---|---|
| ensemble_member | 0 | 63 | 1 |
| init_time | 2025-01-01T00:00:00Z | Present | seconds since 1970-01-01 |
| lead_time | 21600 | 1296000 | seconds |
| x | 0 | 359.75 | degree_east |
| y | -90 | 90 | degree_north |
| pressure_level | 50 | 1000 | hPa |
Access a variable by its name (the bold identifier, e.g. ds["pressure_reduced_to_mean_sea_level"]).
Dimensions: init_time × ensemble_member × lead_time × y × x
| variable | units |
|---|---|
pressure_reduced_to_mean_sea_level
Pressure reduced to MSL (prmsl)
|
Pa |
sea_surface_temperature
Sea surface temperature (sst)NaN over land where sea surface temperature does not apply. Value changes once every 24 hours.
|
degree_Celsius |
temperature_2m
2 metre temperature (2t)
|
degree_Celsius |
total_precipitation_surface
Total precipitation (tp)Accumulated over a six-hour forecast interval. Small negative values are raw model artifacts; set values < 0 to zero.
|
kg m-2 |
wind_u_100m
100 metre U wind component (100u)
|
m s-1 |
wind_u_10m
10 metre U wind component (10u)
|
m s-1 |
wind_v_100m
100 metre V wind component (100v)
|
m s-1 |
wind_v_10m
10 metre V wind component (10v)
|
m s-1 |
These variables live in the pressure_level Zarr group (e.g. pass group="pressure_level" to dynamical_catalog.open() or xr.open_zarr()).
Dimensions: init_time × ensemble_member × lead_time × y × x × pressure_level
| variable | units |
|---|---|
geopotential_height
Geopotential height (gh)
|
m |
specific_humidity
Specific humidity (q)Small negative values are raw model artifacts; set values < 0 to zero.
|
1 |
temperature
Temperature (t)
|
degree_Celsius |
vertical_velocity
Vertical velocity (w)
|
Pa s-1 |
wind_u
U component of wind (u)
|
m s-1 |
wind_v
V component of wind (v)
|
m s-1 |
Dataset licensed under GDM Real-Time Weather Forecasting Experimental Data Terms of Use for Real-Time Data & Forecasts and CC BY 4.0 for Historical Data.
Google WeatherNext 2 forecast data processed by dynamical.org from Google's WeatherNext 2 experimental data. Copyright 2024-6 Google LLC. © 2024-6 Google LLC, whose machine learning models were used to create the experimental data made available under the following licence terms https://storage.googleapis.com/weathernext-public/terms-of-use.pdf. This data is intended for experimental modelling only and is not intended, validated, or approved for real world use.
Or Google WeatherNext 2 from dynamical.org.
This data product is built from Google's WeatherNext 2 experimental forecast dataset. WeatherNext 2 is a global, medium-range ensemble forecast produced by an operational version of Google DeepMind's Functional Generative Network (FGN) weather model. The Acknowledgements on Google's dataset page list third-party materials whose terms may also apply.
Modifications. dynamical.org restructures the source into an Icechunk virtual data product with dynamical.org's variable and dimension names, and converts units as the data is read: temperatures from kelvin to degrees Celsius, geopotential to geopotential height (divided by standard gravity), and total precipitation from metres of water to kg m⁻². Values are otherwise the unchanged model output.
This data product starts with the 2025-01-01T00 UTC initialization and is updated four times a day. Forecasts include steps whose valid time is in the future. Recent initializations may be incomplete while source files arrive or await a subsequent update; unpublished steps read as NaN.
Forecasts initialized from 2022 through 2024 are in the historical WeatherNext 2 data product. It has the same variables, dimensions and coordinates, so the two can be concatenated along init_time.
This dataset is stored in Zarr format, which splits each variable into a grid of chunks — the smallest unit read from storage. When possible, aligning your reads with this dataset's chunk grid can significantly improve data access speed.
The element count and coordinate span of this dataset:
| dimension | chunk |
|---|---|
| init_time | 1 (6 hours) |
| ensemble_member | 1 |
| lead_time | 1 (6 hours) |
| y | 721 (180.25°) |
| x | 1440 (360°) |
| uncompressed | 4.0 MiB |
Review the validation report for variable availability, missing data, known quirks, fill values, value distributions, and sample plots.