Signal Studio's plugin system is just Python. Decorate a function, drop it in a folder, restart. Your contribution shows up in the node palette — typed inputs, typed outputs, full UI, free.
Drop a Python file in ~/.signal-studio/nodes/. Signal Studio hot-reloads it on save.
# 1. Define the function. Signal Studio introspects the # signature to build the node UI. from signal_studio import node, Signal, Scalar import numpy as np from scipy.signal import welch @node( name="Spectral Entropy", category="features", color="#1d4ed8", icon="sigma", ) def spectral_entropy( x: Signal, fmin: float = 1.0, fmax: float = 40.0, n_per_seg: int = 512, ) -> Scalar: f, pxx = welch(x.data, fs=x.sfreq, nperseg=n_per_seg) m = (f >= fmin) & (f <= fmax) p = pxx[..., m] / pxx[..., m].sum(axis=-1, keepdims=True) h = -(p * np.log(p + 1e-12)).sum(axis=-1) return Scalar(h, unit="bits")
Signal Studio generates the node UI from your type hints. Signal becomes a typed input port. Scalar becomes an output. Float parameters get range-clamped sliders. Ints become steppers.
signal-studio publish ./spectral_entropy.py registers your extension in the public hub. Auto-generated docs, version pinning, dependency manifest — handled.
Specialized filters, custom classifiers, niche file formats, paradigm-specific visualizations — written by people who needed them and shared them upstream.
Discrete & continuous wavelet transforms with thresholding strategies. Wraps PyWavelets with sane defaults.
Native readers for Emotiv, Muse, OpenBCI, Unicorn, Cognionics, and Mentalab. Auto-detects format from headers.
Wraps the Braindecode model zoo as native Signal Studio nodes. ShallowFBCSP, Deep4Net, ATCNet, EEGConformer, TCN.
Time-resolved topographic videos with custom colormaps. MP4, WebM, animated SVG, slide-deck-friendly.
Threshold-free cluster enhancement, sensor-space and source-space. Multi-condition factorial designs supported.
Stream live signals from any LSL source into a running workflow. For online BCIs and live demonstrations.
Nodes are the simplest case. The SDK also lets you build custom visualization tabs, parameter editors, file importers, and full-fledged side panels.
Any Python function with typed signature. Auto-generated UI, type-checked ports, hot-reload on save.
Custom rendering surfaces — Canvas, WebGL, or vanilla DOM. Plug into the synchronized cursor and theme system.
Register your file extension. Implement a reader returning a typed Signal. New formats appear in the open dialog.
Full-featured side panels with native widgets. For experiment metadata, paradigm-specific controls, lab inventories.
Everyone has a one-off script that does the thing nobody else has built. Wrap it in twenty lines. Publish it. Your lab gets credited every time it's cited.