Skip to content

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-l2aB01…B12, B8A, WVP, AOT, SCL, CLD, SNW, sun/view angles (the SCL scene-classification band drives mask_scl_dilation).
  • sentinel-5p-l2CO, HCHO, NO2, O3, SO2, CH4, aerosol indices, cloud bands, dataMask.
  • sentinel-3-olci-l2-waterCHL_OC4ME, CHL_NN, TSM_NN, KD490_M07, PAR, plus the 16 OLCI reflectance bands.
  • sentinel-3-syn-l2-aod — multi-wavelength AOD_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_dilationndvi(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_dilationreduce_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