Two things kept this repository from standing on its own: the node was named opencv-plot everywhere, and the example dataflow could not run without a webcam and two nodes fetched from dora-hub over the network.
This renames the node to dora-image-view, replaces the external example with a synthetic source in this checkout, and makes the dataflow something CI runs rather than only validates.
Changes
Rename opencv_plot/ to dora_image_view/, plot.py to view.py, Plot to View, the entrypoint and manifest name: to dora-image-view, and PLOT_WIDTH/PLOT_HEIGHT to VIEW_WIDTH/VIEW_HEIGHT. Breaking for anyone wiring path: opencv-plot or setting PLOT_WIDTH; nothing was tagged.
Add a synthetic source node in this checkout, so the example dataflow needs no camera, no detector and no network, and CI can run it rather than only validate it.
Type the source's outputs inline with output_types: rather than shipping a second dora-node.yml. A manifest describes exactly one node and is what dora hub publish operates on; this repository ships one node, so it carries one manifest.
Merge the two CI jobs into one. They each paid for a checkout, an apt-get update and an OpenCV install — about twenty seconds apiece — to run gates that together take about a second. The dora CLI is cached, pinned to DORA_VERSION.
Drop the dora-zed and dora-yolo wirings from the README; the inputs are documented generically, so no sibling repository is named.
Why the original run failed
dora validate matches a node manifest to a path: node by entrypoint. The source node added here is a path node, the repository-root dora-node.yml was the only manifest, its entrypoint did not name that path, and strict_types: true turned the resulting warning into a non-zero exit. The source now runs through the interpreter, which leaves nothing for a manifest to be matched against.
Validation
Checked against dora-cli 1.0.1, installed for the purpose:
dora validate dataflow.yml passes, with both contracts injected and compared
CI=true SOURCE_FRAMES=30 dora run dataflow.yml --uv runs both nodes to a clean exit
uv run ruff check . clean, tests pass
The type gate still bites: a deliberate Float32 → String swap fails validate
Both things the original description could not check — validation under strict_types and a path node getting the project's pinned dependencies — are now verified rather than reasoned about.
# Summary
Two things kept this repository from standing on its own: the node was named `opencv-plot` everywhere, and the example dataflow could not run without a webcam and two nodes fetched from dora-hub over the network.
This renames the node to `dora-image-view`, replaces the external example with a synthetic source in this checkout, and makes the dataflow something CI runs rather than only validates.
## Changes
- Rename `opencv_plot/` to `dora_image_view/`, `plot.py` to `view.py`, `Plot` to `View`, the entrypoint and manifest `name:` to `dora-image-view`, and `PLOT_WIDTH`/`PLOT_HEIGHT` to `VIEW_WIDTH`/`VIEW_HEIGHT`. Breaking for anyone wiring `path: opencv-plot` or setting `PLOT_WIDTH`; nothing was tagged.
- Add a synthetic source node in this checkout, so the example dataflow needs no camera, no detector and no network, and CI can run it rather than only validate it.
- Type the source's outputs inline with `output_types:` rather than shipping a second `dora-node.yml`. A manifest describes exactly one node and is what `dora hub publish` operates on; this repository ships one node, so it carries one manifest.
- Merge the two CI jobs into one. They each paid for a checkout, an `apt-get update` and an OpenCV install — about twenty seconds apiece — to run gates that together take about a second. The dora CLI is cached, pinned to `DORA_VERSION`.
- Drop the dora-zed and dora-yolo wirings from the README; the inputs are documented generically, so no sibling repository is named.
## Why the original run failed
`dora validate` matches a node manifest to a `path:` node **by entrypoint**. The source node added here is a path node, the repository-root `dora-node.yml` was the only manifest, its entrypoint did not name that path, and `strict_types: true` turned the resulting warning into a non-zero exit. The source now runs through the interpreter, which leaves nothing for a manifest to be matched against.
## Validation
Checked against `dora-cli 1.0.1`, installed for the purpose:
- [x] `dora validate dataflow.yml` passes, with both contracts injected and compared
- [x] `CI=true SOURCE_FRAMES=30 dora run dataflow.yml --uv` runs both nodes to a clean exit
- [x] `uv run ruff check .` clean, tests pass
- [x] The type gate still bites: a deliberate `Float32` → `String` swap fails validate
Both things the original description could not check — validation under `strict_types` and a path node getting the project's pinned dependencies — are now verified rather than reasoned about.
The repository is dora-plot, but the package, the entrypoint, the manifest
name and the window title were all opencv-plot. Consumers wire the node by
`path:`, so the split name was visible in every dataflow.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018WLVZCFFcCH1EpTXGfS9aD
The example dataflow pulled opencv-video-capture and pyarrow-sender from
dora-hub, needed a webcam, and left `bbox` unwired because every bbox source
is a detector. examples/source.py emits an animated frame, the box around the
square in it, and a caption, so the dataflow exercises all three inputs with
nothing outside this checkout.
SOURCE_FRAMES bounds the run, which lets CI run the dataflow headless rather
than only validate it. Drops the dora-zed and dora-yolo wirings from the
README and trims AGENTS.md to what the code and README do not already say.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018WLVZCFFcCH1EpTXGfS9aD
The repository, the Python package, the entrypoint and the manifest name all
now agree. `plot` was carried over from the upstream opencv-plot node and no
longer described anything here, so the module, the class and the environment
variables follow the node:
dora_plot/ -> dora_image_view/
dora_plot/plot.py -> dora_image_view/view.py
Plot -> View
PLOT_WIDTH/HEIGHT -> VIEW_WIDTH/HEIGHT
--plot-width/-height -> --view-width/-height
Breaking for anyone wiring `path: dora-plot` or setting PLOT_WIDTH; nothing is
tagged yet.
`dora validate` matches a node manifest to a `path:` node by entrypoint. With
no manifest beside examples/source.py the root dora-node.yml was tried against
it, did not match its entrypoint, and warned -- which `strict_types: true`
turns into a non-zero exit, failing CI.
Declaring the source's output types in the new manifest rather than as
`output_types:` in dataflow.yml is also what makes them checked: an inline
annotation shadows the manifest, so the manifest would be injected but never
compared against the viewer's.
Verified with dora-cli 1.0.1: validate passes with both contracts injected, and
`CI=true SOURCE_FRAMES=30 dora run dataflow.yml --uv` runs both nodes to a
clean exit.
The two jobs each paid for a checkout, an apt-get update and an OpenCV shared
library install -- about twenty seconds apiece -- to run gates that together
take about a second. Merging them pays that once. The dora CLI is a static
binary pinned to DORA_VERSION, so it caches exactly.
cristhian
changed title from make dora-plot standalone and rename the node to match the repository to make the node standalone and rename it to dora-image-view2026-09-15 09:33:05 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Two things kept this repository from standing on its own: the node was named
opencv-ploteverywhere, and the example dataflow could not run without a webcam and two nodes fetched from dora-hub over the network.This renames the node to
dora-image-view, replaces the external example with a synthetic source in this checkout, and makes the dataflow something CI runs rather than only validates.Changes
opencv_plot/todora_image_view/,plot.pytoview.py,PlottoView, the entrypoint and manifestname:todora-image-view, andPLOT_WIDTH/PLOT_HEIGHTtoVIEW_WIDTH/VIEW_HEIGHT. Breaking for anyone wiringpath: opencv-plotor settingPLOT_WIDTH; nothing was tagged.output_types:rather than shipping a seconddora-node.yml. A manifest describes exactly one node and is whatdora hub publishoperates on; this repository ships one node, so it carries one manifest.apt-get updateand an OpenCV install — about twenty seconds apiece — to run gates that together take about a second. The dora CLI is cached, pinned toDORA_VERSION.Why the original run failed
dora validatematches a node manifest to apath:node by entrypoint. The source node added here is a path node, the repository-rootdora-node.ymlwas the only manifest, its entrypoint did not name that path, andstrict_types: trueturned the resulting warning into a non-zero exit. The source now runs through the interpreter, which leaves nothing for a manifest to be matched against.Validation
Checked against
dora-cli 1.0.1, installed for the purpose:dora validate dataflow.ymlpasses, with both contracts injected and comparedCI=true SOURCE_FRAMES=30 dora run dataflow.yml --uvruns both nodes to a clean exituv run ruff check .clean, tests passFloat32→Stringswap fails validateBoth things the original description could not check — validation under
strict_typesand a path node getting the project's pinned dependencies — are now verified rather than reasoned about.make dora-plot standalone and rename the node to match the repositoryto make the node standalone and rename it to dora-image-view