← Back to all posts

An open dataset of dynamic AlphaEarth embeddings for the 671 CAMELS-US basins

June 2026 · with Hoshin V. Gupta · 6-min read

Foundation models for the Earth have started landing as open assets. AlphaEarth Foundations, from Google DeepMind, ships a 64-dimensional per-pixel embedding of the planet at roughly 10-metre resolution, refreshed annually since 2017. It's the kind of asset that quietly rewrites what counts as a "basin attribute" in hydrology.

A recent arXiv preprint showed something striking: take the mean AlphaEarth vector inside each CAMELS-US basin polygon (one 64-vector per basin), feed it to a standard CAMELS-LSTM as a static catchment attribute, and you outperform Addor et al.'s 2017 hand-crafted attributes — NSE 0.61 vs 0.55 — using literally no other change. The paper reported numbers but didn't publish the embeddings, and they used the time-averaged static mean. That's a tiny seam to slip through, and it's what this post is about.

What we made

We extracted the per-basin AlphaEarth mean for every CAMELS-US basin (671 catchments) and every year 2017–2025, and packaged the result as an open dataset on Zenodo with a permanent DOI and a small Python tool. The tensor shape is (671, 9, 64) — 671 basins × 9 years × 64 dimensions. So instead of one static vector per basin, you get a yearly stack you can use as a dynamic LSTM input. Land-use change, vegetation phenology, slow climate signals — they're all in there, and the time-average smears them away.

Using it

The companion Python package, alphacamels, gives you three functions:

from alphacamels import get_basin_mean, get_basin_static_mean, get_basin_embedding_grid

# (9, 64) xarray DataArray, loaded from disk -- no network call.
yearly = get_basin_mean("06614800")

# (64,) -- the Qu-et-al.-style static input.
static = get_basin_static_mean("06614800")

# (year, band, y, x) -- the full polygon-clipped pixel grid,
# pulled on demand from the public GeoZarr mosaic.
spatial = get_basin_embedding_grid("06614800", years=[2020])

The get_basin_embedding_grid piece is the part I want to highlight. The full per-basin pixel grid for all 671 CAMELS basins would be far too large to publish. So we publish the basin means and ship a tool that pulls the spatial grid for the basins you actually need. A small thing, but it changes who can use this.

How we know it's right

The reconstruction from the public mosaic is non-trivial: it's int8-quantized with a square-law dequantization, the chunks are sharded zarr v3, the mosaic is in EPSG:4326 (so cos-latitude weighting matters for the spatial mean), and the polygon mask has to be center-based to match Earth Engine's reduceRegion semantics. We validated end-to-end against Earth Engine on the median CAMELS basin: cosine similarity 0.99999996, max per-band absolute difference 2.3 × 10⁻⁵ on values of magnitude ~0.1. We also confirmed bit-identical outputs across two different machines. Everything checked.

Where to grab it

If you build something with this, send me a note via the contact link in the header. I'd love to see where it ends up.