Bluesky image limits: 4 per post, 2 MB each, alt text required

A Bluesky post embeds up to 4 images of 2,000,000 bytes each, and each needs alt text. Make a JPEG under the cap with Sume Images and write the description.

4 min readSume
All posts

The AT Protocol lexicon for app.bsky.embed.images allows up to 4 images per embed, each blob up to 2,000,000 bytes, and every image requires an alt string. The lexicon notes the cap was formerly 1 MB. For an AI image, export JPEG, check the byte size, and write real alt text.

What does the lexicon require?

The main object holds an images array with maxLength: 4. Each image object requires image and alt; aspectRatio is optional. The blob accepts image/* types with maxSize: 2000000.

app.bsky.embed.images (read 2026-10-02)
ItemValue
Images per embed4
Max bytes per image2000000
Required fieldsimage, alt
OptionalaspectRatio
Accepted typeimage/*

How do I stay under 2 MB?

Ask Sume for output_format jpeg and a moderate aspect ratio such as 4:5 or 1:1, then measure the file. If it is over 2,000,000 bytes, regenerate at a lower resolution tier. Sume does not offer a byte-size parameter, so the check belongs in your code.

import json, os, urllib.request

body = {
    "model": "bytedance-seed/seedream-4.5",
    "prompt": "a lighthouse at dusk, painterly, calm sea",
    "aspect_ratio": "4:5",
    "output_format": "jpeg"
}
req = urllib.request.Request(
    "https://api.sume.com/v1/images",
    data=json.dumps(body).encode(),
    headers={
        "Authorization": "Bearer " + os.environ["SUME_API_KEY"],
        "Content-Type": "application/json",
    },
    method="POST",
)
print(urllib.request.urlopen(req).read().decode())

Why does alt text matter here?

The schema makes it required, so a post without it fails. Describe the picture plainly; the lexicon sets no length cap in the part read, but keep it concise. Providing aspectRatio helps clients reserve space.

What should I verify?

Check the live lexicon, since limits have changed before. The images guide lists Sume's parameters.

Sources

Related posts

More in Integrations

All Integrations posts

Written by Sume