FOR DEVELOPERS & PI HACKERS

If you can write a function, you can write a node.

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.

THE SDK

20 lines. No build step. No yaml.

Drop a Python file in ~/.signal-studio/nodes/. Signal Studio hot-reloads it on save.

spectral_entropy.py
EXTENSION
# 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")
RENDERED NODE

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.

Σ SPECTRAL ENTROPY features x : Signal FMIN 1.0 FMAX 40.0 N_PER_SEG 512 Scalar : h
PUBLISH

signal-studio publish ./spectral_entropy.py registers your extension in the public hub. Auto-generated docs, version pinning, dependency manifest — handled.

FEATURED EXTENSIONS · 68 PUBLISHED

Community-built nodes for everything.

Specialized filters, custom classifiers, niche file formats, paradigm-specific visualizations — written by people who needed them and shared them upstream.

Browse the registry
FILTER · WAVELET
FILTERPYWAVELETS

Wavelet denoising suite

Discrete & continuous wavelet transforms with thresholding strategies. Wraps PyWavelets with sane defaults.

DM@d.mallat
v 2.3.1142
FORMAT · IMPORT
IOMOBILE-EEG

Mobile EEG importers — pack of 6

Native readers for Emotiv, Muse, OpenBCI, Unicorn, Cognionics, and Mentalab. Auto-detects format from headers.

SK@s.koudelka
v 1.8.0118
DECODER · DEEP
PYTORCHBRAINDECODE

Braindecode bridge

Wraps the Braindecode model zoo as native Signal Studio nodes. ShallowFBCSP, Deep4Net, ATCNet, EEGConformer, TCN.

RB@r.ballester
v 0.9.496
VIZ · TOPOMAP
VISUALIZATION

Animated topomap exporter

Time-resolved topographic videos with custom colormaps. MP4, WebM, animated SVG, slide-deck-friendly.

CG@c.grootswagers
v 1.2.781
STATS · MNE
STATSCLUSTER-PERM

Cluster permutation testing

Threshold-free cluster enhancement, sensor-space and source-space. Multi-condition factorial designs supported.

EM@e.maris
v 3.1.074
REALTIME · LSL
REALTIMELSL

Lab Streaming Layer bridge

Stream live signals from any LSL source into a running workflow. For online BCIs and live demonstrations.

CK@c.kothe
v 2.0.268
WHAT YOU CAN BUILD

The whole UI is a fair game.

Nodes are the simplest case. The SDK also lets you build custom visualization tabs, parameter editors, file importers, and full-fledged side panels.

01 / NODES

Processing nodes

Any Python function with typed signature. Auto-generated UI, type-checked ports, hot-reload on save.

02 / VIEWS

Visualization tabs

Custom rendering surfaces — Canvas, WebGL, or vanilla DOM. Plug into the synchronized cursor and theme system.

03 / IMPORT

File format readers

Register your file extension. Implement a reader returning a typed Signal. New formats appear in the open dialog.

04 / PANELS

Side panels

Full-featured side panels with native widgets. For experiment metadata, paradigm-specific controls, lab inventories.

Ship the node
you've been hoarding.

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.