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 realized accept rate with joint gate calibration:fit_calibrated calibrates the confidence threshold within trials that pass the entropy ceiling. At , the joint gate guarantees the realized accept rate matches target_accept on validation data, rather than being eroded by independent entropy rejection.Next read
Online Safety Layer
Govern online adaptation with budgets, monitors, and rollback
Encoder contract
wrap, sfreq, save/load, profiles, and precomputed embeddings
BrainState
strict / permissive gates
Migration to 0.8
Upgrading to 0.8