Multi-Modal Data Matrix and Zero-Config Backends
| Modality | Sensors and Bands | Spatial Resolution | Backend Provider | Authentication |
|---|---|---|---|---|
| Optical Multispectral | Sentinel-2 L2A (12 bands), Landsat-8/9 | 10m - 30m | AWS Earth Search STAC | Zero-Config Public COGs |
| Digital Elevation Models | Copernicus DEM GLO-30, SRTM GL1, ALOS AW3D30 | 30m DSM / DTM | AWS Open Data / OpenTopography S3 | Zero-Config Direct Public COGs |
| Land Cover (LULC) | ESA WorldCover (2020 v100, 2021 v200) | 10m global classification | ESA WorldCover AWS S3 | Zero-Config Direct Public COGs |
| Hyperspectral Cubes | DLR EnMAP (224 bands, 420-2450 nm) | 30m | DLR EOC STAC + Geoservice | Free DLR Account (Optional) |
| Hyperspectral Cubes | NASA EMIT (285 bands, 381-2493 nm) | 60m | NASA CMR STAC | Free Earthdata Login (Optional) |
| Hyperspectral Cubes | ASI PRISMA (240 bands) | 30m | ASI PRISMA Portal | Free ASI Account (Optional) |
| Synthetic Aperture Radar | Sentinel-1 GRD / RTC (VV & VH) | 10m | AWS Earth Search STAC | Zero-Config Public COGs |
| Weather & Climate | Open-Meteo, ERA5 Reanalysis | 1-11km hourly | Open-Meteo REST API | Zero-Config Open API |
| Soil Composition | ISRIC SoilGrids v2.0 (3D profile 0-200cm) | 250m | ISRIC REST API | Zero-Config Open API |
Sequential CLI User Guide
1 System Healthcheck and Provider Status
Inspect detected credentials, cache paths, and API readiness:
omniearth info
2 Catalog Exploration
Display all modalities, spectral bands, and backend endpoints:
omniearth categories
3 Spatial Search with Bounding Box, Point, or GeoJSON
Find intersecting scenes across any sensor modality:
# Bounding box search: min_lon min_lat max_lon max_lat
omniearth search --category optical --bbox 78.50 20.65 78.60 20.72 --limit 3
# Point search: lon lat [radius_km]
omniearth search --category sar --point 78.55 20.68 5.0 --limit 3
# GeoJSON search
omniearth search --category elevation --geojson ./field_boundary.geojson
# Land Cover search
omniearth search --category landcover --bbox 78.50 20.65 78.60 20.72 --year 2021
4 Filtering by Date, Cloud Cover, and Soil Depth
# Filter Sentinel-2 with max 15% cloud cover within date range
omniearth search --category optical \
--bbox 78.50 20.65 78.60 20.72 \
--start 2026-01-01 --end 2026-03-31 \
--max-cloud 15 --limit 5
# Query soil texture at 0-5cm depth
omniearth search --category soil --point 78.55 20.68 --depth 0-5cm
5 Single-Asset Resumable Download
Stream Cloud-Optimized GeoTIFFs or hyperspectral cubes with byte-range resumption:
omniearth download --category elevation \
--bbox 78.50 20.65 78.60 20.72 \
--dataset copernicus \
--outdir ./downloads
6 High-Speed Multi-Asset Download with Worker Threads
Download all assets associated with a scene concurrently:
omniearth download --category optical \
--id S2A_32TPT_20260315_0_L2A \
--all \
--threads 8 \
--outdir ./downloads
Resumable Engine: If interrupted, OmniEarth queries partial files via
HTTP 206 Partial Content and resumes from the exact byte offset without re-downloading.
7 On-the-Fly Radiometric Indices (NDVI, NDWI, NDRE, EVI, NBR)
# Compute NDVI from reflectances
omniearth compute --index ndvi --nir 0.82 --red 0.18
# Compute EVI
omniearth compute --index evi --nir 0.75 --red 0.15 --blue 0.08
8 Historical Time-Series Extraction
# Weather time series
omniearth timeseries --category weather --bbox 78.50 20.65 78.60 20.72 --limit 24
# Satellite pass chronology
omniearth timeseries --category optical --bbox 78.50 20.65 78.60 20.72 --start 2026-01-01 --end 2026-03-31
Sequential Python SDK Guide
1 Setup and Initialization
import omniearth as oe
client = oe.OmniEarth()
2 Spatial Search Across Modalities
# 1. Search Optical Sentinel-2
optical_scenes = client.search(
category="optical",
bbox=[78.50, 20.65, 78.60, 20.72],
start_date="2026-01-01",
end_date="2026-03-31",
max_cloud_cover=20,
limit=5
)
# 2. Search Copernicus DEM 30m
dem_tiles = client.search(
category="elevation",
bbox=[78.50, 20.65, 78.60, 20.72],
dataset="copernicus"
)
# 3. Search ESA WorldCover 10m
lc_tiles = client.search(
category="landcover",
bbox=[78.50, 20.65, 78.60, 20.72],
year=2021
)
3 Resumable and Parallel Multipart Downloads
# Downloads visual RGB COG with automatic multipart chunking and resumption
scene = optical_scenes[0]
file_path = client.download(
result=scene,
asset_key="visual",
outdir="./downloads",
resume=True, # Auto-resume partial .part downloads
multipart=True, # Parallel chunked ranges for files >= 10MB
max_workers=4
)
print(f"Downloaded to: {file_path}")
4 Multi-Asset and Multi-Scene Concurrency
# Concurrently download ALL assets for a scene:
paths_dict = client.download_all(scene, outdir="./downloads", max_workers=4)
# Concurrently download across multiple scenes:
all_paths = client.download_many(optical_scenes, asset_key="visual", outdir="./downloads", max_workers=4)
5 Zero-Config Environmental Shortcuts
# Instant DEM Elevation Raster
dem = client.get_elevation(bbox=[78.50, 20.65, 78.60, 20.72], dataset="copernicus")
# Instant Land Cover Map
lc = client.get_landcover(bbox=[78.50, 20.65, 78.60, 20.72], year=2021)
# Instant Weather & Soil Moisture Feed
wx = client.get_weather(bbox=[78.50, 20.65, 78.60, 20.72])
print("Elevation:", wx.properties["elevation"])
# Instant ISRIC SoilGrids 3D Chemistry & Texture Profile
soil = client.get_soil(bbox=[78.50, 20.65, 78.60, 20.72], depth="0-5cm")
print("Topsoil Clay/Sand:", soil.properties["summary_topsoil"])
6 Radiometric Index & Time-Series Analytics
# Compute NDVI
ndvi = client.compute_index("ndvi", nir=0.82, red=0.18)
print("NDVI Mean:", ndvi["mean"])
# Extract historical weather time-series
series = client.get_time_series(category="weather", bbox=[78.50, 20.65, 78.60, 20.72])
print(f"Extracted {len(series)} chronological hourly observations.")
Sequential Node.js and TypeScript SDK Guide
1 Setup and Client Instantiation
import { OmniEarth, Category } from "omniearth";
const client = new OmniEarth();
2 Search with Full Type Safety
const scenes = await client.search({
category: Category.OPTICAL,
bbox: [78.50, 20.65, 78.60, 20.72],
startDate: "2026-01-01",
endDate: "2026-03-31",
maxCloudCover: 15,
limit: 5
});
3 High-Speed Resumable Streaming and Batching
// 1. Single Asset Download with Resumption and Parallel Chunking
const visualPath = await client.download(scenes[0], "visual", "./downloads", {
resume: true,
multipart: true,
concurrency: 4
});
// 2. Download All Assets Concurrently
const assetMap = await client.downloadAll(scenes[0], undefined, "./downloads", {
concurrency: 4
});
// 3. Batch Download Across Multiple Scenes
const manyPaths = await client.downloadMany(scenes, "visual", "./downloads", {
concurrency: 4
});
4 Shortcuts, Indices, and Time-Series
// Instant Elevation DEM
const dem = await client.getElevation([78.50, 20.65, 78.60, 20.72], "copernicus");
// Compute NDVI
const ndvi = client.computeIndex("ndvi", { nir: 0.82, red: 0.18 });
console.log("NDVI:", ndvi);
// Time-Series Extraction
const ts = await client.getTimeSeries({
category: Category.WEATHER,
bbox: [78.50, 20.65, 78.60, 20.72]
});
console.log("Weather steps:", ts.length);
Direct Underlying REST and STAC API Calls (cURL)
OmniEarth interacts directly with upstream public STAC and REST standards. You can query these exact backends without any SDK:
1. Optical Multispectral (AWS Earth Search STAC)
curl -s -X POST "https://earth-search.aws.element84.com/v1/search" \
-H "Content-Type: application/json" \
-d '{
"collections": ["sentinel-2-l2a"],
"bbox": [78.50, 20.65, 78.60, 20.72],
"datetime": "2026-01-01T00:00:00Z/2026-03-31T23:59:59Z",
"query": { "eo:cloud_cover": { "lte": 20 } },
"limit": 3
}' | jq '.features[] | {id: .id, visual: .assets.visual.href}'
2. Digital Elevation Model (Copernicus DEM 30m S3)
curl -s -I "https://copernicus-dem-30m.s3.amazonaws.com/Copernicus_DSM_COG_10_N20_00_E078_00_DEM/Copernicus_DSM_COG_10_N20_00_E078_00_DEM.tif"
3. Land Cover (ESA WorldCover 10m S3)
curl -s -I "https://esa-worldcover.s3.eu-central-1.amazonaws.com/v200/2021/map/ESA_WorldCover_10m_2021_v200_N18E075_Map.tif"
4. Weather and Solar Climate Profiles (Open-Meteo REST API)
curl -s "https://api.open-meteo.com/v1/forecast?latitude=20.68&longitude=78.55&hourly=temperature_2m,relative_humidity_2m,soil_moisture_0_to_1cm,surface_solar_radiation" \
| jq '{elevation: .elevation, current_temp: .hourly.temperature_2m[0]}'
5. Soil Chemistry and 3D Texture (ISRIC SoilGrids REST API)
curl -s "https://rest.isric.org/soilgrids/v2.0/properties/query?lon=78.55&lat=20.68&property=clay&property=sand&property=soc&property=phh2o&depth=0-5cm" \
| jq '.properties.layers[] | {name: .name, mean_value: .depths[0].values.mean}'
6. Hyperspectral Data Cubes (DLR EOC STAC API)
curl -s "https://geoservice.dlr.de/eoc/ogc/stac/v1/search?collections=ENMAP_L2A&bbox=78.50,20.65,78.60,20.72&limit=2" \
| jq '.features[] | {id: .id, datetime: .properties.datetime, assets: .assets | keys}'
Citation and Licensing
OmniEarth is distributed under the OmniEarth Open Source License with Mandatory Attribution and Academic Citation.
@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.23689449},
url = {https://github.com/lokeshsk/omniearth}
}