find_text
Read text from the screen, image, or video frame with Windows OCR and locate matches by bounding box. Use it to find labels, buttons, or secrets and get regions to redact.
Instructions
Read text on screen or in an image/video frame with the OCR engine built into Windows (no install), with each line's and match's bounding box. Find where a label or button is, check what the screen says, or locate secrets (e.g. regex 'sk-|ghp_|api.?key') and get redact_region rectangles for them; for a video, scanEverySec checks the whole clip. Boxes are in the image's pixels; for a live target, add origin for desktop coordinates. Best-effort detection: always review.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| keep | No | For a live target: keep the captured screenshot and return its path (default false: it is deleted after reading, since it may show the secrets being looked for). | |
| input | No | Or read text from an image or video file (one of target / input). | |
| query | No | Text to look for. Case-insensitive, and tolerant of common OCR misreads (_ vs -, I vs l, O vs 0; regexes get the _ vs - tolerance). Without a query, all recognised text is returned. | |
| regex | No | Treat query as a regular expression (case-insensitive). | |
| redact | No | Also return padded rectangles around each match, ready to pass to redact_region (regions) to cover them. Detection is best-effort: review the result. | |
| target | No | Read text live from the screen: 'full' | 'monitor:<index>' | 'window:<title>' (or window:exe=<app.exe> / window:hwnd=<handle>) | 'region:...'. | |
| backend | No | For a live target: gdigrab (default) reads what is visible; 'wgc' (window: targets, FFmpeg 8+) reads the window's own surface even when other windows cover it. | |
| maxFrames | No | With scanEverySec: most frames to read (default 30); each takes about a second. | |
| timestamp | No | For a video input: the second to read (default 0). Ignored with scanEverySec. | |
| exactTitle | No | For window: targets, match the title exactly (default false). | |
| returnImage | No | Return the image inline with matches outlined in red (default true when there is a query). | |
| scanEverySec | No | For a video input: read a frame every N seconds across the whole clip instead of one frame, so text shown at any moment is found (use it to check a clip for secrets before sharing). Each match gets its time, and redactRegions get start/end. The interval widens to stay within maxFrames. |