An Open Python Ecosystem for GNSS-Transmissometry Canopy VOD Retrievals
canVODpy aims to be the central community-driven software suite for deriving canopy Vegetation Optical Depth (VOD) from the signal-to-noise ratio of the same GNSS signal, received at the same time by one receiver below the canopy and one with an unobstructed view of the sky.
Try it
The speedrun notebook goes through the whole pipeline on real test data, from receiver files to VOD, in your browser. All 21 notebooks are at canvodpy.eu/notebooks, each with its results and a link to open it in molab.
To run a notebook on your own machine instead, install uv and run:
uvx marimo edit --sandbox https://raw.githubusercontent.com/TUW-GEO/canvodpy-demo/main/03_convenience_speedrun.py
The notebooks download their test data on first use (about 350 MB).
Install
uv add canvodpy
canVODpy requires Python 3.14. It is tested on Linux, macOS (Apple silicon), and Windows.
Quick start
Create the settings file, check it, and process a week:
canvodpy config init --interactive # asks for your site and folders
canvodpy config validate --site MySite # lists what a run would process
canvodpy run --site MySite --start 2025001 --end 2025007
Days are given as YYYYDDD (year and day of year). The same from Python:
from canvodpy import Site
site = Site("MySite")
with site.pipeline() as pipeline:
for date_key, datasets in pipeline.process_range("2025001", "2025007"):
site.vod.compute_day(datasets, "canopy_01_vs_reference_01")
Start here walks through the first run step by step.
Packages
canvodpy installs all of them. Each can also be installed on its own.
| Package | What it does |
|---|---|
canvodpy |
The command line, the Site API and the processing pipeline |
canvod-readers |
Readers for RINEX, SBF, and NMEA files |
canvod-auxiliary |
Orbit and clock products, satellite angles |
canvod-store |
Icechunk stores for observations and VOD |
canvod-store-metadata |
Store metadata (DataCite, ACDD, STAC) and the STAC catalog |
canvod-vod |
VOD retrieval |
canvod-grids |
Hemispheric grids |
canvod-viz |
2D and 3D plots |
canvod-ops |
Preprocessing: temporal aggregation, grid cell assignment |
canvod-config |
The settings file and its checks |
canvod-preflight |
The canVOD file name convention |
canvod-utils |
Shared utilities |
Optional extensions, such as canvod-filemap for file names that don't
follow the convention, are in
canvodpy-extensions.
Development
Development needs uv and just.
git clone --recurse-submodules https://github.com/TUW-GEO/canvodpy.git
cd canvodpy
just check-dev-tools # checks that the tools are installed
uv sync
just hooks # installs the pre-commit hooks
just test
just check # lint, format, type check
just --list shows every command. The
contributor setup has the
details.
Documentation
All documentation is at canvodpy.eu:
- Start here: from installation to the first VOD
- Settings file
- Command line and Python
- Your own readers and VOD calculators
- Monorepo structure and developing with coding agents
Contributing
Contributions of all kinds are welcome. See CONTRIBUTING.md. First-time contributors: add yourself to CONTRIBUTORS.md in your pull request.
How to cite
If you use canVODpy, please cite it with its DOI,
10.5281/zenodo.18496233. This
DOI always leads to the newest version, and Zenodo also lists a DOI for
each version. CITATION.cff has the full citation, and GitHub
shows it in the "Cite this repository" menu.
License
Licensed under the Apache License 2.0.
This software is provided "as is" without warranty of any kind. See the Impressum for the full legal notice and AI disclosure.
Affiliation
Climate and Environmental Remote Sensing Research Unit (CLIMERS) Department of Geodesy and Geoinformation, TU Wien
Contact: support@canvodpy.eu
Metadata
Release files for canvodpy 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| canvodpy-1.0.0.tar.gz | 290.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| canvodpy-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 608.8 kB
Release files / canvodpy-1.0.0.tar.gz
| Download URL | canvodpy-1.0.0.tar.gz |
|---|---|
| Size | 290.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ad54d2c2406523767d7a6506840ff7ff97ede78290ecf8cdcac6598f61e9b97b
|
|
BLAKE2b-256 checksum How to use checksums |
cdf4c1f62a361c27dd756a6dbfc935c0eca8cdc07f7d678e15c009626d6f915f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / canvodpy-1.0.0-py3-none-any.whl
| Download URL | canvodpy-1.0.0-py3-none-any.whl |
|---|---|
| Size | 318.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2081c7cfd9428b992e0b8b9da0424b3e6c13945068d719b16c921bd6e7df9f23
|
|
BLAKE2b-256 checksum How to use checksums |
2324b4a1cbe20cd971da7a02cf2c5dee1ae9741e9907d6a8d3481824db81df9e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for canvodpy 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.