crop-phenophase
Per-pixel and per-field phenophase transition dates from a Sentinel-2 NDVI season: green-up (spring upward threshold crossing at 50 % of seasonal amplitude), peak greenness (day-of-year of maximum NDVI from the harmonic fit), senescence (autumn downward crossing at 50 % of amplitude), and season length (senescence DOY minus green-up DOY). Crop-calendar detail that raw harmonic phase alone does not give: the phase tells you when the season peaks, but phenophase dates tell you when it starts and ends — the information growers, insurers, and agronomists need for planting-date compliance, growing-degree-day audits, and yield-gap attribution. Builds directly on crop-monitoring (same S2 source + harmonic_fit + zonal_stats graph) by adding the amplitude-threshold extraction layer between the harmonic fit and the field aggregation. Swap the threshold fraction (default 0.50) or the index (NDVI -> EVI/SAVI) without touching the rest.
- 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 |
|---|---|---|---|
primary |
not declared | ['compute/field_phenophase'] |
|
show_your_work |
not declared | ['compute/ndvi', 'compute/harmonic', 'compute/phenophase_dates'] |
|
provenance |
not declared | ['source_scene_ids'] |
Capabilities it requires
The legacy dialect has no requires: block.
Where it runs
- Browser preview does not run here compute/field_phenophase: carries an unsubstituted ${...} template; compute/harmonic: carries an unsubstituted ${...} template; compute/ndvi: layer type "raster_timeseries" is not one folia-view parses; and 2 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/crop-phenophase/folia.yaml