UnScreen. Open reader

Measured in the open

Benchmark

Every number on this page is measured, generated from the result files in bench/results. Frames that failed to come back from the API are reported, not hidden.

Configuration: mistral:mistral-small-2603 / gemini-3.5-flash-lite

Run 24 Oct 2026. Reads by mistral:mistral-small-2603; every read cross-checked by gemini-3.5-flash-lite; image resolution high. Source: bench/results/2026-10-24-config-mistral-small-screen.json.

  • 1 failed frame(s): provider quota or rate limit.
Configuration: mistral:mistral-small-2603 / gemini-3.5-flash-lite: UnScreen and OCR by content type
FramesReadExact, UnScreenExact, OCRWrong as fact, UnScreenWrong as fact, OCRRight place, UnScreenRight place, OCRCharacter errors, UnScreenMarked unclear or unreadable
Spreadsheets, meeting window, 720p, lossy0 of 1not measured5.3%not measured77.8%not measured80.0%not measured0 of 0

Reconstruction time per frame: median not measured, 95th percentile not measured. Cost per frame: not measured, from token counts and Google's published prices.

Configuration: gemini-3.6-flash / groq:qwen/qwen3.8-27b

Run 24 Oct 2026. Reads by gemini-3.6-flash; every read cross-checked by groq:qwen/qwen3.8-27b; image resolution high. Source: bench/results/2026-10-24-config-groq-screen.json.

The primary text matched, but every value was flagged by the cross-check. No confident outputs means wrong-as-fact rate is undefined, not 0%.

Configuration: gemini-3.6-flash / groq:qwen/qwen3.8-27b: UnScreen and OCR by content type
FramesReadExact, UnScreenExact, OCRWrong as fact, UnScreenWrong as fact, OCRRight place, UnScreenRight place, OCRCharacter errors, UnScreenMarked unclear or unreadable
Spreadsheets, meeting window, 720p, lossy1 of 1100.0%5.3%not measured77.8%100.0%80.0%0.00%75 of 75

Reconstruction time per frame: median 7.0 s, 95th percentile 7.0 s. Cost per frame: $0.0074, from token counts and Google's published prices.

Configuration: gemini-3.6-flash / gemini-3.5-flash-lite

Run 24 Oct 2026. Reads by gemini-3.6-flash; every read cross-checked by gemini-3.5-flash-lite; image resolution high. Source: bench/results/2026-10-24-config-gemini.json.

Configuration: gemini-3.6-flash / gemini-3.5-flash-lite: UnScreen and OCR by content type
FramesReadExact, UnScreenExact, OCRWrong as fact, UnScreenWrong as fact, OCRRight place, UnScreenRight place, OCRCharacter errors, UnScreenMarked unclear or unreadable
Spreadsheets, meeting window, 720p, lossy10 of 1099.6%41.3%0.4%49.8%100.0%79.6%0.06%4 of 775

Reconstruction time per frame: median 11.3 s, 95th percentile 12.0 s. Cost per frame: $0.0094, from token counts and Google's published prices.

Focused code and slide benchmark

Run 24 Oct 2026. Reads by gemini-3.6-flash; every read cross-checked by gemini-3.5-flash-lite; image resolution high. Source: bench/results/2026-10-24-focused.json.

Focused code and slide benchmark: UnScreen and OCR by content type
FramesReadExact, UnScreenExact, OCRWrong as fact, UnScreenWrong as fact, OCRRight place, UnScreenRight place, OCRCharacter errors, UnScreenMarked unclear or unreadable
Code, meeting window, 720p, lossy10 of 1085.1%7.5%9.2%96.1%100.0%88.0%2.40%35 of 295
Slides and documents, meeting window, 720p, lossy10 of 1062.8%48.7%7.5%53.7%100.0%100.0%1.96%29 of 78

Reconstruction time per frame: median 11.1 s, 95th percentile 13.6 s. Cost per frame: $0.0094, from token counts and Google's published prices.

Kill test: 10 spreadsheets in a meeting window

Run 21 Oct 2026. Reads by gemini-3.6-flash; no cross-check read (it was added after this run); image resolution high. Source: bench/results/2026-10-21-kill-v4.json.

  • 4 failed frame(s): timeout or connection error.
Kill test: 10 spreadsheets in a meeting window: UnScreen and OCR by content type
FramesReadExact, UnScreenExact, OCRWrong as fact, UnScreenWrong as fact, OCRRight place, UnScreenRight place, OCRCharacter errors, UnScreenMarked unclear or unreadable
Spreadsheets, meeting window, 720p, lossy6 of 1099.1%41.3%0.9%49.8%100.0%79.6%0.16%0 of 459

Reconstruction time per frame: median 74.5 s, 95th percentile 106.9 s. Cost per frame: $0.0053, from token counts and Google's published prices.

Comparing models

The same 10 spreadsheet frames, shared inside a meeting window, read by one model each with no cross-check. Times include waiting caused by free-tier limits, so compare them with care.

Reading accuracy by model
ModelReadExactWrong as factRight placeMedian time per frame
groq:qwen/qwen3.8-27b3 of 1060.9%1.5%100.0%54.5 s
gemini-3.6-flash6 of 1099.1%0.9%100.0%74.5 s

UnScreen's own latency

With a scripted model that answers instantly, an edit in a live spreadsheet is spoken 2.6 s later (median of 5 edits, longest 2.6 s). That time is the 500 ms capture interval, the 300 ms wait for the screen to settle, the engine's own processing and the 1.5 s window that groups changes into one announcement. Everything beyond it is the vision model. Source: bench/results/2026-10-21-pipeline-overhead.json.

Live loop

The real reader app watching generated sheet or code fixtures, through the real engine and the Gemini API. Changes come from the fixture's own record of what it edited. Latency ends at the polite live region; audible screen-reader speech has not been measured. Confidence-only warnings can add announcements even when a value did not change.

Live loop runs
RunEditsAnnounced (recall)Announcements that were real changes (precision)Change to announcement, medianFinal table matches
21 Oct 2026, sheet: no frame read, the API was rate limiting70.0%not measurednot measured0 of 36 cells
24 Oct 2026, code6100.0%54.5%11.2 snot measured
24 Oct 2026, sheet11100.0%100.0%8.5 s42 of 42 cells
24 Oct 2026, sheet13100.0%86.7%8.7 s42 of 42 cells

bench/results/2026-10-24-live-paid-code.json: Focus was preserved. The pointer and Ask correctly identified the blank second line. A region reread with verification was observed. Extra confidence-change announcements reduce precision.

bench/results/2026-10-24-live-paid-sheet-fixed.json: The final pointer target and Ask answer matched fixture truth, and the original focused cell stayed focused. This is a generated-fixture browser run, not a human screen-reader or Google Meet pass.

bench/results/2026-10-24-live-paid-sheet.json: The initial pointer probe reported the old cursor location. Focus was preserved and Ask matched the fixture value. The pointer-direction bug was then fixed; the later fixed-sheet run verifies the correction.

Method

  • Frames. 40 generated fixtures: 20 spreadsheets in six layouts, 10 code files in four languages, and 10 slides or documents. Each is captured at 720p and 1080p, and inside a meeting window downscaled to 720p and saved as JPEG at quality 50–70 to mimic a meeting codec. Each fixture records exactly what it shows.
  • Exact: share of true cells, lines or blocks whose text matches after whitespace is normalised.
  • Wrong as fact: of everything stated without an "unclear" or "unreadable" flag, the share that is wrong or does not exist. This is the number UnScreen is built to keep near zero.
  • Right place: of the true values that appear anywhere in the output, the share that sits in the right row and column, or line.
  • OCR baseline: Tesseract 5.5 in three settings, with the best one reported. Its words are grouped into cells at wide gaps and its header row is chosen with the help of the true headers. Screen reader OCR does neither, so this baseline is generous.

What testers found

No human screen-reader pass or participant session has been recorded. NVDA, VoiceOver and real-meeting validation remain pending. Automated browser checks cover focus preservation and accessibility rules; they do not establish usability with a screen reader.

Source: docs/research/results.md.

What failed

  • Speed. Current paid-tier reconstruction and live-loop times are measured separately above. They still take several seconds. The older free-tier runs include refused calls and retry waits and should not be treated as paid-tier model speed.
  • Provider limits and coverage. Historical free-tier failures remain listed. The current Mistral screening still hit a provider rate limit, and Groq marked its screening frame entirely unclear. The full multi-resolution benchmark was cut to minimize spending; the focused code and slide/document results are reported separately.
  • Digits in compressed video. On one frame, 4 of 105 cells had a digit misread (6 and 8, 9 and 3). A second independent read flags disagreements, but agreeing reads can still share a wrong value. Code indentation and slide block segmentation also reduce exact matches. These are generated fixtures; real Meet and human screen-reader validation remain pending.