Python bindings for CereLink SDK (Blackrock Neurotech Cerebus devices)
Project description
pycbsdk
Python bindings for the CereLink SDK, providing real-time access to Blackrock Neurotech Cerebus neural signal processors.
Built on cffi (ABI mode) — no compiler needed at install time.
Installation
pip install pycbsdk
# With numpy support (zero-copy array access for continuous data)
pip install pycbsdk[numpy]
Windows prerequisite: The bundled shared library requires the Microsoft Visual C++ Redistributable. Most Windows systems already have it installed. If you get a DLL load error, download it from Microsoft.
Quick Start
from pycbsdk import Session
import time
with Session("HUB1") as session:
# Register a callback for spike events
@session.on_event("FRONTEND")
def on_spike(header, data):
print(f"Spike on channel {header.chid} at t={header.time}")
# Register a callback for 30kHz continuous data
@session.on_group(5, as_array=True)
def on_continuous(header, samples):
# samples is a numpy int16 array of shape (n_channels,)
print(f"Group packet: {len(samples)} channels")
time.sleep(10)
print(session.stats)
Features
- Callback-driven: decorator-based registration for event, group, config, and catch-all packet callbacks
- Context manager: automatic cleanup on exit
- numpy integration (optional): zero-copy arrays for continuous data,
ring buffer accumulator, blocking
read_continuous()collector - Device support: LEGACY_NSP, NSP, HUB1, HUB2, HUB3, NPLAY
API Overview
Session
session = Session(device_type="HUB1", callback_queue_depth=16384)
Callbacks (decorator style):
| Decorator | Description |
|---|---|
@session.on_event("FRONTEND") |
Spike / event packets for a channel type |
@session.on_group(5) |
Continuous sample group (1-6) |
@session.on_group(5, as_array=True) |
Same, but data as numpy array |
@session.on_config(pkt_type) |
Config / system packets |
@session.on_packet() |
All packets (catch-all) |
session.on_error(fn) |
Error messages |
Configuration access:
session.get_channel_label(chan_id)— channel label stringsession.get_channel_smpgroup(chan_id)— channel's sample group (0-6)session.get_group_channels(group_id)— list of channel IDs in a groupsession.runlevel— current device run levelSession.max_chans(),Session.num_fe_chans(),Session.num_analog_chans()
Commands:
session.send_comment("marker text", rgba=0xFF0000)— inject a commentsession.set_digital_output(chan_id, value)— set digital outputsession.set_runlevel(level)— change system run levelsession.set_sample_group(n, "FRONTEND", group_id)— configure samplingsession.set_spike_sorting(n, "FRONTEND", sort_options)— configure spike sorting
CCF Configuration Files:
session.save_ccf("config.ccf")— save current device config to XML filesession.load_ccf("config.ccf")— load config from file and apply to device
Recording Control (requires Central):
session.start_central_recording("filename", comment="session 1")— start recordingsession.stop_central_recording()— stop recording
Clock Synchronization:
# Convert device timestamp to Python's time.monotonic()
@session.on_event("FRONTEND")
def on_spike(header, data):
t = session.device_to_monotonic(header.time)
latency_ms = (time.monotonic() - t) * 1000
print(f"Spike latency: {latency_ms:.1f} ms")
session.device_to_monotonic(device_time_ns)— convert device timestamp totime.monotonic()secondssession.clock_offset_ns— raw clock offset (device_ns - steady_clock_ns), or Nonesession.clock_uncertainty_ns— uncertainty (half-RTT), or Nonesession.send_clock_probe()— send a sync probe
Statistics:
stats = session.stats # Stats dataclass
print(stats.packets_received, stats.packets_dropped)
session.reset_stats()
numpy Integration
Requires pip install pycbsdk[numpy].
# Blocking data collection
data = session.read_continuous(group_id=5, duration=2.0)
# data.shape == (n_channels, ~60000), dtype int16
# Ring buffer for ongoing collection
reader = session.continuous_reader(group_id=5, buffer_seconds=10)
import time; time.sleep(5)
data = reader.read() # most recent samples
data = reader.read(1000) # last 1000 samples
print(reader.total_samples, reader.dropped)
reader.close()
Supported Devices
| Device Type | Description |
|---|---|
LEGACY_NSP |
Legacy NSP (default) |
NSP |
NSP |
HUB1 |
Gemini Hub 1 |
HUB2 |
Gemini Hub 2 |
HUB3 |
Gemini Hub 3 |
NPLAY |
nPlay |
Development
# Build the shared library
cmake -S . -B build -DCBSDK_BUILD_SHARED=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build --target cbsdk_shared --config Release
# Install pycbsdk in development mode
cd pycbsdk
pip install -e ".[dev,numpy]"
# Point to the shared library
export CBSDK_LIB_PATH=/path/to/libcbsdk.dll # or .so / .dylib
License
BSD 2-Clause. See LICENSE.txt.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pycbsdk-9.9.0.tar.gz.
File metadata
- Download URL: pycbsdk-9.9.0.tar.gz
- Upload date:
- Size: 71.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e59da058548836bf8407ae18fcf9199976720b911ed4d67c26e9a8247b2f93f
|
|
| MD5 |
ea6c491f7123e3db326ac30d0fddc768
|
|
| BLAKE2b-256 |
164d7d80776deea7469a2db5986d66b32e9b08d0d473e08e831ed67710eb162c
|
Provenance
The following attestation bundles were made for pycbsdk-9.9.0.tar.gz:
Publisher:
build_pycbsdk.yml on CerebusOSS/CereLink
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pycbsdk-9.9.0.tar.gz -
Subject digest:
0e59da058548836bf8407ae18fcf9199976720b911ed4d67c26e9a8247b2f93f - Sigstore transparency entry: 1402504909
- Sigstore integration time:
-
Permalink:
CerebusOSS/CereLink@1991c938605532662b99dbdf5fd7af40f69e59cc -
Branch / Tag:
refs/tags/v9.9.0 - Owner: https://github.com/CerebusOSS
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build_pycbsdk.yml@1991c938605532662b99dbdf5fd7af40f69e59cc -
Trigger Event:
release
-
Statement type:
File details
Details for the file pycbsdk-9.9.0-py3-none-win_amd64.whl.
File metadata
- Download URL: pycbsdk-9.9.0-py3-none-win_amd64.whl
- Upload date:
- Size: 270.0 kB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2268c0117361abd22316e12beca633b32b141b74c493eae46100bfc3608352be
|
|
| MD5 |
a9b87f41f7b80bf93dbfcf6eb70b7079
|
|
| BLAKE2b-256 |
56ef69efed660184a69c458d97caec80e436495b3df835554e318c2812d9cd1f
|
Provenance
The following attestation bundles were made for pycbsdk-9.9.0-py3-none-win_amd64.whl:
Publisher:
build_pycbsdk.yml on CerebusOSS/CereLink
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pycbsdk-9.9.0-py3-none-win_amd64.whl -
Subject digest:
2268c0117361abd22316e12beca633b32b141b74c493eae46100bfc3608352be - Sigstore transparency entry: 1402505725
- Sigstore integration time:
-
Permalink:
CerebusOSS/CereLink@1991c938605532662b99dbdf5fd7af40f69e59cc -
Branch / Tag:
refs/tags/v9.9.0 - Owner: https://github.com/CerebusOSS
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build_pycbsdk.yml@1991c938605532662b99dbdf5fd7af40f69e59cc -
Trigger Event:
release
-
Statement type:
File details
Details for the file pycbsdk-9.9.0-py3-none-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: pycbsdk-9.9.0-py3-none-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 447.3 kB
- Tags: Python 3, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
644253e3ee455f43575f387c96048669145ac9363c4e69bea6994ca09c2e4842
|
|
| MD5 |
2a217f068864f89d19a245a2ec35cbd1
|
|
| BLAKE2b-256 |
dce76e62481358f275438213c466ba2f5bd6270e49fab1a4f75c278de20f9c55
|
Provenance
The following attestation bundles were made for pycbsdk-9.9.0-py3-none-manylinux_2_39_x86_64.whl:
Publisher:
build_pycbsdk.yml on CerebusOSS/CereLink
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pycbsdk-9.9.0-py3-none-manylinux_2_39_x86_64.whl -
Subject digest:
644253e3ee455f43575f387c96048669145ac9363c4e69bea6994ca09c2e4842 - Sigstore transparency entry: 1402505639
- Sigstore integration time:
-
Permalink:
CerebusOSS/CereLink@1991c938605532662b99dbdf5fd7af40f69e59cc -
Branch / Tag:
refs/tags/v9.9.0 - Owner: https://github.com/CerebusOSS
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build_pycbsdk.yml@1991c938605532662b99dbdf5fd7af40f69e59cc -
Trigger Event:
release
-
Statement type:
File details
Details for the file pycbsdk-9.9.0-py3-none-macosx_15_0_universal2.whl.
File metadata
- Download URL: pycbsdk-9.9.0-py3-none-macosx_15_0_universal2.whl
- Upload date:
- Size: 644.6 kB
- Tags: Python 3, macOS 15.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db62ae29e441b5c200290204857b5d7cb4558df379f234991800bace7d36597c
|
|
| MD5 |
5edeca238c4bbea615fac4b85ff9e635
|
|
| BLAKE2b-256 |
445d73c147ddfa57f3b1d01f1943ea6e6c4d39e64c51c32c19cb1513c601c4b8
|
Provenance
The following attestation bundles were made for pycbsdk-9.9.0-py3-none-macosx_15_0_universal2.whl:
Publisher:
build_pycbsdk.yml on CerebusOSS/CereLink
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pycbsdk-9.9.0-py3-none-macosx_15_0_universal2.whl -
Subject digest:
db62ae29e441b5c200290204857b5d7cb4558df379f234991800bace7d36597c - Sigstore transparency entry: 1402505813
- Sigstore integration time:
-
Permalink:
CerebusOSS/CereLink@1991c938605532662b99dbdf5fd7af40f69e59cc -
Branch / Tag:
refs/tags/v9.9.0 - Owner: https://github.com/CerebusOSS
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build_pycbsdk.yml@1991c938605532662b99dbdf5fd7af40f69e59cc -
Trigger Event:
release
-
Statement type: