Bluesky

Bluesky sizes, specs, and posting limits

Bluesky supports up to four images or one MP4 video, but images and video cannot be mixed. The API records each image’s aspect ratio. PublishQ automatically resizes very high-resolution images to fit.

Updated July 2026

Recommended sizes

Good defaults for Bluesky

Use these sizes when you need a sensible default. The tables below cover the limits enforced by the API.

Landscape image

1200×675 (16:9)

A good feed image size; Bluesky records the actual aspect ratio.

Large images

Any resolution

PublishQ automatically resizes very high-resolution images to fit.

Video

MP4, up to 3 minutes

A post can contain one video and no images.

API limits

Bluesky API specifications

Check these values in your upload validator or before an agent submits a post.

Image limits

AT Protocol image attachment constraints.

Formats
JPEG, PNG, WebP
Maximum file size
2 MB per image
Maximum per post
4 images
Aspect ratio
Detected automatically
GIF behavior
Static first frame only

Video and text limits

Bluesky video and post-copy constraints.

Video format
MP4
Maximum video size
100 MB
Maximum duration
3 minutes
Post text
300 characters

Common publishing errors

Bluesky publishing errors

Find the returned code or the closest matching failure below, then fix the cause before retrying the post.

InvalidRequest (400)

The post record or one of its blob references failed AT Protocol validation.

Fix: Check the record schema, text length, media type, file size, and referenced blob metadata.

InvalidSwap (400)

The optional swapCommit value does not match the repository’s current commit.

Fix: Read the latest repository state and retry with its current commit CID, or omit swapCommit.

ExpiredToken / InvalidToken (401)

The Bluesky access token has expired or is no longer valid.

Fix: Refresh the session or reconnect the account before publishing again.

RateLimitExceeded (429)

The personal data server has rejected requests above its current rate limit.

Fix: Honor Retry-After when present and retry with randomized exponential backoff.

InvalidRecord: text too long (400)

The post or one item in a thread exceeds Bluesky’s 300-character limit.

Fix: Shorten each post separately. Every thread item has its own 300-character allowance.

AuthenticationRequired (401)

The handle or app password is invalid, expired, or has been revoked.

Fix: Create a new Bluesky app password and reconnect the account. Do not use the account’s main password.

BlobTooLarge (400)

An uploaded image or video blob is larger than the personal data server accepts.

Fix: Compress the media to Bluesky’s current byte limit, upload it again, and create a new post record.

Why Bluesky uploads fail

  • Images and video are mixed in one post instead of using one media mode.
  • An animated GIF is expected to animate even though Bluesky renders a static frame.
  • A very high-resolution source image uploads as a blob but fails during post processing.

What PublishQ handles

  • Prepares each image into the best version Bluesky accepts, resizing high-resolution photos that exceed Bluesky’s limits and compressing oversized images, so you never have to edit a photo first.
  • Detects mentions, links, and hashtags and writes the correct rich-text facets.
  • Keeps image and video modes valid when publishing through the API or an agent.
For developers and agents

Publish to Bluesky through one API

Send PublishQ the post. We check it, prepare the media, and deliver it to Bluesky. You can work in the dashboard or connect through the API, CLI, or MCP server.

Frequently asked questions

Common questions about Bluesky media sizes and API publishing limits.

What image size should I use on Bluesky?

Bluesky records image aspect ratios automatically. 1200×675 works well for landscape images. PublishQ automatically resizes very high-resolution images before upload.

How many images can a Bluesky post contain?

A Bluesky post can contain up to four JPEG, PNG, or WebP images. Images cannot be mixed with video in the same post.

Can PublishQ post to Bluesky from an AI agent?

Agents can send Bluesky posts through the PublishQ API or MCP server. PublishQ writes the rich-text facets, prepares the media, and delivers the post.