Skip to content

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 20:56
· 41 commits to main since this release

Bring-your-own-data: embed imagery you already have (arrays or GeoTIFFs) without any provider fetch, plus cache-first Hugging Face loading and restored tessera downloads. tessera grid outputs now come back on the common EPSG:3857 grid instead of native UTM, so their shape, transform and meta keys differ from 0.2.x; re-export tessera grids you want to compare against provider-backed models.

Fixed

  • tessera downloads work again. pyproject.toml now requires geotessera>=0.10; the old tile host (dl2.geotessera.org) was retired upstream and the data moved to Source Cooperative in that release.
  • Tessera embeddings now land on the common EPSG:3857 grid. Previously tessera returned native UTM tiles, making pixel-for-pixel comparison with provider-fetched patches impossible and cross-UTM-zone ROIs an error. Tiles are now resampled (nearest-neighbour) onto the shared 10 m Web Mercator lattice; cross-zone ROIs produce a UserWarning instead of crashing. Grid/projection logic consolidated in the new tools/projection.py.
  • Warm-cache model loading no longer contacts the Hugging Face Hub. All hf_hub_download / snapshot_download calls (plus the rshf loaders for satmae/scalemae/satmaepp) now resolve from the local HF cache first; a network request only fires on a cache miss. Shared helpers live in embedders/shared.py.
  • resolve_pretrained_source_cache_first no longer crashes on bin-only repos. The local-dir shortcut now requires model.safetensors; repos that publish only pytorch_model.bin (e.g. MVRL/satmaepp) fall back to the repo-id path whose cached-bin fallback still works.
  • Clay batch path no longer forces Earth Engine auth on machines without GEE. ClayEmbedder.get_embeddings_batch_from_inputs no longer initializes a provider when running from prefetched inputs, matching the lazy-provider convention already followed by the single-embedding path.

Added

  • UserData(crs=..., transform=...) and UserData.from_raster(path, ...) — a declaration can now carry a CRS and pixel-to-CRS affine; the footprint is derived from them (so spatial may be omitted), and the array is resampled to the common EPSG:3857 grid at the model's scale_m before embedding. from_raster reads pixels, CRS, and transform directly from a GeoTIFF via rasterio. Geo-conditioned models (clay, prithvi) accept georeferenced declarations without manual spatial= input. crs and transform must be supplied together.
  • Bring-your-own-data API — get_embedding_from_data / get_embeddings_batch_from_data embed imagery you provide directly, with no provider fetch or auth required. Band matching, tiling/stitching, and temporal grouping follow the same input_prep policy as the fetch path. Flexible-size models (olmoearth) adapt to the input's native size automatically. list_models_for_data reports which catalog models a given declaration can serve without loading weights. See docs/user_data.md.
  • docs/benchmarks.md — end-to-end latency and throughput for every registered backend (H100 + GEE, 20-point Midwest workload), with per-request fetch-vs-compute decomposition.