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.12.tar.gz (85.3 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.12-py3-none-any.whl (94.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: savana-0.1.12.tar.gz
  • Upload date:
  • Size: 85.3 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.12.tar.gz
Algorithm Hash digest
SHA256 d359310485f1e7a4c8023544c32be7b749a7d6637fff455ede5af3f84084960f
MD5 7eb52c2d6ef1dde0182427a9dfd3d5bb
BLAKE2b-256 9f1370e8cfc8dda30381b92c9f44b1f985aad3af776ecd0e3e13b8dc6b56395f

See more details on using hashes here.

Provenance

The following attestation bundles were made for savana-0.1.12.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.12-py3-none-any.whl.

File metadata

  • Download URL: savana-0.1.12-py3-none-any.whl
  • Upload date:
  • Size: 94.2 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.12-py3-none-any.whl
Algorithm Hash digest
SHA256 cdf80e24acb204d80b59799c5381121ff51f3731c2d8d84a9f49ba9aa4c0587e
MD5 180f41f9ca83c2413c7bd32fb93e49e6
BLAKE2b-256 572d4f71f8fc706df0a0d02a820ae995efa2653cf660618cd2ddb6ba402ef878

See more details on using hashes here.

Provenance

The following attestation bundles were made for savana-0.1.12-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

0.1.14

2 files

0.1.13

2 files

This release

0.1.12 This release

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