**SatWeave** is a global, analysis-ready dataset of multi-spectral
geostationary satellite observations developed by
[Google DeepMind](https://deepmind.google/) and
[Google Research](https://research.google/). SatWeave harmonizes imagery from
five operational geostationary satellite positions (**GOES-East** ,
**GOES-West** , **Meteosat Prime (0°)** , **Meteosat Indian Ocean (IODC)** , and
**Himawari** ) into a single global mosaic across **17 spectral bands** : 7
visible, near-infrared, and shortwave-infrared reflectance bands (`0 to 100 %`)
and 10 shortwave, water vapor, and thermal infrared brightness temperature bands
(`K`).

Updated **every hour** at **0.1° (\~10 km) spatial resolution** with **around
1 hour latency** alongside a 30-minute historical archive (`2016-2025`),
SatWeave provides the live satellite observations used to initialize
[WeatherNext 3](https://developers.google.com/weathernext/guides/models.md.txt) every hour and to generate
near-real-time precipitation estimates in
[PARDIG-NRT](https://developers.google.com/weathernext/guides/pardig.md.txt).


[Access on Cloud Storage](https://developers.google.com/weathernext/guides/satweave.md.txt#access-on-google-cloud-storage)
[Explore Variables](https://developers.google.com/weathernext/guides/satweave.md.txt#supported-variables)

## At a glance

| Attribute | Details |
| Temporal Coverage | **2016 to present** (`2016-01-01T00:00:00` to `2025-12-31T23:30:00` UTC historical archive + `2026-01-01T00:00:00` UTC to present operational archive and live stream) |
| Spatial Coverage | Global (90°N to 90°S \[`90.0°` to `-90.0°`\], 0° to 360°E; `EPSG:4326` equirectangular grid; geostationary sensor coverage within approximately ±60°-65° latitude) |
| Spatial Resolution | 0.1° (\~10 km) (1801 × 3600 grid) |
| Temporal Resolution | 1 hour (`2026_to_present/` backfill and near-real-time stream, 24 timesteps/day) · 30 minutes (`2016_to_2025/` historical archive, 48 timesteps/day) |
| Real-Time Latency | **\~1 hour** |
| Variables \& Spectral Bands | **17 multi-spectral bands:** 7 Visible, Near-IR, and SWIR reflectance (0--100 %) · 10 Shortwave, Water Vapor \& Thermal IR brightness temperature (K) |
| Satellite Constellation | GOES-East, GOES-West (NOAA) · Meteosat Prime 0°, Meteosat IODC (EUMETSAT) · Himawari (JMA) |
| Dimensions \& Format | `(time, latitude, longitude)` · [Zarr v3](https://zarr.dev/) on Google Cloud Storage |
| Available Surfaces | **[Google Cloud Storage (Zarr)](https://developers.google.com/weathernext/guides/satweave.md.txt#access-on-google-cloud-storage)** (`gs://satweave_1/`) |
| License \& Access | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) · Publicly accessible with any Google Cloud account (no access request form required) |
|---|---|

## Key features

- **Multi-satellite harmonization:** International satellite agencies publish raw imagery in distinct map projections, calibration tables, file formats, and scan intervals (10 to 30 minutes). SatWeave reprojects, cross-calibrates, and blends overlapping views from five geostationary positions onto a uniform `0.1°` global grid.
- **Multi-spectral channels:** Provides 17 spectral channels spanning solar reflectance (`0 to 100 %`) for daytime cloud structure, aerosols, snow and ice phase, and particle size alongside water vapor and thermal infrared brightness temperature (`K`) for continuous day-and-night tracking of tropospheric moisture, cloud-top temperature, and deep convection.
- **Hourly updates and historical archive:** Combines a multi-year historical record (`2016-2025` at 30-minute timesteps) with a continuous hourly archive and near-real-time feed (`2026 to present` at 1-hour timesteps, `~1 hour` latency), removing the need to build custom multi-agency satellite ingestion pipelines.
- **Direct input for AI weather models:** Conventional numerical weather prediction analysis cycles update every 6 hours. Direct ingestion of SatWeave allows [WeatherNext 3](https://developers.google.com/weathernext/guides/models.md.txt) to initialize new global forecasts every hour.

*** ** * ** ***

## Supported spectral bands and grid schema

SatWeave provides 17 multi-spectral bands on a uniform global `0.1°` (\~10 km)
grid indexed across `(time, latitude, longitude)`: 7 visible, near-infrared, and
shortwave-infrared top-of-atmosphere reflectance bands (`0 to 100 %`) and 10
shortwave, water vapor, and thermal infrared top-of-atmosphere brightness
temperature bands (`K`).

| Variable Name | Central Wavelength | Band \& Physical Application | Units / Range | Constellation Coverage |
|---|---|---|---|---|
| Visible, Near-Infrared \& Shortwave-Infrared Reflectance (7 Bands) |||||
| `mosaic_470_nm` | 0.47 μm (470 nm) | Blue visible (aerosols, dust, smoke, daytime clouds) | 0--100 % | GOES-East, GOES-West, Himawari (3 satellites) |
| `mosaic_509_nm` | 0.51 μm (509 nm) | Green visible (true-color composites, vegetation, aerosols) | 0--100 % | Himawari only (1 satellite) |
| `mosaic_640_nm` | 0.64 μm (640 nm) | Red visible (daytime clouds, fog, solar insolation, snow and ice) | 0--100 % | All 5 satellites |
| `mosaic_863_nm` | 0.86 μm (863 nm) | Near-IR vegetation band (vegetation, land and water contrast, daytime clouds) | 0--100 % | All 5 satellites |
| `mosaic_1370_nm` | 1.37 μm (1370 nm) | Near-IR cirrus band (daytime thin high-altitude cirrus clouds) | 0--100 % | GOES-East, GOES-West only (2 satellites) |
| `mosaic_1610_nm` | 1.61 μm (1610 nm) | Snow and ice SWIR (water versus ice cloud phase, snow versus cloud discrimination) | 0--100 % | All 5 satellites |
| `mosaic_2250_nm` | 2.25 μm (2250 nm) | Cloud particle size SWIR (droplet effective radius, aerosol size, hot spots) | 0--100 % | GOES-East, GOES-West, Himawari (3 satellites) |
| Shortwave, Water Vapor \& Thermal Infrared Brightness Temperature (10 Bands) |||||
| `mosaic_3830_nm` | 3.83 μm (3830 nm) | Shortwave IR window (nighttime low clouds and fog, fire and hot-spot detection) | K | All 5 satellites |
| `mosaic_6200_nm` | 6.20 μm (6200 nm) | Upper-level water vapor IR (upper-tropospheric moisture, jet streams) | K | All 5 satellites |
| `mosaic_6900_nm` | 6.90 μm (6900 nm) | Mid-level water vapor IR (mid-tropospheric moisture, atmospheric winds) | K | GOES-East, GOES-West, Himawari (3 satellites) |
| `mosaic_7330_nm` | 7.33 μm (7330 nm) | Lower-level water vapor IR (lower and mid-level moisture, convection initiation) | K | All 5 satellites |
| `mosaic_8590_nm` | 8.59 μm (8590 nm) | Cloud-top phase IR (ice versus water cloud phase, dust, volcanic SO~2~) | K | All 5 satellites |
| `mosaic_9620_nm` | 9.62 μm (9620 nm) | Ozone absorption IR (total column ozone, stratospheric-tropospheric dynamics) | K | All 5 satellites |
| `mosaic_10400_nm` | 10.40 μm (10400 nm) | Clean longwave IR window (cloud-top temperature, surface temperature) | K | GOES-East, GOES-West, Himawari (3 satellites) |
| `mosaic_11200_nm` | 11.20 μm (11200 nm) | Standard longwave IR window (deep convection, cloud-top \& sea surface temperature) | K | All 5 satellites |
| `mosaic_12400_nm` | 12.40 μm (12400 nm) | Dirty longwave IR split-window (low-level moisture, volcanic ash, sea surface temperature) | K | All 5 satellites |
| `mosaic_13300_nm` | 13.30 μm (13300 nm) | CO~2~ longwave IR absorption (cloud-top height assignment, air temperature) | K | All 5 satellites |

### Coordinate dimensions

| Coordinate | Shape \& Type | Grid Convention |
|---|---|---|
| `time` | `datetime64[ns]` | Observation valid timestamp in UTC (30-minute intervals in `2016_to_2025/mosaic.zarr`; 1-hour intervals in `2026_to_present/<YYYYMMDDTHHMMSS>/mosaic.zarr`). |
| `latitude` | `1801` (`float64`) | Global 0.1° grid ordered north-to-south from `90.0°` to `-90.0°` (`degrees_north`). |
| `longitude` | `3600` (`float64`) | Global 0.1° grid in **0° to 360°** convention (`0.0°` to `359.9°`, `degrees_east`). Convert standard `-180°..180°` longitudes using `lon_360 = lon % 360`. |

### Sensor coverage and historical constellation evolution

Geostationary satellites orbit above the equator and observe up to
approximately `±60°-65°` latitude. High-latitude polar grid
cells beyond the geostationary viewing limb, channels not carried on a given
satellite sensor, and nighttime solar reflectance values are encoded as `NaN`:

- **Per-band satellite availability (modern constellation, November 2018 onward):**
  - **All 5 satellites (\~85-87% global valid pixels; 11 bands):** `mosaic_640_nm`, `mosaic_863_nm`, `mosaic_1610_nm`, `mosaic_3830_nm`, `mosaic_6200_nm`, `mosaic_7330_nm`, `mosaic_8590_nm`, `mosaic_9620_nm`, `mosaic_11200_nm`, `mosaic_12400_nm`, and `mosaic_13300_nm` cover GOES-East, GOES-West, Meteosat Prime (`0°`), Meteosat IODC, and Himawari.
  - **3 satellites (\~69% global valid pixels; 4 bands):** `mosaic_470_nm`, `mosaic_2250_nm`, `mosaic_6900_nm`, and `mosaic_10400_nm` are carried on GOES-East ABI, GOES-West ABI, and Himawari AHI (`NaN` over the Meteosat Prime and IODC sectors).
  - **2 satellites (\~50% global valid pixels; 1 band):** `mosaic_1370_nm` (1.37 μm cirrus band) is carried on GOES-East ABI and GOES-West ABI only (`NaN` outside the Americas and the eastern and central Pacific).
  - **1 satellite (\~34% global valid pixels; 1 band):** `mosaic_509_nm` (0.51 μm green visible band) is carried on Himawari AHI only (`NaN` outside the Asia-Pacific sector).
- **Historical Western Hemisphere transitions (`2016-2018` in
  `2016_to_2025/mosaic.zarr`):** The `2016_to_2025` archive spans three distinct satellite sensor regimes in the Western Hemisphere as NOAA transitioned from legacy GOES Imagers to the GOES-R Series Advanced Baseline Imager (ABI):
  - **January 1, 2016 -- July 10, 2017 (`21:30 UTC`) --- Pre-GOES-16 era:** Before GOES-16 became operational, the Western Hemisphere was observed by legacy **GOES-13 (East)** and **GOES-15 (West)** Imagers, which carried only **5 spectral bands** (`640`, `3830`, `6200`, `11200`, and `13300 nm`) and sometimes scanned at **3-hourly** intervals rather than every 30 minutes. During this period, `mosaic_1370_nm` is `100% NaN` globally (`0%` valid), `470`, `509`, `2250`, `6900`, and `10400 nm` are Himawari-only (`~34%` valid), `863`, `1610`, `7330`, `8590`, `9620`, and `12400 nm` cover only the Meteosat and Himawari sectors (`~65%` valid, `NaN` over the Americas), and intermediate 30-minute timestamps between 3-hourly GOES scans contain `NaN` values over the Americas.
  - **July 10, 2017 (`22:00 UTC`) -- November 13, 2018 (`23:30 UTC`) ---
    GOES-16 (East) transition:** **GOES-16 ABI** begins covering the GOES-East sector across all 16 ABI channels at 30-minute intervals (`mosaic_1370_nm` rises to `~35%` valid globally and the four 3-satellite ABI+AHI bands rise to `~68%` valid), while the GOES-West sector remains on legacy 5-band GOES-15.
  - **November 14, 2018 (`00:00 UTC`) onward --- Full 5-satellite
    constellation:** **GOES-17 ABI** (later succeeded by **GOES-18 ABI**) joins in the GOES-West sector, completing full multi-spectral coverage across the Western Hemisphere.

### Data quality and satellite artifacts

SatWeave composites observations directly from operational weather satellites,
so individual frames may contain upstream sensor and mosaicking artifacts such
as missing scan lines or sectors, calibration differences along overlap
boundaries, solar glint, or outlier pixels. These artifacts come from various
satellites, including limb artifacts in the IR bands on the Meteosat Second
Generation satellites and nighttime glare in the visible bands over their
coverage regions. Consumers can inspect the data for missing (`NaN`) or
anomalous values and filter or post-process as needed for their downstream
workflow.

*** ** * ** ***

## Accessing SatWeave data

> [!NOTE]
> **Open access:** SatWeave is publicly available on Google Cloud Storage under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). Anyone with a Google Cloud account can query the Zarr stores immediately without submitting an access request form.

### Directory structure

SatWeave is published as [Zarr v3](https://zarr.dev/) stores in the
`gs://satweave_1/` bucket:

    gs://satweave_1/
    └── zarr/
        ├── 2016_to_2025/
        │   └── mosaic.zarr                    # Historical archive (2016-01-01T00:00 to 2025-12-31T23:30 UTC · 30-min timesteps)
        └── 2026_to_present/                   # 2026 backfill + live hourly mosaics (~1 hour latency)
            ├── <YYYYMMDDTHHMMSS>/
            │   └── mosaic.zarr                # Single hourly mosaic · 1h timesteps · (1, 1801, 3600)
            └── ...

Both `2016_to_2025/mosaic.zarr` and the hourly stores in
`2026_to_present/<YYYYMMDDTHHMMSS>/mosaic.zarr` share identical Zarr v3 variable
attributes and `float64` coordinate grids (`latitude`: `90.0` to `-90.0`,
`longitude`: `0.0` to `359.9`), so slices from the two archives can be
concatenated directly along the `time` dimension in Xarray.

### Common query recipes

Install the required Python libraries:

```bash
pip install xarray zarr obstore
```

#### 1. Open an hourly mosaic and inspect the schema

Open an hourly SatWeave mosaic directly from Google Cloud Storage (or open the
multi-year `zarr/2016_to_2025/mosaic.zarr` historical archive) using `obstore`
and `xarray`:

<br />

**Python**

<br />

```python
import obstore
import xarray as xr
import zarr

# Open an hourly SatWeave Zarr store on Google Cloud Storage
# (For the 2016-2025 30-minute archive, use prefix="zarr/2016_to_2025/mosaic.zarr")
gcs_store = obstore.store.GCSStore(
    bucket="satweave_1",
    prefix="zarr/2026_to_present/20260901T120000/mosaic.zarr",
)
ds = xr.open_zarr(zarr.storage.ObjectStore(gcs_store), chunks={})
print(ds)
```

Expected dataset structure:

    <xarray.Dataset>
    Dimensions:          (time: 1, latitude: 1801, longitude: 3600)
    Coordinates:
      * time             (time) datetime64[ns] 2026-09-01T12:00:00
      * latitude         (latitude) float64 90.0 89.9 89.8 ... -89.8 -89.9 -90.0
      * longitude        (longitude) float64 0.0 0.1 0.2 ... 359.7 359.8 359.9
    Data variables:
        mosaic_470_nm    (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_509_nm    (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_640_nm    (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_863_nm    (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_1370_nm   (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_1610_nm   (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_2250_nm   (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_3830_nm   (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_6200_nm   (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_6900_nm   (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_7330_nm   (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_8590_nm   (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_9620_nm   (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_10400_nm  (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_11200_nm  (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_12400_nm  (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>
        mosaic_13300_nm  (time, latitude, longitude) float32 dask.array<chunksize=(1, 1801, 3600), meta=np.ndarray>

<br />

<br />

#### 2. Plot tropical cyclone infrared cloud-top brightness temperature

<br />

**Python**

<br />

```python
import matplotlib.pyplot as plt
import obstore
import xarray as xr
import zarr

gcs_store = obstore.store.GCSStore(
    bucket="satweave_1",
    prefix="zarr/2026_to_present/20260901T120000/mosaic.zarr",
)
ds = xr.open_zarr(zarr.storage.ObjectStore(gcs_store), chunks={})

# Select 11.2 µm longwave IR window band over the Western North Pacific
# (lat: 40°N to 5°N, lon: 115°E to 165°E) and convert Kelvin to Celsius
ir_temp_c = (
    ds["mosaic_11200_nm"]
    .isel(time=0)
    .sel(latitude=slice(40.0, 5.0), longitude=slice(115.0, 165.0))
    - 273.15
)

ir_temp_c.plot(
    cmap="Greys",
    cbar_kwargs={"label": "11.2 µm Brightness Temperature (°C)"},
)
plt.title("SatWeave 11.2 µm Longwave IR Window")
plt.show()
```

<br />

<br />

*** ** * ** ***

## Starter guides

For an interactive Colab notebook with end-to-end sample code and multi-spectral
visualization workflows:

- [SatWeave Starter Guide - Zarr on Google Cloud Storage](https://storage.googleapis.com/weathernext-public/colabs/SatWeave_Starter_Guide_Zarr_on_Google_Cloud_Storage.ipynb)

*** ** * ** ***

## Terms of service and disclaimers

SatWeave is an experimental satellite mosaic dataset under active research. Data
and mosaic outputs are provided "as-is" for informational and research purposes
and don't constitute official weather observations, forecasts, watches, or
warnings. Users are responsible for their use of the data. For the protection of
life and property, never rely on SatWeave as a sole source of information and
always defer to official alerts and advisories from your national meteorological
service and local emergency authorities.

### Data licensing and terms of use

SatWeave is licensed under the
[Creative Commons Attribution International License, Version 4.0 (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/).
For complete terms, liability provisions, and acceptable use restrictions, see
the [Terms of Service and Disclaimers](https://developers.google.com/weathernext/guides/disclaimers.md.txt) page.

### Acknowledgements and third-party attributions

SatWeave incorporates geostationary satellite observations from the following
third-party providers:

- **Meteosat (1st, 2nd, and 3rd Generation):** Includes calibrated satellite observations supplied by EUMETSAT under the [Creative Commons Attribution 4.0 International (CC BY 4.0)](https://data.eumetsat.int/) license. Modification: Google incorporated the data into a global coverage geostationary satellite mosaic (SatWeave).
- **GOES-R Series (16, 17, 18, and 19):** NOAA Geostationary Operational Environmental Satellites (GOES) data is accessed on an ongoing basis from [Google Cloud Public Datasets (NOAA GOES)](https://console.cloud.google.com/marketplace/product/noaa-public/goes).
- **Himawari (8 and 9):** Source: Meteorological Satellite Center of Japan Meteorological Agency (JMA) via [NOAA NODD on Google Cloud](https://console.cloud.google.com/marketplace/product/bigquery-public-data/himawari). Modification: Google incorporated the data into a global coverage geostationary satellite mosaic (SatWeave).

Use of the third-party materials referred to in the acknowledgements may be
governed by separate terms and conditions or license provisions. Your use of
third-party materials is subject to any such terms, and you should verify that
you can comply with any applicable restrictions before use.

*** ** * ** ***

See the [Glossary](https://developers.google.com/weathernext/guides/glossary.md.txt) for definitions of
meteorological terms, data formats, and Google Cloud platforms.