-
released this
2026-09-15 16:14:39 +00:00 | 0 commits to main since this releaseEvery 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 fromstd/core/v1/UInt8tostd/media/v1/Image, so the wiring faileddora validatewhatever the node actually sent.Requires dora 1.0+ (verified against
dora-cli 1.0.1).Breaking changes
Upgrading from
v0.2.0needs dataflow and consumer changes:image_bgris renamed toimage. Updateoutputs:and anything wired to it.imageanddeptharestd/media/v1/Image— an Arrow struct ofwidth: UInt32,height: UInt32,encoding: Utf8anddata: LargeBinary, not a flat buffer.imageisbgr8;depthis32FC1, one float32 per pixel, still millimetres with0for missing and noinfornan.camera_infoandpoint_cloudare Float32 arrays andcamera_statea 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,layoutandencodingonimageanddepth;dtype,layoutandshapeoncamera_info;dtypeonpoint_cloud;dtypeandencodingoncamera_state.units=mmstays ondepth, andshape,channelsandunitsstay onpoint_cloud, which is a flat array with no self-describing grid. Intrinsics (fx,fy,cx,cy,distortion),frame_idand both timestamps are unchanged on every output. dataflow_plot.ymlis replaced bydataflow_view.yml, which wires dora-image-view instead of the dora-hubopencv-plotnode. That also retires the PEP 668pip installfailure listed under v0.2.0's known limitations: the viewer builds withuv pip install .underdora run --uv.
New
src/arrowpacks 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 insidesend_arrow_outputand 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 besidedora validate.dataflow_view.yml— the camera into dora-image-view onimage,depthandcamera_info. Agit:node's manifest is not read at validate time, so the file repeats the viewer's contract ininput_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_FPSon 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, whiledora/timer/millis/66forwards all of them. Corrected in the README,dora-node.ymland 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.shpasses, 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 tostd/core/v1/UInt8.src/main.cccompiles against the generateddora-node-api.hand the ZED SDK headers.
Known limitations
- Not yet run against hardware. The full build and an end-to-end
dataflow_view.ymlrun are outstanding: the machine this was prepared on has no OpenCV, whichsrc/zed/capture.ccneeds, soscripts/build.shstops at configure there. Everything above the SDK is covered by the tests; the camera path is not. dataflow_view.ymlpins the viewer atv0.1.0, the newest tag published for dora-image-view. Its README advertisesv0.1.1, which is not pushed yet.
Downloads