Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 10.1.0 instead.
Reason given by maintainers: Should have been major

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.13.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-9.13.0-py3-none-win_amd64.whl (346.8 kB view details)

Uploaded Python 3Windows x86-64

pycbsdk-9.13.0-py3-none-manylinux_2_39_x86_64.whl (542.9 kB view details)

Uploaded Python 3manylinux: glibc 2.39+ x86-64

pycbsdk-9.13.0-py3-none-macosx_26_0_universal2.whl (803.9 kB view details)

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

File details

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

File metadata

  • Download URL: pycbsdk-9.13.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-9.13.0.tar.gz
Algorithm Hash digest
SHA256 67ae23546c691ee3f9efbdf6724fae0733ba428f9b5fb03c61e5031bff84ec19
MD5 9aeeb3cff90e4dfc51a1638b80eca272
BLAKE2b-256 8b6bd0791c0e3c41ca5f2b20f50e56a0d3ff10798770d74251a3e18acea2a733

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pycbsdk-9.13.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 346.8 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-9.13.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 93f2e7b7a4b5a70e7a39625eb9cc3b288c319c869b0943a1422463e2c0364ed9
MD5 4565234e6e227ca0e06fdd6579a0663a
BLAKE2b-256 bdde9c32c0e8c2a54948f7fbb3af2d28bfe4cb61ef7624d446ddacf725957931

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pycbsdk-9.13.0-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 8802cf2a6b0d465ac9c22c4774fdf5f4cab15c63cea5e0d0d5edd1f136804972
MD5 5a45d850706e41491f4116a572700011
BLAKE2b-256 3035ddc0157eab7959f1b0b40b96cdd68707002692499b4341cbfc334997a21a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pycbsdk-9.13.0-py3-none-macosx_26_0_universal2.whl
Algorithm Hash digest
SHA256 0aa01d47a64280cfa446a5e1b360c10fdf8df2bae6be0eb6ce08748ff89ac306
MD5 3c4ed26261f73ef5a539006c2642d163
BLAKE2b-256 b82f474e86067ab5df01cc6bf6507c85c000d9da545f9d3367393f086cbb688c

See more details on using hashes here.

Provenance

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

10.0.0

4 files

9.13.1

4 files

This release

9.13.0 This release

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