OmniEarth 🌍
OmniEarth is an open-source, universal multi-modal Earth Observation (EO), hyperspectral cube, and environmental data aggregation engine. It provides a unified Python SDK, Node.js / TypeScript SDK, and Universal CLI to discover, query, filter, and stream open earth observation data across all modalities:
- Optical Multispectral: Sentinel-2 (L2A 10m COGs), Landsat-8/9 (30m) via AWS Open Data STAC.
- Hyperspectral Cubes: DLR EnMAP (224 spectral bands), NASA EMIT (285 bands), and ASI PRISMA (240 bands).
- Synthetic Aperture Radar (SAR): Sentinel-1 (GRD / RTC VV/VH 10m COGs).
- Weather & Climate Profiles: Open-Meteo zero-config global forecasts, hourly soil moisture (0-9cm), and ERA5 historical reanalysis.
- Soil & 3D Topography: ISRIC SoilGrids v2.0 (250m global physical & chemical soil profiles) and Copernicus DEM GLO-30.
⚡ Installation
OmniEarth is managed with modern, high-performance tooling: Astral uv for Python and pnpm for Node.js.
Python SDK & CLI
Using Astral uv (recommended):
uv pip install omniearth
# or add to your uv project:
uv add omniearth
Using standard pip:
pip install omniearth
Node.js / TypeScript SDK & CLI
Using pnpm (recommended):
pnpm add omniearth
# or global CLI
pnpm add -g omniearth
Using npm:
npm install omniearth
# or global CLI
npm install -g omniearth
Quickstart
1. Python SDK
import omniearth as oe
client = oe.OmniEarth()
# 1. Search Hyperspectral Data Cubes (e.g. DLR EnMAP 224 bands)
scenes = client.search(
category="hyperspectral",
bbox=[78.50, 20.65, 78.60, 20.72],
max_cloud_cover=20,
limit=5
)
for scene in scenes:
print(f"Scene: {scene.id} | Datetime: {scene.datetime} | Provider: {scene.provider}")
# Download full 224-band Cloud-Optimized GeoTIFF (COG)
if scenes:
file_path = client.download(scenes[0], asset_key="SPECTRAL_IMAGE_COG", outdir="./downloads")
print(f"Downloaded cube to: {file_path}")
# 2. Instant Weather & Soil Moisture Profile (Zero-Config)
weather = client.get_weather(bbox=[78.50, 20.65, 78.60, 20.72])
print(f"Elevation: {weather.properties['elevation']}m")
# 3. ISRIC SoilGrids 3D Physical/Chemical Profile
soil = client.get_soil(bbox=[78.50, 20.65, 78.60, 20.72], depth="0-5cm")
print("Topsoil Summary:", soil.properties["summary_topsoil"])
2. Node.js / TypeScript SDK
import { OmniEarth, Category } from "omniearth";
const client = new OmniEarth();
// 1. Search Sentinel-2 Cloud-Optimized GeoTIFFs (10m Optical)
const scenes = await client.search({
category: Category.OPTICAL,
bbox: [78.50, 20.65, 78.60, 20.72],
maxCloudCover: 15,
limit: 3
});
for (const s of scenes) {
console.log(`Found: ${s.id} | Date: ${s.datetime} | Assets: ${Object.keys(s.assets).join(", ")}`);
}
// 2. Download Visual RGB GeoTIFF
if (scenes.length > 0) {
const filePath = await client.download(scenes[0], "visual", "./downloads");
console.log(`Saved RGB COG: ${filePath}`);
}
// 3. Instant Weather Profile
const weather = await client.getWeather([78.50, 20.65, 78.60, 20.72]);
console.log("Weather Feed:", weather?.properties.latitude, weather?.properties.elevation);
Universal CLI
OmniEarth provides a standalone command-line interface available in both Python and Node.js environments.
# Check provider status and detected credentials
omniearth info
# List all supported modalities, sensors, and backends
omniearth categories
# Search Optical Sentinel-2 scenes with max 10% cloud cover
omniearth search --category optical --bbox 78.50 20.65 78.60 20.72 --max-cloud 10
# Search DLR EnMAP Hyperspectral 224-band scenes
omniearth search --category hyperspectral --bbox 78.50 20.65 78.60 20.72 --limit 3
# Search Sentinel-1 SAR GRD radar passes
omniearth search --category sar --point 78.55 20.68 5.0
# Fetch zero-config weather and soil moisture profile
omniearth search --category weather --point 78.55 20.68 --json
# Direct download by Scene ID or latest AOI match
omniearth download --category hyperspectral --bbox 78.50 20.65 78.60 20.72 --asset SPECTRAL_IMAGE_COG
Supported Modalities & Provider Matrix
| Modality | Sensors / Datasets | Resolution / Bands | Provider Backend | Authentication |
|---|---|---|---|---|
| Optical | Sentinel-2 L2A, Landsat-8/9 | 10m–30m, 12 bands | AWS Earth Search STAC | Zero-Config (Free public COGs) |
| SAR | Sentinel-1 GRD / RTC | 10m, VV / VH dual-pol | AWS Earth Search STAC | Zero-Config (Free public COGs) |
| Hyperspectral | DLR EnMAP | 30m, 224 bands (420–2450 nm) | DLR EOC STAC + Geoservice | Free DLR EOC Account |
| Hyperspectral | NASA EMIT | 60m, 285 bands (381–2493 nm) | NASA CMR STAC | Free NASA Earthdata Login |
| Hyperspectral | ASI PRISMA | 30m, 240 bands | ASI PRISMA Portal | Free ASI Account |
| Weather | Open-Meteo, ERA5 Reanalysis | Global 1–11km, hourly | Open-Meteo REST API | Zero-Config (Completely open) |
| Soil & 3D | ISRIC SoilGrids v2.0 | 250m 3D profiles (0–200cm) | ISRIC REST API | Zero-Config (Completely open) |
Authentication & Configuration
OmniEarth automatically discovers credentials from local .env files, parent folders, or system environment variables:
Copy the .env.example template:
cp .env.example .env
# DLR Geoservice (Required for downloading raw EnMAP hyperspectral cubes)
# Register free: https://eoweb.dlr.de/egp/
DLR_USERNAME=your_dlr_username
DLR_PASSWORD=your_dlr_password
# NASA Earthdata (Optional: for direct NASA EMIT cube downloads)
# Register free: https://urs.earthdata.nasa.gov/
EARTHDATA_USERNAME=your_earthdata_username
EARTHDATA_PASSWORD=your_earthdata_password
# ASI PRISMA (Optional: for PRISMA hyperspectral missions)
# Register free: https://prisma.asi.it/
PRISMA_USERNAME=your_prisma_username
PRISMA_PASSWORD=your_prisma_password
(Note: Optical Sentinel-2, Landsat-8/9, Sentinel-1 SAR, Open-Meteo Weather, and ISRIC SoilGrids require zero credentials and work out of the box!)
License & Compliance Disclaimers
License
OmniEarth is distributed under the OmniEarth Open Source License with Mandatory Attribution & Academic Citation. See LICENSE for the full text.
- Academic Citation: Any research, paper, or published study utilizing OmniEarth must cite the software using Zenodo DOI or the citation below.
- Corporate Attribution: Any commercial product, website, SaaS application, or internal service utilizing OmniEarth must display prominent attribution:
"Powered by OmniEarth (https://github.com/lokeshsk/omniearth)"in user interfaces and technical documentation. - Upstream Data Provider Liability: OmniEarth is an orchestration and aggregation tool. It does not own, re-license, or host upstream satellite imagery or sensor data. Users are strictly responsible for complying with the respective upstream terms of service:
- Copernicus Sentinel Data: Free, full, and open access under the EU Copernicus Legal Notice.
- DLR EnMAP Data: Governed by the DLR EnMAP Data Policy.
- NASA EMIT / USGS Landsat: Open public domain under NASA Data and Information Policy.
- Open-Meteo: Non-commercial open access under CC BY 4.0.
- ISRIC SoilGrids: Open access under CC BY 4.0.
Citation
If you use OmniEarth in your scientific research or software, please cite:
@software{omniearth2026,
author = {Lokesh Kumar},
title = {OmniEarth: Universal Multi-Modal Open Earth Observation, Hyperspectral, and Weather Data Engine},
month = oct,
year = 2026,
publisher = {Zenodo},
doi = {10.5281/zenodo.1089204},
url = {https://github.com/lokeshsk/omniearth}
}
Author & Maintainer
Lokesh Kumar
- Email: lokesh.skshukla@gmail.com
- Website: https://lokeshsk.github.io
- Project Page: https://lokeshsk.github.io/omniearth/
Metadata
Release files for omniearth 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| omniearth-1.0.0.tar.gz | 27.6 kB | Without provenance | Details for omniearth-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| omniearth-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for omniearth-1.0.0-py3-none-any.whl |
Total release size: 55.7 kB
Release files / omniearth-1.0.0.tar.gz
| Download URL | omniearth-1.0.0.tar.gz |
|---|---|
| Size | 27.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dd960ff53078305947c4ee7561b90c7853f25b33de83e5b7840f48385ee9508e
|
|
BLAKE2b-256 checksum How to use checksums |
a180d867a93736c90417469744663d8d65b7c9216c7401825ed7dfd623c092d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / omniearth-1.0.0-py3-none-any.whl
| Download URL | omniearth-1.0.0-py3-none-any.whl |
|---|---|
| Size | 28.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
019a9be93f38b76eb5d127782d7d8308fbbb11b97ef6d3586a64d009883feddb
|
|
BLAKE2b-256 checksum How to use checksums |
9b09961d85c31ffc123903524f7fd5d95c2ec01ec64cb11044ad1e38332a9956
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for omniearth 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.