PIVtools
An open-source Python framework for particle image velocimetry (PIV) analysis, integrating planar, stereoscopic, and ensemble PIV pipelines with a React-based GUI and Dask-backed distributed processing.
PIVtools provides an end-to-end workflow: image loading, preprocessing, calibration, correlation, and visualisation driven from a single configuration file. Computationally intensive routines are implemented in C and parallelised with OpenMP and Dask, scaling from workstations to HPC clusters. Validation against synthetic channel flow at Re_τ = 1000 reproduces DNS mean velocity profiles to within 1% down to y⁺ ≈ 10 with instantaneous PIV, and y⁺ ≈ 1 with ensemble PIV.
Features
- Planar, stereoscopic, and ensemble PIV pipelines
- Direct Reynolds stress extraction from ensemble correlation maps
- React-based GUI for interactive analysis
- Optimised C extensions parallelised with OpenMP and Dask
- Scales from local workstations to HPC clusters
- Complete pipeline from raw image import to vector field visualisation
Installation
pip install pivtools
This installs the complete toolkit including:
- Core utilities for image handling and vector processing
- Command-line interface (
pivtools-cli) for automated workflows - React-based GUI (
pivtools-gui) for interactive analysis
Pre-compiled C extensions are included for Windows, macOS, and Linux.
Quick Start
Initialise a workspace
pivtools-cli init
Creates a default config.yaml in the current directory.
Run PIV analysis (command-line)
pivtools-cli run
Runs the PIV pipeline using config.yaml in the current directory.
Launch the GUI
pivtools-gui
Starts the React-based GUI for interactive configuration and execution.
Configuration
Both pivtools-cli and pivtools-gui use config.yaml in the current working directory. On first launch, a default config.yaml is copied from the package if none exists.
For detailed configuration options, see piv.tools/manual.
Reproducing the paper
Validation data, benchmark scripts, synthetic image generator configs, calibration images, and pre-computed figures are deposited in the University of Southampton Pure repository:
DOI: [pending]
This includes everything needed to reproduce the figures in the accompanying SoftwareX paper, including ground-truth statistics, CSV data for independent replotting, and scripts for end-to-end regeneration from PIVtools output.
Requirements
- Python 3.12+
Citation
If you use PIVtools in your research, please cite:
Taylor, M. T., Lawson, J. M., & Ganapathisubramani, B. (2026). PIVtools: A comprehensive open source software for particle image velocimetry. SoftwareX. [DOI pending]
License
GNU General Public License v3.0 or later (GPL-3.0-or-later) — see LICENSE for the full text.
Note: Redistribution of PIVtools, modified or unmodified, must be under the same licence and must make the corresponding source available. The compiled C libraries (libbulkxcorr2d, libfusedwarp, libkspacefit) are original work built from sources shipped in the sdist and link only OpenMP and libm — no third-party numerical library is bundled or linked. See the LICENSE and NOTICE files for details.
Contributing
Contributions are welcome. Please see the GitHub repository for issues and pull requests.
Metadata
Release files for pivtools 0.7.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 | |
|---|---|---|---|
| pivtools-0.7.0.tar.gz | 2.0 MB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pivtools-0.7.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| pivtools-0.7.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | Python 3 | none | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| pivtools-0.7.0-py3-none-macosx_15_0_arm64.whl | Python 3 | none | macOS 15.0+ ARM64 | Details |
Total release size: 12.2 MB
Release files / pivtools-0.7.0.tar.gz
| Download URL | pivtools-0.7.0.tar.gz |
|---|---|
| Size | 2.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
076f2ac6b538971cc2965bc55d74f81e42ce70e3bb4234b0c0a052a4f7b63c08
|
|
BLAKE2b-256 checksum How to use checksums |
e248cceeecd08433aed4cdf131cc80461913c9acb9485ec9d501eceb01ead593
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pivtools-0.7.0-py3-none-win_amd64.whl
| Download URL | pivtools-0.7.0-py3-none-win_amd64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
0a6e786078a99d7f602b000af0ed436a113a67cb77ea3018b68091cd01f1ee01
|
|
BLAKE2b-256 checksum How to use checksums |
5935733a66adaa6f5c56866f78bcdd5c58729e38ad681b3d735c497ab31e7e9e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pivtools-0.7.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pivtools-0.7.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
d197d8210c77116fecd4b4d81b184cf98e94c29c6b697930b3d5b2671ea55e7e
|
|
BLAKE2b-256 checksum How to use checksums |
3c3d0dbbfee1403c24fadd0121db2c57abb255950717a9a671256c00aeb5e1ec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pivtools-0.7.0-py3-none-macosx_15_0_arm64.whl
| Download URL | pivtools-0.7.0-py3-none-macosx_15_0_arm64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | Python 3 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ad15b968767f6ca22f29b10f9ff9314240284e25f817ad5fde7211b6dd4a1598
|
|
BLAKE2b-256 checksum How to use checksums |
70eca112a0bbdbdd5920083e834cf1335f97381e4716e98f0e3ddbe69a62bda3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|