TL;DR, Quick Answer
7 min readA 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.
| Rule | Value | Where it lives |
|---|---|---|
| File size | 300,000,000 bytes | app.bsky.embed.video lexicon, maxSize |
| File type in the post | video/mp4 | app.bsky.embed.video lexicon, accept |
| Videos per post | One | Bluesky launch post: "Each post can contain one video." |
| Pixel size | Not published | None |
| Aspect ratio | Not published; optional aspectRatio field | app.bsky.embed.defs lexicon |
| Longest side after app compression | 1920 pixels | App code, COMPRESSION_MAX_DIMENSION |
| Bitrate after app compression | 3 Mbps target | App code, COMPRESSION_TARGET_BITRATE |
| Captions | Up to 20 VTT files, 20,000 bytes each | app.bsky.embed.video lexicon |

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.
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 length | Highest average bitrate under 300 MB |
|---|---|
| 1 minute | 40 Mbps |
| 3 minutes | 13.3 Mbps |
| 5 minutes | 8 Mbps |
| 10 minutes | 4 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
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.

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:
- 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.
- 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.
- Create a service token for your PDS with
com.atproto.server.getServiceAuth, scoped tocom.atproto.repo.uploadBlob. The docs recommend 30 minutes of expiry. - Upload to
https://video.bsky.appwithapp.bsky.video.uploadVideo. - Poll
app.bsky.video.getJobStatusuntil it returns the blob reference. - 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
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.
Put this into practice with AdaptlyPost
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
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


The LinkedIn Video Size Rules for Feed Posts, Ads and the API
The official LinkedIn video size range: 256x144 to 4096x2304 pixels, 1:2.4 to 2.4:1, and 75 KB to 5 GB for feed posts. Ads use tighter specs.


The Pinterest Video Size for Organic Pins and Video Ads
The official Pinterest video size is 1080 x 1920 at 9:16 for video Pins. Ads accept 1:2 to 1.91:1 up to 2 GB. Every spec, from Pinterest's own pages.


Why the Bluesky Image Size Limit Is 2,000,000 Bytes
The Bluesky image size limit is 2,000,000 bytes per post image, set by maxSize in the images lexicon. Avatars and banners stop at 1,000,000 bytes.
Related Articles


The Two Records Behind a Bluesky Custom Domain Handle
Your Bluesky custom domain handle needs one of two records: a TXT on _atproto, or plain text at /.well-known/atproto-did. Both values, plus the reserved TLDs.


How to Post a Bluesky GIF That Keeps Moving
How a Bluesky GIF reaches a post: the KLIPY picker, uploads the app turns into video, image embeds that show one frame, and what AdaptlyPost sends.


Photo or Video, the Facebook Story Size Meta Specifies for Pages
The Facebook story size for video is 9:16 at 1080 x 1920, with a 540 x 960 minimum. Photo stories get a 10MB cap and no published pixel size from Meta.

