Skip to main content

What is rPPG?

Remote photoplethysmography (rPPG) extracts heart rate from subtle color changes in facial skin captured by a standard camera. No contact sensor is needed — just a webcam.

Installation

pnpm add @elata-biosciences/rppg-web
Requirements: Node.js 18+, browser with camera access and WebAssembly support.

Basic Usage

import { RppgProcessor } from "@elata-biosciences/rppg-web";

const processor = new RppgProcessor("wasm", 30); // backend, sampleRate

// Feed green-channel intensity from face ROI each frame
processor.pushSample(performance.now(), greenIntensity);

// Get current heart rate estimate
const metrics = processor.getMetrics();
console.log("BPM:", metrics.bpm);
console.log("Quality:", metrics.quality);

RppgProcessor

The main class that processes a stream of color samples and produces heart rate estimates.

Constructor

new RppgProcessor(backend: Backend, sampleRate: number, windowSeconds?: number)
ParameterTypeDescription
backend"wasm" or "native"Processing backend
sampleRatenumberExpected frames per second (e.g., 30)
windowSecondsnumberAnalysis window length (default: 10)

Pushing Samples

Three methods for different input formats:
// Green channel only
processor.pushSample(timestampMs, intensity);

// RGB channels
processor.pushSampleRgb(timestampMs, r, g, b, skinRatio?);

// RGB with motion and clip metadata
processor.pushSampleRgbMeta(timestampMs, r, g, b, skinRatio?, motion?, clipRatio?);

Getting Metrics

const metrics: Metrics = processor.getMetrics();
Metrics includes:
FieldTypeDescription
bpmnumberEstimated heart rate in BPM
qualitynumberSignal quality (0-1)
spectralBpmnumberSpectral analysis estimate
acfBpmnumberAutocorrelation estimate
confidencenumberOverall confidence

Particle Tracker

Enable for more robust BPM tracking:
processor.enableTracker(minBpm?, maxBpm?, numParticles?);

State Persistence

Save and restore processor state:
const snapshot = processor.getStateSnapshot();
// ... later
processor.loadStateSnapshot(snapshot);

Next

Frame Sources

MediaPipe face detection and camera capture

Calibration

Muse fusion and calibration models

Camera Integration Guide

End-to-end rPPG setup