Flat vector chart on a near-black background. An enormous slate-blue bar, built from thousands of tiny uniform squares, stretches across almost the entire frame — the cache reads. At its right edge stands a single thin amber line, a fraction of the blue bar's width, with a small stack of four tilted amber rounded rectangles overlapping it like dropped screenshots. The images are dwarfed by everything else the session moved.

I Measured Every Image in 298 Claude Code Sessions


Over four weeks, 247 images passed through my Claude Code sessions — 97 pasted by me, the rest handed back by tools. I went looking for what they cost, expecting a bill.

They came to 1.26% of everything I moved.

That is the honest end of this post, so it goes first. What makes it worth writing is the two facts sitting either side of it. Every one of those images was resent an average of 130 times, which is worse than I assumed. And it still didn’t matter — for a reason that has nothing to do with images.

Claude tokenizes pixel count, not file size

Anthropic’s docs state the rule directly:

Claude views images in patches instead of pixels. Each patch is a 28×28-pixel block of the image, referred to as a visual token.

So an image costs ⌈width / 28⌉ × ⌈height / 28⌉ tokens. A 1000×1000 image is 36 patches across by 36 down, or 1,296 tokens — $0.0065 a turn on Opus 5, so about 65 cents if it rides along for a hundred turns.

File size is irrelevant. A 40 KB PNG and a 4 MB PNG of the same dimensions cost exactly the same. So does a JPEG at quality 60 versus quality 95.

If you’re compressing screenshots before sending them, stop lowering the quality setting and lower the resolution instead. Quality 95 costs the same as quality 60, so there’s no reason to hand the model a blurry image — JPEG artifacts make small text harder to read, and that’s the one thing you’re usually pasting a screenshot to show. Keep the quality high, watch the pixel dimensions.

(You may have seen the rule tokens ≈ (width × height) / 750 in token calculators. It’s a leftover approximation — 28 × 28 = 784 is the exact arithmetic.)

An image is a subscription, not a purchase

Conversation history is resent on every request, so an image isn’t something you buy once. It’s something you rent, per turn, until the session ends or compaction evicts it.

I could estimate that multiplier or I could measure it, so I measured it: for every image in every session, how many assistant turns followed it. Across 52 image-bearing sessions the answer is 129.6×. My 441,707 tokens of unique image content became 57.3 million tokens moved.

Worst single session: 27 images across 546 turns. 29,742 tokens of actual picture, 8.3 million tokens of resending.

That part of the folklore holds up. A screenshot really is a recurring charge, and the multiplier is larger than anyone eyeballing it would guess.

The measurement

Here is where I expected a bill and didn’t get one.

Tokens
Unique image content441,707
Image content after resending (130×)57,256,771
Cache reads4,410,341,617
Cache writes149,045,481
Uncached input146,946
All input-side4,559,534,044

Images are 1.26% of that. At Opus 5 cache-read rates — a tenth of base input, whichever provider you’re on — four weeks of them cost about $29.

The reason isn’t that images are cheap. It’s that everything else is enormous. 4.41 billion of those 4.56 billion tokens are cache reads — the same repo, the same system prompt, the same conversation, re-read on every turn of every session. That is the bill a big cached prefix actually runs up, seen from the other end. Against that, a screenshot resent 130 times is a rounding error.

Which reframes the advice every post on this topic gives, including the one I set out to write. Cropping screenshots is real and it works, and on my numbers it would have saved me about fifteen dollars a month. The thing actually moving four billion tokens is context I never thought of as a cost at all.

Caveats, because they matter here. Compaction evicts images and I didn’t model it, so 130× and 57.3M are upper bounds — the true figures are lower, which only strengthens the conclusion. The corpus is four weeks: 298 sessions, August 10 to September 5, one developer.

The agent sends more images than I do

Only 97 of the 247 were images I pasted. The other 150 arrived through Read — the agent wrote an image to disk, then read it back.

Of those, 110 were screenshots it took of its own work. The filenames give it away: after-viewport-top.png, after-viewport-mid.png, after-viewport-low.png, after.png, mobile1.png. That is a browser captured at three scroll positions, a before/after pair, a mobile-width check — the agent looking at the CSS it had just written. The remaining 33 were product photos and dimension drawings it downloaded from a vendor site while working on a fixtures project.

They cost exactly what a pasted screenshot costs, and they resend on exactly the same schedule. The difference is that nobody decided to send them. A paste is a moment where you could think twice; a Read inside a tool loop is not.

Which is the blind spot in the advice every post on this topic gives, mine included. “Crop before you paste” is aimed at the human, and in my corpus the human is the minority shareholder — 61% of the images never passed through a paste at all.

What that means for the tier change

Every Claude model has a maximum native image resolution, expressed as a long-edge limit and a visual-token budget. Images over either limit get downscaled before processing. There are two tiers:

Standard tierHigh-res tier
Applies topre-4.7 models4.7+ models
Max long edge1568 px2576 px
Max visual tokens15684784
Effective pixel ceiling~1.2 megapixels~3.8 megapixels
A 4K screenshot costs1,560 tokens4,784 tokens

Which tier you’re on follows the version number, not the family:

ModelStandard tierHigh-res tier
Haiku 4.5
Sonnet 4.5
Sonnet 4.6
Sonnet 5
Opus 4.5
Opus 4.6
Opus 4.7
Opus 4.8
Opus 5
Fable 5

Anthropic’s vision docs call this “Claude 4.7 and later models”. Bump across that line and the same screenshot starts costing more: move a workflow from Sonnet 4.6 to Sonnet 5 and one Retina capture goes from 1,568 tokens to 4,760, about twice the price per image. Same file, same prompt, bigger bill, and nothing announces it — no beta header, no opt-in.

It cuts the other way too. Haiku 4.5 stays on the standard tier at $1/MTok, which makes that same screenshot about fifteen times cheaper there than on Opus 5.

A single send costs fractions of a cent, so the columns below show 100 sends — one screenshot carried through a hundred turns, or ten screenshots across ten turns.

What you pastedHaiku 4.5Sonnet 5Opus 5
Cropped error dialog (800×400)$0.04$0.09$0.22
Terminal window (1200×800)$0.12$0.25$0.62
14-inch Retina, full screen (3024×1964)$0.16$0.95$2.38

Figures come from Anthropic’s published reference resize implementation, run locally — it reproduces every token count in their documented example table.

My logs say something those tables don’t. The longest edge across all 247 images was 2000 pixels. p90 and p95: 1999. Nothing above it, ever.

That’s Claude Code downscaling on paste, which it has done since v2.1.126 in April. Two consequences. On Opus 5 or Sonnet 5, none of my images ever reached the high-res ceiling — the client caps at 2000 px, well under the 2576 px / 3.8 MP budget, so the server never resizes anything. On a standard-tier model it’s the opposite: 41% of them exceed the 1.2 MP budget and get silently downscaled. The tier increase only bites if you’re below it.

What I do now

Two rules, in order of how much they save:

Crop to the thing you’re asking about. An 800×400 crop of the failing dialog is 435 tokens on every model in the lineup. The full 3024×1964 desktop is 4,760 on Opus 5 — eleven times the cost, and almost all of it spent on screen you didn’t ask about. Worth doing, and worth about fifteen dollars a month on my numbers — but remember it only reaches the 39% of images I actually sent.

Stop compressing for cost. It does nothing. Resize instead — and Claude Code already caps you at 2000 px on paste, so the crude version is done for you.

Then stop worrying about it, because I went looking for a screenshot tax and found a cache-read bill. The folklore is right that an image costs you 130 times over, and it is still the wrong number to watch. The right one is whatever your session re-reads on every single turn — which for me was four billion tokens I had never once thought of as spending.