Free toolsImage compressor

    Image compressor for social media

    Choose a network, drop in up to ten pictures, and get back JPEGs that fit: scaled to the width that network keeps, saved at the highest quality that stays under its size limit, turned upright and with transparency put on white. The pictures never leave your browser.

    Compress for

    Instagram: up to 8 MB, 1440 px wide. Feed pictures from 4:5 to 1.91:1. The API takes JPEG only and 8 MB; Preflight converts and scales anything else to 1,440 px wide. Every Instagram limit.

    Wrong shape? Instagram refuses by ratio before it looks at size — check and crop with the aspect ratio checker.

    Your pictures

    Nothing chosen yet. Results appear here, one card a picture, for Instagram.

      Once pictures are ready, Preflight's validator confirms the verdict.

      Picture limits by network

      Picture size limits by network
      NetworkLargest fileCopy sizeFormats it readsNotes
      Instagram8 MB1440 px wideJPEGFeed pictures from 4:5 to 1.91:1. The API takes JPEG only and 8 MB; Preflight converts and scales anything else to 1,440 px wide.
      TikTokno stated cap1080 × 1920 pxJPEGPhoto posts take JPEG; Preflight sends a copy no larger than 1080 × 1920 px. TikTok states no byte limit.
      Facebook10 MB2,048 px long sideJPEG, PNG, GIF, BMP, TIFFAny ratio. Facebook delivers photos at 2,048 px on the long side.
      Threads8 MB1440 px wideJPEG, PNGUp to 10:1 either way, and 320 to 1,440 px wide; outside that Threads rescales the picture.
      LinkedIn10 MB2,048 px long sideJPEG, PNG, GIFAny ratio, but fewer than 36,152,320 pixels in total (width × height).
      Pinterest20 MB4,096 px long sideJPEG, PNG, WebP, BMP, TIFFTakes any ratio; 2:3 is what the grid is drawn for.
      Bluesky2,000,000 bytes2,000 px long sideJPEG, PNG, WebPThe record takes 2,000,000 bytes (decimal, not 2 MiB) per picture. Any ratio.
      Mastodon16 MB3,840 px long sideJPEG, PNG, WebP, GIF, HEIC, HEIF, AVIF16 MB is the default; each server sets its own ceiling and scales pictures to about 8 megapixels.
      Telegram10 MB2,560 px long sideJPEG, PNG, WebPPhotos up to 20:1 either way, with width plus height of 10,000 px at most.
      Discord10 MB4,096 px long sideJPEG, PNG, WebP, GIF10 MB a file and 25 MB a message in total. Any ratio.
      Tumblr20 MB2,048 px long sideJPEG, PNG, GIFAny ratio. Preflight sends a copy up to 2,048 px.

      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.

      Questions

      Privacy

      Is my picture uploaded when I compress it?

      No. The picture is decoded and re-encoded by your browser with the canvas API, on your own device, and the result is a file you download. Nothing is sent to a server; the only request the page makes is a few hundred bytes of measurements (type, size, width and height of the finished picture) so Preflight's validator can confirm the verdict. You can see that in your browser's network panel.

      Quality

      How much quality does compressing for a network cost?

      As little as the limit allows. The tool starts at JPEG quality 92 and only goes lower if the file is still over the network's ceiling, searching for the highest quality that fits with a 2 per cent margin under it; if even the lowest quality is too big it shrinks the picture a step at a time. For Instagram (8 MB) a normal photo needs no quality loss at all beyond the move to JPEG; for Bluesky (2,000,000 bytes) a large photo usually does need some.

      Format

      Why is the output always a JPEG?

      Because every network here reads JPEG, and Instagram's publishing API reads nothing else. A PNG or WebP photo is far larger as a lossless file than as a JPEG, so converting is also what makes it fit. Transparent areas are filled with white, since JPEG has no transparency; if you need the transparency, keep the PNG and check it against the limits table instead.

      Metadata

      Does it keep the EXIF data, such as location and camera?

      No. Re-encoding through a canvas drops EXIF, including GPS coordinates, which is usually what you want before posting. The one thing it uses is the orientation flag: a phone photo stored sideways with a rotate flag is turned upright first, so the result is not rotated.

      Preflight

      Do I need this if I schedule with Preflight?

      Not for these limits. When a picture is over a network's size or in a format it does not read, Preflight makes a copy that fits for that network alone, says so in the composer before anything is sent, and leaves your original untouched. This tool is for everywhere else: a post you make by hand, an email or a website that has its own limit.

      Write it once. Let the rules be our problem.

      Preflight checks every post against each network's rules before it leaves, then publishes it to twelve networks. Free plan, no card.