Glossary

The Bluesky Video Size Limits: 300 MB, MP4 and 1920 Pixels

Taras Shynkarenko
Taras Shynkarenko
•Updated: •7 min read
The Bluesky video size limits: 300 MB, MP4 and 1920 pixelsThe Bluesky video size limits: 300 MB, MP4 and 1920 pixels

TL;DR, Quick Answer

7 min read

A Bluesky video can be up to 300,000,000 bytes, and the post stores it as an MP4 file. That cap is set by maxSize in the app.bsky.embed.video lexicon. Bluesky publishes no pixel size and no aspect ratio rule. The official app compresses larger files to 1920 pixels on the longest side at a 3 Mbps target, and its feed draws videos no taller than 1:2. A 1080 x 1920 MP4 under 300 MB keeps its resolution.

What is the Bluesky video size limit?

The Bluesky video size limit is 300,000,000 bytes per video, and the post stores the video as an MP4 file. The cap lives in the AT Protocol schema itself. The app.bsky.embed.video lexicon defines the video blob as:

"video": {
  "type": "blob",
  "description": "The mp4 video file. May be up to 300mb, formerly limited to 100mb.",
  "accept": ["video/mp4"],
  "maxSize": 300000000
}

The official Bluesky app uses the same number and spells out the unit in src/lib/constants.ts: "Maximum size of a video in megabytes, not mebibytes." So the cap is 300 × 1,000,000 bytes, not 300 × 1,048,576. A file your computer shows as 290 MB can be over the limit if your operating system counts in mebibytes.

Every other video size rule on Bluesky lives in a different place, and Bluesky's developer docs publish no pixel dimensions at all.

RuleValueWhere it lives
File size300,000,000 bytesapp.bsky.embed.video lexicon, maxSize
File type in the postvideo/mp4app.bsky.embed.video lexicon, accept
Videos per postOneBluesky launch post: "Each post can contain one video."
Pixel sizeNot publishedNone
Aspect ratioNot published; optional aspectRatio fieldapp.bsky.embed.defs lexicon
Longest side after app compression1920 pixelsApp code, COMPRESSION_MAX_DIMENSION
Bitrate after app compression3 Mbps targetApp code, COMPRESSION_TARGET_BITRATE
CaptionsUp to 20 VTT files, 20,000 bytes eachapp.bsky.embed.video lexicon

A person holds a phone upright to film a vertical video, the frame shape that keeps its 1080 x 1920 resolution on upload.

What resolution does Bluesky use for video?

Bluesky does not set a required resolution, but the official app scales any video it compresses so the longest side is 1920 pixels. The compression settings in src/lib/media/video/constants.ts are COMPRESSION_MAX_DIMENSION = 1920 and COMPRESSION_TARGET_BITRATE = 3_000_000, which the comment labels "3 Mbps." On iOS and Android the compressor also caps the frame rate at 30.

The app skips compression for small files. On the web, the code comment reads "files under this size skip compression entirely" for a threshold of 25,000,000 bytes, and the native apps use a 25 MiB threshold. Those files go up exactly as exported, at whatever resolution and frame rate they had.

That gives two practical results:

  • A 1080 x 1920 export keeps its resolution. Its longest side is already 1920 pixels, so compression only lowers the bitrate.
  • A 4K export loses resolution. A 2160 x 3840 file comes out at 1080 x 1920 after the app compresses it.

Export at 1080 x 1920 for vertical video or 1920 x 1080 for horizontal, and the app never has to scale your frame. The vertical video dimensions guide shows how that frame compares across other networks.

What the Bluesky app does to three kinds of video
Small fileSkips compression and goes up exactly as exported
1080 x 1920 fileKeeps its resolution, only the bitrate drops
2160 x 3840 fileComes out at 1080 x 1920 after compression
Compression aims for 1920 pixels on the longest side at a 3 Mbps target.

Which aspect ratio does a Bluesky video need?

A Bluesky video needs no specific aspect ratio, because the lexicon sets none and the developer docs publish none. The aspectRatio field on a video embed is optional, and the shared definition describes it loosely: "width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit."

The display rules sit in the app. The video embed component constrains the box with the comment "max of 1:2 ratio in feeds," so a video taller than 1:2 shows in a 1:2 frame in the feed. When a post has no aspectRatio at all, the component falls back to a ratio of 1, a square box.

The video service also checks the shape. The app maps a server validation error called bad_aspect_ratio to the message "The selected video has an unsupported aspect ratio." Bluesky publishes no range for that check, so stick to common shapes between 16:9 and 9:16, which also stay inside the 1:2 feed limit.

How do you fit a long video under 300 MB?

A video fits under 300 MB when its average bitrate, video and audio together, stays under 2,400 megabits divided by its length in seconds. 300,000,000 bytes is 2,400,000,000 bits, and the rest is arithmetic:

Video lengthHighest average bitrate under 300 MB
1 minute40 Mbps
3 minutes13.3 Mbps
5 minutes8 Mbps
10 minutes4 Mbps

The Bluesky app does this for you when it compresses. At its 3 Mbps target, a 10-minute video aims for 225,000,000 bytes of video. Files sent through the API skip the app's compressor, so export them at a bitrate from the table. Ten minutes is the current length ceiling in the app, which rejects longer files with "Videos must be 10 minutes or less."

There is one more ceiling outside Bluesky's control. If an account lives on a self-hosted PDS, the app has a separate error for it: "Your hosting provider does not support videos this large." That PDS can set a blob limit below 300 MB.

Which video files does Bluesky accept?

The Bluesky app accepts MP4, MPEG, WebM and QuickTime video from the picker, plus GIF, and stores MP4 in the post. The app's SUPPORTED_MIME_TYPES list names video/mp4, video/mpeg, video/webm, video/quicktime and image/gif. The launch post said the same in plainer words: "Bluesky currently supports .mp4, .mpeg, .webm, and .mov video files."

AdaptlyPost
AdaptlyPost

Start Your 7-Day Free Trial

All-platform analytics

Social Inbox

AI-powered assistant

The lexicon is stricter. Its accept list for the video blob is video/mp4 only. The app hands other formats to Bluesky's video service, which processes them before the post is written, while a client that writes the post record itself has to reference an MP4 blob.

Subtitles have their own size rule. The lexicon allows up to 20 caption files per video, each text/vtt with a maxSize of 20,000 bytes and a language tag.

A developer types code on a laptop, the kind of work involved in uploading an MP4 to Bluesky through the API.

How do you upload a video at the right size through the API?

Upload a video through the API by sending the MP4 to Bluesky's video service first and attaching the result to the post with its aspect ratio. The "Uploading Video" page in Bluesky's developer docs calls this the recommended method:

  1. Check the file. MP4, under 300,000,000 bytes, 10 minutes or less, and 1920 pixels on the longest side to match what the app produces.
  2. Confirm the account can upload. "Bluesky-hosted accounts need to have verified their account email before uploading video, and there are limits on the number of video posts which can be posted per day." Those video limits are separate from the write budget in the Bluesky API rate limit.
  3. Create a service token for your PDS with com.atproto.server.getServiceAuth, scoped to com.atproto.repo.uploadBlob. The docs recommend 30 minutes of expiry.
  4. Upload to https://video.bsky.app with app.bsky.video.uploadVideo.
  5. Poll app.bsky.video.getJobStatus until it returns the blob reference.
  6. Post with the blob and an aspectRatio. The docs say: "As with images, we need to give video embeds an aspect ratio," and suggest reading width and height with ffprobe.

The simpler uploadBlob route works too, but the docs warn that the video then "only starts processing after the post is submitted," so followers see a missing video for several seconds. The same split between protocol caps and app processing applies to pictures, covered in the Bluesky image size limit.

How does AdaptlyPost handle Bluesky video size?

AdaptlyPost connects to Bluesky through the AT Protocol with an app password, and it does not resize uploaded media, so each video has to meet Bluesky's size rules before it enters the queue. The AdaptlyPost API lists text, image, video and carousel (2 to 4 images) as Bluesky content types, and accepts video uploads as video/mp4 or video/quicktime. Export MP4 for Bluesky, since it is the one type the lexicon accepts, and keep it under 300 MB. You plan those posts next to image posts, link cards and quote posts in the Bluesky post scheduler, and how to schedule Bluesky posts walks through the queue.

Frequently asked questions

What is the maximum video size on Bluesky?

300,000,000 bytes per video. The app.bsky.embed.video lexicon sets maxSize to 300000000 and describes the file as "May be up to 300mb, formerly limited to 100mb." Bluesky counts in megabytes, not mebibytes.

What resolution should a Bluesky video be?

1080 x 1920 for vertical video or 1920 x 1080 for horizontal. Bluesky publishes no required resolution, but the official app scales compressed video to 1920 pixels on the longest side. A file at that size keeps its resolution.

What aspect ratio does Bluesky support for video?

Bluesky publishes no aspect ratio rule, and the aspectRatio field on a video embed is optional. The app shows videos no taller than 1:2 in feeds, and the video service can reject a file with "The selected video has an unsupported aspect ratio." Use a ratio between 16:9 and 9:16.

Does Bluesky compress videos?

Yes. The official app compresses files of 25 MB or more to a 3 Mbps target with the longest side at 1920 pixels, and caps the frame rate at 30 on iOS and Android. Smaller files in a supported format skip compression.

Can I upload a MOV file to Bluesky?

Yes, in the Bluesky app, which accepts QuickTime files from the picker. The app.bsky.embed.video lexicon accepts video/mp4 only for the blob in the post. Convert MOV files to MP4 before uploading them through the API.

How does AdaptlyPost handle Bluesky video size?

AdaptlyPost does not resize uploaded media, so the video has to meet Bluesky's limits before you schedule it. Its API accepts mp4 or quicktime uploads, and Bluesky's lexicon takes MP4. Upload an MP4 under 300 MB.

How long can a Bluesky video be?

The Bluesky app accepts videos of 10 minutes or less and rejects longer files with "Videos must be 10 minutes or less." The file must also stay under 300,000,000 bytes. A long video needs a lower bitrate to fit both limits.

How many videos can I add to one Bluesky post?

One. The Bluesky launch post says "Each post can contain one video." To share more clips, publish them as separate posts.

Why does Bluesky say my video is too large?

The most common cause is a file over 300,000,000 bytes. Bluesky counts in megabytes, not mebibytes, so a file your computer shows as 290 MiB is over the limit. Accounts on a self-hosted PDS can also see "Your hosting provider does not support videos this large," because that PDS can set a lower blob limit.

AdaptlyPost
AdaptlyPost

Start Your 7-Day Free Trial

All-platform analytics

Social Inbox

AI-powered assistant

Does Bluesky support video captions?

Yes, through the lexicon. A video can carry up to 20 caption files, each text/vtt with a language tag and a maxSize of 20,000 bytes.

Was This Article Helpful?

Let us know what you think!

See us more often in Google

One click marks AdaptlyPost as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.

Before you go...

AdaptlyPost

AdaptlyPost

Schedule your content across all platforms

Manage all your social media accounts in one place with AdaptlyPost.

All-platform analytics

Social Inbox

AI-powered assistant

Related Glossary Terms

Related Articles