eudr-active-farming
Per-parcel EUDR due-diligence signal: is each field actively farmed (seasonal NDVI cycle present) or recently cleared / deforested (anomalous change vs a baseline year)? The recipe runs a two-stage gate over Fields of the World parcel boundaries. Stage 1 is an active-cropland gate: harmonic_fit amplitude of the NDVI time series distinguishes seasonally cropped land (strong annual swing) from cleared or idle parcels (flat/anomalous). Stage 2 is a change signal: change_detection against a user-defined baseline window flags parcels where vegetation has declined since the reference year, consistent with recent clearing. Per-field zonal_stats collapses both signals to one row per FTW parcel — the table the compliance workflow consumes. The approach is grounded in Boryan et al. (2011) on NDVI-seasonality-based cropland mapping and Kerner et al. (2024) on learned crop-status signals; the implementation uses only declarative Folia ops so every step is inspectable and re-runnable from the same inputs.
- 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/parcel_status'] |
|
show_your_work |
not declared | ['compute/seasonality', 'compute/change', 'compute/ndvi'] |
|
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/change: op "change_detection" has no browser kernel; compute/ndvi: layer type "raster_timeseries" is not one folia-view parses; compute/ndvi_baseline: layer type "raster_timeseries" is not one folia-view parses; and 4 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/eudr-active-farming/folia.yaml