Qaid
ARTICLE

Annotate & Redact Screenshots

Let people mark up and blur their screenshot before sending feedback. Boxes, arrows, freehand, and redaction, built into the embed.

Qaid Team

A screenshot shows what someone was looking at. An annotated one shows what they meant: the button that's broken, the number that's wrong, the region that should never have left their screen. When screenshot capture is on, the embed hands them the pen before anything gets sent.

The annotation editor: a captured screenshot with a highlighted region, an arrow, and a redacted block, plus a toolbar of drawing tools

On by default

Annotation rides on screenshot capture. Capture a screenshot and the editor opens by itself:

<script
  src="https://unpkg.com/@qaiddev/thumbs-embed/dist/embed.js"
  data-endpoint="/api/feedback"
  data-capture-screenshot="true"
></script>

To send the raw screenshot instead, set annotate to false:

<script
  src="https://unpkg.com/@qaiddev/thumbs-embed/dist/embed.js"
  data-endpoint="/api/feedback"
  data-capture-screenshot="true"
  data-annotate="false"
></script>

Or in JavaScript:

import { QaidFeedback } from '@qaiddev/thumbs-embed';

new QaidFeedback({
  endpoint: '/api/feedback',
  captureScreenshot: true,
  annotate: true // default; set to false to skip the editor
});

With captureScreenshot off there is no screenshot, so the editor never opens.

The toolbar

The editor covers the page: screenshot in the middle, tools underneath.

ToolWhat it does
RectangleBox around the thing being reported
ArrowPoint at one element
PenFreehand circle or scribble
Blur or redactCover a region so it can't be read
SwatchesSix drawing colours, red through white
Undo lastPeel off the most recent mark
DoneAttach the marked-up image
Skip annotationSend the original, unmarked

Drawing starts on your annotateColor, or on colors.marker if you never set one. Every mark after that is the reader's choice of swatch.

Blur paints solid

Blur fills the region you drag across with two opaque tones in a mosaic. Nothing shows through. A translucent wash would leave sensitive text faintly legible, so this paints solid instead, and the pixels underneath are replaced in the image that gets sent. The unmarked original stays in the browser.

Say so in your privacy policy: feedback can carry a picture of the page, they can paint over anything private, and Skip annotation sends the shot as captured.

Keyboard and screen reader support

The editor holds the same WCAG 2.2 AA bar as the rest of the embed. Every tool takes keyboard focus, focus stays trapped inside while it's open, the page behind goes inert, and tool changes and new marks are announced. Escape skips and sends the original.

Annotation and the screenshot options

Annotation doesn't care how the screenshot was taken or how big it came out:

import { QaidFeedback } from '@qaiddev/thumbs-embed';

new QaidFeedback({
  endpoint: '/api/feedback',
  apiKey: 'your-api-key',

  captureScreenshot: true,
  annotate: true,

  screenshotMethod: 'permission', // or 'dom'
  screenshotOptions: {
    quality: 0.85,
    maxWidth: 1600,
    maxHeight: 1000
  }
});

The marked-up image re-encodes as WebP and travels in the submission the plain one would have. Your inbox shows the annotated version. Nothing else changes.

Leave it switched on unless no human is in the loop to draw. If your traffic is mobile, walk the flow on a phone once. The editor takes touch and pen input, and the toolbar targets are the part worth checking.

Back to all articles