AI Unmasked
HomeCoursesDemosField NotesAgentDeltaAbout
Sign In
AI UnmaskedIntelligence without the hype.
SubstackAbout© 2026
← Field Notes
Field Notes · No. 01Experiment

Does rendering text as images cut Claude's token bill?

A popular claim says sending context to Claude as pictures of text is far cheaper than sending the text itself. I ran the numbers on the first-party API. The effect is real, but only under conditions almost nobody mentions.

July 7, 2026·9 min readTokensCostExperiment

There is a claim making the rounds, popularized by the PXPipe project, that you can slash the cost of feeding context to Claude by sending it as pictures of text rather than as text. The pitch is that an image of a page tokenizes far more cheaply than the same words typed out, on the order of 60 to 70 percent less. It is the kind of claim that is either a genuine free lunch or a measurement artifact, and the only way to know is to measure.

TL;DR

The claim is real, but conditional. An image costs by pixel area, not by content: every full page runs a flat ~4,850 tokens no matter what is on it. So packing a page densely wins big (a 48.5k-char document at 0.30× the text cost, read back with perfect fidelity), while rendering text comfortably costs up to 2.6× more, and anything smaller than roughly one page of text can never win.

The claim

What is actually being asserted

The headline version, the one that travels, is this:

“Fable 5 consumes up to 3× fewer tokens when text context is sent as an image instead of as text.”

Two things in that sentence are worth separating. One is a mechanism: does imaging text reduce input tokens? The other is a framing: is this a Fable 5 property you should factor into model choice? I tested both on the first-party Claude API, using count_tokens for exact, free measurements and live messages.create calls to confirm the billed usage and check whether the model could still read what I sent.

Method

How I measured it

Three corpora, chosen to mirror the content types these pipelines target, generated deterministically so the test is reproducible:

CorpusContentSize
proseNatural-language prose (a fictional history)6,822 chars
codeReal Python source (the stdlib statistics module)32,122 chars
handbookA long, structured operations handbook48,457 chars

Each corpus has specific facts embedded in it (numbers, names, one hex constant) so I could check not just the token count but whether the model could still read the imaged text. Every corpus was rendered at three densities on identical 2000×2560 px pages, monospace, black on white:

ConfigFontColumnsChars per page
f14c114 px1~36k
f10c310 px3~65k
f8c48 px4~93k
Result 1

What the tokens actually cost

Here is the whole story in one picture. Each bar is the image cost divided by the text cost for the same content. The dashed line is break-even.

Image cost ÷ text cost (lower is cheaper)
prose6.8k chars
f14c1
2.23×
f10c3
2.23×
f8c4
2.23×
code32k chars
f14c1
2.60×
f10c3
0.75×
f8c4
0.75×
handbook48.5k chars
f14c1
0.88×
f10c3
0.59×
f8c4
0.30×
Dashed line is break-even. Bars past it cost more than the text; bars short of it save.

Three mechanics explain every bar:

  • Flat page cost. Every full page costs about 4,850 to 4,890 tokens regardless of what is printed on it. That is why prose costs the same in all three configs: it always fits on one page.
  • Break-even is one page of text. A page has to carry more than roughly 4,850 tokens’ worth of text, about 19k characters, before the image beats simply sending the text.
  • Density is the entire effect. Same handbook, same page size: it moves from 0.88× to 0.30× purely by packing tighter. At the tightest setting I measured 9.9 characters per image-token, versus roughly 2.8 to 3.0 characters per text-token.
The handbook rendered at font 14, one column: sparse, filling only the top of the first of three pages.
Comfortable (f14c1): the 48.5k-char handbook spills across three pages.
The same handbook rendered at font 8, four columns: the entire document packed onto a single dense page.
Dense (f8c4): the same document, entirely on one page, at 0.30x the text cost.
Result 2

Can the model still read it?

Cheaper input is worthless if the model cannot read it back. On the live billed runs, the input tokens matched count_tokens exactly, and Opus 4.8 answered every embedded-fact question correctly at every density, including a verbatim hex constant on the 8px, 4-column page that held the entire handbook.

CorpusConditionInput tokensFidelity
prosetext2,1953 / 3
proseimage f8c44,8883 / 3
codetext12,8472 / 2
codeimage f10c39,6472 / 2
handbooktext16,3033 / 3
handbookimage f8c44,8903 / 3

My embedded facts are easier than a large-scale verbatim reproduction test, so I would not claim images are lossless for every use. But at the densities where the savings actually appear, reading held up.

Unplanned finding

Fable 5 refused benign content

One thing I did not go looking for. Fable 5’s cyber safety classifier repeatedly refused harmless experiment content: the Python standard-library JSON parser, a fictional support-system prompt, and, as refusals piled up in a short window, even prose that had passed minutes earlier. A few observations:

  • Refusals were content-sensitive: parser-flavored code and “system prompt with tool schemas” documents refused consistently; a math-flavored module passed consistently.
  • The scope widened after many refusals in a short window, then needed a cool-down, consistent with stateful escalation at the account level.
  • The same document sometimes passed as an image but refused as text, and the reverse. The classifier does not treat the two modalities identically.

Opus 4.8 refused nothing at any point. The practical warning for anyone building these pipelines on Fable 5: the context you would image (agent prompts, tool docs, parser code) is exactly the content that can trip the classifier, in either modality.

Takeaways

What I take from it

  1. The mechanism is real. Dense text packing beats text tokenization by a wide margin, up to about 70 percent fewer input tokens at maximum density.
  2. The “3× on Fable 5” framing is misleading twice over. The savings depend entirely on packing density and document size, and naive rendering costs more, not less. And Fable 5 and Opus 4.8 tokenize identically, so nothing about the savings is Fable-specific; only the price per token differs.
  3. Small documents always lose. Below roughly one page of text, about 19k characters, a single page’s flat cost is more than the text you are trying to replace.
The costs the token count hides

A fair comparison has to price the parts that do not show up in an input-token total: about 1.4 MB of base64 PNG per full page inflates request size and latency, imaged context caches poorly across differing renders, and text inside an image cannot be grepped, diffed, or partially cached. The token savings are real; they are not the whole ledger.

Measured on the first-party Claude API with claude-opus-4-8 and claude-fable-5. Token counts come from count_tokens; live runs confirmed billed usage and reading fidelity. Total spend for the live portion was about two to three US dollars.