The Engine for
Real-Time,
Probabilistic BCI.
Nimbus Personalizer and the SDK/API — freeze any encoder, adapt a cheap Bayesian head, and ship BrainState to apps. Built on RxInfer for latency, adaptability, and explainability.
When the factory breaks,
restore — ~23× cheaper.
Raw EEG through a frozen encoder. Stress collapses the factory head. A thin Bayesian Personalizer climbs back — without fine-tuning the trunk.
Raw EEG → frozen foundation trunk. Weights stay locked.
- intent
- left
- confidence
- 0.82
- trunk
- frozen · EEGNet
- labels
- 0
Adapt wall
~23×
Fine-tune stays a priced escape hatch — not the default path.
Illustrative loop from exploratory BNCI stress protocols. Lead cost ~23× vs short fine-tune on locked bakeoff cells. Not an accuracy-SOTA claim — adapt when the factory breaks.
One API. Measured across trunks.
One Personalizer API across frozen trunks; treat fine-tune as a priced escape hatch. Under severe shift the Bayesian head recovers most of the fine-tune gain at ~23× lower adapt wall on the EEGNet bake-off — exploratory subject-level results, not an accuracy-SOTA claim.
| Dataset | Trunk | Acc L0 | Acc L1 | Acc L3 | Recovery | Wall L3/L1 |
|---|---|---|---|---|---|---|
| BNCI | EEGNet | 0.514 | 0.550 | 0.548 | ≥FT | ~31× |
| Zhou | EEGNet | 0.333 | 0.540 | 0.498 | ≥FT | ~21× |
Severe channel-mix, n=40 labeled adaptation trials. L0 = cal-only head; L1 = stream Personalizer; L3 = warm-start full fine-tune. Full multi-trunk map on docs.
Adaptation methods
encode → transform → Bayesian head → BrainState
Sit a Bayesian head on any frozen encoder. Update online with partial_fit. Escalate with transforms, trunk PEFT, or ErrP when the factory representation isn't enough — apps read BrainState.
Adaptive heads
Default conjugate NIW linear discriminant on frozen embeddings. Closed-form online partial_fit with forgetting — cheap personalization without touching the trunk.
Conjugate NIW quadratic discriminant with per-class covariances. Same online Bayesian update path when shared covariance is too strong.
Multinomial logit via Polya–Gamma variational inference. A probabilistic softmax head on the same frozen encoder when linear/quadratic Bayes isn’t the right geometry.
Extended Kalman Filter latent-state tracker for class-prior and logit drift. Streaming classical head when you need online state estimation instead of a conjugate Bayesian classifier.
Embedding transforms
Cal-fitted scale and geometry alignment before the head — standardize, whiten, or Euclidean alignment to keep embeddings on a stable footing.
Covariance alignment across calibration and stream distributions. Reach for it when embedding second-order stats drift between conditions.
Riemannian Procrustes re-centering with optional robust windows — geometric alignment when covariance shift dominates the stream.
Supervised ridge affine map from stream embeddings toward calibration. Label-consuming realignment when unsupervised transforms aren’t enough.
Trunk PEFT
Low-rank adapters on the frozen trunk, then re-fit the Bayesian head. Escalation when representation shift outruns head-only updates.
Variational Bayesian LoRA with per-site uncertainty and composed trunk+head uncertainty — PEFT that stays inside the probabilistic stack.
Bounded γ/β feature modulation on the trunk (identity-init, amplitude-capped). Mid-tier PEFT when you want soft feature scaling without full adapters.
Fine-tune only the trunk’s final classification layer, then re-fit the head. A lighter trunk touch when you need a feature nudge.
Full trunk fine-tuning via adapt_trunk — the priced escape hatch when PEFT and head-only adaptation aren’t enough.
Feedback & self-supervision
Soft negative head update from an error-related potential or external error signal — closed-loop correction without a full labeled trial.
Warm-start the Bayesian head from a pooled population NIW prior (fit_population) to cut cold-start calibration load.
Epistemic-gated self-training on the unlabeled stream (adapt_pseudo) — opt-in when you want label-light head updates under uncertainty gates.
Test-time entropy minimization over batch-norm affine params (fit_tent) — opt-in unsupervised stream adaptation on trunks that expose BN.
Paradigm recipes
Factory recipes for common BCI setups — Riemannian tangent encoders, xDAWN→tangent for ERP/P300, or head-only on handcrafted features (CSP and friends).
for_deployment freezes the trunk with a Bayesian LDA default; for_balora / for_lora wire PEFT trunks with composed uncertainty for research and escalation paths.
Full API, recipes, transforms, and PEFT in the docs.
Built on a Foundation of Proven Technology
The Nimbus engine is powered by RxInfer, the state-of-the-art reactive message passing framework for automated Bayesian inference. In partnership with Lazy Dynamics, the core developers of the technology, we are building the most performant and reliable software layer for the BCI industry.
Broad Hardware Compatibility
& Application Areas
The Nimbus engine is designed to be hardware-agnostic, providing a universal processing layer for the entire BCI hardware landscape.
Non-Invasive EEG
For devices like Muse, OpenBCI, Emotiv. Our engine excels at handling noisy, non-stationary signals from consumer headsets, using real-time adaptation to deliver reliable control for gaming, wellness, and neurofeedback applications.
Clinical & Medical Devices
For clinical-grade EEG, ECoG, and assistive tech. Nimbus provides the "White Box" explainability and confidence scoring essential for regulatory approval (FDA/CE), powering the next generation of neuro-rehabilitation and diagnostic tools.
High-Bandwidth Implants
For microelectrode arrays like Neuralink & Synchron. Our high-performance architecture processes massive, high-velocity data streams with ultra-low latency, enabling advanced applications like high-DOF prosthetic control and communication.
Simple Integration, Powerful Results
nimbus-bci runs locally — wrap a frozen encoder, fit a Bayesian Personalizer, ship BrainState to your app.
# 1. Wrap any frozen trunk (encode → Z)
from nimbus_bci import Personalizer, wrap
enc = wrap(my_encoder.encode, model_id="eegnet", embedding_dim=64)
# 2. Fit a Bayesian Personalizer head
adapter = Personalizer.for_deployment(
enc, ["left_hand", "right_hand"],
paradigm="motor_imagery",
)
adapter.fit(X_cal, y_cal)
# 3. Predict → BrainState for apps
states = adapter.predict(X_test)
accepted = [s for s in states if not s.rejected]
# 4. Adapt online — no trunk fine-tune
adapter.partial_fit(X_new, y_new)What Personalizer ships
Not another decoder zoo — a thin layer between a frozen encoder and your app: wrap, adapt online, gate with uncertainty, deliver BrainState.
Plug any encoder that emits encode(X) → Z. You keep the trunk weights; Nimbus owns the personalization layer on top.
Conjugate Bayesian head updates on new labels — exact and cheap. Adapt session drift without batch refit or trunk fine-tune by default.
Epistemic and confidence gates decide when to accept, reject, or ask for another label — so apps don’t act on a single opaque guess.
Ship intent, confidence, uncertainty, and rejection in one thin contract. Downstream UI and control loops stay model-agnostic.
Partner preview
Conductor — when to spend adaptation.
Control layer for deployed Personalizer sessions: observe BrainState, bound label spend, escalate only when the resource ladder says so — companion control logic to the Personalizer preprint. Safety and spend bounds for OEM partners; not a public SDK release.
Book a Demo →Pricing Designed for Innovation
We believe in democratizing access to next-generation BCI technology. Our pricing will include a generous free tier for developers and researchers, with flexible, usage-based plans that scale as you grow. For enterprise partners requiring deep integration and support, we offer dedicated partnership plans.
Developer Plan
For individuals, researchers, and teams exploring BCI.
Our generous free tier is designed for experimentation and innovation. Get access to the core Nimbus engine and start building the future of neurotechnology today.
Includes:
Access to Core SDK/API
Community Support
Sufficient R&D and Prototyping
Business Plan
For startups and companies launching commercial BCI applications.
A flexible, usage-based model that scales with your product's success. Get the performance and support you need to go to market with confidence.
Includes:
Everything in Developer, plus:
Higher Rate Limits
Production-Grade SLAs
Standard Technical Support
Enterprise Plan
For hardware manufacturers and large-scale enterprise deployments.
A dedicated partnership for organizations with complex requirements. Get custom model development, deep integration, and enterprise-grade security.
Includes:
Everything in Business, plus:
Custom Model Development
Dedicated Engineering Support
On-premise Deployment Options
Developer Plan
For individuals, researchers, and teams exploring BCI.
Our generous free tier is designed for experimentation and innovation. Get access to the core Nimbus engine and start building the future of neurotechnology today.
Includes:
Access to Core SDK/API
Community Support
Sufficient R&D and Prototyping
Business Plan
For startups and companies launching commercial BCI applications.
A flexible, usage-based model that scales with your product's success. Get the performance and support you need to go to market with confidence.
Includes:
Everything in Developer, plus:
Higher Rate Limits
Production-Grade SLAs
Standard Technical Support
Enterprise Plan
For hardware manufacturers and large-scale enterprise deployments.
A dedicated partnership for organizations with complex requirements. Get custom model development, deep integration, and enterprise-grade security.
Includes:
Everything in Business, plus:
Custom Model Development
Dedicated Engineering Support
On-premise Deployment Options
Ready to build the future of neurotechnology?
See a live demonstration of the Nimbus engine and discuss how our technology can accelerate your BCI development.