Python package to download and preprocess High Resolution Vegetation Phenology and Productivity products (HR-VPP) from Copernicus Land Monitoring Service.
The VPP_Index dataset (EO:EEA:DAT:CLMS_HRVPP_VI) currently returns 404 errors on WEkEO.
This dataset, which contained daily vegetation indices (LAI, FAPAR, NDVI, PPI), appears to have been discontinued or moved since 2024.
VPP_ST(Seasonal Trajectories): Contains PPI, QFLAGVPP_Pheno(Phenology & Productivity): Contains SOSD, MAXD, EOSD, LENGTH, AMPL, TPROD, etc.
- For PPI → Use
VPP_ST - For phenology parameters → Use
VPP_Pheno - For LAI, FAPAR, NDVI → Currently not available via PyVPP (see alternatives below)
See DATASETS_AVAILABLE.md for more details.
pip install pyvppimport pyvpp
# Create .hdarc file with your credentials
pyvpp.create_hdarc("your_wekeo_username", "your_wekeo_password")import pyvpp
# Download phenology parameters (annual products)
downloader = pyvpp.wekeo_download(
dataset='VPP_Pheno', # ✅ Working
shape='path/to/your/area.shp', # or DEIMS ID
dates=['2020-01-01', '2020-12-31'],
products=['SOSD', 'MAXD', 'EOSD', 'LENGTH']
)
downloader.run()import pyvpp
# Download PPI (Plant Phenology Index) every 10 days
downloader = pyvpp.wekeo_download(
dataset='VPP_ST', # ✅ Working
shape='path/to/your/area.shp',
dates=['2020-01-01', '2020-12-31'],
products=['PPI', 'QFLAG']
)
downloader.run()import pyvpp
# ⚠️ WARNING: This dataset is currently returning 404 errors
# VPP_Index (LAI, FAPAR, NDVI) is not available as of January 2025
downloader = pyvpp.wekeo_download(
dataset='VPP_Index', # ⚠️ Returns 404 error
shape='path/to/your/area.shp',
dates=['2020-01-01', '2020-12-31'],
products=['LAI', 'FAPAR'] # Not available
)
# This will fail with: 404 Client ErrorStatus: Working
Products:
- SOSD (Start of Season Date)
- EOSD (End of Season Date)
- MAXD (Maximum Date)
- MINV (Minimum Value)
- MAXV (Maximum Value)
- AMPL (Amplitude)
- LENGTH (Length of Season)
- LSLOPE (Left Slope)
- RSLOPE (Right Slope)
- SPROD (Seasonal Productivity)
- TPROD (Total Productivity)
- SOSV (Start of Season Value)
- EOSV (End of Season Value)
Status: Working
Products:
- PPI (Plant Phenology Index)
- QFLAG (Quality Flag)
Status: NOT AVAILABLE (404 Error as of January 2025)
Products (no longer accessible):
LAI (Leaf Area Index)FAPAR (Fraction of Absorbed Photosynthetically Active Radiation)NDVI (Normalized Difference Vegetation Index)PPI (now available in VPP_ST)
Status: Working
Products: SL_2_LST___
You can use DEIMS site IDs instead of shapefiles:
downloader = pyvpp.wekeo_download(
dataset='VPP_Pheno',
shape='deimsid:https://deims.org/bcbc866c-3f4f-47a8-bbbc-0a93df6de7b2',
dates=['2020-01-01', '2020-12-31'],
products=['SOSD', 'MAXD']
)PyVPP performs the following operations:
- Downloads all Sentinel-2 tiles that intersect your area of interest
- Filters tiles by UTM zone
- Creates mosaics for each date and product
- Clips mosaics to your exact boundaries
- Saves final products as
mosaic_YYYYMMDD_PRODUCT_rec.tif - Cleans up intermediate files
downloader = pyvpp.wekeo_download(
dataset='VPP_Pheno',
shape='area.shp',
dates=['2020-01-01', '2020-12-31'],
products=['SOSD'],
user='your_username', # Direct credentials
password='your_password'
)If you have an old .hdarc file (pre-March 2024):
import pyvpp
pyvpp.clean_old_hdarc() # Removes obsolete 'url:' line# Execute steps individually
downloader.download() # Only download
downloader.mosaic_and_clip() # Only mosaic and clip
downloader.clean() # Only clean intermediate filesSince VPP_Index is currently unavailable, here are alternatives:
// Calculate NDVI from Sentinel-2
var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterDate('2020-01-01', '2020-12-31')
.filterBounds(geometry);
var addNDVI = function(image) {
var ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI');
return image.addBands(ndvi);
};- Pre-computed LAI, FAPAR, NDVI available
https://land.copernicus.eu/global/products/
- 300m resolution (not 10m like HR-VPP)
import rasterio
import numpy as np
# NDVI = (NIR - Red) / (NIR + Red)
with rasterio.open('sentinel2.tif') as src:
red = src.read(4) # Band 4
nir = src.read(8) # Band 8
ndvi = (nir - red) / (nir + red)If you get a 404 error with VPP_Index:
requests.exceptions.HTTPError: 404 Client Error: Not Found for url:
https://gateway.prod.wekeo2.eu/hda-broker/api/v1/datasets/EO:EEA:DAT:CLMS_HRVPP_VI
Solution: Use VPP_Pheno or VPP_ST instead (see examples above).
# Recreate your .hdarc file
import pyvpp
pyvpp.create_hdarc("username", "password")This usually means:
- Date range is outside available data
- Area of interest has no coverage
- Product name is misspelled
Check the official documentation for data availability.
- Python >= 3.8
- hda >= 2.18
- geopandas >= 0.8.2
- rasterio >= 1.3
- deims >= 4.0
- HR-VPP Documentation: https://land.copernicus.eu/pan-european/biophysical-parameters/high-resolution-vegetation-phenology-and-productivity
- WEkEO Help Center: https://help.wekeo.eu/
- PyVPP Repository: https://github.com/Digdgeo/PyVPP
- Report Issues: https://github.com/Digdgeo/PyVPP/issues
If you use PyVPP in your research, please cite:
García-Díaz, D. (2025). PyVPP: Python package for HR-VPP data access and processing.
https://github.com/Digdgeo/PyVPP
MIT License - see LICENSE file for details
Contributions are welcome! Please feel free to submit a Pull Request.
- Updated .hdarc format for new HDA API (March 2024+)
- Added direct credential support
- Improved error handling
- Added helper functions: create_hdarc(), clean_old_hdarc(), delete_hdarc()
- Note: VPP_Index dataset currently unavailable (404 error)
- Previous stable version
- Works with old HDA API (pre-March 2024)
Last updated: January 2025
Status: VPP_ST ✅ | VPP_Pheno ✅ | VPP_Index