spectral-indices

unverified
v0.1 AOI: bbox -113.00, 40.00, -111.00, 41.50

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.

License
recipe
Apache-2.0
outputs
CC-BY-4.0
Map preview and live runs are available in the workbench.

The contract

legacy dialect

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

outputkindlayerwhat 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
open in Workbench from registry/recipes/spectral-indices/folia.yaml