eopf-geozarr is the GeoZarr driver for ESA's EOPF CPM, the Core Python
Modules of the Copernicus
Earth Observation Processing Framework
(Python package eopf). It converts
Sentinel-1, Sentinel-2 and Sentinel-3 products into cloud-optimized
GeoZarr: Zarr v3 stores with multiscale pyramids, native projections and
the OGC GeoZarr conventions (multiscales, geo-proj, spatial). Use it as a
CPM driver (eopf convert-geozarr) or on its own (eopf-geozarr convert).
📖 Documentation: https://eopf-explorer.github.io/data-model/
| CPM driver | Standalone converter | |
|---|---|---|
| Input | Native products (for example .SAFE) or any product CPM can read |
EOPF Zarr products (for example from the EOPF Sentinel Zarr Samples Service) |
| Install | pip install "eopf-geozarr[cpm]" (Python ≥ 3.13) |
pip install eopf-geozarr (Python ≥ 3.12) |
| Command | eopf convert-geozarr S2B_MSIL2A_….SAFE out.zarr |
eopf-geozarr convert S2B_MSIL2A_….zarr out.zarr |
| Python | write_datatree(dtree, "out.zarr", engine="geozarr") |
convert_s2_optimized(dt, output_path="out.zarr", …) |
Both paths run the same conversion pipelines and write the same GeoZarr output. The standalone converter reads the EOPF Zarr products published by the EOPF Sentinel Zarr Samples Service, hosted by EODC, directly from their URLs.
Installing the cpm extra registers the geozarr engine in CPM's writer
registry and adds the eopf convert-geozarr command to the eopf CLI:
pip install "eopf-geozarr[cpm]"
eopf convert-geozarr S2B_MSIL2A_20250113T103309_N0511_R108_T32TLQ.SAFE out.zarr
# S3 targets: write locally, then upload
eopf convert-geozarr S2B_MSIL2A_….SAFE s3://bucket/out.zarr --stage-outputimport eopf_geozarr.cpm.writer # registers the "geozarr" engine
from eopf.store.convert import convert
convert("S2B_MSIL2A_….SAFE", "out.zarr", target_store_kwargs={"engine": "geozarr"})See the CPM driver guide for all options, the product routing and the Python API.
pip install eopf-geozarr
eopf-geozarr convert S2B_MSIL2A_….zarr out.zarr # auto-detects S2 and S3 OLCI
eopf-geozarr convert S2B_MSIL2A_….zarr s3://bucket/out.zarr
eopf-geozarr validate out.zarr # check GeoZarr complianceSee the standalone converter guide for every command, including Sentinel-1 GRD RTC ingestion.
| Mission | Product | CPM product:type |
Pipeline |
|---|---|---|---|
| Sentinel-2 MSI | L1C, L2A | S02MSIL1C, S02MSIL2A |
S2 optimized: native r10m/r20m/r60m levels plus r120m/r360m/r720m overviews |
| Sentinel-3 OLCI | L1 EFR, L1 ERR | S03OLCEFR, S03OLCERR |
OLCI optimized: native swath geometry, or a regular grid with --output-grid |
| Sentinel-1 | GRD | — | Generic pipeline with ground control points (--groups, --gcp-group) |
| Sentinel-1 | GRD RTC (S1Tiling / Orfeo ToolBox COGs) | — | eopf-geozarr ingest-s1 and related commands (standalone only) |
| Sentinel-1 and other products CPM reads | for example SLC | for example S01SIWSLC |
Generic rechunker (CPM driver only, --generic-rechunker): rechunked, optionally sharded, no multiscales |
- GeoZarr conventions on every georeferenced node:
zarr_conventions,geo-proj(proj:code),spatial(spatial:transform,spatial:bbox) andmultiscales, as described in the GeoZarr mini spec. - Native projections: no reprojection to Web Mercator.
- Multiscale pyramids for fast visualization at every zoom level.
- Source packing kept: reflectance stays as packed integers with CF
scale_factor/add_offset/_FillValue, as in the ESA products.--scale-offset-codecstores the packing with the Zarrscale_offset+cast_valuecodecs instead, so Zarr readers get decoded values. - Validation:
eopf-geozarr validatechecks a store against the mini spec.
GeoZarr is a set of modular Zarr conventions from the OGC GeoZarr Standards Working Group. GeoZarr V1 is not released yet (see the roadmap), so this driver follows the current conventions.
git clone https://github.com/EOPF-Explorer/data-model.git
cd data-model
uv sync # add --extra cpm on Python 3.13+ for the CPM driver
uv run pre-commit install
uv run pytest -m "not network"
uv run mkdocs serve # documentationContributions are welcome: open an
issue or a pull request
against main.
Apache License 2.0, see LICENSE.
eopf-geozarr is developed for the ESA EOPF Sentinel Explorer by Development Seed and EODC (Earth Observation Data Centre), which also hosts the EOPF Sentinel Zarr Samples Service. It is built on xarray, zarr-python and EOPF CPM.