Turnkey benchmark for compression of biomedical waveform data, comparing the newly-standardised ITU-T T.261 / ISO/IEC 23003-8 ("H.BWC") codec against the codec set evaluated in Buccino et al. 2023 (J Neural Eng, 10.1088/1741-2552/acf5a4).
Status (2026-08-20). Phase 1 reproduction verified against the paper's own per-recording results: across 11 lossless codecs on CSHZAD026 at matched conditions, median |Δ| 0.06 %, max 2.5 %. All 16 benchmark recordings (523 GB) are local, and the full paper codec set — including WavPack, WavPack Hybrid and FLAC — runs natively.
Phase 3 is NOT complete. compbench.metrics.sorting is a
contract-only skeleton: no spike-sorting or spike-train metric is
implemented yet, so every lossy claim currently rests on signal-level
distortion (RMSE / PRDN), which the paper's own data shows does not
predict sorting outcome. See
.specify/specs/t261-benchmark-plan.md
for the full design and
DEPLOY.md for running it.
| Tool | Where to get it | Needed for |
|---|---|---|
| Python 3.11 – 3.13 | system / uv python install |
everything |
uv |
pipx install uv |
recommended venv manager |
duct (con-duct) |
pip install con-duct (in [devel]) |
make smoke, all Snakemake runs |
snakemake |
pip install snakemake (in [pipeline]) |
orchestrated sweeps |
| C++20 compiler + cmake | apt-get install g++ cmake |
building src/bwc (T.261) |
wavpack-numcodecs |
pip install .[audio] |
paper-with-wavpack.yaml (Ubuntu/manylinux glibc only) |
spikeinterface |
pip install .[ephys] |
real ephys datasets (Phase 1+) |
| podman / docker | system | containerised runs |
| apptainer / singularity | system | HPC deployment |
The [devel] extra installs everything needed for a laptop-dev workflow
except the C++ build. pip install -e '.[devel,audio,ephys,pipeline]' gets
you every optional codec and loader; [audio] will fail on hosts whose
glibc doesn't match a wavpack-numcodecs bundled wheel (works on Ubuntu
22.04/24.04, container images, manylinux CI).
# One-off dev install into a uv-managed venv:
uv venv && source .venv/bin/activate
uv pip install -e '.[devel]'
# All tests, lint, type-check via tox:
tox # everything
tox -e py311 # unit tests on py3.11
tox -e integration # end-to-end (needs `duct` on PATH)
tox -e lint # ruff
tox -e type # mypy strictTwo independent smoke targets with distinct failure modes — keep both, run either first when debugging:
# 1. compbench CLI + con-duct + report aggregator; < 5 s.
make smoke # duct compbench run … → metrics.json + duct-*.jsonl
# → compbench report → results/smoke/report.jsonl
# 2. Same but through Snakemake DAG; exercises the profile + orchestrator.
make snakemake-smoke # snakemake … --configfile configs/profiles/smoke.yamlBoth use the synthetic-tiny dataset (configs/datasets/synthetic-tiny.yaml)
— no external data needed. The Snakefile fails fast (WorkflowError) if
the profile requests a codec that isn't installed on this host.
# Portable (no wavpack — runs on any Linux):
make paper PROFILE=configs/profiles/paper.yaml
# Full paper matrix (needs wavpack-numcodecs installable):
pip install -e '.[audio]'
make paper PROFILE=configs/profiles/paper-with-wavpack.yamlThe gate profile is configs/profiles/paper-real-np1-8.yaml (8 NP1
recordings x 4 preprocessing conditions x 44 codec configs = 1056 cells);
paper-real-16.yaml extends it to all 16 recordings at full length. Both
use the datasets_matrix: block, so adding a recording is one YAML entry.
src/compbench/— Python package: CLI, codecs, datasets, metrics, pipeline, report.src/bwc/— upstream ITU-T T.261 / H.BWC reference software (datalad subdataset; Clear BSD; upstreamhttps://vcgit.hhi.fraunhofer.de/vceg-sw/bwc). Never patched in-tree — see §4.1a of the plan.src/t261_numcodecs/— (Phase 2b, not yet built) proper pybind11 wrapper. The currentt261codec is a subprocess stopgap insrc/compbench/codecs/t261.py.containers/— Dockerfiles derived from AIND'sghcr.io/allenneuraldynamics/…ephys-pipeline images. Written but never built or run — no number in this study was produced in a container. Reproducible per-codec images are planned as Phase 4.5.configs/— dataset / codec / profile YAMLs. Add datasets by dropping a YAML; no Python edits needed..specify/specs/— design docs.
MIT for our code (this repo). The vendored src/bwc/ reference software is
Clear BSD (Fraunhofer + Dolby). Note: T.261 has an explicit no patent grant
clause — flag to commercial downstream users.