Metadata-Version: 2.4
Name: geosave-engine
Version: 0.1.1
Summary: Library for geospatial machine learning, focusing providing pretrained model, and uploading map collection to geosave-app
Project-URL: Documentation, https://github.com/weedkat/geosave-engine#readme
Project-URL: Issues, https://github.com/weedkat/geosave-engine/issues
Project-URL: Source, https://github.com/weedkat/geosave-engine
Author-email: Fatah Muria <fatahmurbaut@gmail.com>
License-Expression: MIT
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering :: Image Recognition
Requires-Python: >=3.12
Requires-Dist: albumentations>=2.0.8
Requires-Dist: boto3>=1.42.91
Requires-Dist: cogeo-mosaic>=9.2.0
Requires-Dist: cql2>=0.5.6
Requires-Dist: folium>=0.20.0
Requires-Dist: gdown>=5.2.2
Requires-Dist: geopandas>=0.14.0
Requires-Dist: geopy>=2.4.0
Requires-Dist: huggingface-hub>=1.0.0
Requires-Dist: huggingface>=0.0.1
Requires-Dist: kornia>=0.8.2
Requires-Dist: lightning>=2.3.3
Requires-Dist: mapclassify>=2.8.1
Requires-Dist: matplotlib>=3.7.5
Requires-Dist: mlflow>=2.17.2
Requires-Dist: networkx>=3.6.1
Requires-Dist: numpy>=1.24.4
Requires-Dist: odc-geo>=0.5.1
Requires-Dist: odc-stac>=0.5.2
Requires-Dist: openpyxl>=3.1.5
Requires-Dist: pandas>=2.0.3
Requires-Dist: planetary-computer>=1.0.0
Requires-Dist: pyarrow>=17.0.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: pyproj>=3.6.0
Requires-Dist: pystac-client>=0.7.6
Requires-Dist: pystac>=1.8.4
Requires-Dist: python-box>=7.0.0
Requires-Dist: python-dotenv>=1.0.1
Requires-Dist: pyyaml>=6.0.3
Requires-Dist: questionary>=2.1.0
Requires-Dist: rasterio>=1.3.11
Requires-Dist: rich>=13.7.1
Requires-Dist: rioxarray>=0.15.0
Requires-Dist: s2cloudless>=1.7.3
Requires-Dist: scikit-learn>=1.3.2
Requires-Dist: scipy>=1.11.0
Requires-Dist: segmentation-models-pytorch>=0.3.3
Requires-Dist: stackstac>=0.5.0
Requires-Dist: tenacity>=9.1.4
Requires-Dist: tensorboard>=2.14.0
Requires-Dist: terratorch>=1.2.7
Requires-Dist: tifffile>=2023.1.1
Requires-Dist: toml>=0.10.2
Requires-Dist: torchgeo>=0.2.1
Requires-Dist: torchsummary>=1.5.1
Requires-Dist: tqdm>=4.67.3
Requires-Dist: transformers>=5.9.0
Requires-Dist: typer>=0.20.1
Requires-Dist: typing-extensions>=4.0.0
Requires-Dist: wget>=3.2
Requires-Dist: xarray>=2023.1.0
Requires-Dist: xformers>=0.0.35
Requires-Dist: zarr>=3.0.0
Description-Content-Type: text/markdown

# geosave-engine

GeoSave Engine is a local-first product for building geospatial AI workflows end to end. It standardizes the full path from data acquisition, environment setup, model training, and prediction to serving-ready outputs, so teams do not need to reinvent a different workflow for every project.

It generates a ready-to-use boilerplate and applies proven best practices out of the box, including access to state-of-the-art models and multiple training methods with minimal coding. Instead of building model pipelines from scratch, users can focus on dataset creation and preprocessing, then run the resulting pipeline on fresh satellite data directly from their own machine.

Visit official Documentation : <https://weedkat.github.io/geosave-engine/>

![Plot Screenshot](docs/assets/geostack_plot.png)

## Features

- **Geospatial data pipeline** — `GeoAnchor`/`GeoTile`/`GeoStack` model
  location+time, fetched pixels, and multi-layer samples. Pull from a live
  STAC catalog (Copernicus, Planetary Computer, Element84, or any
  self-hosted endpoint) or local GeoTIFF, derive layers (cloud masks, NDVI,
  labels), save to disk as `.zarr` stores or stream straight into
  prediction with no disk round trip.
- **Training, config-only** — `SemanticSegmentationTask` +
  `SemanticSegmentationDataModule` cover plain supervised segmentation
  entirely from a LightningCLI YAML config, no Python to write. A pipeline's
  own per-sample context (e.g. a Prithvi/Clay encoder's real acquisition
  time/location) wires straight in via one config field. Drop to a
  hand-written `LightningModule` when you need full control.
- **Pretrained model registry** — encoders (DINOv3, Prithvi, Prithvi-TL,
  Clay), decoders (DPT, UNet), heads, selected by registry key, chained
  together automatically, no manual import wiring or hand-glued forward pass.
- **Sensor-aware band metadata** — wavelength/GSD/mean/std per sensor
  (Sentinel-2, Landsat, MODIS, more), feeding model config directly (Clay's
  wavelength conditioning, normalization stats) — a geodata concern, not
  hardcoded into any model.
- **MLflow model registry integration** — `geosave upload` rebuilds a
  trained model from its checkpoint and registers it, ready to serve.
- **Editable scaffolding, not a framework lock-in** — `geosave create`
  hands you real, editable files. No required base class your code has to
  obey to keep working.

## Installations

Requires Python 3.12+.

```bash
pip install geosave-engine
# or
uv add geosave-engine
```

Want the rolling dev build (rebuilt on every push to `main`) instead of the
latest stable tag:

```bash
pip install --pre --index-url https://test.pypi.org/simple/ \
  --extra-index-url https://pypi.org/simple/ geosave-engine
```

Working on GeoSave Engine itself (clone + `uv sync`), or installing an
exact dev build off a GitHub release — see
[docs/guide/installation.md](docs/guide/installation.md).

## Quick Start

```bash
uv run geosave create -d my-project
cd my-project
# fill in .env with your CDSE (or other STAC provider) credentials
```

Then follow [docs/guide/workflow.md](docs/guide/workflow.md) for the full
step-by-step — explore a pipeline, build a dataset, train, register.

## Generated Workspace

```text
my-project/
├── artifacts/     # checkpoints, logs, saved configs (created by training)
├── configs/       # LightningCLI YAML configs
├── data/          # ingested layers land here
├── logs/
├── modules/       # your pipeline (Path A); data module + lightning module too, if Path B
├── predictions/
├── .env           # CDSE credentials, filled in with placeholders
├── geosave.toml   # workspace identity (task/method/catalog), read by the CLI
└── main.py        # LightningCLI entry point — do not need to touch this
```

## Development Workflow

TO BE ADDED LATER
