Discord GIF Emote Size: Exact Dimensions for Emotes, Stickers, and Banners
June 12, 2026
Discord’s upload limits for emotes are tight, the error messages are vague, and half the guides online quote numbers from 2021. Here’s the current spec sheet for every animated asset on Discord, verified against Discord’s own documentation, plus a workflow that reliably gets a GIF under the 256KB emote cap without turning it into a smear.
The numbers that matter
| Asset | Dimensions | Max file size | Formats | Requirement |
|---|---|---|---|---|
| Custom emoji (static or animated) | 128×128 recommended | 256KB | JPEG, PNG, GIF, WebP, AVIF | Manage Expressions permission to upload |
| Sticker | 320×320 exactly | 512KB | PNG, APNG, GIF, Lottie | Boost Level 1+ for slots beyond the base 5 |
| Server banner (static) | 960×540 min, 16:9 | 10MB | PNG, JPEG | Boost Level 2 |
| Server banner (animated) | 960×540 min, 16:9 | 10MB | GIF | Boost Level 3 |
| Profile avatar (animated) | 128×128 recommended | 10MB | GIF | Nitro (full, not Basic) |
| Profile banner | 680×240 min | 10MB | PNG, JPG, GIF | Nitro (full, not Basic) |
| GIF posted in chat | any | 10MB free / 50MB Nitro Basic / 500MB Nitro | GIF | none |
Sources: Discord’s custom emoji guide, Sticker Creators FAQ, Server Banners article, and File Attachments FAQ.
Emotes: 128×128, and 256KB is the real boss fight
Discord’s own wording on emoji dimensions: “128x128. Bigger or smaller will work, but 128x128 is juuuust right.” Upload something larger and Discord compresses it for you, usually badly. Upload exactly 128×128 and you control the quality.
The dimension is the easy part. The hard part is the 256KB file size cap, which sounds generous until you do the math on an animated GIF:
- A 128×128 frame is 16,384 pixels.
- With 64 colors and typical flat emote art, each frame compresses to roughly 2–6KB after LZW and frame differencing.
- That gives you a budget of roughly 40–100 frames for clean art, and far fewer for photographic or noisy footage.
At 15fps, that’s a 3–6 second loop at best. In practice, the emotes that look good are 1–2 seconds long. Twitch emote artists figured this out years ago: short, punchy loops beat long animations every time.
Two more details worth knowing:
- Emotes render tiny in chat. Discord scales them way down inline, and only shows them larger as “jumbojis” when a message contains nothing but emojis (27 max before they shrink back). Detail you can’t see at small sizes is wasted bytes.
- Animated emotes are free to upload, paid to use. Anyone with the Manage Expressions permission can add an animated emoji to a server, but only Nitro members can send them. Static emotes work for everyone.
Stickers: 320×320 exactly, 512KB, and APNG beats GIF
Stickers are stricter and looser at the same time. The dimensions must be exactly 320×320 — not “recommended,” exactly. Get it wrong and you’ll hit the infamous “Invalid Asset” error. The file cap is 512KB, double the emote budget, per Discord’s Sticker Creators FAQ.
The format situation is where it gets interesting. Discord accepts PNG, APNG, GIF, and Lottie for stickers, but recommends APNG for animated stickers, and for good reason:
| GIF | APNG | |
|---|---|---|
| Colors | 256 per frame | 24-bit (millions) |
| Transparency | 1-bit (on/off, jagged edges) | Full 8-bit alpha (smooth edges) |
| File size at same quality | Larger | Usually smaller for art |
For a sticker that floats over chat backgrounds in both light and dark mode, GIF’s binary transparency produces a crunchy halo around the edges. APNG’s alpha channel doesn’t. If your source is a GIF, converting to APNG before uploading as a sticker is genuinely worth the extra step. If your source is a video clip, you can skip GIF entirely for stickers.
Banners and profile GIFs: roomy limits, boost-gated
The 10MB ceiling on banners means file size is rarely the problem — access is:
- Static server banner (960×540 minimum, 16:9): unlocks at Boost Level 2, which takes 7 boosts.
- Animated server banner: Level 3, 14 boosts. Note it only animates for about 5 seconds when the channel list loads, then pauses until hover — so put the payoff at the start of the loop.
- Animated avatars and profile banners (680×240 minimum) need a full Nitro subscription; Nitro Basic doesn’t include them.
Slot counts also scale with boosts, per the Server Boosting FAQ:
| Boost level | Emoji slots (static + animated) | Sticker slots |
|---|---|---|
| None | 50 + 50 | 5 |
| Level 1 (2 boosts) | 100 + 100 | 15 |
| Level 2 (7 boosts) | 150 + 150 | 30 |
| Level 3 (14 boosts) | 250 + 250 | 60 |
The workflow: getting any clip under 256KB
Say you’ve got a 10-second 480px 15fps GIF from a video clip — that’s typically 4–8MB, or about 20–30× over the emote cap. Here’s the order of operations, ranked by how many bytes each step saves:
1. Trim ruthlessly (biggest win). Cut to the 1–2 seconds that actually matter. Going from 10 seconds to 1.5 seconds is an ~85% reduction before you’ve touched anything else. If you’re starting from video, do this in your video to GIF converter before the GIF even exists — re-encoding an existing GIF always loses more quality than encoding once from source.
2. Resize to 128×128. Dropping from 480px to 128px cuts the pixel count by ~93%. Crop to a square around the subject first, then scale — a GIF resizer that lets you crop and resize in one pass avoids a double re-encode.
3. Lower the frame rate. 15fps is plenty for emotes; 10–12fps is usually indistinguishable at emote scale. Going from 30fps to 12fps cuts frames (and bytes) by 60%.
4. Reduce colors. GIF supports up to 256 colors, but emote-sized art rarely needs more than 64, and 32 often passes. Each halving of the palette saves roughly 10–20%.
5. Lossy compression last. Gifsicle-style lossy LZW (a “lossy” slider in most GIF compressor tools, typical range 30–100) introduces small artifacts that are invisible at 32px display size and can shave another 30–50% off.
A realistic budget for that 10-second clip:
| Step | Settings | Approx. size |
|---|---|---|
| Source GIF | 480px, 15fps, 10s, 256 colors | 4–8MB |
| Trimmed | 1.5s | 600KB–1.2MB |
| Resized | 128×128 | 150–400KB |
| 12fps, 64 colors | 80–250KB | |
| Lossy ~60 | 50–180KB ✓ |
The whole chain runs fine in a browser-based tool — GIF Den does the resize and compress steps client-side, so a clip from a private server never touches a server you don’t control (you can check the no-upload claim yourself in devtools). Any pipeline that follows the same order will land in the same place, though.
Where GIF genuinely loses
Worth being honest about: GIF is a 1989 format and it shows. For stickers, APNG is better on every axis except tooling support. For anything posted in chat, an MP4 of the same clip is typically 5–10× smaller at far better quality — if you have a GIF that’s blowing past the 10MB chat limit, running it through a GIF to MP4 converter is smarter than compressing it harder. GIF’s only unbeatable feature on Discord is that it’s the one animated format emotes and avatars accept.
Checklist
- Emote: 128×128, under 256KB, 1–2 second loop, 10–15fps, ≤64 colors
- Sticker: exactly 320×320, under 512KB, prefer APNG over GIF for clean edges
- Server banner: 960×540+, 16:9, under 10MB; animated needs Boost Level 3
- Profile GIF: needs full Nitro; 128×128 avatar, 680×240+ banner, under 10MB
- Over budget? Trim length → resize → drop fps → reduce colors → lossy, in that order
- Always encode from the original video when you can — every GIF re-encode costs quality you can’t get back