A computational layer for CPET

E

Oxynet

Physiological intelligence for exercise testing.

Oxynet extracts physiological structure from cardiopulmonary exercise test signals and returns it as structured measurements: consistent across protocols, populations and devices, and available to people, clinical software and AI agents through the same API.

20
Metabolimeter formats read
REST, MCP, Python
Ways to call it
12
Peer-reviewed papers
↓

See how it works

From Raw Data to Clinical Insight

Drag the slider to see how raw CPET measurements are transformed into standardised intensity domains, automatically detecting LT and RCP to classify every breath.

Raw CPET data
Oxynet analysis

Intensity Domains

Moderate Domain

Below LT

VOβ‚‚ reaches steady state within minutes. Blood lactate returns to resting levels. Exercise is fully sustainable.

Heavy Domain

LT β†’ RCP

A VOβ‚‚ slow component emerges. Lactate rises but stabilises above baseline. Prolonged exercise remains possible.

Severe Domain

Above RCP

Respiratory compensation is engaged. Lactate and VOβ‚‚ rise continuously toward VOβ‚‚max. Exercise tolerance is time-limited.

Based on Keir et al., Sports Medicine (2022)

Ready to run one of your own?

Drop a real CPET file into the app

Free inferences in the browser. Cortex, COSMED, MetaSoft and more, read as exported. Nothing is stored.

Open app.oxynet.net β†’

The Problem & Solution

Standardising CPET Interpretation

Problem

Interpretation variability limits clinical utility

CPET interpretation is variable and often requires manual adjustment. Different software tools can produce inconsistent results, increasing clinician workload and introducing uncertainty into clinical decision-making.

Solution

A measurement layer under the interpretation

Oxynet computes the same quantities the same way on every recording, whatever produced it, so the reading a clinician gives is anchored to numbers that do not move between sessions, sites or systems.

Oxynet is a computational engine, not a replacement for clinical expertise. It measures; the reading stays with the clinician.

What changed

From classification to measurement

Asking a CPET where VT1 and VT2 sit is one question. Asking what physiological structure the signals contain is a larger one, and it is the question the engine is now built to answer.

Classification

CPET recording
Match against a defined pattern
VT2 = 12.4 min Β· EOV = yes / no

A verdict. Two patients either side of the same cut-off are reported as different. Two patients at opposite ends of one category are reported as the same.

Measurement

CPET recording
Continuous physiological signals
Quantitative features
Structured physiological description

Numbers with units. Each one carries where it sits in the test, how far it stands above that recording's own background, and whether the channel it came from can be believed.

A worked example: oscillatory ventilation

Exercise oscillatory ventilation is usually reported as present or absent. Oxynet returns the oscillation itself: each episode with its period, its amplitude as a share of ventilation, how many times it exceeds the background variation of that recording, whether end-tidal COβ‚‚ moves in antiphase to corroborate it, whether the swing grew or faded across the test, and where the burden peaked.

Located

An oscillation that fades during exercise is a different finding from one that emerges late.

Corroborated

A ventilatory swing that end-tidal COβ‚‚ does not follow is reported as exactly that.

Bounded

Where a channel is clipping, the numbers it feeds are returned as bounds, not measurements.

Oscillation analysis is in beta and has been developed on a single heart-failure cohort. It has not yet been tested for transportability to a second population, and is offered for research use on that basis.

What Oxynet produces

Structured physiological measurements

Every CPET processed by Oxynet returns the same structured set of results, in the same shape, regardless of the device, protocol or population that produced it.

Routine interpretation

Thresholds and intensity domains

  • VT1 and VT2, in time, VΜ‡Oβ‚‚ and VΜ‡COβ‚‚
  • Every breath classified moderate Β· heavy Β· severe
  • Detected consistently across protocols and ergometers

The entry point, and the part with the longest validation record. Same input, same output, which is what makes longitudinal and multi-centre comparison possible.

Quantitative phenotyping

beta

Ventilatory oscillation analysis

  • Each episode: period, amplitude, cycles, location in the test
  • Clarity: how far it stands above the recording’s own background
  • End-tidal COβ‚‚ corroboration and phase agreement
  • Whether the swing damped, held steady or grew

Not a yes/no verdict. The oscillation is measured and located, so a rhythm that fades during exercise is reported as a different finding from one that emerges late.

Derived quantities

Standard CPET measurements

  • VΜ‡Oβ‚‚max, VΜ‡Emax, RERmax, each a 20 s rolling average rather than one breath
  • Oβ‚‚ pulse
  • VΜ‡E/VΜ‡COβ‚‚ slope as a profile over the test, with bootstrap intervals

Computed on request against the same recording, so a report and its underlying numbers cannot disagree. The V̇E/V̇CO₂ slope is returned as a profile because a slope that climbs across a test is a different finding from a flat one.

Signal integrity

Whether the numbers can be believed

  • Cross-channel gas checks: VΜ‡COβ‚‚ against VΜ‡E, PetCOβ‚‚ against PetOβ‚‚
  • Sampling adequacy: which oscillation periods this file can resolve
  • Clock integrity: many carts restart the clock at each phase

The measurement nobody asks for and everybody needs. These describe the recording, not the patient, and a repair is always reported rather than silently applied.

No output carries a confidence score. Nothing here is calibrated against clinical outcomes, so a percentage would be a number without a meaning. Where a recording cannot support an analysis, Oxynet says so, and says why.

Programmatic access

Built for machines, agents and clinical systems

Oxynet exposes CPET interpretation as structured data, so clinical software, research pipelines and AI assistants can call the physiological models directly, without a person deciding, one test at a time, to use it.

REST

HTTP API

/v1/cpet Β· /v1/cpet/{id}/analyze

Upload the vendor file exactly as exported and work with the handle you get back. Twenty metabolimeter formats are detected automatically, so nothing upstream has to normalise units or columns first.

MCP

Model Context Protocol

/oxynet-mcp

A native connector for Claude, Gemini CLI and any MCP client. An assistant asked to analyse a folder of tests calls the physiological models directly, so the signals never travel through the conversation.

Schema

OpenAPI 3.0

/v1/openapi.json

Importable into a custom GPT action, a client generator, or an integration platform. Every endpoint, parameter and response shape is machine-readable.

Plain text

Agent documentation

/llms.txt Β· /llms-full.txt

A web page returns an empty shell to anything that fetches it. The integration guide is also served as plain text, so an agent can read it in one request.

The test happens. The interpretation follows.

The unit of work is not a person uploading a file. A testing service that runs thousands of CPETs a year can have every one of them interpreted as it is recorded: no export, no manual transfer, no decision to make per test. That is the integration Oxynet is built for.

# any MCP client, one line

claude mcp add --transport http oxynet \

https://app.oxynet.net/oxynet-mcp --header "X-API-Key: ..."

# then, in the conversation

"analyse every CPET in this folder and tell me which

ones show oscillatory ventilation"

No result carries a confidence score, and an assistant should not invent one. Nothing here is calibrated against clinical outcomes. Where a recording cannot support an analysis, the API says so and says why. That refusal is the correct thing to report, not an obstacle to work around.

Who it's for

Built for Your Context

The same engine, reached the way that fits your context: a browser, an API call, an assistant, or a Python import.

πŸ₯

For clinics & hospitals

Consistent interpretation at scale

Reduce variability across clinicians and sessions. Oxynet reads your metabolimeter export as exported and returns the same structured measurements every time, with no change to how you capture data.

Open the app β†’
βš™οΈ

For manufacturers & software partners

A physiology engine behind your system

Call Oxynet from the software you already ship. Send the recording, receive structured measurements, display them in your own interface. Your product, your reporting, our physiology.

See the integration β†’
πŸ”¬

For researchers

A cohort, analysed in one pass

Point an API client, or an AI assistant over MCP, at a directory of tests and get structured results back per recording. The open-source Python package covers local inference and synthetic data generation.

Analyse a cohort β†’

How it works

Simple to Use, Simple to Integrate

For clinics & hospitals

Direct use

  1. 1Upload or stream CPET time-series data from your existing system.
  2. 2Oxynet processes the signals and detects ventilatory thresholds automatically.
  3. 3Receive structured outputs (intensity domains, VT1, VT2) ready for clinical review.

For manufacturers & software partners

API integration

  1. 1Integrate the Oxynet API into your existing CPET software or device platform.
  2. 2Send CPET data via standard API calls, with no change to your data capture pipeline.
  3. 3Receive standardised interpretation outputs and display them within your software.

Deployment

Available in Three Formats

One engine, three doors. Start in the browser, move to the API when it should happen automatically, and use the open-source package when the work belongs in a script.

πŸ”Œ
Integration-ready

API & MCP

REST for clinical software, MCP for AI assistants, one key for both. Twenty vendor formats are detected automatically, so nothing upstream needs converting.

Read the docs β†’
🌐
No setup required

Web app

Drop a raw metabolimeter file into the browser at app.oxynet.net and read the result. Free inferences, nothing stored, no installation.

Open app.oxynet.net β†’
🐍
Open source

Python package

The pyoxynet research package: run inference locally, generate synthetic CPET data, and build custom pipelines.

Install from PyPI β†’
πŸ”—

Designed to integrate, not replace

Oxynet runs on top of existing CPET systems. It reads CPET time-series and returns structured outputs over the API or in an embedded deployment, without changes to your data capture hardware, clinical workflow, or reporting interface.

Scientific Validation

Measured against expert interpretation

Threshold detection is evaluated against expert labelling and shows strong agreement, documented across peer-reviewed publications. Agreement with an expert is the floor the engine has to clear. The measurements it makes beyond that are the reason to build on it.

VT1
First ventilatory threshold
Strong agreement with expert labelling
VT2
Second ventilatory threshold
Evaluated across multiple populations
12
Peer-reviewed papers
Methodology and evaluation

Threshold detection carries the longest evidence record here. Oscillation analysis is beta, developed on a single heart-failure cohort and not yet tested for transportability to a second population. Both are research software, and neither is a medical device.

View publications β†’

Open Source

The Pyoxynet Package

The open research side of Oxynet: the models and tools, in a package you can import. Built with Keras and TensorFlow, models available in efficient TFLite format.

πŸ”¬
TFLite

Inference Model

Estimates exercise intensity domains from CPET data with high accuracy. Supports VOβ‚‚, VCOβ‚‚, VE, PetOβ‚‚, PetCOβ‚‚, VE/VOβ‚‚, and VE/VCOβ‚‚ inputs.

βš—οΈ
CGAN

Generator Model

Creates realistic synthetic CPET data for research and validation using a Conditional GAN (CGAN) architecture.

Quick Start

Code Examples

Requires Python 3.8+. Pyoxynet automatically handles data interpolation and supports second-by-second, breath-by-breath, and averaged CPET data formats.

terminal
pip install pyoxynet

Research

Scientific Publications

Peer-reviewed research, reviews, and articles behind the Oxynet project.

Research

AI-Driven Analysis of CPET to Identify Gas Exchange and Ventilatory Thresholds

Evaluates Oxynet for detecting lactate threshold and respiratory compensation points, showing performance comparable to expert evaluators with negligible differences in VOβ‚‚ at both thresholds.

Sports Medicine Β· 2026

Research

AI for CPET Interpretation

Deep learning approach for automatic interpretation of cardiopulmonary exercise test data using neural networks.

Biomedical Signal Processing and Control Β· 2023

Review

AI Technologies in Exercise Data Processing

Comprehensive review of machine learning and AI techniques applied to exercise physiology data analysis.

Sport Sciences for Health Β· 2019

Research

LSTM Networks for VOβ‚‚ Estimation

Application of long short-term memory recurrent neural networks for estimating oxygen uptake during exercise.

PLOS ONE Β· 2020

Research

LSTM for Intensity Domain Estimation

Using LSTM neural networks for automatic detection of exercise intensity domains in CPET data.

European Journal of Sport Science Β· 2019

Research

Crowdsourcing and CNN for Intensity Domain Determination

Combining crowdsourced expert labels with convolutional neural networks for CPET intensity domain classification.

European Journal of Sport Science Β· 2021

Research

Conditional GANs for Synthetic CPET Data

Generating realistic synthetic cardiopulmonary exercise test data using conditional generative adversarial networks.

Preprint

Research

Regression, Generation, and Explanation

Multi-task deep learning framework combining regression, data generation, and explainability for CPET analysis.

Sensors (MDPI) Β· 2023

LinkedIn

Oxynet: A Collective Intelligence Approach

Overview of the Oxynet project: how collective intelligence and AI are transforming CPET interpretation.

Blog

AI in CPET Data Interpretation

A deep dive into how AI can be used to automatically interpret cardiopulmonary exercise test data.

Medium

Automatic Interpretation of CPET with Deep Learning

Step-by-step guide to using the Pyoxynet Python package for automatic CPET inference with deep learning.

Medium

Generating Realistic CPET Data with Python

How to use the Pyoxynet CGAN model to generate synthetic but realistic cardiopulmonary exercise test datasets.

Get in Touch

Contact

Interested in collaboration or have questions about the project?

Feedback & Issues

Oxynet Team

Bug reports, feature requests, and general inquiries about the Oxynet project.

oxynetcpetinterpreter@gmail.com

Principal Investigator

Andrea Zignoli

Research collaborations, academic partnerships, and scientific enquiries.

andrea.zignoli@unitn.it