File formats
ECG waveforms
WFDB (.hea + .dat)
PhysioNet-style recordings. Upload both files together.
.hea— plain-text header (sample rate, signal names, format codes).dat— binary waveform samples
The backend uses the Python wfdb package to decode signals. Optional .atr annotation files are not required for preprocessing.
CSV
Single text file, one row per sample:
| Column | Content |
|---|---|
| 1 | Time in seconds (strictly increasing) |
| 2 | ECG amplitude (mV or arbitrary units) |
Header row is optional; the backend uses column order. Sample rate is inferred from median time step.
EDF
European Data Format for multi-channel recordings. On upload review, pick:
- Primary signal channel (ECG or PPG)
- Optional respiration channel (must differ from primary)
RR intervals (rr_csv)
CSV with an rr_ms column containing inter-beat intervals in milliseconds. Skips waveform preprocessing — HRV runs directly.
Typical source: wearable HRV exports, precomputed beat series.
Blood pressure (bp_csv)
CSV with systolic/diastolic columns and timestamps. Used by analyze_bp for variability and dipping metrics.
PPG
Same upload paths as ECG (CSV, WFDB, EDF). Detected as PPG signal type; use preprocess_ppg and compute_prv.
Subject metadata CSV
| Column | Required | Purpose |
|---|---|---|
external_id | Yes | Subject identifier (P001, …) |
age, sex, diagnosis, medications, treatment_group | No | Standard cohort fields |
| Any other columns | No | Stored as outcomes metadata |
Artifact outputs
Pipeline results are JSON files under data/artifacts/{run_id}/:
| Artifact | Contents |
|---|---|
peaks.json | R-peak indices and timestamps |
rr_intervals.json | RR series in ms |
quality.json | Signal quality scores |
preview.json | Downsampled waveform for frontend |
hrv_metrics.json | HRV time/frequency/nonlinear metrics |
interpretation.json | AI interpret output |
cohort_summary.json | Group comparison results |
Size guidance
| Recording | Approx. size |
|---|---|
| 3 min ECG @ 360 Hz CSV | ~1–2 MB |
| 30 min WFDB (MIT-BIH 100) | ~1 MB binary + tiny header |
| RR series (24 h wearable) | Depends on beat count; CSV often smaller than waveform |
Long Holter recordings are processed on the server; the frontend renders downsampled previews only.