Skip to content

Install

umbra-py keeps its core dependency footprint tiny (just requests and click) and ships every heavy capability behind an optional extra. Install only what you need.

pip install umbra-py              # core: search + download + metadata
pip install "umbra-py[load]"      # + analysis-ready xarray loading (xarray, rasterio)
pip install "umbra-py[dask]"      # + lazy, chunked datacubes (dask): `to_stack(lazy=True)`
pip install "umbra-py[convert]"   # + SICD β†’ geocoded COG (sarpy, rasterio, numpy)
pip install "umbra-py[viz]"       # + plotting / footprint / map helpers
pip install "umbra-py[export]"    # + stac-geoparquet catalog export
pip install "umbra-py[serve]"     # + the `umbra serve` read-only STAC API
pip install "umbra-py[mcp]"       # + the `umbra-mcp` Model Context Protocol server
pip install "umbra-py[langchain]" # + the catalog as native LangChain / LangGraph tools
pip install "umbra-py[llamaindex]"# + the catalog as native LlamaIndex tools
pip install "umbra-py[ai]"        # + `umbra ask` / describe / embed: model-backed NL search
pip install "umbra-py[all]"       # convert + load + viz + export together

Requires Python 3.10+.

Choosing extras

I want to… Install
Search and download open data umbra-py (core)
Open a scene as an array umbra-py[load]
Stack a long series without filling RAM umbra-py[dask]
Geocode a SICD into a GeoTIFF umbra-py[convert]
Make maps, galleries, quicklooks umbra-py[viz]
Export the catalog to GeoParquet umbra-py[export]
Serve a STAC API umbra-py[serve]
Drive the catalog from an LLM / agent umbra-py[mcp], [langchain], or [llamaindex]
Natural-language search / scene description umbra-py[ai]

The determinism boundary

The AI features are opt-in and never implicit. A model is only ever called at the edge: umbra ask has a model plan a search (the plan is re-validated before it runs), umbra describe has a vision model read a rendered quicklook (returned as a provenance-stamped description, never a filter), and umbra embed turns a quicklook or a text query into a vector for visual similarity search (only the embedding step calls a model; ranking is deterministic). The [ai] extra pulls in nothing beyond the core requests dependency β€” you supply an API key at runtime.