• v0.3.0 ff6a87f084

    v0.3.0 — Typed Arrow payloads
    validate / validate (push) Successful in 58m48s
    validate / test (push) Successful in 58m55s
    Stable

    cristhian released this 2026-09-15 16:14:39 +00:00 | 0 commits to main since this release

    Every payload this node publishes is now a typed Arrow array. That is what makes it consumable by dora-image-view, which takes std/media/v1/Image — and what the old flat byte buffers could not satisfy at any setting: dora's compatibility graph has no edge from std/core/v1/UInt8 to std/media/v1/Image, so the wiring failed dora validate whatever the node actually sent.

    Requires dora 1.0+ (verified against dora-cli 1.0.1).

    Breaking changes

    Upgrading from v0.2.0 needs dataflow and consumer changes:

    • image_bgr is renamed to image. Update outputs: and anything wired to it.
    • image and depth are std/media/v1/Image — an Arrow struct of width: UInt32, height: UInt32, encoding: Utf8 and data: LargeBinary, not a flat buffer. image is bgr8; depth is 32FC1, one float32 per pixel, still millimetres with 0 for missing and no inf or nan.
    • camera_info and point_cloud are Float32 arrays and camera_state a UTF-8 string, rather than raw bytes that only claimed those types in the manifest. A consumer reinterpreting a UInt8 buffer as floats now gets floats directly.
    • Metadata the payload now carries itself is gone: shape, dtype, layout and encoding on image and depth; dtype, layout and shape on camera_info; dtype on point_cloud; dtype and encoding on camera_state. units=mm stays on depth, and shape, channels and units stay on point_cloud, which is a flat array with no self-describing grid. Intrinsics (fx, fy, cx, cy, distortion), frame_id and both timestamps are unchanged on every output.
    • dataflow_plot.yml is replaced by dataflow_view.yml, which wires dora-image-view instead of the dora-hub opencv-plot node. That also retires the PEP 668 pip install failure listed under v0.2.0's known limitations: the viewer builds with uv pip install . under dora run --uv.

    New

    • src/arrow packs every payload against the Arrow C data interface, so the node exports typed Arrow arrays without linking Arrow C++ — which would put libarrow on every build machine, Jetson included. Payload bytes are borrowed rather than copied: dora IPC-encodes the array into shared memory inside send_arrow_output and then calls the release callbacks.
    • tests/run.sh — the first test suite here that needs no camera, no ZED SDK and no CUDA. Each exported array is round-tripped through pyarrow's C data interface to check the values a consumer reads back, and rebuilt under the address and undefined-behaviour sanitizers to check that releasing one frees the whole tree. CI runs it beside dora validate.
    • dataflow_view.yml — the camera into dora-image-view on image, depth and camera_info. A git: node's manifest is not read at validate time, so the file repeats the viewer's contract in input_types:, which gets both sides of the wiring checked before anything runs.

    Fixed

    • The documented tick behaviour was wrong. A tick does not trigger a grab: capture is free-running at ZED_FPS on its own thread, and a tick forwards the newest frame there is. The tick therefore sets the publish rate, never the capture rate — the default 100 ms tick against the default 15 fps keeps two frames out of every three, while dora/timer/millis/66 forwards all of them. Corrected in the README, dora-node.yml and AGENTS.md.
    • The usage snippet listed four of the five outputs, which read as an omission rather than the choice it is.
    • The README is a quarter shorter and follows the shape of the sibling node repositories.

    Verified

    • tests/run.sh passes, and the leak check was confirmed to fail when the release callback is broken.
    • dora validate (dora-cli 1.0.1) passes on both dataflows, and fails as expected when the manifest is reverted to std/core/v1/UInt8.
    • src/main.cc compiles against the generated dora-node-api.h and the ZED SDK headers.

    Known limitations

    • Not yet run against hardware. The full build and an end-to-end dataflow_view.yml run are outstanding: the machine this was prepared on has no OpenCV, which src/zed/capture.cc needs, so scripts/build.sh stops at configure there. Everything above the SDK is covered by the tests; the camera path is not.
    • dataflow_view.yml pins the viewer at v0.1.0, the newest tag published for dora-image-view. Its README advertises v0.1.1, which is not pushed yet.
    Downloads