Products
From raw counts to indices
Every level is available, because someone always needs the one below the one you thought was enough.
Processing levels
| Level | Description | Format | Typical size |
|---|---|---|---|
| L1C | Top-of-atmosphere reflectance, orthorectified | COG, 12-bit | 780 MB |
| L2A | Surface reflectance with cloud and shadow masks | COG, 12-bit | 812 MB |
| L2A-mosaic | Cloud-free monthly composite per tile | COG, 12-bit | 640 MB |
| Indices | NDVI, NDWI, NBR, EVI2 and 14 more | COG, float32 | 68 MB each |
| SAR GRD | Terrain-corrected backscatter, γ⁰ | COG, float32 | 1.6 GB |
| SAR coherence | Interferometric coherence, 6/12-day pairs | COG, float32 | 2.1 GB |
Derived on request
Time series extraction
Point or polygon, any index, any date range, returned as Parquet or CSV without you touching a raster.
Custom composites
Median, geometric median or best-pixel composites over any window, produced once and cached.
Change detection
Pairwise or trend-based change layers with the algorithm and thresholds recorded in the item metadata.
Reading a window without downloading a scene
window.py
import rasterio
from rasterio.windows import from_bounds
url = ('https://data.mirnl.13381338.xyz/s2/32/U/NB/'
'2026/08/02/L2A/B08.tif')
with rasterio.open(url) as src:
win = from_bounds(410000, 5650000, 412000, 5652000,
src.transform)
nir = src.read(1, window=win) # 4 MB moved, not 812
print(nir.shape, nir.mean())