◉CLAUDE LABJP
●2.1.312 — Fixes Claude overwriting very large CLAUDE.md files and skills going missing after a Bash cd●API — The Messages API maximum request size grew from 32 MB to 128 MB (10/28)●SONNET 4.5 — Retires on the Claude API on 11/30, 31 days left. Migrate to Sonnet 5.5●WINDOWS — Reports say hooks break silently only on Japanese-locale Windows; check the character encoding first●API — In API version 2026-10-21, passing temperature, top_p or top_k returns a 400 error●NEW — I Put a Ten-Line Promise File at the To…●2.1.312 — Fixes Claude overwriting very large CLAUDE.md files and skills going missing after a Bash cd●API — The Messages API maximum request size grew from 32 MB to 128 MB (10/28)●SONNET 4.5 — Retires on the Claude API on 11/30, 31 days left. Migrate to Sonnet 5.5●WINDOWS — Reports say hooks break silently only on Japanese-locale Windows; check the character encoding first●API — In API version 2026-10-21, passing temperature, top_p or top_k returns a 400 error●NEW — I Put a Ten-Line Promise File at the To…
Articles/Claude.ai
◉ Claude.ai/2026-10-30Intermediate

The Limit Rose to 128MB, but 176 Images at 17.5MB Still Stop: Count the Wall That Hits Before Bytes

The day the Messages API request limit became 128MB, I checked 176 images on my own disk. Bytes had plenty of room; the image-count cap hit first. Here is a pre-send gate and a chunking function.

Claude API139Vision5Request SizePre-send CheckImages

✦ Premium Article

I read in the release notes that the Messages API request limit had gone from 32MB to 128MB, and my first thought was that I could now send dozens of images in one go.

What I did next was not call the API. I counted the images on my own disk. As an indie developer I still have 176 images left over from older articles. They add up to 13.11MB, and 17.50MB once base64-encoded, which is under 14% of 128MB.

They still would not go out as one request. The count stopped them, not the bytes. This article walks through that order and the function I now run before sending. All numbers here are pre-send estimates; I did not send these requests, so I am not quoting any server error text.

Four limits, in the order they bite

I pulled the image-related limits from the official vision and API overview pages (checked on 2026-10-30).

What to checkLimitSource
Images per request100 (models with a 200k context window) / 600 (all other models)vision
Above 20 imagesEvery image must be 3,000px or less on the long edgevision
One image (base64)10MB (5MB on Bedrock)vision
Whole request128MB (Bedrock 20MB, Google-managed Claude Models on Google Cloud 30MB)API overview

128MB is the bottom row. For a bundle of images, the top three rows are the ones more likely to bite first. The vision page itself warns that request size can be reached before the 600-image count. On my disk, the order was the other way around.

Counting my 176 images

First I counted bytes only. The files total 13.11MB, and base64 adds about 1.334x (three bytes become four characters). I checked this on a real file: a 348,714-byte JPEG became 464,952 characters, exactly what the formula predicts.

files=176  raw=13.11MB  wire=17.50MB  (x1.334)
limit=128MB  safe=115.2MB  headroom=97.7MB

With bytes alone, I would have called this safe. Then I ran the version that also checks count and dimensions.

route=first-party files=176 wire=17.50MB / 128MB  max_edge=1514px  >3000px=0
NG count 176 > 100
NG 1 issue

The count was the problem. The longest edge is 1,514px, so the 3,000px rule never applies, and each file is small. But with a 200k-context model, one request holds at most 100 images.

I checked the other side too. Against Bedrock's 20MB, 17.50MB is 87% of the limit. My gate treats 90% (18MB) as the safe zone, so it passes, narrowly. That is not comfortable room.

✦

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
✦You can now tell, with numbers, which limit your own batch of images hits first, instead of assuming a higher limit means you are safe
✦You can now catch the long-edge rule that switches on above 20 images before a production request is rejected
✦You will be able to reuse the same check on other routes (direct API, Bedrock and so on) by changing constants, not logic
Secure payment via Stripe · Cancel anytime
✦

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • ✦Copy-paste ready implementation code
  • ✦New advanced guides published daily
  • ✦$5/mo or $10 for lifetime access
View Membership →

Related Articles

◉ Claude.ai2026-10-27
Haiku 4.5's October 15 Floor Has Passed, but No Stop Date Has Been Set
An Active model's date in the deprecations table is a floor, not a schedule. Using the 60-day notice rule and past retirement gaps, here is how I audit pinned model IDs.
◉ Claude.ai2026-10-27
A Retirement Notice Landed This Morning: Three Screens to Open Before You Change Anything
An English deprecation email from Anthropic arrives and you don't write code. Here are three things to check first: whether it concerns you, what the date really means, and who to tell what.
◉ Claude.ai2026-10-04
claude-sonnet-4-5 stops on November 30 — I checked the bill before calling its replacement cheaper
claude-sonnet-4-5-20250929 retires on November 30, 2026. The recommended claude-sonnet-5-5 has lower list prices, but a new tokenizer and a 400 on temperature change the math. After reading, you can audit your own calls and plan the switch in order.