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.0.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.0-py3-none-win_amd64.whl (278.7 kB view details)

Uploaded Python 3Windows x86-64

pycbsdk-9.12.0-py3-none-manylinux_2_39_x86_64.whl (459.1 kB view details)

Uploaded Python 3manylinux: glibc 2.39+ x86-64

pycbsdk-9.12.0-py3-none-macosx_15_0_universal2.whl (658.9 kB view details)

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

File details

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

File metadata

  • Download URL: pycbsdk-9.12.0.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.0.tar.gz
Algorithm Hash digest
SHA256 c3a2fdf96f9c75f9f6601c043edd4cd5148233174e56eae63c36e7d45f50f822
MD5 c8b44f6871661ef5933521dcbb632d24
BLAKE2b-256 1cdfb6aca78f9a15b285c5426b338fe19b65a98e71758ba338db531f499e99c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycbsdk-9.12.0.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.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: pycbsdk-9.12.0-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.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 cd0b0d700954dd213cdc6254680eeb2a7e753efea0d3f10a76b13c6e8c7b1de4
MD5 9d097d84ec383035dbcf0031202f85d0
BLAKE2b-256 6821baf58f706aff11c731ff5c75b0293e22782d98e6ae0064c3d45c8aea0120

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycbsdk-9.12.0-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.0-py3-none-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for pycbsdk-9.12.0-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 7dec56c11b1192a94e79c60a6902aa5d88be15ed245631796af7e3e09c02f4d8
MD5 fa491c7a6d9cfb9f53571d9f60933f1b
BLAKE2b-256 a3e0fa02cc4e533bce4badbb9167995e9f597afb16b27971c2f42fa659292b39

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycbsdk-9.12.0-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.0-py3-none-macosx_15_0_universal2.whl.

File metadata

File hashes

Hashes for pycbsdk-9.12.0-py3-none-macosx_15_0_universal2.whl
Algorithm Hash digest
SHA256 881c99eaead7217e9f3e9be32c2c766c0160f7d91afa3b9abc9fba0e5cbb4618
MD5 d5ff80495700fd4e4d335ca0ad11fd4d
BLAKE2b-256 50291c1062c85cb2db995da172b0ede42d85502c601a58f89e4869232ebbbaf3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycbsdk-9.12.0-py3-none-macosx_15_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

9.12.1

4 files

This release

9.12.0 This release

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