The Operating System for
BCI Research
Built with the open research and AI stack.
Design BCI paradigms
by connecting blocks.
Sequence tasks, loops, and triggers on a visual canvas, no scripting.
Pictures, sound and words
on the recording’s clock.
Every stimulus is timed to the signal, so a trial’s media, data and label always stay together.
From raw signal to activation map.
Preprocess with MNE, add your own custom filters in Python, and generate 2D activation maps and 3D cortical renders, all from the same pipeline.
Preprocessing with MNE
Standard filtering and preprocessing pipelines on MNE foundations.
Custom filters in Python
Drop in your own filters and transforms with plain Python.
2D & 3D activation maps
Generate topographic maps and 3D cortical renders from the results.
Whole-brain activation map
Reconstructed activity projected onto a 3D cortical mesh for spatial localization of the response, built on the same MNE-derived source estimates as the 2D views.


Time-resolved scalp maps
Channel-wise concentration changes plotted across the epoch, from baseline to peak response.

Per-channel waveform overlay
All channels overlaid against a synchronized topographic snapshot at the selected timepoint.
Every analysis step, one workspace.
Preview any step on one file, then batch-apply across the whole dataset, every output drops straight into ML Flow.

- 1Apply to one file
- 2Check the result
- 3Batch-apply to all
- 4Import into ML Flow
Build model pipelines
block by block.
Drag, connect, and run from raw signal to a scored model.
Get unstuck
while you work.
AI that understands your project.
From logistic regression to EEG transformers.
The desktop Components Library, mirrored. Every ecosystem, model family and pipeline stage on one palette — drag it onto the ML Flow canvas, or rewire it by hand.
Classical ML
Fast, interpretable baselines. Every serious BCI result starts by beating these.
scikit-learn
Pipelines, CV, the classics
XGBoost
Gradient-boosted trees
Drops into ML Linear, ML Ensemble, ML Neighbors & ML Clustering blocks
Preprocessing
109StandardScaler · RobustScaler · SimpleImputer · KNNImputer
Signal Processing
621MNE Epochs · ICA · wavelets · band-pass filters
Feature Selection
35SelectKBest · RFE · RFECV · SelectFromModel
Dimensionality Reduction
94PCA · FastICA · KernelPCA · NMF
Optimization
41Adam · AdamW · SGD · RMSprop · Muon · LBFGS
Cross Validation
54KFold · StratifiedKFold · GridSearchCV · TimeSeriesSplit
Evaluation
89accuracy · F1 · ROC-AUC · confusion matrix
Model Interpretation
123SHAP · DeepExplainer · TreeExplainer · KernelExplainer
Computer Vision
421OpenCV · torchvision · feature detectors
Data Manipulation
356reshape · concat · merge · groupby · window
Math Operations
381linear algebra · statistics · FFT · elementwise
BCI Augmentation
26MixUp · time shift · channel dropout · SMOTE
Classical & probabilistic
- Linear & logistic models
- SVM & kernel methods
- Random forest · bagging · boosting
- HMM · probabilistic · Bayesian
Convolutional & recurrent
- CNN · ResNet · Inception · EfficientNet
- EEGNet · ShallowConvNet · DeepConvNet
- LSTM · GRU · BiLSTM
- Autoencoders · VAE
Attention & transformers
- Transformers & attention models
- EEGConformer · Conformer
- BrainBERT · EEGTransformer
- PatchTST · ViTEEG
Sequence & state-space
- TCN · temporal ConvNets
- Mamba SSM
- MiniGPT · TinyGPT · LargeGPT
- BioGPTBCI · LaBraMBCI · GPT2BCI
Riemannian & spatial
- CSP · SPoC · Xdawn · SSD
- Covariances · ERPCovariances
- Tangent space projection
- MDM · FgMDM · TSClassifier
Edge & compressed
- MobileEEGNet · TinyEEGNet
- QuantizedEEGNet · INT8
- ONNX export
- Quantization-aware training
Choosing the model is the easy part.
119 blocks we write and maintain ourselves — the distance between a model and a result you can defend.
Indexed
11,337
third-party catalog
Owned
119
written by us
“It worked on subject 1”
Domain Adaptation
A decoder rarely survives a new head, or a new day.
“Session 6 broke session 1”
Domain Incremental Learning
Training on new data quietly erases what the model already knew.
“94% accurate, on what?”
Uncertainty & Evaluation
An accuracy number cannot say when the decoder should decline to answer.
Not on the palette? Install it.
Any Python package becomes typed blocks on the ML Flow canvas — sandboxed in its own process, introspected automatically, no code.
01Install
A name from the shelf, or any pip spec.
02Isolate
Own env, own process, own server.
03Introspect
Functions become typed blocks. No code.
in
path: str
out
rec: Recording
cedalion.io.read_snirf
fNIRS
Cedalion
EEG / MEG
Autoreject · PyPREP
BCI decoding
Braindecode · MOABB
Biosignals
NeuroKit2 · YASA
Dimensionality reduction
UMAP · openTSNE
Acquisition
BrainFlow · pylsl
Neuroimaging
NiBabel · Nilearn
Every experiment is a versioned workspace.
Create, save, duplicate, and compare experiments inside a project, each with its own version, run history, and lineage.
“Highest mean” is not a finding.
A second tab on the Results page tests whether a difference is real.
12 subjects · 3 pipelines
exampleVerdict
Different
RM-ANOVA F(2, 22.0) = 168.74 p < .001 · partial η² = 0.939
Every subject moves the same way. A table of means can’t show that.
Compare by
12 tests, matched to the design
On every result
The analysis we did not build.
No tool draws every chart a reviewer asks for. Take every table out as CSV or Excel, or write the analysis in the app with the results already loaded.
per_subject = (results[results.metric == "accuracy"]
.groupby(["pipeline", "subject"])["value"].mean())
summary = per_subject.groupby("pipeline").agg(["mean", "std"])
fig, ax = plt.subplots()
ax.bar(summary.index, summary["mean"], yerr=summary["std"], capsize=5)Right-click: PNG at 300 or 600 dpi, SVG, PDF, copy, zoom — the same menu as every other chart in the app.
Already loaded in every cell
Data opens a reference onto your own study: every name, every column, and a real value out of it. validation is the same module the Results Validation tab runs on.
Nine tables, one join key
Every row carries experiment_id, so the tables rejoin anywhere.
- observationsone row per every stored score
- parametersone row per every configuration value
- runsone row per training run
- experimentsone row per experiment
- metricsone row per experiment × metric
- modelsone row per trained model
- reproducibilityone row per hashes, seeds, versions
- versionsone row per version-history entry
- studyone row per the study itself
Written as
The starter notebook already runs: it loads the CSVs, plots them, and runs a paired test across your subjects.
98.8% of what, and how sure are you?
Reports that show their evidence, get checked before export, and freeze when released.
- ProblemA linked value no longer resolves
- CheckAccuracy reported with no interval
- NoteSign-off incomplete
Warns, never blocks.
- Author signed
- Reviewer signed
- Approverpending
Multiple authors, every edit attributed.
Train locally,
share when the work is ready.
Analysis stays on your machine. Publish and reuse through BCINexus only when collaboration matters.
Sync when needed
Secure cloud storage for private sharing, collaboration, and team workflows.
Coordinate your team
Assign tasks by module and track them to done.
…
Contributors
…
Published studies
…
Active reviewers
…
Datasets
…
Models
Get BCILattice
and run your first experiment
Local data import, preprocessing, visual workflows, model training, reports, and optional publishing.