npx skills add ...
npx skills add nvidia/earth2studio --skill earth2studio-data-fetch
Fetch weather/climate data via Earth2Studio data sources for specific variables and times. Do NOT use for inference pipelines, model discovery, or installation.
npx skills add nvidia/earth2studio --skill earth2studio-data-fetch
Guide a user through downloading weather/climate data via Earth2Studio data source APIs. Identifies compatible sources by checking the lexicon, verifies variable support, and produces a working fetch script outputting an xarray DataArray.
uv pip install earth2studio or equivalent)~/.cdsapirc)You are helping a user download specific weather/climate data using Earth2Studio's data source APIs. Your job is to identify which data source(s) can provide the requested variables, verify compatibility via the lexicon system, and produce a working fetch script.
Data source APIs, available variables, and the lexicon evolve between releases. Before recommending a data source or writing a fetch script:
Live doc references (fetch only what the user's request requires):
Extract from what the user has said (ask follow-ups if needed, cap at 3 questions):
t2m, u500, z850, tp, msl). If the user uses plain language
("500 hPa geopotential height"), map it to the E2Studio name by checking
the live base.py E2STUDIO_VOCAB.Based on the request type, narrow candidates:
Analysis/reanalysis (historical state at a specific time):
Forecast (predictions from an initialization time with lead times):
Key differentiators to surface:
This is critical. Each data source has a lexicon file that defines which E2Studio variables it can provide.
To verify:
https://github.com/NVIDIA/earth2studio/blob/main/earth2studio/lexicon/<source>.py
(e.g. gfs.py, hrrr.py, cds.py, arco.py, wb2.py)VOCAB dictThe lexicon VOCAB maps Earth2Studio variable names → source-specific identifiers. If a variable key exists in the VOCAB, the source supports it.
Present the results clearly: "GFS supports t2m, u500, z850. HRRR also
supports these but is limited to North America. ARCO_ERA5 supports all
three and has data back to 1959."
Present the viable options with tradeoffs:
| Source | Variables | Coverage | Resolution | Time Range |
|---|---|---|---|---|
| ... | ... | ... | ... | ... |
Let the user pick. If there's one obvious choice, recommend it and ask for confirmation.
Write a Python script that uses the selected data source to fetch the requested data. The script structure depends on whether it's an analysis or forecast source.
Analysis source pattern:
Forecast source pattern:
Always fetch the specific data source's API doc page to confirm the exact constructor arguments and call signature before writing the script — they can vary (some need auth tokens, cache paths, specific parameters).
Include in the script:
print(data), data.shape, data.coords)After delivering the script, mention:
EARTH2STUDIO_CACHE)Owns: identifying data sources for a user's variable/time request, verifying variable support via lexicon, generating data fetch scripts, explaining analysis vs. forecast source differences.
Does not own: installation (earth2studio-install), model selection (earth2studio-discover), inference pipelines, custom data source creation (point to extend examples), data source authentication setup beyond what the docs describe.
Typical invocation:
"I need 500 hPa geopotential height and 2m temperature from ERA5 for January 1, 2020 at 00Z."
The skill would:
z500, t2mDataArrayFile/DataSetFile directly| Error | Cause | Solution |
|---|---|---|
KeyError: '<var>' | Not in lexicon | Check lexicon; try another source |
FileNotFoundError / 404 | Time not available | Verify temporal coverage |
CDS API timeout | Queue congestion | Retry or use ARCO_ERA5 |
ModuleNotFoundError | Not installed | uv pip install earth2studio |
| Empty DataArray | Time/var mismatch | Check datetime and variable name |
import datetime
from earth2studio.data import <SourceClass>
# Initialize data source
ds = <SourceClass>()
# Forecast sources use: ds(time, lead_time, variable) -> xr.DataArray
time = [datetime.datetime(YYYY, M, D, H)] # initialization time
lead_time = [datetime.timedelta(hours=H)] # or array of lead times
variable = ["var1", "var2"]
data = ds(time, lead_time, variable)