pyPPG
pyPPG: a python toolbox for PPG morphological analysis.
What it is and what it does
pyPPG is a Python toolbox for analyzing finger photoplethysmogram (PPG) signals—the optical signals captured from fingertip blood flow. It automates the full pipeline of PPG analysis: loading raw signals from multiple file formats (MAT, TXT, CSV, EDF), preprocessing to remove noise and compute signal derivatives, detecting individual pulse waves by identifying systolic peaks and pulse onsets/offsets, and extracting a comprehensive set of 74 biomarkers (pulse wave features) that characterize cardiac and vascular properties. The toolbox is built on validated algorithms tested against public PPG databases and provides a signal quality index.
The package is intended for researchers and clinicians who need to extract standardized cardiac biomarkers from continuous PPG recordings. It handles real-time analysis of long-term recordings and abstracts away the complexity of beat detection and fiducial point identification, allowing users to focus on downstream analysis or clinical interpretation. The toolbox depends heavily on scipy, numpy, and pandas for numerical computation, plus wfdb and mne for signal I/O, and includes a web-based GUI via Eel for interactive use.
Use it for:
- Extract heart rate and pulse wave morphology features from finger PPG recordings for cardiovascular research or clinical studies.
- Preprocess and segment PPG signals from wearable devices or clinical monitors to identify individual heartbeats and their fiducial points.
- Batch analyze multiple PPG files in different formats (MAT, CSV, EDF) to compute standardized biomarkers for population-level health assessment.
- Develop custom cardiac analysis pipelines by using pyPPG's API to load, filter, and extract biomarkers within your own Python code.
- Assess PPG signal quality and detect artifacts in continuous recordings before downstream analysis or machine learning model input.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Analyzes finger photoplethysmogram (PPG) signals to detect pulse waves, identify fiducial points, and extract biomarkers from continuous PPG recordings.
Yes, with conditions. Install if you work with finger PPG signals and need validated, standardized biomarker extraction—the toolbox is well-documented, has no known vulnerabilities, and is actively maintained at the repository level. However, be aware that the last PyPI release was over a year ago (aging status), the AGPL v3 license requires open-source compliance or internal-only use, and the 66 runtime dependencies create a large installation footprint. Verify that the aging release cycle does not conflict with your stability or support expectations.
Install
pyppg on PyPI
pip
pip install pyppguv
uv add pyppgpoetry
poetry add pyppgInstalling pyPPG
Before you install
Low friction installation via pip. Maintenance status is aging—last release was over a year ago (2024-07-21), though the repository remains active with a recent commit (2025-04-28). The package carries 66 runtime dependencies including scipy, numpy, pandas, and visualization libraries; this large dependency tree increases the surface area for transitive issues.
License in practice
Licensed under AGPL v3, which requires that any modifications or derivative works distributed must also be released under AGPL v3 and make source code available. This is a strong copyleft license; use it only if you can comply with open-source redistribution obligations or if your use is internal only.
Quickstart
pip install pyPPG
import pyppg
# Load and analyze a PPG signal from a file
ppg_signal = pyppg.load_signal('signal.mat')
biomarkers = ppg_signal.get_biomarkers()
Requires Python >= 3.10. The package has a large dependency tree (66 runtime packages) which may take time to resolve and install.
Verify before relying
- Whether the aging maintenance status (last release 754 days ago) affects real-world usability or if the package is stable enough for production use.
- Performance characteristics and scalability for processing long-term or high-frequency PPG recordings.
- Whether all 66 runtime dependencies are strictly necessary or if some are optional/unused in typical workflows.
Package facts
| License | not declared (agpl) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 66 — scipy, numpy, dotmap, pandas, wfdb, mne, Eel, Jinja2, MarkupSafe, Pillow, altgraph, appdirs, attrs, auto-py-to-exe, boltons, bottle, bottle-websocket, certifi, cffi, chardet, charset-normalizer, colorama, contourpy, cycler, decorator, dotteddict, face, fonttools, future, gevent |
| Maintenance | aging — 754 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 95,143/month — #13,290 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: pyPPG-1.0.73-py3-none-any.whl
Tags
More Information Analysis packages
A drop-in replacement for Python's standard…
permissive · top 100 on PyPI
pyarrowpyarrow provides Python bindings to Apache…
permissive · top 100 on PyPI
networkxNetworkX provides data structures and…
permissive · top 1,000 on PyPI
snowflake-connector-pythonConnects Python applications to Snowflake data…
permissive · top 1,000 on PyPI
contourpyContourPy calculates contours of 2D…
permissive · top 1,000 on PyPI
snowflake-snowpark-pythonSnowpark Python provides APIs to query and…
permissive · top 1,000 on PyPI
neurokit2NeuroKit2 processes physiological signals (ECG,…
permissive · top 15,000 on PyPI
PeakUtilsPeakUtils detects peaks in 1D data and refines…
permissive · top 15,000 on PyPI
pupil-apriltagsPython bindings for the AprilTags v3 library,…
permissive · top 15,000 on PyPI
wfdbRead, write, process, and plot physiologic…
permissive · top 15,000 on PyPI
lalsuiteLALSuite provides data analysis routines for…
copyleft · top 15,000 on PyPI
edfioedfio reads and writes EDF, EDF+C, BDF, and…
permissive · top 15,000 on PyPI
rupturesDetects change points in time series and signal…
permissive · top 5,000 on PyPI
noisereduceReduces noise in audio and time-domain signals…
permissive · top 15,000 on PyPI
broadbeanBroadbean composes and manipulates pulse…
permissive · top 15,000 on PyPI
doppler-dspProvides a C99 digital signal processing…
permissive · top 15,000 on PyPI