ShapelessAI← All specs

blueskygrapheme clustersVerified by Tal Weiss

Bluesky character limit and media specs

A Bluesky post holds up to 300 characters, with 4 images, 1 video up to 10 min. Every number below is the one our publishing engine enforces before a Bluesky post goes out, with the source it came from and the date we last read it.

Text[text]

Bluesky text limits
Max length300 grapheme clusters
CountingCounted in grapheme clusters: a flag or a skin-tone emoji is one character however many code points it is built from.

Media

Bluesky media constraints by kind
ConstraintImages[image]Video[video]
Per post41
Formats.png, .jpg, .jpeg, .webp.mp4
Max size1,000,000 bytes300,000,000 bytes
Max length-10 min
We publish ityesyes

We publish text, images and video here; PDF documents we do not deliver to Bluesky yet. One post carries images or a video, never both. A PDF deck degrades here into up to 4 slide images.

Mentions

A plain @handle.domain renders as text; linked mentions need facet metadata we do not build yet - prefer naming without @.

The guidance our own agent carries for Bluesky, verbatim.

How our publisher handles it

The notes our publishing engine carries for Bluesky, verbatim - what our adapter does, not only what the platform allows.

  • The lexicon also caps posts at 3,000 bytes - heavy emoji use hits it before 300 graphemes.
  • Video needs a verified account email and counts against a daily per-account quota (getUploadLimits says what is left).
  • A self-hosted PDS may refuse blobs over 100 MB (job failureCode pds_upload_unsupported_blob_size).

Questions

How long can a Bluesky post be?
300 characters. Counted in grapheme clusters: a flag or a skin-tone emoji is one character however many code points it is built from.
How many images can one Bluesky post have?
Up to 4: .png, .jpg, .jpeg, .webp, up to 1,000,000 bytes each.
What video does Bluesky accept?
1 video per post: .mp4, up to 300,000,000 bytes each, up to 10 min.
How do you tag an account on Bluesky?
A plain @handle.domain renders as text; linked mentions need facet metadata we do not build yet - prefer naming without @.

Sources, verified 2026-09-29

Each citation names where the number came from. Anything we could not confirm in an official document is marked, because a number nobody will stand behind should look different from one that is.

  1. [text]lexicon app.bsky.feed.post maxGraphemes 300 / maxLength 3000 bytesverified 2026-07-14
  2. [image]docs.bsky.app 4 images, 1,000,000 bytes eachdocs.bsky.appverified 2026-07-14
  3. [video]docs.bsky.app/docs/tutorials/video: service token aud did:web:<PDS host>, lxm com.atproto.repo.uploadBlob, 30 min exp -> video.bsky.app uploadVideo?did&name -> getJobStatus until blob -> app.bsky.embed.videodocs.bsky.app/docs/tutorials/videoverified 2026-09-29
  4. [videoLimits]lexicon app.bsky.embed.video maxSize 300,000,000 bytes (atproto #5373, 2026-08-11); 10 minutes per @bsky.app post 3mtwf7gxkwc2r (2026-08-25); daily cap 25 videos / 10 GB per bsky.social blog 2024-09-11, LOW: not re-confirmed (checked 2026-09-29)bsky.app