openEO backend — collections & recipes#
The openEO catalog has two layers: curated collections (CDSE collections you
can load directly) and curated recipes (named process graphs). All 19
CDSE openEO collections are curated below, plus the 5 recipes and the full
available_processes index. Install with pip install earthlens[openeo].
Curated collections#
A collection key is loaded with variables={key: [band, ...]}; an empty band
list uses the default bands. Every collection_id is the UPPERCASE openEO
id verified against the live CDSE backend (the curated set equals the full
available_collections index — all 19).
| Key | collection_id |
Default bands | Cadence | Resolution |
|---|---|---|---|---|
sentinel-2-l2a |
SENTINEL2_L2A |
B02, B03, B04, B08 |
5-day | 10 m |
sentinel-2-l1c |
SENTINEL2_L1C |
B02, B03, B04, B08 |
5-day | 10 m |
sentinel-1-grd |
SENTINEL1_GRD |
VV, VH |
6-day | 10 m |
sentinel-1-global-mosaics |
SENTINEL1_GLOBAL_MOSAICS |
VV, VH |
monthly | 20 m |
sentinel-3-olci-l1b |
SENTINEL3_OLCI_L1B |
B08, B06, B04 |
~2-day | 300 m |
sentinel-3-olci-l2-water |
SENTINEL3_OLCI_L2_WATER |
CHL_NN, TSM_NN |
~2-day | 300 m |
sentinel-3-olci-l2-land |
SENTINEL3_OLCI_L2_LAND |
OTCI, GIFAPAR |
~2-day | 300 m |
sentinel-3-slstr |
SENTINEL3_SLSTR |
S7, S8, S9 |
~1-day | 1 km |
sentinel-3-slstr-l2-lst |
SENTINEL3_SLSTR_L2_LST |
LST |
daily | 1 km |
sentinel-3-syn-l2-aod |
SENTINEL3_SYN_L2_AOD |
AOD_550 |
daily | — |
sentinel-3-syn-l2-syn |
SENTINEL3_SYN_L2_SYN |
Syn_Oa08/06/03_reflectance |
daily | 300 m |
sentinel-5p-l2 |
SENTINEL_5P_L2 |
NO2 |
daily | 5.5 km |
landsat-bimonthly-mosaic |
LANDSAT_BIMONTHLY_MOSAIC |
B04, B03, B02 |
bimonthly | 30 m |
esa-worldcover-2020 |
ESA_WORLDCOVER_10M_2020_V1 |
MAP |
annual | 10 m |
esa-worldcover-2021 |
ESA_WORLDCOVER_10M_2021_V2 |
MAP |
annual | 10 m |
copernicus-plant-phenology-index |
COPERNICUS_PLANT_PHENOLOGY_INDEX |
PPI |
10-daily | 10 m |
copernicus-vegetation-phenology-productivity-season1 |
COPERNICUS_VEGETATION_PHENOLOGY_PRODUCTIVITY_10M_SEASON1 |
SOSD, EOSD, LENGTH |
yearly | 10 m |
copernicus-vegetation-phenology-productivity-season2 |
COPERNICUS_VEGETATION_PHENOLOGY_PRODUCTIVITY_10M_SEASON2 |
SOSD, EOSD, LENGTH |
yearly | 10 m |
copernicus-dem-30 |
COPERNICUS_30 |
DEM |
static | 30 m |
Each collection's full band set is curated as a {band_name: Band} mapping
carrying per-band metadata (common_name, description, units, dtype,
gsd, center_wavelength, min/max where the backend advertises them) in
src/earthlens/openeo/catalog/collections.yaml, queryable via
Catalog().get_collection(key).bands. A few highlights:
sentinel-2-l2a—B01…B12, B8A, WVP, AOT, SCL, CLD, SNW, sun/view angles (theSCLscene-classification band drivesmask_scl_dilation).sentinel-5p-l2—CO, HCHO, NO2, O3, SO2, CH4, aerosol indices, cloud bands,dataMask.sentinel-3-olci-l2-water—CHL_OC4ME, CHL_NN, TSM_NN, KD490_M07, PAR, plus the 16 OLCI reflectance bands.sentinel-3-syn-l2-aod— multi-wavelengthAOD_440…AOD_2250, single- scattering albedo, Angstrom exponent.
Curated recipes#
A recipe key runs a fixed process graph server-side. Each step name is a process verified present on the CDSE backend.
| Recipe | Base collection | Bands | Graph steps | Output |
|---|---|---|---|---|
sentinel-2-l2a-ndvi-monthly |
SENTINEL2_L2A |
B04, B08, SCL |
mask_scl_dilation → ndvi(nir=B08, red=B04) → aggregate_temporal_period(month, mean) |
NetCDF |
sentinel-2-l2a-cloud-masked-composite |
SENTINEL2_L2A |
B02, B03, B04, B08, SCL |
mask_scl_dilation → reduce_dimension(t, median) |
GeoTIFF |
sentinel-3-olci-chlorophyll-monthly |
SENTINEL3_OLCI_L2_WATER |
CHL_NN |
aggregate_temporal_period(month, mean) |
NetCDF |
sentinel-5p-no2-monthly |
SENTINEL_5P_L2 |
NO2 |
aggregate_temporal_period(month, mean) |
NetCDF |
sentinel-1-grd-sigma0 |
SENTINEL1_GRD |
VV, VH |
sar_backscatter(coefficient=sigma0-ellipsoid) |
GeoTIFF |
A step whose process is a DataCube method (ndvi, aggregate_temporal_period,
reduce_dimension) is dispatched to it; a backend-only process
(mask_scl_dilation, sar_backscatter) is applied through DataCube.process
with the cube bound as data.
Available index#
_index.yaml carries the informational available_collections (all 19 ids,
matching the curated set) and available_processes (143 process ids) — both
regenerated by tools/openeo/refresh_openeo_catalog.py refresh. The audit tool
(audit_openeo_datasets.py) confirms the curated catalog matches the live
backend with no drift.
Programmatic access#
from earthlens.openeo import Catalog
cat = Catalog()
sorted(cat.datasets) # all 19 curated collection keys
sorted(cat.recipes) # curated recipe keys
cat.is_recipe("sentinel-2-l2a-ndvi-monthly") # True
cat.get_collection("sentinel-2-l2a").bands # {band_name: Band(...)} mapping
cat.get_collection("sentinel-2-l2a").bands["B04"].common_name # 'red'
cat.resolve("sentinel-2-l2a-ndvi-monthly").graph # the ordered steps
cat.available_collections # the full 19-id index
cat.available_processes # the 143-process index