Making an animated Slack emoji that actually uploads
Slack allows a custom emoji of 128 × 128 pixels at 128 KB. Most animated logos are twenty times that, which is why the upload keeps failing.
Why this budget is so tight
128 KB sounds generous until you divide it by frames. At 128×128 an unoptimised GIF spends roughly 16 KB per frame, so eight frames exhausts the allowance. Every technique matters:
- Skip unchanged pixels. Writing only what moved, and letting the previous frame show through elsewhere, is worth about 3× on a sweep.
- One palette for the whole loop. Per-frame palettes make every frame incompressible against the one before it.
- Collapse identical frames. A pause at the end of a loop should be one frame held longer, not twenty copies of the same picture.
- Drop to 32 colours. At 128 px nobody perceives the difference on flat artwork, and the saving is immediate.
Settings that fit
| Setting | Value |
|---|---|
| Max size (longest edge) | 128 px |
| Format | GIF |
| FPS | 15 |
| Colours | 32–64 |
| Effect | Shine, pulse, glow — anything where the subject stays put |
Avoid pans and zooms at this size
Effects that move the whole subject change which pixels are transparent from frame to frame, which makes the skip-unchanged-pixels optimisation unsafe — the encoder has to store full frames and the file multiplies. At 128 KB you cannot afford that. Effects that light the artwork without moving it stay small.
Discord, for comparison
Discord allows 256 KB at the same 128×128, so anything that fits Slack fits Discord with room to spare.
Frequently asked
What is the Slack emoji size limit?
128 KB, at 128 by 128 pixels. Slack rejects the upload above either limit, and it does not resize or recompress for you.
Why does my animated emoji fail to upload to Slack?
Almost always file size. An animation exported at 512 px or with per-frame colour palettes will be several hundred kilobytes. Re-export at 128 px with a single palette across the loop and 32 to 64 colours.
What is the Discord emoji size limit?
256 KB at 128 by 128 pixels — twice Slack's allowance, so a file made for Slack always works on Discord.