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.

You would also like

Blog

Bluesky API Limits: Post, Image, Video, and Rate Limits (2026)

Complete reference for Bluesky API limits — 300 character posts, 2 MB images, 100 MB / 3 min videos, 5,000 points/hour rate limits. All from official sources.

Read more
Docs

Bluesky API

API reference for Bluesky API.

Read more
Agents

Post to Bluesky with the PublishQ MCP server

Bluesky has no settings object, so publishq_create_post needs only content, mediaIds and the account ID. Links become facets on the way out.

Read more
Agents

Post to Bluesky from OpenClaw

Publish to Bluesky from a self-hosted OpenClaw agent using an app password, with mentions, links and hashtags resolved into proper rich-text facets.

Read more
Free Tool

Post Previewer

See exactly how your posts will look on Twitter, Instagram, LinkedIn, TikTok, and more before you publish. No signup required.

Read more
Free Tool

Bluesky carousel generator

Make a four image set for Bluesky. Write the slides, export them full size, and post them as one update people tap through in the timeline.

Read more
Feature

Write Once, Post Everywhere

Preview how your post looks on each platform, customize the text per account if needed, then publish or schedule to all of them at once.

Read more
Feature

Platform-Specific Content

Write different text for each platform in a single post. Shorten for Twitter, go long on LinkedIn, add hashtags for Instagram — without creating separate posts.

Read more
Feature

API & Developer Tools

Schedule posts, manage accounts, and upload media programmatically. Build your own integrations, automate workflows, or connect PublishQ to your existing tools.

Read more
Platform

Bluesky

Schedule posts to Bluesky with text, images, and video. Connect with your app password — no OAuth headaches.

Read more