Skip to main content

Savana: A Geosptaial Intelligence for Savannah Landscapes

savana logo

PyPI Downloads License Stars Forks YouTube

A geospatial intelligence ecosystem for savanna landscapes.

savana is a growing Python ecosystem for understanding, monitoring, and reasoning about savanna landscapes. It's starting with a validated adaptive land-system classification method, and built from the ground up so that every result it produces can be queried, summarized, and acted on through natural language, not just read off a map. Classification of landscapes from raw satellite data to actionalble insights is the foundation.

Statement of need

Savannas cover roughly a fifth of the Earth's land surface and support some of the highest concentrations of biodiversity, pastoralist livelihoods, and protected-area coverage anywhere in the world. Nowhere more so than across West and Central Africa, where savanna mosaics form the ecological backbone of national parks, wildlife corridors, and rangelands under mounting pressure from land conversion, fire regime change, and rainfall variability. But the land use / land cover (LULC) products most available to researchers and park managers in this region routinely collapse this entire structural complexity into one or two undifferentiated "grass/shrub" classes which is too coarse to answer the questions that actually matter for management: where is canopy genuinely closing versus opening, which areas show real structural degradation versus rainfall-driven greenness swings, and where should limited conservation and grazing-management resources actually go.

This gap is not just a mapping problem, it is also an access problem. Analysts in under-resourced institutions often have the satellite data and the research question, but not the specialized remote-sensing pipeline needed to turn one into the other, nor the time to manually interrogate every output. savana addresses both halves at once. That is, an adaptive classification method with no hardcoded thresholds, so it recalibrates to any savanna landscape's own spectral distribution rather than assuming one park's canopy density applies to another's; and a built-in AI layer that lets anyone, not just remote-sensing specialists, ask what a result means, in plain language, based on strictly in what was actually computed.

Current Key features

Adaptive land-system classification

  • Resolves savanna landscapes into ecologically meaningful classes, Core Woodland, Open Woodland, Shrub-Transition Savanna, Grassland, Riparian/Wetland Vegetation, Anthropogenic Disturbance, for any AOI, with every threshold derived from that landscape's own index percentiles at run time. Classes are extendable.
  • Four-model ablation (KNN baseline / RF-embeddings / RF-phenology / RF-embeddings+phenology) built on Sentinel-2, Google AlphaEarth satellite embeddings, and rainfall-normalised phenology
  • Multi-epoch mapping with automatic fallback to embeddings-only classification for years lacking reliable seasonal Sentinel-2 coverage

Change detection

  • Conservative change detection cross-validated against Rain Use Efficiency inter-annual variability, separating genuine structural change from rainfall-driven apparent change

Analytical insights

  • Plain-English summaries and question-answering generated entirely from real computed results, every figure traces back to an actual pipeline output.

AI agent, SavanaGeoAgent

  • Natural-language access to your results and your map in one place: ask about class areas, accuracy, or change; ask it to show years on the map, compare them, fly to locations, or add basemaps
  • Built on real, proven infrastructure (Strands + any geoai map tooling) with savana's own evidence tools layered on top
  • Ships with an inline chat + live-map UI (agent.show_ui()) for exploring results without writing further code

Interactive visualization

  • geemap, geolibre -based maps in Jupyter, with year-toggle, swipe/split comparison against another year or the underlying basemap, and change-layer visualization
  • Optional GeoLibre backend for teams already working in that ecosystem

Data export

  • Google Drive / Earth Engine Asset export for classified maps and change products; confusion matrices and area statistics as pandas.DataFrame or CSV

Install

pip install savana
# or, for local vector file (shapefile/geopackage) AOI support:
pip install "savana[vector]"
# or, for the AI agent:
pip install "savana[agents]"

You'll also need an Earth Engine account with a registered Cloud project (https://code.earthengine.google.com/register).

Quick start

import savana

clf = savana.classify_landscape(
    aoi="path/to/my_area.geojson",   # or an EE asset ID, ee.Geometry, or geopandas GeoDataFrame
    epochs=[2019, 2021, 2024],
    park_name="My Study Area",
)

clf.show()                  # interactive map in Jupyter (geemap)
clf.accuracy_summary()      # pandas.DataFrame, one row per model (A/B/C/D)
clf.class_areas()           # pandas.DataFrame, area (km2) per class per epoch
clf.show_change()           # conservative + RUE-validated change map
clf.summarize()             # plain-English report, grounded in real computed results

clf.export(drive_folder="MyProject")   # push results to Google Drive

Using an Earth Engine parks database with multiple features, filtered by name (as in the original manuscript workflow):

clf = savana.classify_landscape(
    aoi="projects/ee-desmond/assets/NewParkMerged",
    name_filter="Kogyae",
    park_name="Kogyae",
    epochs=[2017, 2019, 2021, 2024],
)

Ask your results questions

from savana.agents import SavanaGeoAgent

agent = SavanaGeoAgent(clf, model="anthropic", model_id="claude-sonnet-4-6")

agent.ask("How much core woodland is there in 2024?")
agent.ask("Show 2019 and 2024 on the map")
agent.ask("What changed between the years, and how much of it is genuine?")

agent.show_ui()   # live map + chat, inline in the notebook

Why it's adaptive

Every classification threshold (canopy density cutoffs, moisture cutoffs, seasonal amplitude cutoffs) is derived from percentiles of that AOI's own spectral index distribution at run time, nothing is hardcoded to one park's spectral range. Point this at a different savanna landscape and it recalibrates automatically.

Core classification pipeline

  1. Composites (savana.composites): cloud-masked Sentinel-2 annual/seasonal/percentile composites + AlphaEarth annual embeddings (64-dim).
  2. Indices (savana.indices): NDVI/NDMI/NDBI/MNDWI across annual, dry-season, wet-season, and percentile composites; a 14-band phenological feature stack.
  3. RUE (savana.rue): Rain Use Efficiency, integrated NDVI normalised by rainfall, with valid-month normalisation to remove Sentinel-2 tile-boundary bias.
  4. Thresholds (savana.thresholds): fully adaptive, percentile-derived cutoffs.
  5. Masks (savana.masks): six mutually exclusive land-system masks.
  6. Sampling (savana.sampling): unsupervised k-means stratified candidate sampling → rule-based provisional labels → confidence-margin filter → class balancing.
  7. Classifiers (savana.classifiers): 4-model ablation and multi-epoch mapping.
  8. Change (savana.change): conservative, RUE-validated change detection.
  9. Insights (savana.insights): grounded facts, summaries, and Q&A.
  10. Agents (savana.agents): natural-language access to results and map control.
  11. Accuracy / Exports (savana.accuracy, savana.exports): confusion matrices, accuracy summaries, and Drive/Asset/CSV export helpers.

Roadmap

savana is the first module of a larger ecosystem. Planned additions include:

  • Additional class schemes / configurable taxonomies for other savanna biomes
  • Alternative embedding backbones (e.g. other foundation models) as drop-in options
  • Local (non-GEE) inference for pre-exported imagery
  • Deeper agent integration with map-hosted UIs, beyond the current notebook experience
  • A CLI

Contributions and issues welcome.

Citation

If you use this package in your research, please cite the associated manuscript.

License

Savana is free and open source software, licensed under the MIT License.

Acknowledgments

We gratefully acknowledge the support of the following organizations:

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

savana-0.1.14.tar.gz (95.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

savana-0.1.14-py3-none-any.whl (105.0 kB view details)

Uploaded Python 3

File details

Details for the file savana-0.1.14.tar.gz.

File metadata

  • Download URL: savana-0.1.14.tar.gz
  • Upload date:
  • Size: 95.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for savana-0.1.14.tar.gz
Algorithm Hash digest
SHA256 a293ab2ce73e464b86bfa5e5cf5ad8c06d27a07f29e5f36252a6882f5fb6418c
MD5 5e4b99be4f28c271e898d9f2f9481a86
BLAKE2b-256 8d98fa76fdeaa7d5974379fb9bafd7d759e3d9203bc52892626d3eeb019679cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for savana-0.1.14.tar.gz:

Publisher: publish.yml on desmond-lartey/savana

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file savana-0.1.14-py3-none-any.whl.

File metadata

  • Download URL: savana-0.1.14-py3-none-any.whl
  • Upload date:
  • Size: 105.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for savana-0.1.14-py3-none-any.whl
Algorithm Hash digest
SHA256 d85424a2167c32bb3e99588e1c4af563bf7169c6b3b516a7fd54e0d0c40ac544
MD5 47820288a7903227680fe15c8746a521
BLAKE2b-256 6e26b3a52e08e9fa523fe31f80182061516a62037c86c96f3474f43b851e2812

See more details on using hashes here.

Provenance

The following attestation bundles were made for savana-0.1.14-py3-none-any.whl:

Publisher: publish.yml on desmond-lartey/savana

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.1.16

2 files

0.1.15

2 files

This release

0.1.14 This release

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page