pydecklink
Python bindings for the Blackmagic DeckLink SDK, exposing the capture and scheduled playback APIs via CPU buffers (numpy).
Requirements
- Linux, macOS, or Windows with Blackmagic Desktop Video installed
- Blackmagic DeckLink hardware
- Python 3.12+
Install
uv pip install pydecklink
Prebuilt wheels ship for Linux (manylinux x86_64), macOS, and Windows. Building from source requires a C++ toolchain — see CONTRIBUTING.md.
Usage
import pydecklink
# Desktop Video runtime version
print(pydecklink.api_version().string)
# Enumerate DeckLink devices
for info in pydecklink.list_devices():
print(f"{info.index}: {info.model_name}")
# Display modes a device can output
dev = pydecklink.Device(0)
for m in dev.list_output_modes():
fps = pydecklink.get_mode_fps(m.mode)
print(f"{m.name}: {m.width}x{m.height} @ {fps:.2f}")
Examples
The examples/ directory in the repo contains runnable scripts:
| Script | What it does |
|---|---|
passthrough.py |
Zero-copy SDI capture → playout loop. |
cuda_passthrough.py |
Canonical SDI → CUDA kernel → SDI recipe (drop in your own kernel callable). |
cuda_loopback_latency.py |
Fingerprint loopback benchmark for end-to-end latency. |
cuda_register_pinned.py |
Register CUDA pinned memory for the H2D capture path. |
detect_signals.py |
Walk all inputs, report which carry an active signal. |
dump_topology.py |
Print each device's identity and profile attributes. |
CUDA examples need the cuda-examples extra
(uv pip install "pydecklink[cuda-examples]").
API
The package ships type stubs (pydecklink/_bindings.pyi) and a py.typed
marker, so editors and mypy see the full typed surface. Key entry points:
Device discovery
list_devices() -> list[DeviceInfo],device_count() -> intapi_version() -> APIVersion— Desktop Video runtime versionconnector_label(device) -> str | None— physical SDI port label
Display-mode helpers
get_mode_width(mode),get_mode_height(mode),get_mode_fps(mode)get_mode_frame_duration(mode),get_frame_bytes(mode, pixel_format),get_row_bytes(pixel_format, width)
Device — open a card with Device(index), then:
- Capture:
enable_video_input(...),start_streams(), andpop_capture_frame()(copying) orpop_capture_frame_ref()(zero-copy). - Scheduled playback:
enable_video_output(...),create_frame_pool(...),acquire_output_frame(),schedule_output_frame(...),start_scheduled_playback(...). - Zero-copy passthrough:
schedule_capture_frame(...)forwards a captured frame straight to output with no memcpy.
Frames — CaptureFrame, CaptureFrameRef (zero-copy), and MutableFrame
expose pixel data as a numpy array via .data, alongside .width,
.height, .row_bytes.
Enums — DisplayMode, PixelFormat, VideoConnection, VideoInputFlag,
VideoOutputFlag, FieldDominance, and related SDK constants.
Custom memory — VideoBufferAllocator / VideoBufferAllocatorProvider
back capture and playback with caller-owned buffers (e.g. CUDA pinned memory)
for direct GPU DMA. Connector profiles — ProfileManager, Profile,
and ProfileID switch a card's duplex/sub-device layout.
License
BSD-3-Clause — see LICENSE.
Release files for pydecklink 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pydecklink-0.6.1-cp312-abi3-win_amd64.whl | CPython 3.12 | abi3 | Windows x86-64 | Details |
| pydecklink-0.6.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.12 | abi3 | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| pydecklink-0.6.1-cp312-abi3-macosx_14_0_arm64.whl | CPython 3.12 | abi3 | macOS 14.0+ ARM64 | Details |
Total release size: 448.2 kB
Release files / pydecklink-0.6.1-cp312-abi3-win_amd64.whl
| Download URL | pydecklink-0.6.1-cp312-abi3-win_amd64.whl |
|---|---|
| Size | 145.4 kB |
| Tags | CPython 3.12 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
32acc9d8803dfffc4662b5a43c355c18586ed71f6328adb291192f08298134e8
|
|
BLAKE2b-256 checksum How to use checksums |
0a130e6a85d76d1b2b8381e630b389e279d50c51dd9332be9cc35cf9f964fce6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency logRelease files / pydecklink-0.6.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pydecklink-0.6.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 165.7 kB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
36654610a2ec214fd6ee4cd31f9a051ec1f71916a5e7426eada036d0edde6048
|
|
BLAKE2b-256 checksum How to use checksums |
b507a7325ad57dfb3786ec89dc8897fdec11ab99cb2effc323a5931bf10dcf02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency logRelease files / pydecklink-0.6.1-cp312-abi3-macosx_14_0_arm64.whl
| Download URL | pydecklink-0.6.1-cp312-abi3-macosx_14_0_arm64.whl |
|---|---|
| Size | 137.0 kB |
| Tags | CPython 3.12 abi3 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9720032ff7fa6df762d54b5c59f1d15d410d171b851fed09a6ebdd4da2c1b980
|
|
BLAKE2b-256 checksum How to use checksums |
7b6029a83ca49bfac2253c319ff4cfba056c1b8125a669540052ba51d6798164
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency log