pip install nimbus-bci[riemann] for Riemann / P300 geometry paths.
Choose a path
Portable profiles
partial_fit with n≈40) beats frozen day-1 in the locked readout (+1.03 pp, CI [+0.11, +2.33], 0/9 no-regret). Re-attach the same encoder on from_profile / load.
Also: Personalizer.save / load for the full artifact layout.
Motor imagery
Quick factory
Session recipe (geometry gateway)
calibrate_mi_bald(...) — do not default it for production cal-time claims (EP-CAL-TIME NO-GO).
P300
Session-bundle trust contract
MISessionBundle / P300SessionBundle joblib sidecars are pickle payloads:
load(..., trusted=True)is requiredsaverecordssidecar_sha256;loadverifies before unpickle- Tampered sidecars are refused even with
trusted=True - Riemann
.npzpath never unpickles
Embedding transforms (brief)
Full guide: Embedding transforms.Gate calibration
Default decision gates accept 7–78% of trials across trunks. Pin the accept rate:Next read
Encoder contract
wrap, sfreq, save/load, profiles
BrainState
strict / permissive gates
Migration to 0.6
Breaking changes from 0.5
Basic examples
Compact MI / P300 recipes