Skip to content
Speall
SDK 0.4 · early access

One toolkit from spike to servo.

We build the unglamorous middle of a brain-computer interface: recording that stays aligned, decoding that runs on the window which just closed, and a command reaching real hardware fast enough that it feels like moving your own arm.

Request early accessSee the API
30 kHz
per-channel ingest, timestamped in hardware
19 ms
budgeted intent-to-motion loop
7 archives
public neuro datasets as one catalog
byte-exact
logs you can replay a decoder against
Utah array · 96 ch · 30 kHz
streaming

A live illustration: six channels of neural activity scroll past a decode window and are converted into joint commands, shown numerically below.

shoulder
+0.420rad
elbow
-0.180rad
wrist
+0.060rad
grip
+0.310rad
firing rate
128Hz

Reads from

DANDIOpenNeuroNeuroVaultZenodoDryadGINfigshareROS 2 bagsLeRobotLab Streaming LayerDANDIOpenNeuroNeuroVaultZenodoDryadGINfigshareROS 2 bagsLeRobotLab Streaming Layer

Field notes

The thinking around the system.

All field notes
Field note 014 min read

The clock is part of the model

A decoder can only be as honest as the timeline it learned from. Why synchronization belongs in the system design, not the cleanup script.

Read note →

Daily

A record of what the work teaches us.

All daily notes
Daily · 02 Sep

Make time visible

A small change to the event record that makes tomorrow's timeline easier to trust.

Read →

Essays

Longer thinking for the work around the work.

All essays

What it does, electrode to motor.

Four stages. The whole trick is that they share one clock — stitch them from four different stacks, as most of us have, and the loop quietly falls apart between them.

  1. Record01

    Spikes, LFP, EMG, IMU, force, video. Every stream stamped against one hardware clock, so nobody has to re-align anything at 2am.

  2. Decode02

    Filter, sort, run a decoder on the window that just closed. Start from a pretrained cortical model, or drop in your own checkpoint.

  3. Act03

    Intent becomes joint targets, shaped and clamped to limits you declare once. A violation stops the arm, not your session.

  4. Learn04

    Every window, command and outcome is logged byte-exact, so you can replay the whole run against a new decoder before it touches hardware.

and 04 feeds back into 01 — your logs are the next training set

Everything else follows from the clock.

Four devices, four oscillators, and the events that happened together stop looking like they happened together. Every decoder you train on that data learns the skew along with the signal.

four devices, four oscillators
one clock, stamped in hardware

Same session, same five events. Speall stamps at the amplifier, so the column stays a column.

The parts you would otherwise build yourself.

They ship as one runtime and share one data model, so a session recorded on the bench is the same object your training job reads. Take one piece or all six.

One clock

Multi-modal capture with hardware timestamping and honest drop accounting. Alignment stops being a script you rewrite for every rig.

Dataset registry

Seven public neuroscience archives indexed as one catalog. Query by modality, species and task, then pull only what you train on.

Decoders

Pretrained kinematic and speech decoders, fine-tuning on your subject, and an export path to ONNX or TensorRT for the on-rig loop.

World models

Learned dynamics from your own recordings, so a policy can be scored against your room before it ever runs in your room.

Fleet

Telemetry, health and staged rollout across the rigs you run. Ship a decoder to one bench, watch it, then ship it to the rest.

Safety envelope

Position, velocity and force limits declared as data. The runtime enforces them underneath your policy, on the same tick.

The API fits on one screen.

Everything is a stream of closed windows. If you can write a for loop you can drive a rig, and the same objects work offline against a run you recorded last month.

yes, that’s the whole thing

python · rust · c abi

from speall import Rig, Decoder, Arm

rig = Rig.connect("blackrock://neuroport-0", rate="30khz")
arm = Arm.connect("ros2://franka/joint_trajectory")

decoder = Decoder.load("speall/cortical-kinematics-v3")

# Blocks until the rig has a full 20 ms window, then returns
# aligned spikes, LFP and any synced camera frames.
for window in rig.stream(window="20ms"):
    intent = decoder(window.spikes, lfp=window.lfp)

    # Limits are declarative: violations stop the arm, not your run.
    arm.move(intent.joints, within=arm.limits.safe_envelope)

    rig.log(window, intent, arm.state)  # versioned, replayable

Read an array, decode intent, drive the arm — one process, one clock.

Fast enough that it feels like yours.

Past roughly 100 ms, people stop feeling like they are moving the thing and start feeling like they are asking it to move. So every stage gets a budget, and the SDK tells you which one you blew.

Loop latency budget

19.0 ms, intent to motion

The budget Speall is built to hold on a single-rig deployment. Your hardware sets the real number; the SDK reports it per stage every run.

Acquire · 4.5 ms. Amplifier buffer, timestamping, drop detection.

  • Acquire4.5 ms
  • Decode7.0 ms
  • Transport2.5 ms
  • Actuate5.0 ms
Against what a person notices19% of the window used
0 ms19.0 ms — the budget100 ms — feels like a request, not a limb
View as table
StageBudgetShare
Acquire4.5 ms24%
Decode7.0 ms37%
Transport2.5 ms13%
Actuate5.0 ms26%

It probably already speaks your hardware.

Acquisition and actuation are plugins, so adding a device is a driver, not a fork. If yours is missing, send us the spec sheet and we will tell you how long it takes.

Acquisition

  • Blackrock NeuroPort
  • Intan RHX
  • Neuropixels / SpikeGLX
  • OpenBCI
  • LSL

Robotics

  • ROS 2 (Humble, Jazzy)
  • LeRobot
  • EtherCAT
  • CAN / CANopen
  • Dynamixel

Simulation

  • MuJoCo
  • Isaac Sim
  • Genesis
  • Drake
  • Replay from logs

Runtime

  • Linux (PREEMPT_RT)
  • macOS (bench)
  • Python 3.11+
  • Rust core
  • C ABI

Questions we get.

If yours is not here, ask it directly — hello@speall.com. A person answers.

Is this just a wrapper around ROS?

No. ROS 2 is one of several actuation backends, and plenty of teams run Speall with no ROS at all — straight to EtherCAT or a vendor SDK. The part we own is the clock, the decode path and the log format.

Do I need an implanted array?

No. Intracortical arrays are the hardest case, so we build for them, but EMG, EEG, eye tracking and force sensing all come through the same interface. Several early users have no implant anywhere in the loop.

My decoder is in MATLAB. Or JAX. Or it's a 2019 pickle.

Bring it. If it can be called from Python or exported to ONNX, it runs. If it can't, we'll tell you honestly whether wrapping it is a day of work or a month.

Can I use it for a clinical study?

Speall is research software. It is not a medical device and nothing in it is cleared or approved for clinical use. If you're heading toward a trial, talk to us early about what would have to change.

What does it cost?

Nothing during early access. We're a small team bringing rigs up by hand, and we'd rather learn from your setup than invoice you for it. We'll talk about pricing well before we ever charge you.

How much of this exists today?

The recording, decode and actuation path is real and running on our benches and a handful of others. World models and fleet rollout are the newest, and the ones most likely to change shape based on what you need.

A note about early access

We started Speall after rebuilding the same three days of glue code for the fourth time — clock alignment, spike sorting, a socket to the arm — and realising that the interesting part of the work kept getting postponed by the boring part.

Early access is not a signup form. It is us sitting with your setup until the loop closes: your amplifier, your arm, your subject, your latency number. We take on a few teams at a time because that is genuinely how many we can do well.

If that is what you need, write to us. If it is not, tell us what is missing — that is useful too.

— the Speall team

Bring your rig. We will get the loop closed.

Tell us what you record and what you drive. A paragraph is plenty to start.

hello@speall.comusually a reply within a day