Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@ The format is based on Keep a Changelog, and the project follows Semantic Versio
## [0.1.1] - 2026-04-01

### Added

- Automated pull request changelog enforcement with a `skip-changelog` escape hatch for docs, tests, CI, and other internal-only changes.
- Tag-driven GitHub Release publishing that uses the matching `CHANGELOG.md` section as the release notes.
- Trusted Publishing release automation for PyPI and TestPyPI, including a manual TestPyPI dry run and install smoke test.

### Changed

- The contribution and release workflow now treats `CHANGELOG.md` as the canonical source for user-visible release notes.
- The tag-triggered release flow now validates `src/rs_embed/_version.py`, publishes to PyPI, and only then creates the GitHub Release.
- The tag-triggered release flow now validates the matching `CHANGELOG.md` entry before publishing to PyPI, so a missing release-notes section fails early instead of after package upload.
Expand All @@ -27,11 +29,13 @@ The format is based on Keep a Changelog, and the project follows Semantic Versio
### Removed

### Fixed

- The TestPyPI smoke test now verifies package importability and the `rs-embed` CLI entry point, not just installability and version metadata.

## [0.1.0] - 2026-03-31

### Added

- Initial public alpha release of `rs-embed`.
- Unified ROI to embedding API centered on `get_embedding(...)`, `get_embeddings_batch(...)`, `export_batch(...)`, and `inspect_provider_patch(...)`.
- Support for precomputed embedding products including `tessera`, `gse`, and `copernicus`.
Expand Down
81 changes: 34 additions & 47 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<div align="center">

# <img src="https://raw.githubusercontent.com/cybergis/rs-embed/main/docs/assets/icon.png" width="35" alt="icon" /> rs-embed
**One line code to get Any Remote Sensing Foundation Model (RSFM) embeddings for Any Place and Any Time**
# <img src="https://raw.githubusercontent.com/cybergis/rs-embed/main/docs/assets/icon.png" width="35" alt="icon" /> rs-embed

**One line code to get Any Remote Sensing Foundation Model (RSFM) embeddings for Any Place and Any Time**

[![arXiv](https://img.shields.io/badge/arXiv-2602.23678-b31b1b.svg)](https://arxiv.org/abs/2602.23678)
[![Docs](https://img.shields.io/badge/docs-online-brightgreen)](https://cybergis.github.io/rs-embed/)
Expand All @@ -13,26 +13,20 @@
![Last Commit](https://img.shields.io/github/last-commit/cybergis/rs-embed)
![License](https://img.shields.io/github/license/cybergis/rs-embed)



[Docs](https://cybergis.github.io/rs-embed/) · [Releases](https://github.com/cybergis/rs-embed/releases) · [Changelog](https://github.com/cybergis/rs-embed/blob/main/CHANGELOG.md) · [StartNow](https://github.com/cybergis/rs-embed/blob/main/examples/playground.ipynb) · [UseCase](https://github.com/cybergis/rs-embed/blob/main/examples/demo.ipynb) · [Paper](https://arxiv.org/abs/2602.23678)

</div>

> Get Start on [I-GUIDE](https://platform.i-guide.io/notebooks/a013ce97-d963-4262-9f21-edd09976181a) Today!

<img src="https://raw.githubusercontent.com/cybergis/rs-embed/main/docs/assets/background.png" />



<img src="https://raw.githubusercontent.com/cybergis/rs-embed/main/docs/assets/background.png" />

## TL;DR

```python
emb = get_embedding("prithvi", spatial=..., temporal=..., output=...)
```


## Install

```bash
Expand All @@ -51,15 +45,14 @@ cd rs-embed
pip install -e . # use -e ".[terratorch]" if you need terramind
```


If this is your first time using Google Earth Engine, authenticate once:

```bash
earthengine authenticate
```


## Quick Example

```python
from rs_embed import PointBuffer, TemporalSpec, OutputSpec, get_embedding

Expand All @@ -83,7 +76,7 @@ See the visualization helper and end-to-end notebook in the repository:
- [`examples/plot_utils.py`](https://github.com/cybergis/rs-embed/blob/main/examples/plot_utils.py)
- [`examples/playground.ipynb`](https://github.com/cybergis/rs-embed/blob/main/examples/playground.ipynb)

<img src="https://raw.githubusercontent.com/cybergis/rs-embed/main/docs/assets/vis.png" width=650 />
<img src="https://raw.githubusercontent.com/cybergis/rs-embed/main/docs/assets/vis.png" width=650 />

## Main API

Expand All @@ -94,45 +87,41 @@ For new users, start with these primary APIs:
- `export_batch(...)`: export datasets / experiments (single or multiple ROIs)
- `inspect_provider_patch(...)`: inspect raw provider patches before inference


## Supported Models

This is a convenience index with basic model info only (for quick scanning / links). For detailed I/O behavior and preprocessing notes, see [Supported Models](https://cybergis.github.io/rs-embed/models/).

### Precomputed Embeddings

| Model ID | Resolution | Time Coverage | Publication |
|---|---|---|---|
|`tessera` | 10m | 2017-2025 |[CVPR 2026](https://arxiv.org/abs/2506.20380v4)|
|`gse` (Alpha Earth) | 10 m | 2017-2024 |[arXiv 2025](https://arxiv.org/abs/2507.22291)|
| `copernicus` | 0.25° | 2021 |[ICCV 2025](https://arxiv.org/abs/2503.11849)|
| Model ID | Resolution | Time Coverage | Publication |
| ------------------- | ---------- | ------------- | ----------------------------------------------- |
| `tessera` | 10m | 2017-2025 | [CVPR 2026](https://arxiv.org/abs/2506.20380v4) |
| `gse` (Alpha Earth) | 10 m | 2017-2024 | [arXiv 2025](https://arxiv.org/abs/2507.22291) |
| `copernicus` | 0.25° | 2021 | [ICCV 2025](https://arxiv.org/abs/2503.11849) |

### On-the-fly Foundation Models

| Model ID | Primary Input | Resolution(Default) | Publication | Link |
|---|---|---|---|---|
| `satmae` | S2 RGB | 10m | [NeurIPS 2022](https://arxiv.org/abs/2207.08051) |[link](https://github.com/sustainlab-group/SatMAE)|
| `satmaepp` | S2 RGB | 10m | [CVPR 2024](https://arxiv.org/abs/2403.05419) | [link](https://github.com/techmn/satmae_pp) |
| `satmaepp_s2_10b` | S2 SR 10-band | 10m | [CVPR 2024](https://arxiv.org/abs/2403.05419) | [link](https://github.com/techmn/satmae_pp) |
| `prithvi` | S2 6-band | 30m | [arXiv 2023](https://arxiv.org/abs/2310.18660) | [link](https://huggingface.co/ibm-nasa-geospatial) |
| `scalemae` | S2 RGB (+ scale) | 10m | [ICCV 2023](https://arxiv.org/abs/2212.14532) | [link](https://github.com/bair-climate-initiative/scale-mae) |
| `remoteclip` | S2 RGB | 10m | [TGRS 2024](https://arxiv.org/abs/2306.11029) |[link](https://github.com/ChenDelong1999/RemoteCLIP) |
| `dofa` | Multi-band + wavelengths | 10m | [arXiv 2024](https://arxiv.org/abs/2403.15356) | [link](https://github.com/zhu-xlab/DOFA) |
| `satvision` | TOA 14-channel | 1000m | [arXiv 2024](https://arxiv.org/abs/2411.17000) | [link](https://github.com/nasa-nccs-hpda/pytorch-caney)|
| `anysat` | S2 time series (10-band) | 10m | [CVPR 2025](https://arxiv.org/abs/2412.14123) | [link](https://github.com/gastruc/AnySat) |
| `galileo` | S2 time series (10-band) | 10m | [ICML 2025](https://arxiv.org/abs/2502.09356) | [link](https://github.com/nasaharvest/galileo) |
| `wildsat` | S2 RGB | 10m | [ICCV 2025](https://arxiv.org/abs/2412.14428) | [link](https://github.com/mdchuc/HRSFM) |
| `fomo` | S2 12-band | 10m | [AAAI 2025](https://arxiv.org/abs/2312.10114) |[link](https://github.com/RolnickLab/FoMo-Bench)|
| `terramind` | S2 12-band | 10m | [ICCV 2025](https://arxiv.org/abs/2504.11171) | [link](https://github.com/IBM/terramind) |
| `terrafm` | S2 12-band / S1 VV-VH | 10m | [ICLR 2026](https://arxiv.org/abs/2506.06281) | [link](https://github.com/mbzuai-oryx/TerraFM) |
| `thor` | S2 10-band | 10m | [arXiv 2026](https://arxiv.org/abs/2601.16011) | [link](https://github.com/FM4CS/THOR) |
| `agrifm` | S2 time series (10-band) | 10m | [RSE 2026](https://www.sciencedirect.com/science/article/pii/S0034425726000040) | [link](https://github.com/flyakon/AgriFM) |
| Model ID | Primary Input | Resolution(Default) | Publication | Link |
| ----------------- | ------------------------ | ------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| `satmae` | S2 RGB | 10m | [NeurIPS 2022](https://arxiv.org/abs/2207.08051) | [link](https://github.com/sustainlab-group/SatMAE) |
| `satmaepp` | S2 RGB | 10m | [CVPR 2024](https://arxiv.org/abs/2403.05419) | [link](https://github.com/techmn/satmae_pp) |
| `satmaepp_s2_10b` | S2 SR 10-band | 10m | [CVPR 2024](https://arxiv.org/abs/2403.05419) | [link](https://github.com/techmn/satmae_pp) |
| `prithvi` | S2 6-band | 30m | [arXiv 2023](https://arxiv.org/abs/2310.18660) | [link](https://huggingface.co/ibm-nasa-geospatial) |
| `scalemae` | S2 RGB (+ scale) | 10m | [ICCV 2023](https://arxiv.org/abs/2212.14532) | [link](https://github.com/bair-climate-initiative/scale-mae) |
| `remoteclip` | S2 RGB | 10m | [TGRS 2024](https://arxiv.org/abs/2306.11029) | [link](https://github.com/ChenDelong1999/RemoteCLIP) |
| `dofa` | Multi-band + wavelengths | 10m | [arXiv 2024](https://arxiv.org/abs/2403.15356) | [link](https://github.com/zhu-xlab/DOFA) |
| `satvision` | TOA 14-channel | 1000m | [arXiv 2024](https://arxiv.org/abs/2411.17000) | [link](https://github.com/nasa-nccs-hpda/pytorch-caney) |
| `anysat` | S2 time series (10-band) | 10m | [CVPR 2025](https://arxiv.org/abs/2412.14123) | [link](https://github.com/gastruc/AnySat) |
| `galileo` | S2 time series (10-band) | 10m | [ICML 2025](https://arxiv.org/abs/2502.09356) | [link](https://github.com/nasaharvest/galileo) |
| `wildsat` | S2 RGB | 10m | [ICCV 2025](https://arxiv.org/abs/2412.14428) | [link](https://github.com/mdchuc/HRSFM) |
| `fomo` | S2 12-band | 10m | [AAAI 2025](https://arxiv.org/abs/2312.10114) | [link](https://github.com/RolnickLab/FoMo-Bench) |
| `terramind` | S2 12-band | 10m | [ICCV 2025](https://arxiv.org/abs/2504.11171) | [link](https://github.com/IBM/terramind) |
| `terrafm` | S2 12-band / S1 VV-VH | 10m | [ICLR 2026](https://arxiv.org/abs/2506.06281) | [link](https://github.com/mbzuai-oryx/TerraFM) |
| `thor` | S2 10-band | 10m | [arXiv 2026](https://arxiv.org/abs/2601.16011) | [link](https://github.com/FM4CS/THOR) |
| `agrifm` | S2 time series (10-band) | 10m | [RSE 2026](https://www.sciencedirect.com/science/article/pii/S0034425726000040) | [link](https://github.com/flyakon/AgriFM) |

Resolution here means the default provider/source fetch resolution used by the adapter, not the final resized tensor shape seen by the model.




## Learn More

📚 [Full documentation](https://cybergis.github.io/rs-embed/)
Expand All @@ -145,37 +134,35 @@ Resolution here means the default provider/source fetch resolution used by the a

🪀 [Use case: Maize yield mapping Illinois](https://github.com/cybergis/rs-embed/blob/main/examples/demo.ipynb)


## Extending & Contributing

We welcome issues for new model integrations, extension ideas, bugs, and documentation gaps. If you have your own work, or a model or paper that you think would be valuable to include in `rs-embed`, please open an [Issue](https://github.com/cybergis/rs-embed/issues) and share the relevant links, context, and examples.

We also warmly welcome community contributions, including new model support, bug fixes, documentation improvements, and example notebooks. If you would like to contribute directly, please start with the [`extending`](https://cybergis.github.io/rs-embed/extending/) guide and the [contributing guide](https://cybergis.github.io/rs-embed/contributing/).


We also warmly welcome community contributions, including new model support, bug fixes, documentation improvements, and example notebooks. If you would like to contribute directly, please start with the [`extending`](https://cybergis.github.io/rs-embed/extending/) guide and the [contributing guide](https://cybergis.github.io/rs-embed/contributing/).

## 🎖 Acknowledgements

We would like to thank the following organizations and projects that make rs-embed possible: [Google Earth Engine](https://earthengine.google.com), [TorchGeo](https://github.com/torchgeo/torchgeo), [GeoTessera](https://github.com/ucam-eo/geotessera), [TerraTorch](https://github.com/terrastackai/terratorch), [rshf](https://github.com/mvrl/rshf), and the [Copernicus-Embed](https://huggingface.co/datasets/torchgeo/copernicus_embed).

This library also builds upon the incredible work of the Remote Sensing community!(Full list and citations available in our Documentation)

## Citation

```
@article{ye2026modelplacetimeremote,
title={Any Model, Any Place, Any Time: Get Remote Sensing Foundation Model Embeddings On Demand},
title={Any Model, Any Place, Any Time: Get Remote Sensing Foundation Model Embeddings On Demand},
author={Dingqi Ye and Daniel Kiv and Wei Hu and Jimeng Shi and Shaowen Wang},
year={2026},
eprint={2602.23678},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2602.23678},
url={https://arxiv.org/abs/2602.23678},
}
```


## License
This project is released under the [Apache-2.0](https://github.com/cybergis/rs-embed/blob/main/LICENSE)

This project is released under the [Apache-2.0](https://github.com/cybergis/rs-embed/blob/main/LICENSE)

## Contributors

Expand Down
13 changes: 7 additions & 6 deletions docs/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,15 @@ Most users only need four public entry points: `get_embedding(...)`, `get_embedd

## Choose by Task

| I want to... | Read this page |
|---|---|
| understand spatial/temporal/output specs | [API: Specs and Data Structures](api_specs.md) |
| get one embedding or batch embeddings | [API: Embedding](api_embedding.md) |
| build export pipelines and datasets | [API: Export](api_export.md) |
| inspect raw provider patches before inference | [API: Inspect](api_inspect.md) |
| I want to... | Read this page |
| --------------------------------------------- | ---------------------------------------------- |
| understand spatial/temporal/output specs | [API: Specs and Data Structures](api_specs.md) |
| get one embedding or batch embeddings | [API: Embedding](api_embedding.md) |
| build export pipelines and datasets | [API: Export](api_export.md) |
| inspect raw provider patches before inference | [API: Inspect](api_inspect.md) |

---

## Useful Extras

`export_npz(...)` is a compatibility wrapper around `export_batch(...)` for single-ROI `.npz`, `inspect_gee_patch(...)` is the older GEE-focused name for `inspect_provider_patch(...)`, and `list_models()` is the stable public helper for inspecting the model catalog.
Expand Down
Loading
Loading