What compressing a picture for a network means
A picture can be refused for three different reasons, and only one of them is size. The first is the file: a byte ceiling that is 8 MB on Instagram and Threads, 10 MB on Facebook, LinkedIn, Telegram and Discord, 16 MB on a default Mastodon server, 20 MB on Pinterest and Tumblr, and a strict 2,000,000 bytes on Bluesky, which is noticeably less than the 2 MiB many tools assume. The second is the format, where Instagram reads JPEG and nothing else and Threads reads only JPEG and PNG. The third is the shape, which no amount of compression fixes: the aspect ratio checker covers that, because Instagram, Threads and Telegram refuse by ratio before they look at the file.
This tool deals with the first two. It reads the picture with your browser's own decoder, applies the orientation flag a phone writes into the file, scales it down to the width that network keeps (1,440 pixels on Instagram and Threads, 2,000 on the long side for Bluesky, and so on down the table above) and saves a JPEG. If the result is still over the ceiling it searches for the highest JPEG quality that gets under it with two per cent to spare, and if even a low quality is not enough it makes the picture smaller and tries again. A picture the network already takes as it is comes back unchanged, which is the rule Preflight follows when it prepares a copy.
Compress an image for Instagram, Bluesky and the rest
For Instagram the work is mostly the move to JPEG and the width: a screenshot saved as PNG is often well over 8 MB and becomes a few hundred kilobytes as a JPEG, which is why the tool defaults to it. For Bluesky the byte limit is the binding one, so a 12-megapixel photo is scaled to 2,000 pixels and then saved at whatever quality lands just under 2,000,000 bytes. Threads and Instagram both keep 1,440 pixels of width, so a picture wider than that gains nothing from its extra pixels. TikTok states no byte limit for photo posts, but Preflight sends it a copy no bigger than 1080 × 1920, and so does this tool.
Everything happens on your device. The pictures are never uploaded, and the only network request is the few numbers that describe the finished picture, sent so the same validator Preflight runs before a scheduled post can confirm the verdict. If you schedule through Preflight you will not need to do this by hand, because it makes the copy for you and tells you in the composer first; see every network's limits for the full table, or the video and image checker to test a file as it is.