GIF, emoji and sticker size limits by platform
Every row checked against the platform's own documentation on 27 October 2026. Where a platform publishes no figure, the row says so.
Each platform enforces its own weight, pixel and frame rules, and an upload that breaks one of them simply fails, often without saying which rule it was. This table collects the current limits in one place. The last column points to the GIFUP page that produces a file within that rule, with the conversion done in your browser.
On a narrow screen the table scrolls sideways.
| Where | Format | Pixels | Max weight | Other rules | Source | Fit it |
|---|---|---|---|---|---|---|
| Discord custom emoji | GIF, PNG, JPG, WebP | 128×128 (larger files are shrunk) | 256 KB | Slots per server depend on boost level | Discord developer docs | Discord emoji |
| Discord sticker | PNG, APNG; GIF and Lottie through the API | 320×320 exact | 512 KB | Animated up to 5 s, 60 fps at most | Discord support | GIFUP makes GIFs; Discord's upload screen wants APNG |
| Discord chat upload | Any file | No rule | 20 MB per file by default; higher with Nitro or server boosts | Applies to each file in a message | Discord developer docs | GIF compressor |
| Discord animated avatar or banner | GIF | Avatar square, 512×512 suggested; banner 680×240 | 10 MB, as shown in the upload error | Animation needs Nitro | Figure from Discord's support forum, no official page | Discord PFP and banner |
| Slack custom emoji | JPG, PNG, GIF | Square | Under 128 KB | GIFs up to 50 frames | Slack help | Slack emoji |
| Twitch animated emote | GIF | One square GIF from 112×112 to 4096×4096, or 28, 56 and 112 px files | 1 MB in auto-resize mode; 512 KB per file in manual mode | 60 frames at most; no flashing over 3 times a second | Twitch help | Twitch emote |
| Twitch static emote | PNG | Same sizes as animated | 1 MB | Transparent background expected | Twitch help | Resizer for the pixels |
| Kick emote | PNG, GIF | 500×500 | Under 1 MB | Up to 60 channel emotes plus 24 for subscribers | Kick help | Resizer at 500×500, then the compressor |
| WhatsApp sticker | WebP | 512×512 exact | 100 KB static, 500 KB animated | Animation up to 10 s, frames at least 8 ms; packs hold 3 to 30 stickers; tray icon 96×96 under 50 KB | WhatsApp sticker spec | WhatsApp sticker |
| Telegram static sticker | PNG, WebP | One side exactly 512, the other 512 or less | 512 KB | Transparent layer | Telegram docs | Resizer for a still frame |
| Telegram video sticker | WebM, VP9, no audio | One side exactly 512 | 256 KB | Up to 3 s and 30 fps | Telegram docs | Not yet on GIFUP |
| Telegram custom emoji | PNG, WebP, WebM or TGS | 100×100 exact | 256 KB for video, 64 KB for TGS | Same timing rules as stickers | Telegram docs | Not yet on GIFUP |
| Signal sticker | PNG, WebP; APNG for animation | 512×512 | 300 KB | Animation up to 3 s; up to 200 stickers in a pack | Signal support | Resizer for stills |
| GitHub issues, PRs and comments | GIF, PNG, JPEG, SVG; MP4, MOV, WebM | No rule | 10 MB for images and GIFs; video 10 MB on free plans, 100 MB on paid; 25 MB for other files | Dragged into the text box, not committed | GitHub docs | GIF for GitHub |
| X (Twitter) post | GIF | Up to 1280×1080 | 15 MB | Up to 350 frames and 300 million pixels in total (width × height × frames) | X developer docs | GIF compressor |
| Mastodon post (default server settings) | GIF, converted to a silent MP4 | Under 1 megapixel, so 1280×720 at most | 16 MB for images and GIFs; 99 MB for video | One GIF per post; servers can set their own limits | Mastodon docs | Resizer to 1280 wide |
| Bluesky post | JPG, PNG and other stills; GIFs only through the built-in Tenor picker | Up to 4000 px | 2 MB per image since April 2026 | Video is uploaded separately with its own limits | TechCrunch, April 2026 | GIF to MP4, then post as video |
| Reddit post | GIF; JPEG, PNG, WebP, HEIC; MP4, MOV | No rule | 100 MB for GIFs, 20 MB for images, 1 GB for video | Reddit publishes no page of its own; these figures date from its 2016 announcement and are still quoted | Unofficial | GIF compressor |
| Gmail attachment | Any | No rule | 25 MB per message on personal accounts | Larger files are sent as Drive links | Google support | GIF compressor, email target |
| Outlook.com attachment | Any | No rule | 20 MB per message, body included | Exchange mailboxes at work often cap at 10 MB | Microsoft support | GIF compressor, email target |
Reading the table
Weights are the figures the platforms print. Discord writes 256 KiB, which is 262,144 bytes; most people round it to 256 KB and the apps show it that way. Where a platform gives both a recommended and a hard figure, the hard one is listed. "No rule" means the platform scales the picture itself and only the weight matters.
Frames are the quiet limit. A GIF stores each frame as a complete picture, so a two-second clip at 30 frames a second already holds 60 of them, which is exactly Twitch's cap and ten over Slack's. The GIFUP pages linked in the last column pick the frame rate from the length of your trim so that cap is never crossed.
What is missing on purpose
Microsoft Teams accepts PNG and GIF custom emoji but publishes no weight or pixel limit. Tumblr, Imgur, Giphy and Tenor are left out because their current limits could not be confirmed from an official page; older guides quote figures that no longer match what the sites accept. If you know of an official source for any of these, the contact page is the place to send it.
Questions
How often is this checked?
Each row carries the date it was last confirmed against the source linked beside it. When a platform changes a figure, the row and the date change with it.
Why do KB and KiB differ?
A kibibyte is 1,024 bytes and a kilobyte, strictly, 1,000. Discord and Twitch count in 1,024s. The difference is about 2 percent, which matters only when a file is right on the line.
Can one GIF meet every limit?
Not comfortably. A 128×128 file under 128 KB fits Slack, Discord emoji and Twitch, but it looks tiny as a Discord sticker or a Telegram sticker. Make one file per destination; the pages in the last column are set up for exactly that.