Skip to content

Ahus-AIM/EchoXFlow

Repository files navigation

EchoXFlow

A Beamspace Echocardiography Dataset for Cardiac Motion, Flow, and Function

CI status


Overview

EchoXFlow provides echocardiography recordings stored as Croissant metadata and Zarr recording stores.

This repo supports parsing, visualisation and dataloading of time-resolved 1D, 2D, and 3D B-mode and Doppler data.


Highlights

  • Read EchoXFlow data from Croissant metadata and Zarr stores
  • Discover recordings directly from metadata
  • Load typed streams for imaging, Doppler, and ECG
  • Render frames and videos for inspection
  • Use scaffolded examples for segmentation and prediction tasks

Benchmark Tasks

Task 1: Tissue Velocity
Task 1 tissue Doppler example
Task 2: Blood Flow
Task 2 color Doppler example
Task 3: LV Segmentation
Task 3 LV segmentation example

Dataset Setup

Download the dataset from:

🤗 https://huggingface.co/datasets/Ahus-AIM/EchoXFlow

Then set the dataset root in src/echoxflow/config/defaults.yml:

data:
  root: "/path/to/EchoXFlow"

Alternatively, set:

export ECHOXFLOW_DATA_ROOT=/path/to/EchoXFlow

Reproduce Our Results

Generate the dataset statistics table with scripts/croissant_summary_table.py:

uv run python scripts/croissant_summary_table.py /path/to/EchoXFlow/croissant.json

Run the benchmark matrix with scripts/run_full_benchmark.sh:

scripts/run_full_benchmark.sh --data-root /path/to/EchoXFlow --cv --gpus 0,1,2

Installation

uv venv
uv pip install --editable . --requirement requirements-dev.txt

Quick Start

from pathlib import Path

from echoxflow import (
    find_recordings,
    load_croissant,
    open_recording,
    render_recording_video,
)

catalog = load_croissant("/path/to/EchoXFlow/croissant.json")

records = find_recordings(
    croissant=catalog,
    array_paths=(
        "2d_brightness_mode",
        "2d_color_doppler_velocity",
        "2d_color_doppler_power",
    ),
    require_all=True,
)

record = records[0]

output = Path("outputs/color_doppler.mp4")
render_recording_video(record, output, view_mode="both")

store = open_recording(record)
power = store.load_stream("2d_color_doppler_power")

print(power.data.shape)

Development

uv run pre-commit install
uv run pre-commit run --all-files

Citation

@misc{stenhede_2026_echoxflow,
  title = {EchoXFlow: A Beamspace Echocardiography Dataset for Cardiac Motion, Flow, and Function},
  author = {Stenhede, Elias and Sulkowska, Joanna and Orstad, Eivind Bj{\o}rkan and Schirmer, Henrik and Ranjbar, Arian},
  year = {2026},
  eprint = {2605.05447},
  doi = {10.48550/arXiv.2605.05447},
  url = {https://arxiv.org/abs/2605.05447}
}

About

Tooling for reading and using the EchoXFlow dataset

Resources

License

Stars

9 stars

Watchers

1 watching

Forks

Contributors