The README had drifted out of agreement with itself, and was close to twice the length of dora-webcam's for a node with fewer knobs.
Two things it got wrong
It contradicted itself about the types. The manifest section said image is std/core/v1/UInt8 and depth/camera_info are std/core/v1/Float32 — four lines above a table correctly saying both are std/media/v1/Image. Left over from before the migration.
The producer example taught the old form. It showed pa.array(frame.ravel()) plus {width, height, encoding} metadata. That is still decoded, but a producer written from it and declaring the matching type fails dora validate, because compatibility is directional. It now shows the Image struct.
What was cut
1749 words to 1007, comparable to dora-webcam's 909. What went was rationale, not reference: why dataflow_webcam.yml carries no strict_types, how a producer migrates its manifest, the full explanation of what a git: node needs and why Gitea's organization visibility matters. Each of those already lives in the file it explains or in the commit that made the decision; none of it belongs in front of someone trying to wire a node.
What stayed is what a consumer needs: the wiring block, the inputs table, the encodings, the environment variables, build and test. The git: anonymous-access requirement survives as one sentence, because it is the difference between the example working and not.
Validation
Every encoding, environment variable and CLI flag in the new text was checked against the code rather than carried over:
image encodings match decode.SUPPORTED
depth encodings match depth.DEPTH_DTYPES
the struct in the example matches decode.IMAGE_TYPE
VIEW_WIDTH, VIEW_HEIGHT, VIEW_DEPTH_MIN_MM, VIEW_DEPTH_MAX_MM are the four the code reads; --view-width and --view-height are the two flags it defines
pymarkdown clean, 41 tests, ruff clean.
# Summary
The README had drifted out of agreement with itself, and was close to twice the length of dora-webcam's for a node with fewer knobs.
## Two things it got wrong
- **It contradicted itself about the types.** The manifest section said `image` is `std/core/v1/UInt8` and `depth`/`camera_info` are `std/core/v1/Float32` — four lines above a table correctly saying both are `std/media/v1/Image`. Left over from before the migration.
- **The producer example taught the old form.** It showed `pa.array(frame.ravel())` plus `{width, height, encoding}` metadata. That is still decoded, but a producer written from it and *declaring* the matching type fails `dora validate`, because compatibility is directional. It now shows the `Image` struct.
## What was cut
1749 words to 1007, comparable to dora-webcam's 909. What went was rationale, not reference: why `dataflow_webcam.yml` carries no `strict_types`, how a producer migrates its manifest, the full explanation of what a `git:` node needs and why Gitea's organization visibility matters. Each of those already lives in the file it explains or in the commit that made the decision; none of it belongs in front of someone trying to wire a node.
What stayed is what a consumer needs: the wiring block, the inputs table, the encodings, the environment variables, build and test. The `git:` anonymous-access requirement survives as one sentence, because it is the difference between the example working and not.
## Validation
Every encoding, environment variable and CLI flag in the new text was checked against the code rather than carried over:
- image encodings match `decode.SUPPORTED`
- depth encodings match `depth.DEPTH_DTYPES`
- the struct in the example matches `decode.IMAGE_TYPE`
- `VIEW_WIDTH`, `VIEW_HEIGHT`, `VIEW_DEPTH_MIN_MM`, `VIEW_DEPTH_MAX_MM` are the four the code reads; `--view-width` and `--view-height` are the two flags it defines
`pymarkdown` clean, 41 tests, `ruff` clean.
It had drifted out of agreement with itself. The manifest section still said
`image` is std/core/v1/UInt8 and depth and camera_info are std/core/v1/Float32,
four lines above a table correctly saying both are std/media/v1/Image, and the
worked example for a producer showed the flat-buffer form the node moved away
from. Someone following it would have written a producer that fails validate.
It was also close to twice the length of the one next door, mostly rationale:
why a dataflow carries no strict_types, how a producer migrates, what a git:
node needs and why. That belongs in the file it explains or in the commit that
made the decision, not in front of someone trying to wire a node.
1007 words, from 1749. Every encoding, environment variable and CLI flag in it
was checked against the code.
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
The README had drifted out of agreement with itself, and was close to twice the length of dora-webcam's for a node with fewer knobs.
Two things it got wrong
imageisstd/core/v1/UInt8anddepth/camera_infoarestd/core/v1/Float32— four lines above a table correctly saying both arestd/media/v1/Image. Left over from before the migration.pa.array(frame.ravel())plus{width, height, encoding}metadata. That is still decoded, but a producer written from it and declaring the matching type failsdora validate, because compatibility is directional. It now shows theImagestruct.What was cut
1749 words to 1007, comparable to dora-webcam's 909. What went was rationale, not reference: why
dataflow_webcam.ymlcarries nostrict_types, how a producer migrates its manifest, the full explanation of what agit:node needs and why Gitea's organization visibility matters. Each of those already lives in the file it explains or in the commit that made the decision; none of it belongs in front of someone trying to wire a node.What stayed is what a consumer needs: the wiring block, the inputs table, the encodings, the environment variables, build and test. The
git:anonymous-access requirement survives as one sentence, because it is the difference between the example working and not.Validation
Every encoding, environment variable and CLI flag in the new text was checked against the code rather than carried over:
decode.SUPPORTEDdepth.DEPTH_DTYPESdecode.IMAGE_TYPEVIEW_WIDTH,VIEW_HEIGHT,VIEW_DEPTH_MIN_MM,VIEW_DEPTH_MAX_MMare the four the code reads;--view-widthand--view-heightare the two flags it definespymarkdownclean, 41 tests,ruffclean.