The capture happens natively, below the bridge: a UIWindow snapshot on iOS,
PixelCopy on Android. That means it shows what the device actually
rendered, including native views your JS never sees.
There is no working off switch. captureScreenshot exists on the config type
but neither native side reads it, so the screenshot is always taken. Mask what
must not appear instead — see Sensitive content.
Annotation tools
| Tool | Draws |
|---|---|
pen | Freehand. Five colours, three thicknesses. |
highlighter | Translucent freehand. |
rect · ellipse | Outlined shapes for circling a control. |
arrow | Points at the thing that broke. |
text | A label. Three sizes. |
redact | Draws a blur-kind shape — see below. |
pointer | Select, move and resize existing marks. |
The palette and sizes are identical across every TraceItX SDK, so a report looks the same whichever platform filed it. On TV there is no on-device reporter — the annotating happens on the companion phone.
Redaction is baked, not overlaid
A redact shape is rendered opaque into the image bytes before upload — not
stored as a region for a viewer to honour. The pixels underneath are gone by the
time the report leaves the device.
An overlay is a request; a bake is a guarantee. If a user blurs their bank balance, no receiver and no support engineer can recover it, because it was never uploaded.
The same applies to views marked sensitive in code, masked before the screenshot is taken at all. See Sensitive content.
In the envelope
kind | What it is |
|---|---|
screenshot | The capture as taken. |
annotated-screenshot | The baked result, with drawings and redactions applied. |
Plus payload.annotations and payload.redactions recording the vector shapes.
A dashboard can re-render annotations over the clean screenshot — but only
annotations. Redactions cannot be undone, by design.
Native modules and secure surfaces
A view rendered by a native module is included, because the capture is a window
snapshot rather than a React tree walk. The exception is content the OS itself
protects — FLAG_SECURE on Android, DRM video on both — which comes back black.
That is the platform refusing, not the SDK failing, and it is why a video player
screenshot often shows chrome but no frame.