Skip to main content

pycbsdk

PyPI version

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 string
  • session.get_channel_smpgroup(chan_id) — channel's sample group (0-6)
  • session.get_group_channels(group_id) — list of channel IDs in a group
  • session.runlevel — current device run level
  • Session.max_chans(), Session.num_fe_chans(), Session.num_analog_chans()

Commands:

  • session.send_comment("marker text", rgba=0xFF0000) — inject a comment
  • session.set_digital_output(chan_id, value) — set digital output
  • session.set_runlevel(level) — change system run level
  • session.set_sample_group(n, "FRONTEND", group_id) — configure sampling
  • session.set_spike_sorting(n, "FRONTEND", sort_options) — configure spike sorting

CCF Configuration Files:

  • session.save_ccf("config.ccf") — save current device config to XML file
  • session.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 recording
  • session.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 to time.monotonic() seconds
  • session.clock_offset_ns — raw clock offset (device_ns - steady_clock_ns), or None
  • session.clock_uncertainty_ns — uncertainty (half-RTT), or None
  • session.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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pycbsdk-9.12.1.tar.gz (86.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pycbsdk-9.12.1-py3-none-win_amd64.whl (278.7 kB view details)

Uploaded Python 3Windows x86-64

pycbsdk-9.12.1-py3-none-manylinux_2_39_x86_64.whl (459.4 kB view details)

Uploaded Python 3manylinux: glibc 2.39+ x86-64

pycbsdk-9.12.1-py3-none-macosx_26_0_universal2.whl (661.8 kB view details)

Uploaded Python 3macOS 26.0+ universal2 (ARM64, x86-64)

File details

Details for the file pycbsdk-9.12.1.tar.gz.

File metadata

  • Download URL: pycbsdk-9.12.1.tar.gz
  • Upload date:
  • Size: 86.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pycbsdk-9.12.1.tar.gz
Algorithm Hash digest
SHA256 61b4952f162ec4fa4c7923931ccd013a1880ede4d9a7e8b613894fa99e359239
MD5 971d1972ae0c112a30496d2a27874bf4
BLAKE2b-256 85f04adb1f0c4619e20bf2a70e9736a654b06c051ba06d7166623e5a3b2ad918

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycbsdk-9.12.1.tar.gz:

Publisher: build_pycbsdk.yml on CerebusOSS/CereLink

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pycbsdk-9.12.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: pycbsdk-9.12.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 278.7 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pycbsdk-9.12.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 37dfa3db86adf1eb28e844f910d8e4ba51649065fabea04dcab4846cef05ace3
MD5 675bd6fa1e6e263672f49f2074ebe79b
BLAKE2b-256 46e3943a54ede25926b77e7fa1363bb2c3e5c70a4c07b1124172e2843daa08f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycbsdk-9.12.1-py3-none-win_amd64.whl:

Publisher: build_pycbsdk.yml on CerebusOSS/CereLink

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pycbsdk-9.12.1-py3-none-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for pycbsdk-9.12.1-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 7f497ccaf7429dd0e9e84ba4cc8cf4f1a0cc75b64ce1f356c7e022bbc93f5ceb
MD5 aab027a3bcc68d069625f5585f6ae70a
BLAKE2b-256 7fc168b6028d371705f7dc7a91ffdb419c6ac30bdabe909568784d8827667f61

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycbsdk-9.12.1-py3-none-manylinux_2_39_x86_64.whl:

Publisher: build_pycbsdk.yml on CerebusOSS/CereLink

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pycbsdk-9.12.1-py3-none-macosx_26_0_universal2.whl.

File metadata

File hashes

Hashes for pycbsdk-9.12.1-py3-none-macosx_26_0_universal2.whl
Algorithm Hash digest
SHA256 6c1e649fcd17fbfe6377f732bfaa7078cdb6946bcd7d6566554253c07a5dcd5c
MD5 b9504b1f450eeb07bbe479270695294f
BLAKE2b-256 c59e7f2e179dd9aa88881fb3c456fa001c348e324610b5af72e50e34fbe73ba6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycbsdk-9.12.1-py3-none-macosx_26_0_universal2.whl:

Publisher: build_pycbsdk.yml on CerebusOSS/CereLink

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

10.1.0

4 files

10.0.0

4 files

9.13.1

4 files

9.13.0

4 files

This release

9.12.1 This release

4 files

9.12.0

4 files

9.11.1

4 files

9.11.0

4 files

9.10.0

4 files

9.9.1

4 files

9.9.0

4 files

9.8.0

4 files

9.7.3

4 files

9.7.2

4 files

9.7.1

4 files

9.7.0

4 files

9.6.1

4 files

9.6.0

4 files

9.5.1

4 files

9.5.0

4 files

9.4.1

4 files

9.4.0

4 files

9.3.0

4 files

9.2.0

4 files

9.1.0

4 files

9.0.1

4 files

9.0.0

4 files

0.4.1

2 files

0.4.0

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.3

2 files

0.1.2

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page