Working paper · results regenerated 2026-09-20 from the repository · every experiment registered before it ran

Glance

Reading typed decisions from open vision-language models: what a frozen 4B model already does for yes/no and pick-one questions, measured against hosted models on photographs none of them has seen.

Abstract

A frozen open vision-language model (Qwen3-VL-4B, Apache-2.0, on a laptop) is asked typed questions about an image, and the answer is read from the logits of a single forward pass, not generated. For yes/no and pick-one questions this works with no setup. On photographs taken after every model’s release, with labels nobody on this project made, the open model is level with Gemini 3.1 Pro, Claude Opus 5 and GPT-5.6, and with the cheapest current models of OpenAI and Google. It gives the same answers as the same model writing JSON, faster (1.5 times on a full-size photograph, 2.4 to 6.1 times on small images and many questions), with probabilities. A yes/no about a full-size photograph takes 1.1 s, faster than 5 of the 6 hosted models, and is somewhat cheaper than the cheapest hosted model; no image leaves the machine. A 2B model of the same family does as well on yes/no. Ratings are the hard case: zero-shot every model gets the order right (rank agreement 0.93, within one level on 0.99 of images) and the exact level often wrong; the cheapest Google model leads there (0.763 against 0.669), and the open model needs 16 unlabeled images of the rubric to come level (0.758) and 32 labels to lead. Glance is the calibration and measurement harness around that readout; the readout itself is shared with other training-free tools and is not claimed as new.

1What it is

You hand a frozen open vision-language model an image and a typed question: is this true (yes/no), which one (pick one of a list), or where on this rubric (a rating). The model runs once. Nothing is generated: the answer is read from the scores the model gives to the allowed answers at the position where it would start writing, and those scores become probabilities. Several questions about one image share the cost of reading the image.

image + typed questionyes/no, pick one, or rateone forward passfrozen open model, localanswer-position logitsallowed answers onlyprobabilitiesnothing generated
image + typed questionyes/no, pick one, or rateone forward passfrozen open model, localanswer-position logitsallowed answers onlyprobabilitiesnothing generated
photo: a bold jumping spider, iNaturalist 402011619 (CC BY, antimatterbee)

"Is the main subject a spider or other arachnid?"  ->  P(yes) = 1.00        0.8 s
"Is the main subject a fish?"                      ->  P(yes) = 0.00        0.7 s
"What kind of organism is it?"  (10 options)       ->  arachnid, p = 1.00   1.3 s

A real logged example from the open 4B model on a laptop, with a second job sharing the GPU. Most answers are this decisive; the uncertain ones are where the probabilities earn their keep.

2Does it work? Every system, the same items

The same questions went to the open 4B model (read with Glance, and also writing its answer as JSON), to three hosted flagships and to each provider’s cheapest current vision model. Three tests, all zero-shot: yes/no, 131 fresh commons questions; pick one of 13, 65 fresh commons photos; rating, exact level of 4, 1,000 lab images. The photographs were taken after every model’s release and labelled by people outside this project (section 2.1).

yes/nopick-oneratingAccuracy · longer is betterGemini 3.1 Pro0.950.920.65Claude Opus 50.920.910.55GPT-5.60.890.890.60Claude Haiku 4.50.940.850.61GPT-5.6 Luna0.920.910.69Gemini 3.1 Flash-Lite0.950.910.76Open 4B, written0.930.890.67Open 4B, read0.930.860.67Seconds per answer · shorter is betterGemini 3.1 Pro2.74 s3.18 s4.02 sClaude Opus 52.64 s2.98 s2.42 sGPT-5.61.18 s1.34 s1.07 sClaude Haiku 4.50.87 s0.92 s0.72 sGPT-5.6 Luna1.22 s1.30 s1.10 sGemini 3.1 Flash-Lite1.63 s1.89 s1.62 sOpen 4B, written1.65 s1.87 s0.91 sOpen 4B, read1.08 s1.43 s0.45 sUS dollars per 1,000 answers · shorter is betterGemini 3.1 Pro$2.62$3.85$6.15Claude Opus 5$3.37$4.48$18.70 est.GPT-5.6$7.55$7.82$14.96 est.Claude Haiku 4.5$1.75$1.89$0.55GPT-5.6 Luna$0.38$0.40$0.12Gemini 3.1 Flash-Lite$0.31$0.34$0.33Open 4B, written$0.30$0.35$0.17Open 4B, read$0.20$0.26$0.08
yes/noAccuracy · longer is betterGemini 3.1 Pro0.95Claude Opus 50.92GPT-5.60.89Claude Haiku 4.50.94GPT-5.6 Luna0.92Gemini 3.1 Flash-Lite0.95Open 4B, written0.93Open 4B, read0.93Seconds per answer · shorter is betterGemini 3.1 Pro2.74 sClaude Opus 52.64 sGPT-5.61.18 sClaude Haiku 4.50.87 sGPT-5.6 Luna1.22 sGemini 3.1 Flash-Lite1.63 sOpen 4B, written1.65 sOpen 4B, read1.08 sUS dollars per 1,000 answers · shorter is betterGemini 3.1 Pro$2.62Claude Opus 5$3.37GPT-5.6$7.55Claude Haiku 4.5$1.75GPT-5.6 Luna$0.38Gemini 3.1 Flash-Lite$0.31Open 4B, written$0.30Open 4B, read$0.20pick-oneAccuracy · longer is betterGemini 3.1 Pro0.92Claude Opus 50.91GPT-5.60.89Claude Haiku 4.50.85GPT-5.6 Luna0.91Gemini 3.1 Flash-Lite0.91Open 4B, written0.89Open 4B, read0.86Seconds per answer · shorter is betterGemini 3.1 Pro3.18 sClaude Opus 52.98 sGPT-5.61.34 sClaude Haiku 4.50.92 sGPT-5.6 Luna1.30 sGemini 3.1 Flash-Lite1.89 sOpen 4B, written1.87 sOpen 4B, read1.43 sUS dollars per 1,000 answers · shorter is betterGemini 3.1 Pro$3.85Claude Opus 5$4.48GPT-5.6$7.82Claude Haiku 4.5$1.89GPT-5.6 Luna$0.40Gemini 3.1 Flash-Lite$0.34Open 4B, written$0.35Open 4B, read$0.26ratingAccuracy · longer is betterGemini 3.1 Pro0.65Claude Opus 50.55GPT-5.60.60Claude Haiku 4.50.61GPT-5.6 Luna0.69Gemini 3.1 Flash-Lite0.76Open 4B, written0.67Open 4B, read0.67Seconds per answer · shorter is betterGemini 3.1 Pro4.02 sClaude Opus 52.42 sGPT-5.61.07 sClaude Haiku 4.50.72 sGPT-5.6 Luna1.10 sGemini 3.1 Flash-Lite1.62 sOpen 4B, written0.91 sOpen 4B, read0.45 sUS dollars per 1,000 answers · shorter is betterGemini 3.1 Pro$6.15Claude Opus 5$18.70 est.GPT-5.6$14.96 est.Claude Haiku 4.5$0.55GPT-5.6 Luna$0.12Gemini 3.1 Flash-Lite$0.33Open 4B, written$0.17Open 4B, read$0.08
Figure 1. Accuracy, seconds and dollars for every system, bundled by question type, on scales that start at zero. Dark bars are the open 4B model. An outlined bar is a provisional timing (taken while the GPU was shared) or an estimated cost; an estimate beyond the measured range is cut short and marked ›.

Yes/no and pick-one: every system is level on accuracy. The open model answers a yes/no in 1.1 s, faster than 5 of the 6 hosted models; it costs a fraction of the flagships and is somewhat cheaper than the cheapest hosted model. Most of its time on a full-size photograph goes into reading the image, not into the answer. Ratings: there is no clear best model. Gemini 3.1 Flash-Lite, the cheapest Google model, leads on accuracy, each provider’s cheap model beats its own flagship, and the open 4B model sits between them. Section 4 explains why ratings behave differently and what fixes them.

Accuracy, zero-shotyes/nopick-onerating
Gemini 3.1 Pro0.947 [0.908, 0.985]0.923 [0.846, 0.985]0.650 [0.621, 0.679]
Claude Opus 50.924 [0.878, 0.969]0.908 [0.831, 0.969]0.550 [0.519, 0.581]
GPT-5.60.893 [0.840, 0.947]0.892 [0.815, 0.954]0.597 [0.567, 0.627]
Claude Haiku 4.50.939 [0.893, 0.977]0.846 [0.754, 0.923]0.609 [0.579, 0.639]
GPT-5.6 Luna0.924 [0.878, 0.969]0.908 [0.831, 0.969]0.686 [0.657, 0.715]
Gemini 3.1 Flash-Lite0.954 [0.916, 0.985]0.908 [0.831, 0.969]0.763 [0.737, 0.789]
Qwen3-VL-4B, written0.931 [0.885, 0.969]0.892 [0.815, 0.954]0.672 [0.643, 0.701]
Qwen3-VL-4B, read (Glance)0.931 [0.885, 0.969]0.862 [0.769, 0.938]0.669 [0.640, 0.698]
Median seconds per answeryes/nopick-onerating
Gemini 3.1 Pro2.74 s3.18 s4.02 s
Claude Opus 52.64 s2.98 s2.42 s
GPT-5.61.18 s1.34 s1.07 s
Claude Haiku 4.50.87 s0.92 s0.72 s
GPT-5.6 Luna1.22 s1.30 s1.10 s
Gemini 3.1 Flash-Lite1.63 s1.89 s1.62 s
Qwen3-VL-4B, written1.65 s1.87 s0.91 s
Qwen3-VL-4B, read (Glance)1.08 s1.43 s0.45 s
US dollars per 1,000 answersyes/nopick-onerating
Gemini 3.1 Pro$2.62$3.85$6.15
Claude Opus 5$3.37$4.48$18.70 est.
GPT-5.6$7.55$7.82$14.96 est.
Claude Haiku 4.5$1.75$1.89$0.55
GPT-5.6 Luna$0.38$0.40$0.12
Gemini 3.1 Flash-Lite$0.31$0.34$0.33
Qwen3-VL-4B, written$0.24–0.37$0.27–0.42$0.13–0.20
Qwen3-VL-4B, read (Glance)$0.16–0.24$0.21–0.32$0.07–0.10

Table 1. The numbers behind Figure 1. Accuracy with 95% bootstrap intervals on the items EVERY system answered (the test half of the Commons set: 131 yes/no questions, 65 pick-one photographs; section 2.1 gives the open model on all items); bold rows are the open model. The open model’s rating is read in one pass at the JSON answer position. Hosted speed is wall time per call from one laptop; hosted cost is the provider’s bill where it was logged (“est.” is a list-price upper estimate for a run that predates cost logging). Open-model speed is measured with the GPU otherwise idle; its cost is those seconds at an on-demand cloud GPU price. Cells marked “tonight” await a clean timing. No few-shot prompt was tried for any written row.

2.1 The photographs: nothing any model could have seen

Wikimedia Commons photographs taken after 15 August 2026, labelled by their uploaders’ structured “depicts” statements, and iNaturalist observations uploaded on the day of the test, labelled by community identification. No labels were made by us or by any model.

System, zero-shotyes/nopick-one
Qwen3-VL-4B, read Commons, 131 photos0.931 [0.901, 0.958]0.885 [0.824, 0.939]
Gemini 3.1 Pro same photos, test half0.947 [0.908, 0.985]0.923 [0.846, 0.985]
Claude Opus 5 same photos, test half0.924 [0.878, 0.962]0.908 [0.831, 0.969]
GPT-5.6 same photos, test half0.893 [0.840, 0.939]0.892 [0.815, 0.954]
Qwen3-VL-4B, read iNaturalist, 200 photos0.945 [0.922, 0.968]0.940 [0.905, 0.970]
Gemini 3.1 Pro0.960 [0.930, 0.985]0.910 [0.850, 0.960]
Claude Opus 50.945 [0.910, 0.975]0.930 [0.880, 0.980]
GPT-5.60.935 [0.900, 0.965]0.910 [0.850, 0.960]

Table 2. All items of each photo set (the frontier models answered the test half), 95% bootstrap intervals, uncalibrated decisions, nothing fitted.

0.750.800.850.900.951.00Qwen3-VL-4B, read · yes/no0.931Gemini 3.1 Pro · yes/no0.947Claude Opus 5 · yes/no0.924GPT-5.6 · yes/no0.893Qwen3-VL-4B, read · pick one of 130.885Gemini 3.1 Pro · pick one of 130.923Claude Opus 5 · pick one of 130.908GPT-5.6 · pick one of 130.892
Figure 2. The Commons rows of Table 2, drawn to one scale. Filled marks are the open 4B model; hollow marks are hosted frontier models. Every interval overlaps every other.

2.2 Two other views of the same numbers

yes/no0.750.881.00$0.10$1$10GOPHLFwrittenreadpick-one0.750.881.00$0.10$1$10GOPHLFwrittenreadrating0.500.620.75$0.10$1$10GOPHLFwrittenreadUS dollars per 1,000 answers, log scale; vertical axis is accuracy
yes/no0.750.881.00$0.10$1$10GOPHLFwrittenreadUS dollars per 1,000 answers, log scale; vertical axis is accuracypick-one0.750.881.00$0.10$1$10GOPHLFwrittenreadUS dollars per 1,000 answers, log scale; vertical axis is accuracyrating0.500.620.75$0.10$1$10GOPHLFwrittenreadUS dollars per 1,000 answers, log scale; vertical axis is accuracy
Figure 3. Accuracy against cost, one panel per question type, 95% intervals. The open model’s marks (read: circle, written: square) sit at the height of the hosted models (G Gemini 3.1 Pro, O Claude Opus 5, P GPT-5.6, H Claude Haiku 4.5, L GPT-5.6 Luna, F Gemini 3.1 Flash-Lite): one to two orders of magnitude left of the flagships, and much closer to the providers’ cheapest models.
0.3 s1 s3 s$0.10$1$10Gemini 3.1 ProClaude Opus 5GPT-5.6Claude Haiku 4.5GPT-5.6 LunaGemini 3.1 Flash-LiteOpen 4B, writtenOpen 4B, readmedian seconds per answer, log scaleUS dollars per 1,000 answers, log scale
0.3 s1 s3 s$0.10$1$10Gemini 3.1 ProClaude Opus 5GPT-5.6Claude Haiku 4.5GPT-5.6 LunaGemini 3.1 Flash-LiteOpen 4B, writtenOpen 4B, readmedian seconds per answer, log scaleUS dollars per 1,000 answers, log scale
Figure 4. Cost against speed; down and left is better. Each system is a large mark at the centre (geometric mean) of three small ones, one per question type: yes/nopick-onerating. Filled marks are the open 4B model, hollow marks are hosted models.

3Why read the answer instead of writing it?

The obvious alternative is to let the same model write a JSON answer. On yes/no and pick-one the two give identical answers, item for item, so reading changes nothing about what the model knows. What it changes is everything around the answer: no tokens are generated, so it is faster and cheaper: about 1.5 times on one question about a full-size photograph (reading the image dominates), 2 to 3 times on small images, and more as questions per image grow; the answer arrives as probabilities, so you can threshold, abstain or rank (accuracy on the most confident 80% of answers is 0.975 on the iNaturalist set); and a read answer can be fitted, which section 4 needs.

Request, one imagewrites JSONreadsavingagree
1 yes/no$0.12–0.18$0.05–0.0858%100%
5 mixed$0.51–0.78$0.15–0.2271%92%
25 ratings$2.93–4.48$0.48–0.7384%59%

Table 3. The open model writing against reading, cost per 1,000 images on a rented GPU assumed no faster than the laptop; self-hosted cost is GPU time, so the saving is the measured time saving. For comparison, the frontier calls on these tasks measured $0.10 to $7.64 per 1,000 answers.

4Ratings: the hard case

A rating asks for a level on a rubric written in words, here five synthetic four-level scales (blur, exposure, JPEG, noise, resolution) and the same 1,000 held-out images for every system. Zero-shot, every model gets the order right and the exact level often wrong.

The open model is exactly right on 0.56 of images but within one level on 0.987, and 97% of its errors are one step, in a direction that is constant per rubric: half a level too harsh on blur, never the worst level on JPEG. It sees the severity; it does not know where the rubric’s author drew the lines, and neither do the hosted models, which score 0.55 to 0.76. Read in one pass, the open model gives the same ratings as when it writes them (98% identical, 0.669 against 0.672).

0.500.600.700.800.901.00Claude Opus 5, written pick0.550GPT-5.6, written pick0.597Gemini 3.1 Pro, written pick0.650anthropic/claude-haiku-4-5, written pick0.609openai/gpt-5.6-luna, written pick0.686openrouter/google/gemini-3.1-flash-lite, written pick0.763Qwen3-VL-4B, written answer0.672Qwen3-VL-4B, read, one pass0.669… earlier four-pass read0.570… one-pass read + 16 unlabeled images0.758… four-pass read + 32 labels0.857
Figure 5. Exact-level accuracy on the same 1,000 images, chance 0.25. Upper group: zero-shot. Lower group: the open model after it has seen images of the rubric, unlabeled ones first (zero labels, but not zero-shot), then 32 labeled ones.

4.1 What closes the gap

A written pick has nothing to fit. A read answer is a set of logits, so a few images of your own rubric can remove the constant offset, with or without labels. Sixteen unlabeled images bring the open model level with the best hosted model; 32 labels put it ahead of everything we measured.

Give the read rowrating accuracy
16 UNLABELED images of the rubric (glance fit --unlabeled)zero labels, but not zero-shot; same 1,000 images, one pass; probabilities improve but are not calibrated0.758
32 labeled images of the rubric (glance fit)same 1,000 images, the four-pass readout; calibrated probabilities (ECE about 0.03)0.857
500 labels, readout fitted on the hidden state (research result, not shipped)full test split, ONE forward pass; needs on the order of a hundred labels to beat the row above0.965

Table 4. Exact-level accuracy on the rating test of Table 1 (the last row uses the full test split).

5Does it depend on the model?

The same questions and readouts, not a word changed, on other sizes of the same family and on a model from a different family (different vision tower, different language model).

Open model, same questionsyes/no · Commonsyes/no · iNaturalistpick-one · Commonspick-one · iNaturalist
Qwen3-VL-2B0.9390.9250.8320.940
Qwen3-VL-4B0.9310.9450.8850.940
Qwen3-VL-8B0.9240.9350.8780.955
SmolVLM2-2.2B, another familyrunning tonight

Table 5. Yes/no and pick-one on the two fresh photo sets, all items, uncalibrated. Even the 2B model is level on yes/no; size shows on the harder pick-one.

Open model, same promptszero-shotwithin one+16 unlabeled+32 labels
Qwen3-VL-2B0.4920.8930.6230.842
Qwen3-VL-4B0.6690.9880.7580.853
Qwen3-VL-8B0.6430.9790.6770.839
SmolVLM2-2.2B, another familyfour-pass read; the one-pass read was not collected0.4190.8370.5190.814

Table 6. Ratings, the same 1,000 images: exact-level accuracy. Zero-shot quality belongs to the model; once a few dozen labels exist the models land within a few points of each other, so the fitted recipe carries across sizes and families. “Within one” is for the four-pass read.

6What is, and is not, new

Reading answer-token logits from a frozen generative model, with several questions sharing one image prefix, is what Simple Jev, jev-visual and LitJev also do. For yes/no and pick-one the forward pass here is not new, and the accuracy belongs to the open model. What this project adds is a harness on top: a fresh-photograph comparison with paid frontier calls, the same model writing against reading, self-calibration from unlabeled images and labeled fitting for rating levels (glance fit), and measured dollars and milliseconds. It trains no weights, unlike YOFO, Laya Vision or OpenJev v2.

7Limits and misses

8Reproduce

uv sync && uv run glance doctor
uv run python tools/fetch_fresh_inat.py          # 200 photographs, about ten API calls
uv run glance eval --suite inat_choice --suite inat_yesno --model vlm
uv run python tools/make_results_zeroshot.py     # every table on this page

The lab notebook records each hypothesis before its experiment, each verdict after, and two errata. Frontier model outputs are never stored; only whether each answer was right.