Design for the window it lands in, not the one you upload
Discord asks for something around 128 by 128 and then draws it in chat at roughly a quarter of that. Your emoji spends its life about the size of a lowercase letter, surrounded by text, moving in somebody's peripheral vision while they read. It appears larger in the picker and when a message contains nothing else, but those are exceptions and you should not design for them.
Which rules out most of what makes a good clip. Facial expression at 32 pixels is two dark smudges and a mouth. Backgrounds survive as noise. Text of any size is gone, so the caption tools that carry a meme are the wrong instrument here, and it is better to say so than to sell them to you. What survives is silhouette, one strong color against a contrasting one, and exactly one motion: a nod, a spin, a thumbs up entering frame, a thing falling over.
The test is free. Build the loop, then shrink the browser window until the preview is thumbnail sized. If you cannot tell what is happening in half a second, the answer is a tighter crop or different footage, not a different setting.
Why 256 kilobytes is roomier than it sounds
The cap reads as brutal next to the megabytes people usually argue with. Run the arithmetic and it softens. A 128 square frame holds 16,384 pixels. A conventional 480 by 270 GIF frame holds about 129,600, roughly eight times more. Cost scales with pixels, so per second of runtime an emoji sized loop is about an eighth the price of a normal one, which very nearly cancels out the smaller budget.
Scaling this site's measured encodes down by area, even grainy camera footage lands near 4 seconds inside 256 KB at emoji dimensions, and flat animation has room to spare. Since a good emoji runs one to two seconds anyway, you will usually be well under the cap without doing anything clever. The corollary matters more: do not wreck the emoji chasing bytes you did not need to save. Grinding to 16 colors on a loop that was already 90 KB buys nothing and costs legibility exactly where legibility is scarce.
Crop square, then set the width by hand
Almost every source is a rectangle and every emoji is a square, so something gives. Downscaling 16:9 into a square either squashes it or leaves bars, and bars here are a quarter of your emoji spent on nothing. Crop instead. The crop tool locks to exact ratios, so choose 1:1 and pull the box tight around the one thing this is about. Tighter than feels right. If the subject is a face, the crop is the face, not the person.
With the shape settled, set the output size explicitly rather than dragging a percentage slider toward roughly the right place. The width and height fields take exact numbers, so type 128 and let the square follow. The same instinct applies to motion: a loop that pans or zooms spends its budget on travel, while a loop where the subject holds still and one thing changes reads instantly. If your footage has a moving camera, crop to follow the subject or pick a different second.
Settings that survive the shrink
A short list, since the usual GIF advice was written for files ten times this size:
- Duration, one to two seconds. An emoji is punctuation. It gets a fraction of a second of attention before the eye moves on, so a five second story never gets watched.
- Frame rate, 12 to 15. High enough that motion reads as motion, low enough that a short loop does not waste frames. Below about 10 the movement looks broken rather than economical.
- Colors, 64 or 32. At this scale the eye reads shape, not shade. Cutting the palette hard usually costs nothing visible.
- Dithering, restrained. Dither fakes gradients by scattering single pixels, and at 32 rendered pixels that scatter is dirt. Turn it down further than you would on a full size GIF.
- Bounce, when the clip has no natural cycle. Set it on a clip and the motion runs out and returns within a single pass, which leaves no join for the eye to catch. It roughly doubles the frames, which at this size you can afford.
If it still needs shaving, Extra Compression at Light is the last stop. Anything stronger is grain, and grain on a 32 pixel image is a large fraction of the image.
What this cannot do for you
It makes the file. It does not talk to Discord. Nothing here uploads the emoji, claims a slot, or knows whether your server has animated slots free, and servers do get a fixed number with boosting raising the ceiling. Using a custom emoji outside the server it lives in is a Nitro feature and always has been, which is Discord's business model rather than something a converter routes around. Check their current limits before planning a set of twelve.
What it does do is hand you an unbranded file. Nothing is stamped on the export, which is worth more here than almost anywhere: a corner mark on a 128 pixel square is not a credit, it is a third of the emoji. And the job runs inside your tab, which matters because the good emoji come from footage you would never post publicly, the clip of a colleague at the offsite or two seconds from a stream. That file goes from your disk to your disk. Start at the tool, or read the wider Slack and Discord guide for the sizes those platforms want in ordinary messages.