Skip to main content

Durchblick

PyPI Python CI licence platform Zenoh

Durchblick is a middleware for camera streams and perception results. It moves frames between programs in shared memory and in GPU memory, and it uses the message types of ROS 2 without needing ROS.

Why Durchblick

A 1080p colour frame has 6 MB. A publisher that sends it to 16 programs over TCP spends 26 ms of CPU time per frame. Durchblick writes the frame once into shared memory and sends each reader only the location of the frame. This takes about 1 ms for any number of readers.

  • Each host stores a frame once. The publisher writes the frame into a ring in shared memory, and all readers on that host work on this one copy. Rings
  • Frames stay on the GPU. A GPU producer and a GPU consumer exchange frames in GPU memory, without a copy to the CPU. Frames on the GPU
  • A publisher works only on request. It encodes a JPEG only while a subscriber asks for JPEG, and it writes a ring only while a reader has it open. Transports
  • Latency stays constant under load. Every stream keeps only its newest frame, so a slow consumer skips frames and never receives old ones. Latest value
  • Every consumer uses the same stream. The subscriber chooses the transport. The topic, the message type and the API are the same on one host and across the network, in Python and in C++, on a robot and in a simulation. Streams and topics

Requirements

Linux on x86-64, Python 3.10 to 3.13, and one Zenoh router per PC (xblick router, or zenohd 1.10). An NVIDIA GPU is needed only for frames in GPU memory. C++ programs need CMake and a C++20 compiler.

Install

pip install "xblick[rerun,record]"                      # wheels for Linux x86-64 with glibc 2.28 or newer
xblick router                                           # the router, once per PC (or zenohd, below)

xblick router runs the Zenoh router from the package. A robot's setup may use zenohd instead (zenohd --no-multicast-scouting -l tcp/0.0.0.0:7447), which is not part of the pip packages. It comes from Eclipse Zenoh. Zenoh's installation page describes it.

To build from a checkout of this repository, run pip install "./xblick[rerun,record]". The build needs CMake and a C++20 compiler.

Extras and C++: install.

Use

xblick test-camera       # publish a moving test pattern
xblick cam /dev/video0   # a webcam as cam/video0/color (needs xblick[cam], not yet tested on a device)
xblick list              # show every stream
xblick hz test/camera/color
xblick rerun             # show every stream and result in the Rerun viewer
xblick view test/camera/color  # show a stream in a browser or VLC
import xblick as db

session = db.open_session()
images = db.ImageSubscriber(session, "test/camera/color", transport="auto")
frame = images.latest(timeout=1.0)        # the newest frame as a NumPy array

On the publisher's host, transport="auto" reads the frame from a ring. On another host, it receives a JPEG over the network. Your code is the same in both cases.

Continue with your first stream. Without a command, xblick opens a terminal interface with all streams, nodes and parameters.

Write a node

A node reads the streams of a camera and publishes its results below that camera, at <camera>/<node>/<name>. The tutorial your first node builds a complete node in 40 lines. The writing nodes guide lists what Durchblick gives every node: logging, diagnostics, frames as tensors, streams paired by stamp, rate limits and parameters.

Three rules matter most.

  1. Stamp each result with the capture time of its input.
  2. Name your CUDA stream when you publish an array from GPU memory.
  3. Fail with a clear message. Do not continue with a default that hides a wrong configuration.

Nodes

Each perception method is a node in a repository of its own. Every node works on any camera, whether the frames come from a robot, a simulation or a recording.

Task Nodes
Cameras azure-kinect, roboception, relay, xblick cam (this repository: webcams and IP cameras)
Depth and point clouds fast-foundationstereo, xblick-points (this repository)
Segmentation, detection, tracking sam3, boxer, tapnext
6D object poses foundationpose, nemo, ivt
Meshes of new objects recgen, sam3d-objects, any6d
People gem-x, insightface, vjepa2
Camera pose and map mapping (cuVSLAM, nvblox)
Recording xblick record, xblick play (this repository)

The node reference has the data flow between the nodes, what each node publishes, and the GPU memory and load of each.

Speed

What Before After Main change
Publish 1080p to 16 readers on one host 26 ms CPU 1 ms one copy in a ring
Azure Kinect 2160p colour for a JPEG consumer 28 ms 0.02 ms the camera's JPEG passed on unchanged
Boxer, median per frame 140 ms 28 ms inputs on the GPU, bfloat16 weights, two CUDA streams
SAM 3.1 with 8 words 51.1 ms 24.4 ms one pass for all words, 672 px
Fast-FoundationStereo, 640 x 480 26.3 ms 11.1 ms TensorRT
FoundationPose tracking 22.7 ms 8.5 ms a port to PyTorch
NeMO metric pose 1.2 s 10 ms RANSAC on the GPU
IVT localisation of 12 objects 137-572 ms 4.9 ms the pipeline on the GPU
nvblox at 60 frames/s input 8 frames/s 47 frames/s the newest complete set of inputs

Measured on an RTX PRO 6000 and an AMD EPYC 9335. Making a node fast explains the method, the changes that helped in several nodes, and the changes that did not help.

Documentation

Start Install · Your first stream · Your first node
Concepts Streams and topics · Transports · Rings · Frames on the GPU · Latest value · Timestamps · Protocol · Sessions and routers
Guides Writing nodes · Pairing streams · Making a node fast · Sharing a GPU · Recording · Video · Live cameras · Point clouds · Viewer · VLC or a browser · Terminal interface
Reference Command line · Python · C++ · Topics · Parameters · Nodes · Where files are · Glossary
Integrations ROS 2
Project Development · Alternatives · Writing documentation · Changelog

Coding agents read AGENTS.md and the project skills in .agents/skills.

Status

Version 0.5.8. Durchblick is in active development, and a new minor version can change the protocol. All programs of one setup speak the same protocol. We now released that version. The changelog states which versions do. Programs of 0.5 do not work with programs of 0.3 or 0.4. The nodes are tested in simulation and on recordings. Tests on robots are in progress.

Origin

Durchblick was started by David Schneider at the Computer Vision for Human-Computer Interaction Lab (cv:hci) at KIT and is developed further in cooperation with the High Performance Humanoid Technologies Lab (H2T) at KIT.

Metadata

Release files for xblick 0.5.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xblick 0.5.8
File Size Uploaded Provenance Actions
xblick-0.5.8.tar.gz 752.0 kB With provenance Details for xblick-0.5.8.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for xblick 0.5.8
File Actions
xblick-0.5.8-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for xblick-0.5.8-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
xblick-0.5.8-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for xblick-0.5.8-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
xblick-0.5.8-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for xblick-0.5.8-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
xblick-0.5.8-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for xblick-0.5.8-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Total release size: 2.7 MB

Release files / xblick-0.5.8.tar.gz

Download URL xblick-0.5.8.tar.gz
Size 752.0 kB
Tags Source
SHA-256 checksum
How to use checksums
201ce4cf4a14af5d3d0d162c72b77f117e2f2f41ea1e6a536c02a09a1c7d029a
BLAKE2b-256 checksum
How to use checksums
68660a2964d8923d8cd5b8de9f873735bc8e2bb69ef7fadcaea39c0fde84775d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 14, 2026.

Transparency log

Release files / xblick-0.5.8-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL xblick-0.5.8-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 489.3 kB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e60065b2a3007ca1ada5f73f69104967d4ca33df0518c49bf0e2df78bce6ce3a
BLAKE2b-256 checksum
How to use checksums
6d3c332dfbb5c2a5172d3395a0fbb66cc64d7d618a4c7a35eb39a3679c5a0326
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 14, 2026.

Transparency log

Release files / xblick-0.5.8-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL xblick-0.5.8-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 489.4 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
8c754e42b4fd2b62df600050e3b177742ebceb2110fdd627686b4f4aa83d9c76
BLAKE2b-256 checksum
How to use checksums
acb835812cb0e1df2d1a3fb2b9506ba70cfce0339ffa3d61110a072b23737942
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 14, 2026.

Transparency log

Release files / xblick-0.5.8-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL xblick-0.5.8-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 489.8 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
8d8b2fa640c19f8d2121e3371c07e644e81f5f9f20122a2a4e4326ccfe546fb8
BLAKE2b-256 checksum
How to use checksums
a8f21ef6e9a35b02e96c411a785a4d267649b33a19857caa16c2fbf2828d5a6d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 14, 2026.

Transparency log

Release files / xblick-0.5.8-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL xblick-0.5.8-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 490.0 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5d1a087c18983dcbbac5f35b9002adb7ed41bf5de3e9660b82216a91ebb6f373
BLAKE2b-256 checksum
How to use checksums
3a44916440370a403ec586c80f449554b01228051f9847780779aedc9d05aa42
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 14, 2026.

Transparency log

Security for xblick 0.5.8

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.

Full provenance

All 5 files in this release have been uploaded with provenance metadata.

Select from 5 files

Attestation for xblick-0.5.8.tar.gz

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 Nov 14, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page