Skip to content

OCR

GuardianNode extracts visible text from screenshots using OCR and/or local vision models.

Engines

  • Tesseract: current classical OCR engine used by the text-only and fallback paths.
  • Vision model: the default vision tier asks the local vision LLM to read text directly from the screenshot.
  • PaddleOCR: planned optional plugin path; not enabled by the current installer.

Classical OCR is controlled by GUARDIANNODE_TESSERACT_ENABLED.

Pipeline

Visible Windows session
  ↓
Capture active-window screenshot
  ↓
Perceptual hash diff (skip if unchanged)
  ↓
Run OCR
  ↓
Normalize whitespace
  ↓
Deduplicate (don't resend identical lines)
  ↓
Optional best-effort text filtering
  ↓
POST /api/events

OCR cadence

  • High-risk active apps (Roblox, Discord): every 2–5 seconds
  • General capture cadence depends on policy/config
  • Current installer defaults review the visible desktop; narrower app-gated capture is available through policy/config

App-specific crop regions

Config in agent-windows/ocr_regions/ per app:

app: Roblox.exe
regions:
  chat_left:
    x_pct: 0.01
    y_pct: 0.10
    w_pct: 0.45
    h_pct: 0.55

Tunes accuracy and speed for known UIs.

Dedupe

Per-app rolling cache of recently seen lines (LRU 200 entries). Identical lines within 60s are dropped.

Confidence

Each OCR result includes the engine's confidence. Below OCR_MIN_CONFIDENCE (default 0.5), the event is dropped to reduce noise.

Privacy

OCR text may contain sensitive visible content. Some paths apply best-effort text filtering, but parents should not treat redaction as certain. Screenshots and extracted text blobs are stored locally and encrypted when retained for parent/admin review. Operational metadata such as device/profile IDs, app names, window titles, URLs, timestamps, risk summaries, categories, and audit details may remain plaintext in SQLite or pending metadata files.