Contributions are welcome! Here are some ways to help:
- Add a new backbone — The Braindecode library always welcomes new backbone architectures! Follow the model requirements and submit a PR to braindecode's GitHub with your backbone architecture. Then add a factory function in
default_configs/backbones.pythat loads your new model. - Add a new dataset — Push a pre-windowed
BaseConcatDatasetto HuggingFace Hub and add a factory function indefault_configs/datasets.py - Add a new fine-tuning strategy — Implement a new class in
finetuning.pyinheriting fromBaseModelwithapply()andget_callbacks()methods - Report bugs or suggest features — Open an issue on GitHub
uv pip install -e ".[dev]"
pytest # make sure everything passespytest # all tests
pytest tests/test_default_configs.py # config validation
pytest tests/test_backbones.py # model build & forward
pytest tests/test_normalization.py # normalization correctness
pytest -k "test_name" # single testReleases follow semantic versioning. Replace X.Y.Z below with the new version (e.g. 0.3.0) and YYYY-MM-DD with today's date.
git checkout main && git pull
git checkout -b release/X.Y.Z-
pyproject.toml— setversion = "X.Y.Z". -
CITATION.cff— setversion: X.Y.Zanddate-released: "YYYY-MM-DD"(these are the software version and release date; do not touchcff-version, which is the CFF schema version). -
CHANGELOG.md:- Rename the existing
## [Unreleased]header to## [X.Y.Z] - YYYY-MM-DD. - Insert a new empty
## [Unreleased]section above it (required — every PR must update the changelog, so there must always be an Unreleased section). - At the bottom of the file, update the
[Unreleased]link tocompare/vX.Y.Z...HEADand add a new[X.Y.Z]: https://github.com/braindecode/OpenEEGBench/releases/tag/vX.Y.Zline.
- Rename the existing
uv lockgit add -u && git commit -m "Version X.Y.Z"
git push -u origin release/X.Y.Z
gh pr create --base main --title "X.Y.Z" --body "Release X.Y.Z"Wait for all checks to pass, then squash-merge into main.
- Tag:
vX.Y.Z(with thevprefix — required by theCHANGELOG.mdlinks, by previous tags, and by the Zenodo archive URL). - Target: the squash-merge commit on
main. - Title:
vX.Y.Z. - Description: paste the
## [X.Y.Z]section fromCHANGELOG.md, followed by**Full Changelog**: https://github.com/braindecode/OpenEEGBench/compare/vPREV...vX.Y.Z. - Click Publish release (not "Save draft" — the PyPI and Zenodo triggers only fire on
published).
Clicking Publish automatically:
- runs
publish.yml→ uploads the sdist + wheels to PyPI and attaches them to the GitHub release; - triggers the Zenodo webhook → archives the tagged snapshot and mints a new DOI under the concept DOI.
- Verify the package appears on PyPI.
- Verify the release appears on Zenodo with the expected metadata (authors, affiliations, ORCIDs).
- On the first release only: replace the
TODOplaceholders inREADME.md(DOI badge anddoifield in the BibTeX block) with the concept DOI from Zenodo, and open a follow-up PR.