Why your Bluesky upload failed

Almost always one of four things, and only one of them is the size you were looking at.

Your computer and Bluesky count megabytes differently

This is the one that catches nearly everyone. Your operating system reports file size using megabytes of 1,048,576 bytes each. Bluesky does not. It checks the raw byte count against a limit of 2,000,000 bytes, which your file manager would label 1.91 MB. A photo your file manager proudly labels 1.9 MB is 1,992,294 bytes, which squeaks under. The same label on a slightly different photo can mean 1,998,683 bytes, which also passes, or 2,045,440 bytes, which does not. The number you were shown was never the number being tested.

That is why "compress it to under 2MB" is unreliable advice, and why this tool targets bytes directly. It encodes your image, measures the actual output, adjusts, and repeats until it lands just under the real limit. Usually five to seven attempts, all of them in your browser, none of them guessed.

The limit went up, and most guides never noticed

Bluesky raised the per-image limit from 1,000,000 bytes (977 KB) to 2,000,000 bytes (1.91 MB) during 2026. The schema says so in its own words: "May be up to 2 MB, formerly limited to 1 MB." Despite that, a great many guides still tell you the ceiling is 1MB, and some third-party tools still enforce it. If you have been shrinking images to 1MB, you have been throwing away half your available quality for no reason.

We checked this against reality rather than taking the schema's word for it. Across 456 images on live Bluesky accounts, the largest was 1,993,067 bytes, or 1.90 MB and not one exceeded 2,000,000. People really are posting at close to the full 2MB.

Avatars and banners are half the size, and fussier

This one is genuinely obscure. Profile images are governed by a different schema with a different limit: 1,000,000 bytes, which is 977 KB and half what a post image gets. They also accept PNG and JPEG only. No WebP, no HEIC, no GIF.

So an image that uploads perfectly into a post can be rejected as an avatar, which is a confusing failure to debug when every guide quotes one number for "Bluesky images". The largest real banner we found in the wild was 990,406 bytes, or 967 KB, which is 99.0% of the cap, so the limit is not theoretical. Switch the preset above and this tool targets the right number for you.

iPhone photos are HEIC, and that is a problem

If your iPhone is set to "High Efficiency", your photos are HEIC files. For a post image that may work depending on the client, but for an avatar or banner it will not, because only PNG and JPEG are accepted. Drop a HEIC here and it is converted to JPEG in your browser before resizing. The conversion code is only downloaded if you actually give it a HEIC file, so nobody else pays for it in page weight.

The actual limits

From the AT Protocol lexicons, checked against live data.

WhereLimitFormatsLargest seen in the wild
Post image1.91 MB
2,000,000 bytes
any image type1.90 MB
1,993,067 bytes
Avatar977 KB
1,000,000 bytes
PNG, JPEG only405 KB
414,639 bytes
Banner977 KB
1,000,000 bytes
PNG, JPEG only967 KB
990,406 bytes

Dimensions are a separate question. Guides commonly claim a 2000 x 2000 ceiling, but we measured real uploads running up to 4000px on the long side, with about a fifth of them above 2000px and a median of 1920px. This tool caps at 4000px and only goes smaller when the byte limit forces it.

Alt text and aspect ratio

Required fields, not optional extras.

If you post more than four images, Bluesky uses a gallery embed, and that schema marks both alt text and aspect ratio as required on every single item. Every real gallery post we examined had alt text on all of its images, because the format does not permit otherwise.

Aspect ratio is handled for you: it is shown for each processed file above, which is the number a client needs so your image reserves the right shape in the feed before it loads. Alt text is yours to write, and there is a box on each file for it, with a copy-all button so you can paste the set alongside your upload.

Worth knowing: the gallery schema allows up to 20 items, but it explicitly instructs clients to enforce a soft limit of 10 in their posting interfaces. So 10 is the practical maximum today, and 20 is headroom for later.

Your images stay on your device

There is no upload here. Everything runs in your browser through the Canvas API, in a background thread so the page does not freeze while it works. Nothing is sent to us, because there is no server to send it to.

One useful side effect: re-encoding through a canvas discards all metadata. GPS coordinates, camera model, timestamps, the lot. Photos straight off a phone routinely carry the location they were taken in, and most people have no idea. Whatever you drop here comes back out with none of it.

Frequently asked questions

2,000,000 bytes, which your computer shows as 1.91 MB, for an image in a post. It was 1,000,000 bytes (977 KB) before 2026, which is why so many guides still say 1MB. Avatars and banners are separate and still capped at 1,000,000 bytes, which is 977 KB.
Because your operating system counts a megabyte as 1,048,576 bytes while Bluesky counts to 2,000,000 exactly, so its real ceiling is 1.91 MB in the units your computer uses. A file displayed as 1.9 MB can be anywhere from about 1,992,000 to 2,097,000 bytes, so the label cannot tell you whether it passes.
In a post, yes. We found WebP images on live accounts. As an avatar or banner, no, those accept PNG and JPEG only.
Only as much as it has to. Quality is searched downward from 95% and stops the moment the file fits, so an image already under the limit is barely touched. Dimensions are only reduced if quality alone cannot get there.
Yes, including HEIC photos from an iPhone. Large files take longer on a phone because the work happens on your device, not a server.
No. Processing happens entirely in your browser and the files never leave your device.