Visual recognition · the Antilibrary
Prior tests used hard photos. This one hands the models the easy case — neat shelves, sharp pictures — and asks whether the tiers still separate.
Earlier in this arc we learned that on hard inputs the photograph matters more than the model, and that an OCR pre-step is dead weight for a capable reader. So we removed the difficulty. These six frames are well-organized and shot straight-on. The question: on the best case, how well do the best models read a shelf — and do the tiers converge? The hypothesis, stated up front: they cluster near-perfect, and the only real signal left is the small residual — a mis-bound author, a rare invented book, a title dropped off a flat stack.
This test grades Claude models among others, so the ground truth could not be model-produced. Bharat verified the books on each physical shelf by hand; the answer keys are human. The running assistant only standardized the photos, called the APIs, and scored the outputs — it never identified a book itself. Every model call was stateless, temperature 0, prompt caching off, one call per condition per image, same minimal prompt throughout. Scoring is a deterministic fuzzy string match — no model judges another model. Photos were standardized to 2000 px long-edge before any run.
Only the model and the path vary. Four read the photo directly; two read PaddleOCR text instead, to isolate the OCR effect on a strong reader and a weak one.
Rows are the six shelves (with the human-validated book count); columns are the six engines. Each cell shows books found of the total, tinted by how well it did. Gray −N = books missed; gray +N = books invented. Click any cell to see the exact titles it missed or made up; click a shelf to jump to its photo.
Presentation varies on purpose — upright spines read sideways, flat stacks read left-to-right, and one frame spans two shelves. Some frames overlap (two shots of one shelf; one frame containing another), noted in each caption so books aren't double-counted.
| Condition | Recall | Precision | Author | Garble | Made up | Cost (6) | Latency |
|---|---|---|---|---|---|---|---|
| Opus 4.8 | 98% | 98% | 92% | 0 | 3 | $0.250 | 14s |
| Sonnet 5 | 97% | 98% | 87% | 0 | 4 | $0.102 | 13s |
| GPT-5.6 | 96% | 95% | 91% | 2 | 8 | $0.757 | 96s |
| Qwen3-VL | 93% | 97% | 85% | 3 | 3 | $0.011 | 47s |
| OCR→Sonnet | 91% | 90% | 78% | 1 | 18 | $1.209 | 175s |
| OCR→Qwen7B | 23% | 72% | 24% | 2 | 14 | $0.003 | 7s |
Recall = of the real books, how many were found. Precision = of what was reported, how much was real. Garble = a distorted version of a real title; Made up = an invented book unlike anything on the shelf — the trust signal, kept separate.
With so few mistakes left, the interesting question is whether they are random or structured. Two clear patterns:
One frame, k2-k3, accounts for most of the residual error — and it turns out to be a natural controlled experiment. It is a single photograph spanning two shelves, so its 53 books are the same physical books also shot as tight, single-shelf frames (k2 and k3). Same books, same models — only the framing differs.
On the tight single-shelf shots the capable models were near-perfect (Opus 29/29 on k2, 24/24 on k3). On the wide combined frame Opus dropped to 50/53 — and the books it lost, Reykjavik, Hungry, and Steve Kerr, are exactly the ones it had read correctly moments earlier on the tighter shots. It isn't the books; it's the frame.
The practical rule: one shelf per photo. Cramming two shelves into a frame to save shots is a false economy — it silently drops the hardest-to-read spines, and nothing in the output tells you which. Shoot tight; the models are near-perfect when you do.
Across every test above, no model ever said it could not read a spine. The reason turned out to be simple. The prompt gave it no way to say so, and no reason to. Naming a book that was not there and naming nothing at all cost exactly the same — nothing.
So the prompt was changed. The model was given a token to abstain with, and a price for guessing wrong. Everything else was held fixed: the same six photographs, the same cached OCR fragments, the same frozen human answer keys, the same scorer, temperature 0, one stateless call per cell.
The OCR prompt contained a rule that invited the model to fill gaps from memory. It was deleted and the price added — two changes, not one, so a large effect here cannot be credited to the price alone.
2. You may use world knowledge to complete a garbled or partial title/author (e.g. 'APOLLO'SARROW' -> 'Apollo's Arrow'), but set confidence accordingly. If you cannot identify a book from its fragments, emit it with title "[unreadable]". Scoring: a correct title scores +1. A title that is not actually on the shelf scores -2. "[unreadable]" scores 0. Maximize your score.
The photo prompt never contained a licence to guess, so there the change is clean: the abstention token and the price added, nothing removed.
The totals mislead on their own. Sonnet's entire recall loss sits on one photograph — 54t-k2-k3, the 53-book two-shelf frame, the hardest input in the set and the one carrying the universally-missed cluster in §07. The tinted row below is that frame.
Reading the cells.
+1 books gained ·
−1
−4
−12 books lost,
darker as the loss grows ·
inventions before,
after ·
●● one dot per [unreadable].
| Shelf | Books | Base hits | Penalty hits | Δ | Made up before | Made up after | Couldn't read |
|---|---|---|---|---|---|---|---|
| 54t-k1-1 | 30 | 29 | 29 | 0 | 3 | 2 | — |
| 54t-k1-2 | 30 | 26 | 27 | +1 | 4 | 0 | ●● |
| 54t-k2 | 29 | 28 | 27 | −1 | 2 | 0 | ● |
| 54t-k2-k3 | 53 | 47 | 35 | −12 | 4 | 0 | ●●●●●●● |
| 54t-k3 | 24 | 22 | 21 | −1 | 2 | 0 | ●●●● |
| 54t-k4 | 16 | 14 | 14 | 0 | 3 | 1 | ●●● |
| All six | 182 | 166 | 153 | −13 | 18 | 3 | 17 |
| Excluding the hard frame | 129 | 119 | 118 | −1 | 14 | 3 | 10 |
On the five ordinary shelves the penalty removed eleven of fourteen inventions and cost one book. On the hard frame it removed four inventions and cost twelve.
| Shelf | Books | Base hits | Penalty hits | Δ | Made up before | Made up after | Couldn't read |
|---|---|---|---|---|---|---|---|
| 54t-k1-1 | 30 | 30 | 30 | 0 | 0 | 0 | — |
| 54t-k1-2 | 30 | 30 | 30 | 0 | 0 | 1 | — |
| 54t-k2 | 29 | 29 | 27 | −2 | 0 | 1 | ● |
| 54t-k2-k3 | 53 | 47 | 52 | +5 | 4 | 0 | ● |
| 54t-k3 | 24 | 24 | 24 | 0 | 1 | 0 | ●● |
| 54t-k4 | 16 | 15 | 16 | +1 | 3 | 0 | ●●● |
| All six | 182 | 175 | 179 | +4 | 8 | 2 | 7 |
The cleanest result in the run. Inventions fell from eight to two and recall rose by four books — on the arm where the prompt change was a single addition.
| Condition | Books | Base hits | Penalty hits | Δ | Made up before | Made up after | Couldn't read |
|---|---|---|---|---|---|---|---|
| Opus 4.8 · all six shelves | 182 | 179 | 177 | −2 | 3 | 3 | 1 |
| Qwen-2.5-7B · five scorable shelves | 129 | 33 | 30 | −3 | 10 | 4 | 5 |
Opus barely moved, and that cell is uninformative rather than negative — it was already at 98.4% recall with three inventions in 182 books, so there was almost nothing left to decline about. Qwen reads at 23% recall and its counts are too small to carry an effect; its sixth shelf never returned parseable output at any token cap.
The obvious expectation is a trade — fewer inventions bought with fewer real books. That is not what happened. GPT-5.6 gained four books while cutting inventions by six. The reason is visible in one case. On shelf 54t-k1-2 the baseline Sonnet run invented "Little Black Stretchy Pants: The Story of Lululemon", and on the same shelf missed the real book "lululemon and the future of technical apparel."
Same fragments. The model read lululemon, and the old rule told it to complete
partial text from world knowledge, so it did — into a different, better-known book about the
same company. That one guess cost two things. It scored as an invention, and it destroyed the
hit, because the real book no longer had anything pointing at it. A wrong guess consumes the
evidence for the right answer.
The baseline runs were already abstaining. They had no word for it. Three of the four "inventions" Sonnet was charged with on 54t-k1-2 were these:
"Unidentified fragment (possibly author surname)" "Unidentified fragment (possibly author name 'H. Allen')" "Unidentified degraded fragment"
That is the model declining. With no token to decline with, it wrote prose into the title field, and the scorer counted each one as a fabricated book. The ?N column in §03 was recovered by hand-auditing that bucket afterwards.
So the penalty prompt did less to Sonnet than the totals suggest. It did not teach it to abstain. It gave an existing behaviour a machine-readable name, and stopped one genuine guess. The strong version of the finding rests on GPT-5.6 and Qwen-2.5-7B, which produced no abstention in any form, prose or otherwise, and then produced seven and five.
[unreadable] became a
cheap thing to repeat, is not settled here.