Build1 distinct publisher3 min readPublished
Vision read the characters and lost the row associations, a failure that leaves no error signal downstream and that a comparison against real documents, where nobody holds the ground truth, could not have caught.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Column decomposition is the failure worth studying because the output is well formed. Vision returned three model names in sequence, then three memory figures, with the speed and status columns appended at the end of the document [9]. Nothing is garbled, the characters are all present and correctly grouped, and which speed belongs to which model cannot be recovered [9]. The 27B model kept the rows [10]. The detectability argument follows from that directly: syntactically perfect output with plausible structure carries no error signal, so downstream it reads the same as a correct pass [11].
Put a number on it. The table is four columns by three rows [2]. If the ordering within each recovered column carries no reliable information, which is what the account claims [9], then aligning three speeds to three models has 3! = 6 candidate mappings, and a consumer that guesses is right about 17 percent of the time [20]. Nothing in the output says which case you are in.
All eight of Vision's errors are character substitutions: IQ4_XS read as I04_XS, cloud as cLoud twice, tok/s as tok/5, two characters inside a code string, an em dash flattened to a hyphen, an arrow to -> [5]. None of them is structural [21]. A character error rate therefore scores the run at eight errors and charges nothing for the relation that disappeared [21]. Vision also misread the quantization label of the model it was losing to, which is a nice touch [5]. The author's own reading is that he had mislabeled the task: Vision is dedicated to character recognition, not to document understanding [17].
The cheapest step in the method is the one that made the rest of it valid. His first render was broken, because the monospace font had no Korean glyphs and a label came out as tofu boxes [4]. Ground truth that is already wrong at the moment you fix it voids every measurement taken against it, and checking the image costs about thirty seconds [4].
Speed is the figure that needs the most care. Vision ran 300 times faster [8], against a model identified only as a 27B at IQ4_XS quantization holding 15GB resident [1]. The note names no checkpoint, no hardware and no OS build, and reports a single rendered image with no repeat runs [18]. For 300x to transfer you would need the same quantization on comparable silicon and the same Vision implementation underneath. What does transfer is the shape of it: a zero-footprint system call against a 15GB resident process [1] is not a comparison you run per page inside a loop.
The identifier result is the one I would act on first. On the adversarial line A0-1lO9-B8 [2], the author enlarged the render and confirmed that the font draws digit 0 with a slash through it and capital O as a plain oval, so the two glyphs are visibly different, and both engines still misread the string [13]. More pixels do not address that [13]. His conclusion is that the whole tool class is untrustworthy wherever homoglyphs change meaning, and that the remedy is a checksum or human confirmation rather than a better engine [14]. He then proposes Vision as the first pass with escalation only for documents where reading order carries meaning, and corrects the rule himself because column-shredding is not detectable [15]; the published text stops mid-sentence at the correction [22]. The version the evidence supports routes by document type before reading, not by confidence after.
Ranked by verification strength, evidence, and original report placement.
The comparison ran a locally hosted 27B vision model, IQ4_XS quantized and 15GB resident, against macOS's built-in Vision framework (VNRecognizeTextRequest), described as a dedicated text-recognition engine that is free with zero memory footprint.
The author rendered a 1100x720 test image with the answer fixed in advance: a title and date in Korean, a 4-column by 3-row table (model / memory / speed / status), four lines of prose, one adversarial line A0-1lO9-B8 (digit 1 next to lowercase l, capital O next to digit 0), and two empty table cells containing a hyphen.
The author's stated reason for using a rendered fixture: the usual mistake in an OCR comparison is measuring against real documents where there is no ground truth, so plausible output cannot be distinguished from correct output, and plausible output is what both engines produce when they fail.
The first render was wrong: a label came out as tofu boxes because the monospace font had no Korean glyphs. The author states that if ground truth is broken at the moment you fix it, every measurement afterwards is void, and that the check costs thirty seconds.
Vision made eight errors: IQ4_XS read as I04_XS, cloud as cLoud (twice), tok/s as tok/5, two characters inside a code string, an em dash rendered as a hyphen, and an arrow rendered as ->.
Distinct publishers with included, body-backed reporting in this cluster.
1 article · September 5, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Scaling the prompt analyzer from 1B to 30B reworded the same rejected edit1 distinct publisher
build
Sixty green checks, four shipped defects, and a scan that never printed its denominator1 distinct publisher
build
Backfilling one derived field woke a dormant rule that fired eight times with zero true positives1 distinct publisher
build
A Deleted API Key Kept Authenticating Because The Editor Froze It At Boot1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Careful fixture, single run
The design is stronger than the OCR comparisons it criticises: the correct output was fixed before either engine saw the image, and the author caught his own fixture rendering a Korean label as tofu boxes before he measured anything. What sits underneath the numbers is thin, though. One 1100x720 image, one pass per engine, no checkpoint name, no hardware, no OS build, and a text that stops mid-sentence.
One developer's own pipeline
The only decision reported is which engine the author will point his own OCR path at. No release, deployment, third-party use or published benchmark run appears anywhere in this reporting, so there is no uptake to measure.
Headline outruns the body
"The Dedicated OCR Engine Lost" is a firmer verdict than the text delivers: inside it Vision is 300 times faster, loses only on table structure, and is still the recommended first pass for prose. The generalisations reach past the sample too, with one adversarial string in one font carrying a conclusion about every OCR engine and every identifier.
Little riding on the answer
Neither side of the comparison costs the author money: Vision ships with the operating system and the 27B model runs on his own machine. No sponsor, vendor or product appears, and the argument runs against the expectation he started with. The one pull is the link back to his own notes.
Mechanism over measurements
Column shredding is exactly the kind of behaviour one well-constructed test can establish, and the author shows his working, down to enlarging the render to check that the slashed zero and the plain oval really were different glyphs. The error counts and the 300x ratio are a different matter: they want a second image and a second machine before anyone quotes them.