docs: correct the example's description and say what it is for

The README still described the source as emitting "the three inputs this node
draws". It emits five outputs -- the depth map and the intrinsics were added
without the prose following.

Also records that the example is the CI gate as well as the demo, and that the
second role is what has been shaping it: it publishes depth and camera_info
because those inputs are typed and strict validation fails on a typed input the
dataflow does not wire. Worth knowing before adding the next output.
This commit is contained in:
2026-09-15 05:30:03 -03:00
parent 8a7bda5867
commit 2b70d07868
2 changed files with 11 additions and 4 deletions
+10 -3
View File
@@ -38,9 +38,10 @@ pixels, and the caption on the composite.
### Runnable example
[`dataflow.yml`](dataflow.yml) is self-contained. [`examples/source.py`](examples/source.py)
is a synthetic source node that emits an animated frame, the box around the square
moving in it, and a caption — the three inputs this node draws — so the example needs
no camera, no detector and no network:
is a synthetic source node that emits an animated frame, a depth map of the same scene,
the camera intrinsics, the box around the square moving in the frame, and a caption —
every input this node draws — so the example needs no camera, no detector and no
network:
```bash
dora run dataflow.yml --uv
@@ -52,6 +53,12 @@ to quit.
It builds the viewer from this checkout (`path:` + `build:`) rather than from a tag,
which is what lets `dora validate` pick up the manifest described below.
This example is also the end-to-end gate: CI runs the same dataflow headless on every
push, which is what keeps it from rotting. It earns its place twice over — it is the
only worked example of the *producing* side of these contracts, which is the fiddly
half of wiring this node. The realistic wiring, against a real camera, is the block at
the top of this file.
Set `SOURCE_FRAMES` to stop the source after a fixed number of frames instead of running
until you quit; that plus `CI=true` is how the same dataflow runs headless as a test: