anonymize is a workflow node that de-identifies detected regions in an
image or camera frame. It is the destructive counterpart to
annotate: where annotate draws on top of preserved
pixels, anonymize replaces pixels in each detection region with a
mosaic, blur, redaction grid, or solid fill, producing a frame safe to
publish to downstream consumers.
Execution context is inferred from the upstream graph:
- Wired downstream of a
camera_frametrigger +call_modelchain it is compiled into the edge worker and processes the live frame. - Wired anywhere else it runs in the cloud workflow runner against an image URL.
Modes
Inputs
Outputs
Cloud chains populate the output fields below. Edge chains publish the filtered frame directly to the camera driver’s frame-filter channel without writing to the node output dict — the workflow inspector shows these fields ascloud_only to make that explicit.
Edge implementation
When compiled to the edge,anonymize uses
cyberwave.vision.blank_persons
from the Cyberwave Python SDK. The cloud and edge paths share the same
pixel-level algorithm and emit byte-for-byte identical output for the
same input frame + detections.
Privacy fail-closed gate
blank_persons only obscures bounding-box regions for detections in
the active target_classes set. On a frame where the model returns
zero matching detections (sub-threshold confidence, occluded
subject, partial body, transient miss) the helper returns the input
frame untouched. To prevent that frame from being published to
FILTERED_FRAME_CHANNEL and
silently substituted into the WebRTC stream, the generated edge
worker wraps the publish:
anonymize nodes are chained, the gate uses the
union of every node’s target_classes. An anonymize node
authored with an empty target_classes list is treated as a privacy
lockdown — the gate becomes set() so every frame is replaced with
black.
annotate-only chains have no privacy contract and remain un-gated:
boxes drawn over a raw frame is the intended output.
Privacy caveat
These helpers are designed for casual visual obscuring, not as a cryptographic de-identification primitive:pixelateis reversible by public depixelation models, especially at the default block density.blurwith the default kernel is much harder to invert but not impossible.bboxandredactdestroy the underlying pixel information (the output contains only the solid fill + grid lines). Preferredactwhen you want the destruction to look deliberate (audit trails, public release),bboxwhen you want a clean uniform mask.