Changelog
All notable changes to Awesome Spectral Indices are summarized here.
1.0.0 (Upcoming)
Awesome Spectral Indices has started its migration to v1. The migration is being developed alongside v0: the existing API and v0 output files remain available and can continue to be used, and spectral indices can still be submitted through the usual contribution process.
Added
- Added an independent v1 source tree under
src/v1/as the foundation for evolving the catalogue without changing the v0 implementation. - Added v1 catalogue outputs under
output/v1/, including:spectral-indices-dict.jsonspectral-indices-table.csvbands.jsonconstants.jsonexternal_variables.json
- Added a v1 generator that parses formula variables and writes the new outputs independently of v0.
- Added a dedicated v1 test suite under
test/v1/. - Added characterization tests for the existing catalogue, including:
- catalogue structure and required properties;
- supported application domains;
- formula parsing and rejection of unsupported syntax;
- validation of index definitions; and
- consistency of generated JSON and CSV outputs.
- Added root-level Markdown contribution guidelines with instructions for creating a Conda or
venvdevelopment environment, running the tests, and submitting an index. - Added links to the contribution guidelines and the AI and Scientific Validation Policy from the new-index issue template.
- Added a new VitePress website as the foundation for the v1 documentation.
- Added VitePress support for mathematical notation through MathJax.
- Added
min(),max(), and the unarytanh()and natural-logarithmlog()calls to the v1 formula expression language. Function-call syntax is new in the v1 schema. - Added WCI3 (Wheat Canopy Index, Growth Stage 3) as the first catalogue index using nested allowed functions. Its v1 formula combines multi-argument
max()with unarytanh()and an index-specificepsilonconstant. - Added the contextual reduction functions
spatial_max(),spatial_min(), andspatial_mean()to the v1 formula language. Their shared spatial scope is configured through the conditionally requiredreductionsproperty, which currently acceptsaoiandscene. - Added CWI (Coastal Water Index) to v1 as the first index using contextual spatial reductions. Its two
spatial_max()operations are evaluated over the area of interest without introducing generated reduction operands. - Added the strict two-input
kernel()function to the v1 formula language so kernel evaluations can be expressed as operations over their underlying inputs rather than as additional operands. - Added the structured v1
classificationproperty. Contributors provide the requiredapplication_domainand optionalfamily, while generation adds one or more sensing modalities from the formula standards. - Added
geologyas an application domain andkernel,tasseled_cap, andradaras the initial supported index families. - Added the six Thematic Mapper Tasseled Cap features—brightness, wetness, greenness, fourth, fifth, and sixth—to v1 as vegetation indices in the
tasseled_capfamily. - Added the v1
Polarizationsregistry and generatedpolarizationsproperty for theHH,HV,VH, andVVradar inputs. - Added the range-based v1
Hyperspectralstandard. Formula operands fromR300throughR2500represent reflectance at an integer wavelength in nanometres and generate thehyperspectralsensing modality. - Added the dynamic
HyperspectralRangestandard. Operands such asR750_800represent one selectable reflectance wavelength within an inclusive interval without enumerating every possible wavelength range. - Added CARI (Carotenoid Index) to v1 as the first hyperspectral index, using reflectance inputs at 720 nm and 521 nm.
- Added fifteen hyperspectral pigment indices to v1: RARSa, RARSb, RARSc, PSSRa, PSSRb, PSSRc, PSNDa, PSNDb, PSNDc, OPSSRa, OPSSRb, OPSSRc, OPSNDa, OPSNDb, and OPSNDc.
- Added ten hyperspectral Reflectance Band Ratio indices to v1: the untransformed URBR1 through URBR5 and the scatter-adjusted SARBR1 through SARBR5.
- Added four hyperspectral physiological and photochemical reflectance indices to v1: PRI550, PRI570, PRIm1, and PRIm4.
- Added RVSI (Red-edge Vegetation Stress Index) to v1 as a hyperspectral vegetation index.
- Added NDNI (Normalized Difference Nitrogen Index) and NDLI (Normalized Difference Lignin Index) to v1 as the first catalogue indices using the natural-logarithm
log()formula function. - Added NDISI (Normalized Difference Ice-Snow Index) to v1 as the first index using selectable hyperspectral wavelength ranges.
- Added LCI (Leaf Chlorophyll Index) as a hyperspectral vegetation index and GreenDVI (Green Difference Vegetation Index) as a multispectral vegetation index.
- Added SUI (Sealed Urban Index) to v1 as a multispectral urban index.
- Added NDVISR (Normalized Difference Vegetation Index with Simple Ratio) and SAVISR (Soil-Adjusted Vegetation Index with Simple Ratio) to v1 as multispectral vegetation indices.
- Added CCRI (Carotenoid-Chlorophyll Ratio Index) to v1 as a hyperspectral vegetation index.
- Added a catalogue search page with:
- immediate filtering by catalogue key, acronym, name, and application domain;
- an advanced search panel for individual metadata fields;
- filtering by source link, link status, link type, and source type;
- filtering independently by classification, required bands, radar polarizations, constants, and external variables;
- results arranged by sensing-modality profile and then application domain;
- results grouped by application domain; and
- a live filtered-versus-total result count.
- Added one generated documentation page for every spectral index. Each page includes its formula, required bands, constants, external variables, source, contributor, and date of addition.
- Added the generated v1
source.source_companionsproperty, which lists the other catalogue keys sharing an index's exact source link. Generated index pages link those keys to their companion pages. - Added the optional contributor-provided
source.source_link_semantic_scholarobject for Semantic Scholar paper and corpus identifiers, recommended when an index source does not use a DOI link. - Added Semantic Scholar Academic Graph enrichment as the fallback for non-DOI sources and DOI sources unavailable from Crossref. Paper IDs are resolved before corpus IDs through rate-limited batch requests, and returned publication metadata and citation counts identify
semantic_scholaras their provider. - Added the v1 Explained page documenting the current v0/v1 schema difference, property meanings, validation rules, generated files, and migration status.
- Added a catalogue status dashboard with interactive summaries of source-link availability, DOI coverage, and source-type completeness, plus expandable affected-index lists.
- Added an interactive, tabbed catalogue dashboard showing index counts by application domain and sensing modality; publication totals by year, venue, and source type; and citation-count rankings both catalogue-wide and within each application domain. Every chart provides drill-down links to the matching indices.
- Added an automatically generated Repository Contributors section to the People page using contribution data from the GitHub repository.
- Added generated
source.source_metadatapublication metadata for DOI-backed indices using Crossref, including titles, venues, volume and issue details, authors, publication years, and dated citation counts. Addedspectral-indices-citations.jsonto retain the citation-count history for every index. - Added
spectral-indices-references.bib, containing one generated BibTeX entry per unique retrieved source. Addedsource_metadata.how_to_citewith the shared BibTeX key and an APA citation for each associated index. - Added a VitePress content generator that:
- copies
CONTRIBUTING.mdinto the website; - reads the generated v1 catalogue and metadata;
- creates the spectral-index pages; and
- handles routes whose names differ only by letter case.
- copies
Changed
- Expanded the AI and Scientific Validation Policy with disclosure guidance for agent-authored contributions, including the model/provider used, who will handle follow-up replies, and a responsible human contact when available.
- Updated the automatic README generation to use the v1 catalogue. The README now groups linked index lists by sensing modality and application domain and generates its primary-property, band, polarization, hyperspectral-standard, supported-function, constant, and external-variable reference tables from the current v1 schema and outputs. Updated the contribution guide to target v1 definitions and validation while the migration remains experimental.
- Renamed the generated v1
source.source_metadata.citationsproperty tocitations_metrics. In addition to the latest citation count and retrieval date, it now provides deterministic ranks and citation-count percentiles across the complete cited catalogue, within the same application domain, and within an inclusive five-year publication-age window. Each comparison object records the size of its own similar-age cohort. - Renamed the previous v1
MSAVIdefinition toMSAVI2, matching the name of its closed-form recursive formula. Added the distinct soil-line-dependent MSAVI formula with itsgammaconstant. The v0 definition remains unchanged. - Replaced the broad-band v1 CRI550 and CRI700 approximations with their original hyperspectral formulas,
(1 / R510) - (1 / R550)and(1 / R510) - (1 / R700). The v0 definitions remain unchanged. - Replaced the broad-band v1 PSRI approximation
(R - B) / RE2with the original hyperspectral formula(R678 - R500) / R750, and updated its name to Plant Senescence Reflectance Index. The v0 definition remains unchanged. - Renamed the initial RBR1 through RBR5 catalogue keys and acronyms to URBR1 through URBR5 to distinguish untransformed from scatter-adjusted ratios.
- Renamed the required v1 spectral-index properties
short_nametoacronymandlong_nametoname. Neither property is required to be unique. - Replaced the v1
referencestring with a structuredsourceobject. The contributor provides its requiredsource_linkand may optionally provide descriptivesource_metadatamarked withsource: contributor. Citation counts and citation formats remain generated-only. For DOI links, a successful or cached Crossref record replaces contributed metadata as the authoritative record; contributed metadata is retained when Crossref has no record. Generation also addssource_link_status,source_link_type, and source-companion metadata. - Changed the scheduled catalogue refresh from daily to weekly. Crossref responses are cached for seven days and shared by every index using the same DOI.
- Classified EVI as an article and NDVI and TVI as conference-paper sources in the v1 catalogue.
- Split formula constants from bands in v1. Constant-using indices now submit a description and optional numeric default for every formula constant, while
bandscontains spectral and radar inputs. The generatedconstants.jsongroups these definitions first by standard constant and then by index. Constant definitions can also include condition-specificsuggested_valuesand a general two-numbersuggested_range. - Replaced the synthetic kernel operands in the v1 kEVI, kNDVI, kRVI, kVARI, and kIPVI formulas with explicit
kernel(X, Y)calls. Removed all fourteenkXYvalues from the v1Bandsregistry; generated kernel-index band lists now contain only their underlying observed inputs. kEVI additionally defines theLconstant exposed bykernel(N, L). - Moved the required v1
application_domainintoclassification. The five kernel indices now use vegetation with the kernel family. The thirteen radar indices use the radar family and vegetation application, except NDPolI, which uses the new geology application. - Split radar polarizations from spectral and thermal bands in v1. Generated
bandsno longer containsHH,HV,VH, orVV; those inputs are now written topolarizations, whileclassification.sensing_modalitiesdistinguishes multispectral, thermal, and radar requirements. - Separated formula inputs supplied outside spectral data into a new v1
Externalregistry.PARis now an external variable rather than a constant, and NIRvP supplies its required, description-only definition throughexternal_variables. Generated catalogue and CSV records include this property, whileexternal_variables.jsongroups definitions by external-variable standard and index. - Changed the OCVI exponent constant from
cexptocin v1 to preserve the notation used by its original source, with OCVI-specific metadata stored independently from other indices that also use thecstandard. - Changed the GDVI exponent constant from
nexptonin v1 to preserve the notation used by its original source, with GDVI-specific metadata stored independently from RWI's use of the samenstandard. - Changed the ATSAVI formula in v1 to replace its hard-coded
0.08adjustment with the source-definedXconstant. Added the ATSAVI-specificX,sla, andslbdescriptions and defaults, includingX = 0.08. - Changed the v1 constant standard used by NDWIns from
alphatoaand the standard used by NDSInw frombetatob. Added their index-specific descriptions and retained the submitted defaults ofa = 2.0andb = 0.05. - Completed the first v1 metadata pass for all 45 indices that use registered constants. Their 75 per-index definitions now include the submitted descriptions, defaults where universal values are appropriate, and source-specific suggested values and ranges.
- Changed the GARI formula in v0 and v1 to apply an explicit atmospheric-correction parameter,
lmb, to(B - R). Added its index-specific v1 description and a default oflmb = 1.0. - Migrated catalogue validation from Pydantic 1 to Pydantic 2.
- Replaced legacy Pydantic validators and configuration with
field_validator,ConfigDict, and Pydantic 2 serialization. - Removed the custom
orjsonserialization configuration in favor of the standard Pydantic 2 and JSON serialization paths. - Added explicit string element types to the generated
bandsandplatformslists in the v0 model. - Consolidated catalogue-generation dependencies in
requirements.txtand test dependencies inrequirements-test.txt. - Moved the preserved v0 catalogue generator from
main.pytosrc/main_v0.py. - Moved the README generator from
readme.pytoreadme/readme.py. - Updated the scheduled generation workflow to run the v0 generator, v1 generator, VitePress content generator, and README generator.
- Modernized the test workflow to run on Python 3.10, 3.11, and 3.12 with pip dependency caching and read-only repository permissions.
- Updated the generation workflow to use Python 3.10, dependency caching, and explicit write permissions.
- Updated README links and badges to use the
awesome-spectral-indices/awesome-spectral-indicesorganization repository. - Updated the README and website to use theme-aware light and dark logo assets, and retained the previous artwork as
docs/public/legacy-logo.png. - Added a README migration notice explaining that the old website is no longer available, the existing API remains usable, and index submissions remain open.
- Updated contribution and download links to point to their current repository locations.
- Expanded the new-index issue template to list all currently supported application domains.
Removed
- Removed SR3 from v1 because its broad-band representation corresponds to the newly represented hyperspectral SARBR5 index. SR3 remains available in v0.
- Removed the generated
platformsproperty from v1 spectral-index records. The v0 catalogue continues to generate it. - Removed the retired Read the Docs configuration and links.
- Removed the former Sphinx documentation project, including its configuration, build files, dependency file, reStructuredText pages, and generated application-domain tables.
- Removed direct dependency installation commands from GitHub Actions in favor of the repository requirements files.
Fixed
- Replaced the unavailable CiteSeerX source link shared by AVI, BI, and SI with an operational publication page.
- Corrected the v1 ARVI and SARVI formulas so the atmospheric-resistance coefficient
gammais applied to the published(B - R)term. The v0 definitions remain unchanged. - Corrected the Aerosols band name in the band metadata.
- Corrected the Landsat 9 coastal aerosol platform label, which previously identified the platform as Landsat 8.