Specs and limits

Social media image size and aspect ratio requirements

Image limits vary more than caption limits. Per-file size runs from 1 MB on Bluesky to 25 MB on Dev.to, the number of images per post runs from 1 (Reddit, Tumblr) to 10 (Instagram, Threads, Telegram, Discord), and Instagram is the only platform with a hard aspect-ratio window: 4:5 portrait to 1.91:1 landscape.
Published 4 min read

What are the image limits on each platform?

Image requirements per platform from the Socifyr shared constants
PlatformMax file sizeMax images per postFormatsRecommended size
Instagram8 MB10 (carousel)JPG, PNG1080x1350
Facebook10 MBCarousel up to 10JPG, PNG, GIF, WebP1200x630
Xn/a in constants4JPG, PNG, GIF, WebP-
LinkedIn8 MBn/a in constantsJPG, PNG, GIF1200x627
TikTok (photo)n/a in constantsn/a in constantsJPG, JPEG, WebP-
Threads8 MB10 (carousel)JPG, PNGMax width 1440
Pinterest20 MBCarousel up to 5JPG, PNG, GIF, WebP1000x1500
Reddit10 MB1JPG, PNG, GIF, WebP-
Bluesky1 MB4JPG, PNG, GIF, WebP-
Telegram10 MB10JPG, PNG, WebP-
Discord8 MB10JPG, PNG, GIF, WebP-
Mastodon8 MB4JPG, PNG, GIF, WebP-
Dev.to25 MB5JPG, PNG, WebP, GIF-
Hashnode25 MB5JPG, PNG, WebP, GIF-
Tumblr20 MB1JPG, PNG, WebP, GIF-

YouTube, Nostr and Slack have no image posting in these constants. Slack connections accept text only, YouTube is video, and Nostr is text. "n/a in constants" means Socifyr does not carry a number for that field, so check the platform's own documentation before relying on one.

What aspect ratio does Instagram require?

Instagram feed images must be between 4:5 portrait (0.8) and 1.91:1 landscape. Socifyr enforces that window before publishing. An image already inside it goes out as uploaded. An image that is too wide is center-cropped to 1.91:1, and one that is too tall is center-cropped to 4:5, then saved as a JPEG at quality 92. The crop happens on a temporary copy, so your original in the media library is untouched.

Examples of the Instagram ratio check
OriginalRatioWhat the API does
1080x13500.80Published as is
1080x10801.00Published as is
1920x10801.78Published as is
2400x10002.40Cropped to 1.91:1
1080x19200.56Cropped to 4:5

If composition matters, crop images yourself. A story-format 1080x1920 image posted to the feed loses a large strip of the top and bottom. For Stories, upload the image or video as a Story rather than a feed post; see how to post to Instagram via API.

What about Bluesky's 1 MB image limit?

Bluesky rejects image blobs of 1,000,000 bytes or more at record creation, which is stricter than almost any other platform. Socifyr passes images under the limit through untouched and re-encodes bigger ones as a JPEG with shrinking dimensions and quality until they fit under about 976 KB. So you can send the same 4 MB photo to Instagram and Bluesky, and each platform gets a file that fits. Details in the Bluesky and Mastodon guide.

How do I send the same image to many platforms?

The smallest per-file limit in your set decides the practical maximum. For Instagram, Facebook, Threads, LinkedIn and Mastodon that is 8 MB, and Bluesky shrinks its own copy. The smallest carousel limit decides how many images a shared post can carry: 4 if X, Bluesky or Mastodon are in the set, 5 with Pinterest, and 1 with Reddit or Tumblr.

typescript
import { getEffectiveCarouselLimit, getEffectivePhotoSizeLimit } from '@socifyr/shared'

const targets = ['instagram', 'x', 'bluesky'] as const

getEffectiveCarouselLimit([...targets])  // 4  (X and Bluesky)
getEffectivePhotoSizeLimit([...targets]) // 1  (Bluesky, in MB)

await socifyr.uploads.photos({
  connections: ['instagram-mybrand', 'x-myhandle', 'bluesky-mybrand'],
  medias: ['https://cdn.example.com/a.jpg', 'https://cdn.example.com/b.jpg'],
  text: 'Two photos, three platforms',
})

How do I upload from a file instead of a URL?

bash
curl -X POST https://api.socifyr.com/api/content/photos \
  -H "Authorization: Bearer sk_your_key" \
  -H "X-Workspace-Id: <workspaceId>" \
  -F "connections[]=instagram-mybrand" \
  -F "connections[]=facebook-mypage" \
  -F "medias[]=@photo1.jpg" \
  -F "medias[]=@photo2.jpg"

You can mix raw files with media library IDs and public URLs. The photos endpoint accepts up to 10 files per request. Uploaded files also count toward your workspace storage (1 GB free, 50 GB Pro, 500 GB Business).

What error do I see when an image is too large?

Socifyr maps the platform's raw message to a readable one. For an oversized file the reason is that the media file is too large for that platform, and the hint lists the platform's own limits, for example video 300 MB and image 8 MB for Instagram. For a bad ratio or resolution the reason says the media does not meet the platform's format requirements and tells you to check the aspect ratio, resolution or duration. Replace the file before retrying, because the same file will fail again.

Frequently asked questions

What aspect ratio does Instagram accept?

Between 4:5 portrait and 1.91:1 landscape. Socifyr center-crops images outside that range before publishing.

What is the Bluesky image size limit?

1 MB per image. Socifyr re-encodes larger images so they fit under roughly 976 KB.

How many images can I post to X?

Up to 4 per post.

What is the maximum image size on Facebook?

10 MB per image, with 1200x630 recommended.

Does Socifyr store my images?

Files you upload are stored in your workspace media library and count toward your plan's storage allowance, so you can reuse them by ID.

Related pages

Try it with your own accounts

One API key, 18 platforms, and your agent never sees a platform token. The free plan needs no card.