spectral-indices
Five canonical spectral indices over a named AOI from Sentinel-2 L2A: NDVI, NDSI, NDWI, NBR and BSI. Each is computed per scene, cloud-masked from the scene classification layer, and reduced to a median over the date window. One snapshot per run, not a time series; rerunning on a schedule updates the snapshot. NDVI = (N - R) / (N + R) vegetation greenness (NIR vs red) NDSI = (G - S1) / (G + S1) snow / cloud discrimination (green vs SWIR-1) NDWI = (G - N) / (G + N) surface water (McFeeters; green vs NIR) NBR = (N - S2) / (N + S2) burn severity / health (NIR vs SWIR-2) BSI = ((S1 + R) - (N + B)) / ((S1 + R) + (N + B)) bare soil (SWIR-1 + red vs NIR + blue) On NDSI: this recipe treats snow as a real surface signal rather than something to remove, so nothing here masks the snow class. The platform cloud mask drops cloud, shadow and cirrus only. For snow-cover fraction as a question in its own right, use snow-cover-fsc, which drives per-scene NDSI through a sigmoid calibrated to FSCTOC.
- recipe
- Apache-2.0
- outputs
- CC-BY-4.0
The contract
Read from this recipe's own declarations — parameters:,
outputs:, requires:, and the ops its layers name. Not from its
style blocks and not from any benchmark: a colour ramp is not a contract, and a measured
run is evidence about one AOI rather than a domain.
Parameters
The legacy dialect has no typed parameter schema. Read the folia.yaml for what this recipe takes; nothing here can type-check it.
Outputs
| output | kind | layer | what it is |
|---|---|---|---|
ndvi |
raster | compute/ndvi |
Median NDVI composite. |
ndsi |
raster | compute/ndsi |
Median NDSI composite. |
ndwi |
raster | compute/ndwi |
Median NDWI composite. |
nbr |
raster | compute/nbr |
Median NBR composite. |
bsi |
raster | compute/bsi |
Median BSI composite. |
bsi_stack |
raster | compute/bsi-scenes |
Show-your-work — the per-scene BSI stack behind the BSI composite. |
Capabilities it requires
The legacy dialect has no requires: block.
Where it runs
- Browser preview does not run here compute/bsi: depends on layer "compute/bsi-scenes", which cannot run here; compute/bsi-scenes: carries an unsubstituted ${...} template; compute/nbr: carries an unsubstituted ${...} template; and 3 more
- Local CLI (folia run) runs here runs locally through the legacy (no spec_version) parser
- Operated fleet (POST /plan, /run) runs here legacy dialect: a lock binds by the cut's layer names, not by digest
registry/recipes/spectral-indices/folia.yaml