How to post a GIF on X (Twitter), Bluesky, Mastodon and Telegram
Fit a GIF to the size and one-GIF rules of X (Twitter), Bluesky, Mastodon and Telegram, make it loop, add a description and check that it plays.
To post a GIF on X (Twitter), open the composer, select the photo icon and choose your GIF file: up to 15 MB on the web or 5 MB in the mobile app. Make it loop, or it shows as a still image, and add no other images: X (Twitter) takes one GIF per post. For a GIF from the built-in library, select the GIF icon instead.
Mastodon’s guide allows one animated GIF per post, up to 16 MB and under 1 megapixel (1280×720). On Telegram, a GIF goes out as its own message, outside any album. On Bluesky, check the composer’s current options. This guide follows a made-up bakery’s four-second GIF and covers your own GIF files, not libraries or video.
GIF limits on each network
| Network | Largest GIF | GIFs per post | What to know |
|---|---|---|---|
| X (Twitter) | 15 MB on the web, 5 MB on mobile | One, with no other images | A GIF that plays once shows as a still |
| Bluesky | Check the composer | One, as the only media | A video can be marked to show as a GIF |
| Mastodon | 16 MB, under 1 megapixel (1280×720) | One | Turned into a soundless video that loops |
| Telegram | 50 MB from a bot | One, as its own message | Never in an album; a bot’s caption holds 1,024 characters |
Sources: X (Twitter)’s photo and GIF help, Mastodon’s posting guide, Bluesky’s video format and Telegram’s Bot API.
Prepare the file before you upload
- Loop it. Set the export to repeat forever.
- Keep it short. A few seconds is enough to show one change.
- Shrink it. Lower the frame rate, use fewer colors or reduce the width and height.
- Use a solid background. Mastodon turns a GIF into video, which has no transparency.
- Avoid fast flashing. More than three bright flashes in one second can cause seizures in some people.
- Check the first frame. Readers who turn off autoplay may see only that frame.
The bakery’s GIF came from a phone video: 1,080 × 1,080 px and 18 MB, too big for X (Twitter) and Mastodon. Resized to 640 × 640 px, with fewer frames per second and looping on, it’s under 5 MB and 1 megapixel and fits every limit above.
Write a description for the motion
Say what happens, not only what’s in the picture. Name the change and why it matters, and type out any text shown in the frames. The bakery writes “Time-lapse: a sourdough loaf rises and splits along its score in the oven”, not “A loaf of bread”.
X (Twitter), Bluesky and Mastodon keep a description with the GIF. Telegram has no description field for a GIF, so put what it shows in the caption. The alt text checklist covers the rest.
Keep one GIF per post when cross-posting
Post each GIF on its own. X (Twitter) and Telegram require it, a Bluesky post holds one video or a set of pictures but not both, and Mastodon’s guide allows one GIF per post.
If you also have photos, give them their own post. The bakery posts the GIF alone on all four networks and its two recipe photos, sized with the image size guide, in a second post. On Telegram, the photos follow as an album. Elsewhere, the photo post replies to the GIF post (the thread guide covers reply order).
If some readers may not want to see the GIF, mark it sensitive where the network offers that. On Mastodon, a content warning does this too (the content warnings guide explains the difference).
Publish and check that it plays
Open each post in the network’s own app, not only in your posting tool. Check that the GIF moves and starts again at the end, the description (or Telegram caption) is there and the feed preview doesn’t cut off what matters.
| What you see | What to try |
|---|---|
| A still image on X (Twitter) | Export again with looping on, then post again |
| Too large in the X (Twitter) app but under 15 MB | Post from the web, or bring it under 5 MB |
| File refused as too large | Fewer frames, fewer colors or smaller dimensions |
| Description missing | Edit the post if the network allows it, or post again |
Post GIFs from one place
Studio posts GIFs to X (Twitter), Bluesky, Mastodon, Misskey and Telegram from one composer. It takes GIF files under 15 MB and under a minute, but not video files. It warns for each network, for example “X (Twitter) allows one GIF per post, on its own”, and won’t publish or schedule the post until it fits. On Mastodon, keep to one GIF yourself, because Studio allows more there.
Each GIF has its own description and a “Sensitive” switch. If you publish before a new GIF is ready, Studio offers “Publish when ready” or “Wait”. A scheduled post waits for its GIF instead of going out without it. No network gets a still image in place of the motion, Bluesky included. Studio isn’t available yet, but you can join the waitlist.
