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-10.0.0.tar.gz (101.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-10.0.0-py3-none-win_amd64.whl (348.5 kB view details)

Uploaded Python 3Windows x86-64

pycbsdk-10.0.0-py3-none-manylinux_2_39_x86_64.whl (544.1 kB view details)

Uploaded Python 3manylinux: glibc 2.39+ x86-64

pycbsdk-10.0.0-py3-none-macosx_26_0_universal2.whl (809.0 kB view details)

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

File details

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

File metadata

  • Download URL: pycbsdk-10.0.0.tar.gz
  • Upload date:
  • Size: 101.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pycbsdk-10.0.0.tar.gz
Algorithm Hash digest
SHA256 9db969606b988c0b3422ec364ed562746b210cf5d7f4bc4638aabd3e2a936d81
MD5 20a285111b791f973d3a6ae55ba4967f
BLAKE2b-256 e0ceb4391990f711c0c0184021cd1547ba7eb6b359effe0d582770dc49bebb51

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for pycbsdk-10.0.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 900d3102666d681265925eb198a1ff42463154bb6dfbef2ee029edca555f1529
MD5 42074e646ab747922f88e19a7fa365e1
BLAKE2b-256 d875e6fe3c70245175717bd8a30d2bffeb8c10e98231f3d33eb723c3b609629a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pycbsdk-10.0.0-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 91da09be09d2d358c010fe1b82df175d050b398ad97b37a7f0be8b5f439aa74f
MD5 a62f95810f85f85df96c943cb722a903
BLAKE2b-256 0b002929d889ce8b0c1c1de0b0a6c1c4633c4e19aa4d9a70d52f97da276ceb30

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycbsdk-10.0.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-10.0.0-py3-none-macosx_26_0_universal2.whl.

File metadata

File hashes

Hashes for pycbsdk-10.0.0-py3-none-macosx_26_0_universal2.whl
Algorithm Hash digest
SHA256 3ebb1679e0fa9e5b9b0c8d4b00a3baf5b6380accebb58a92fa76299ec1f7302a
MD5 bf9cc99f6f8d79531a74e6a897d56934
BLAKE2b-256 a85c846d886dcc6e28952c321a8ebd65397345424e85a305263212b8b0bf87f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycbsdk-10.0.0-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

This release

10.0.0 This release

4 files

9.13.1

4 files

9.13.0

4 files

9.12.1

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