Does Bluesky Compress Images? Yes, Twice (Tested)

Does Bluesky compress images? Yes, twice. My 4.13 MB test photo came back a 1.56 MB WebP at 4000x3000, 62.3% smaller. Tested 2026-07-18.

By Mike Wiberg · · 16 min read

Yes, twice. Does Bluesky compress images? On 2026-07-18 I uploaded a 4.13 MB iPhone photo, 4032x3024 pixels, to Bluesky. The file it served back was a 1.56 MB WebP at 4000x3000, 62.3 percent smaller and in a format I never gave it. One compression pass happens on your device before upload, and a second happens on Bluesky's image CDN.

Test, 2026-07-18 Input Delivered Verdict
iPhone photo, Bluesky post 4.13 MB JPEG, 4032x3024 1.56 MB WebP, 4000x3000 62.3% smaller, format swapped

Scope first, because honest numbers need it. That result is what Bluesky did to one reference file, on one day, through one upload path, captured from the copy Bluesky serves to viewers. A different surface, an avatar, a link card, a third party client, can behave differently. This page keeps measured results and documented behavior clearly labeled as what they are.

Does Bluesky Compress Images? The Measured Verdict

Yes, every post image, with no setting to prevent it. Bluesky is also the only platform in this test series that handed my photo back in a different file format than the one I uploaded.

The reference file and the Bluesky test

REF-A is the same real iPhone photo every platform in this project gets: 4,332,705 bytes, 4032x3024 pixels, a JPEG carrying the full EXIF block a phone camera writes. Identical input is the point. When every app meets the same file, the differences between platforms are real, and the full scoreboard lives on the hub page collecting every measured app test. On 2026-07-18 I posted REF-A to Bluesky and captured the file Bluesky served back.

What Bluesky served back: a 1.56 MB WebP

Three separate things happened to the file. The bytes dropped 62.3 percent, from 4.13 MB to 1.56 MB. The dimensions shrank from 4032x3024 to 4000x3000, which sounds dramatic and is not: that is 12.19 million pixels trimmed to 12.00 million, a 1.6 percent cut made to duck under Bluesky's 4000 pixel cap. And the format changed outright, JPEG in, WebP out.

The format swap settles a question the Bluesky community had left hanging. Reports in spring 2026 suggested Bluesky's CDN had started serving WebP instead of JPEG, but nobody published a verified number. My capture path returned a WebP file, so on the surface I tested, WebP delivery is real. WebP typically beats JPEG by 25 to 35 percent at the same visual quality, which is a big part of how Bluesky sheds bytes while barely touching pixels; our WebP explainer covers the format in full.

What one measurement can and cannot prove

It proves the pipeline rewrote bytes, pixels, and format end to end on the path I ran. It cannot split the 62.3 percent between the two stages, because I captured the served file, not the intermediate upload. I also did not run our transparent PNG reference file through Bluesky, so this page makes no measured claim about PNG uploads. Where a claim rests on documentation instead of my test, I say so.

Why Does Bluesky Compress Photos Twice?

Because two different systems touch the file: the app on your device compresses before upload, and Bluesky's image CDN re-encodes again when serving. Bluesky's client is open source, so none of this is speculation. It is readable code.

Stage one: the app compresses photos before upload

The official app converts every post image to JPEG and steps the quality down, attempt by attempt, until the file fits under the size cap. A proposal on the app's own repository documents the loop: start at quality 100, drop 10 points, encode, check the size, repeat; if every attempt fails, the app gives up with its Unable to compress image error. The part that surprises people is that the conversion is unconditional. Bluesky's issue tracker confirms that images already inside every limit get recompressed anyway, which is why re-uploading a saved Bluesky image degrades it a little more each time.

The compressed file then goes to your Personal Data Server, the piece of AT Protocol infrastructure that stores your account's data. The PDS enforces the byte cap and rejects files over it, which is exactly why the client compresses first. Bluesky's developer guide to posts shows the check in code: 2,000,000 bytes, no exceptions.

Stage two: the CDN re-encodes what viewers see

Nobody scrolling a feed loads your stored file. They load a copy processed by cdn.bsky.app, which runs the image through the Sharp encoding library a second time, with its own quality settings, its own chroma subsampling, and metadata stripping switched on. Those parameters sit in the same issue tracker discussion cited above. Two lossy passes stack, and detail removed by the first pass never comes back for the second one to preserve; lossy versus lossless compression explains that one way street.

Why Bluesky compresses at all

Bandwidth and storage. Every image on Bluesky has to be stored by a Personal Data Server and moved through the network's relays, and the service is free with a small team behind it. A maintainer also pointed out that re-encoding strips metadata as a side effect, which Bluesky treats as a privacy feature rather than a bug. The tradeoff is real: cheaper infrastructure and safer defaults, paid for in image fidelity.

What Are Bluesky's Image Limits Right Now?

Two megabytes per image and 4000 pixels on the long edge, as of app version 1.121, released in April 2026, with up to four images per post. If a guide tells you 1 MB and 2000 pixels, it predates the change.

The current Bluesky image limits

Limit Before April 2026 Now (v1.121 and later)
Max file size per post image 1 MB 2 MB
Max resolution, long edge 2000 px 4000 px
Images per post 4 4

Bluesky announced the increase on its own account: the max file size doubled to 2 MB and the resolution cap rose to 4000x4000. My measured result matches the new numbers on both axes. The upload was resized to exactly 4000 pixels on the long edge, and the delivered file landed at 1.56 MB, under the cap.

Why the stated limits online disagree

Search for the Bluesky image size limit and you will find 900 KB, 976.56 KB, 1 MB, and 2 MB, sometimes on pages updated the same month. The spread has a boring explanation: the cap changed in April 2026 and most size guide sites have not caught up. Date stamp any Bluesky spec you rely on, including this one, tested 2026-07-18.

The limits also mean the cap is not something you should hit. A photo over 2 MB does not get rejected, it gets fed to the stepped quality loop, and the loop decides what your photo loses. Better to compress the photo below the 2 MB cap before you post, where you can watch the output size and judge the quality yourself instead of letting a retry loop judge it for you.

What Does Bluesky Do to Your File Format?

The official app converts everything to JPEG before upload, and the CDN decides what viewers actually receive, which was WebP on the surface I measured. Your format choice mostly does not survive contact with the pipeline.

How each format survives a Bluesky upload

You upload What the official app does
JPEG Re-encoded as JPEG again, another lossy pass
PNG Converted to JPEG, transparency flattened
WebP Converted to JPEG, with reported artifact bugs
Animated GIF Converted to video
AVIF Not supported

Two of those rows deserve emphasis. PNG conversion means a transparent sticker or cutout arrives flattened onto a background, lossless becomes lossy, and there is no toggle to prevent it. And WebP input has a history of conversion bugs, with users reporting stripe artifacts, so handing the app a WebP is currently the worst of both worlds: you get the JPEG conversion and the bug surface. Developers uploading through the raw AT Protocol API can store any supported format on the PDS as sent, but the CDN still re-encodes what viewers see, so the API route changes storage, not delivery.

The quality cost of double conversion

Each re-encode rounds away detail the previous encode already approximated, so artifacts compound quietly. On a 12 megapixel photo viewed in a feed you will rarely notice. On text, line art, and flat color graphics you will, because hard edges are exactly what lossy encoders approximate worst. Whether any of this matters for your use is the question our guide to compression and quality loss answers with side by side evidence.

Does Bluesky Strip EXIF Data From Photos?

Yes, by design, at both stages. Bluesky strips metadata during upload as a privacy measure, and the CDN's encoder is configured with metadata disabled, so nothing survives to the served copy.

What gets stripped and why

EXIF data, the hidden metadata block your camera writes into the file, includes GPS coordinates, camera model, timestamp, lens settings, and any copyright fields you embedded. Bluesky's engineering discussions show location EXIF scanning was designed in from the platform's earliest days, and the developer guide cited earlier tells API clients to strip EXIF before upload. For most people this is a feature: posting a photo should not broadcast where you live. For photographers who embed copyright and licensing, it is a silent cost with no opt out.

One honesty note: the measured store for this test recorded bytes, dimensions, and format, not metadata, so my EXIF statements here rest on Bluesky's documentation and code rather than on my own measurement for this specific platform.

The one way to reach an original file

The AT Protocol includes a public endpoint, com.atproto.sync.getBlob, that returns a stored blob exactly as uploaded, meaning after the client's compression pass but before the CDN's second pass. That is the closest thing to an original Bluesky keeps. The popular trick of editing a CDN image URL from @jpeg to @png does not do this. It changes the container format of the CDN's output, not the pixels inside it.

Do Avatars, Banners, and Link Cards Follow the Same Rules?

No. Post images get the full pipeline described above, while profile media and link previews have their own specs, and the differences matter if you are wondering why your avatar looks soft.

Bluesky avatar, banner, and link card specs

Surface Recommended size Accepted formats
Post image Up to 4000 px long edge, 2 MB JPEG, PNG, GIF, WebP
Avatar 1000x1000 px, shown as a circle JPEG, PNG
Banner 3000x1000 px, 3:1 ratio JPEG, PNG
Link card 1200x630 px JPEG from the page's og:image JPEG, PNG

These specs come from Bluesky's profile lexicon and its link embed behavior. A link card is built from the shared page's og:image, uploaded as a blob under the same byte limits, and WebP og images have caused broken or striped cards, so pages that want clean Bluesky previews should serve a JPEG og:image. Avatars are displayed small and cropped to a circle, so a sharp 1000x1000 upload survives best. Because avatars and banners accept only JPEG and PNG, a WebP profile image gets refused or converted before it ever reaches the pipeline.

Can You Stop Bluesky From Compressing Your Photos?

No. There is no original quality setting anywhere in the official app, so the only control you have is what the file looks like before it goes in. Used well, that control is worth a lot.

Prepare photos before you post: four steps

  1. Resize to 4000 pixels or less on the long edge yourself, with a proper downscaler, so Bluesky's resizer has nothing to do. Our guide to reducing image resolution covers the tools on every OS.
  2. Export as JPEG at quality 80 to 85. Quality 80 is the setting we treat as visually lossless for photographs, and it usually takes a phone photo 60 to 80 percent down with no visible difference at normal viewing size.
  3. Check the result sits well under 2 MB. A pre-shrunk file skips the stepped quality loop entirely, because the first encode attempt already fits.
  4. Post it. The app still runs its unconditional re-encode, but an already compact, already resized file gives the pass almost nothing to remove, and the visible damage drops accordingly.

Photos versus text and pixel art

Photographs absorb compression well because noise and organic texture hide artifacts. Screenshots, text, line art, and pixel art do not, and they take the double conversion hardest. Small pixel art has a second problem: the viewer enlarges it to fill the screen with soft interpolation, which blurs hard edges. Upscale tiny art yourself with hard edged nearest neighbor scaling before posting, and keep graphics inside the dimension caps so nothing gets resampled.

How Does Bluesky Compare to Other Platforms?

People asking does bluesky compress images usually mean compared to the alternatives, and the only fair comparison uses the same photo everywhere. Bluesky lands in the moderate middle: far gentler than LinkedIn or Facebook, heavier than Instagram, and unique in swapping the delivery format.

The same photo across four platforms

Platform, same photo Delivered file Change Dimensions
Bluesky 1.56 MB WebP 62.3% smaller 4000x3000
Instagram 3.91 MB JPEG 5.4% smaller 4032x3024
Facebook 579.7 KB JPEG 86.3% smaller 2048x1536
LinkedIn 22.0 KB JPEG 99.5% smaller 480x360
The same 4.13 MB photo, as each platform delivers it delivered file size, identical source photo, measured 2026-07-18 Original 4.13 MB Bluesky 1.56 MB WebP Instagram 3.91 MB Facebook 579.7 KB LinkedIn 22.0 KB Measured 2026-07-18, same reference photo through each platform. Bar length proportional to bytes.

Where Bluesky sits on the spectrum

The table understates one thing in Bluesky's favor: pixels. Bluesky kept 98.4 percent of my photo's pixels, Facebook kept 25.8 percent, LinkedIn kept 1.4 percent. X, measured the same day, stores a full resolution copy just 8.5 percent smaller but serves timelines a 2048 pixel copy roughly 81 percent smaller, and Pinterest re-encodes its stored original 58.9 percent smaller while keeping every pixel. The Reddit threads complaining about Bluesky image quality largely predate the April 2026 limit increase; the two pass pipeline is still there, but it now has twice the byte budget and four times the pixel budget it had before.

Questions

What is the size limit for Bluesky images?

2 MB per image, up to four images per post, with a 4000 pixel cap on the long edge. Those limits arrived with app version 1.121 in April 2026, doubling the old 1 MB and 2000 pixel caps. Plenty of size guides still quote the old numbers, so check the date on any Bluesky spec you read.

How do I turn off image compression on Bluesky?

You cannot. The official app has no original quality option, and it converts every post image to JPEG unconditionally, even files already inside the limits. The practical workaround is to resize and compress the photo yourself before posting, so Bluesky's own pass has almost nothing left to take. Developers can push other formats through the AT Protocol API, but the CDN still re-encodes what viewers see.

Is Bluesky good for photographers?

Better than its reputation suggests, by my numbers. The test photo kept 98.4 percent of its pixels, the best retention of any social platform in this series, and the 4000 pixel cap is generous. The costs are real too: two lossy passes, no surviving EXIF, and no full quality option. Photographers who prepare files before upload get the best results Bluesky can deliver.

Does Bluesky compress PNG images?

Yes, and it converts them. The official app turns PNG uploads into JPEG before they leave your device, which flattens transparency and trades lossless for lossy. I did not run our transparent PNG reference file through Bluesky, so this is documented client behavior rather than my own measurement. If transparency or pixel perfect graphics matter, the official Bluesky app is the wrong delivery route.

Why do my Bluesky photos look blurry?

Two compression passes plus a resize will soften any image, and the effect is worst on text, line art, and small pixel art, which the viewer then enlarges with soft interpolation. Photographic detail mostly survives. Post images at or under 4000 pixels on the long edge, avoid pushing graphics through the app as PNG, and upscale tiny art with hard edges before posting.

What are the drawbacks of Bluesky for image quality?

Four, in order of impact: every post image is re-encoded at least twice, format choice does not survive the official app, EXIF metadata including copyright is stripped with no opt out, and there is no setting to disable any of it. Against that, the current 2 MB and 4000 pixel limits are more generous than most rivals, and pixel retention in my test beat every other social platform measured.

Post the Photo Bluesky Barely Needs to Touch

Bluesky will compress whatever you give it, twice, and you cannot switch that off. What you control is how much is left for the pipeline to take. Get the long edge to 4000 pixels or under, then compress the photo in your browser at quality 80, watch the output size land well beneath the 2 MB cap, and post that file. It is free, it runs on open source encoders, it strips EXIF on your terms before Bluesky ever sees the file, and the copy Bluesky serves will look the way you decided it should, not the way a retry loop left it.