How to make Twitch sub emotes that pass the 1MB cap (2026)
Twitch rejects animated sub emotes over 1MB. Here's the exact pipeline that keeps every emote under the cap without losing quality, including frame-count fallback and APNG vs GIF tradeoffs.
Twitch enforces a strict 1MB hard cap on animated sub emotes — uploads that exceed it are rejected at the dashboard with no retry guidance. The 1MB limit applies to each tier separately (28×28, 56×56, 112×112), and most AI emote tools blow past it on the largest tier because they encode at full quality and let upload fail.
Why animated emotes commonly fail the cap
Twitch's animated emotes ship as GIF, and GIF gets bigger as frame count and color count grow. A 10-frame GIF at 112×112 with full RGBA color and no quantization runs about 1.4-2MB — comfortably over the cap. Naive AI tools encode lossless and push the upload regardless, which Twitch then rejects.
The frame-count fallback pattern
Pile's animation pipeline tries 10 frames first. If the encoded GIF is over 1MB, it re-encodes at 8 frames, then 6, then 4. By the bottom of the ladder every output fits the cap, and 4 frames is enough for most reaction loops (laugh, wave, shake) to read as motion. We pair this with neuquant palette quantization (better than octree for character art with limited colors) and a chroma-key pass that paints sub-128-alpha pixels solid magenta — eliminates the black-halo artifact GIF normally gets on anti-aliased edges.
APNG vs GIF — when to use which
| Format | Twitch | Discord | Best for |
|---|---|---|---|
| GIF | ✓ Required | Accepted | Twitch sub tiers — Twitch rejects APNG |
| APNG | ✗ Rejected | ✓ Preferred | Discord — full alpha, smoother motion |
Ship both for every animated emote. Discord gets the APNG (smoother, full alpha). Twitch gets the GIF in its tier-specific folder. Pile's ZIP delivery does this automatically — every animated emote in the pack ships as both formats with the right filename and folder structure.
Checklist for shipping a Twitch-compliant pack
- Generate at 256×256 master, export to 28×28, 56×56, 112×112 separately (not one image auto-downscaled)
- Encode GIF with frame-count fallback (10 → 8 → 6 → 4) until under 1MB
- Use neuquant or similar quality palette quantizer; not octree
- Apply chroma-key for transparency (alpha threshold + magenta key) — kills the black halo
- Ship APNG separately for Discord (Twitch will reject it anyway)
- Filenames match reaction names so the upload picker stays readable
If you'd rather not build this pipeline yourself, Pile ships every paid pack pre-validated against the 1MB cap with GIF + APNG dual delivery. $9 for a 20-emote pack.
Ready to ship a pack?
20 character-locked emotes, every platform size, $9 per pack. No subscription required.
Make my first pack →Related reads
APNG vs GIF for emotes: which to use in 2026
APNG supports full transparency and produces smoother animations than GIF — but Twitch still requires GIF. Here's a clean breakdown for picking the right format per platform.
Twitch sub badge emote pack: a 60-second guide for streamers
Twitch sub tiers (1, 2, 3) need emote packs that work at 28×28, 56×56, and 112×112. Here's a quick-start guide for streamers shipping their first sub-tier emote pack.