{"id":415,"date":"2026-04-20T10:17:00","date_gmt":"2026-04-20T14:17:00","guid":{"rendered":"\/blog\/?p=415"},"modified":"2026-05-10T00:48:31","modified_gmt":"2026-05-10T04:48:31","slug":"slack-animated-emoji-128kb","status":"publish","type":"post","link":"\/blog\/slack-animated-emoji-128kb","title":{"rendered":"Slack Animated Emoji: Compress Your GIF Under 128 KB Without Losing the Animation"},"content":{"rendered":"\n<p>Slack\u2019s custom emoji limit is <strong>128 KB<\/strong>. For an animated GIF, that\u2019s brutally small \u2014 most GIFs straight off Giphy are 1\u20135 MB, twenty times too big. Compressing an animation down 95% and keeping it readable at 32 px is a real puzzle. This guide walks through what\u2019s actually achievable: the exact xconvert settings, what kinds of animations work at that size, and when to give up and use a static emoji instead.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jump to a section<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"#specs\">Slack emoji specs<\/a><\/li><li><a href=\"#what-fits\">What kinds of animations actually fit<\/a><\/li><li><a href=\"#recipe\">The aggressive compression recipe<\/a><\/li><li><a href=\"#walkthrough\">Step by step in xconvert<\/a><\/li><li><a href=\"#example\">Worked example: a 4 MB reaction GIF \u2192 95 KB Slack emoji<\/a><\/li><li><a href=\"#give-up\">When to give up and use a static emoji<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"specs\">Slack emoji specs<\/h2>\n\n\n\n<p>Slack\u2019s custom emoji constraints:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"table table-hover\"><thead><tr><th>Spec<\/th><th>Limit<\/th><\/tr><\/thead><tbody><tr><td><strong>Max file size<\/strong><\/td><td><strong>128 KB<\/strong> (per emoji)<\/td><\/tr><tr><td><strong>Max dimensions<\/strong><\/td><td><strong>128 \u00d7 128 px<\/strong><\/td><\/tr><tr><td><strong>Display size in chat<\/strong><\/td><td>22 \u00d7 22 px (regular), 32 \u00d7 32 px (single emoji message), 64 \u00d7 64 px (mobile single emoji)<\/td><\/tr><tr><td><strong>Format<\/strong><\/td><td>PNG, JPEG, GIF \u2014 for animated, must be GIF<\/td><\/tr><tr><td><strong>Max animated frames<\/strong><\/td><td><strong>50 frames<\/strong> (Slack official limit)<\/td><\/tr><tr><td><strong>File extension<\/strong><\/td><td>Must be <code>.png<\/code>, <code>.jpg<\/code>, or <code>.gif<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Slack downsamples display to 22\u00d722 in normal context, so the 128\u00d7128 source is 16\u00d7 larger than what\u2019s actually rendered. That gives you breathing room: the source can be aggressive about compression without affecting the rendered emoji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-fits\">What kinds of animations actually fit<\/h2>\n\n\n\n<p>At 128 KB with animation, three categories work well:<\/p>\n\n\n\n<p><strong>1. Single-element loops<\/strong> \u2014 a thumbs-up bouncing, a heart pulsing, an arrow rotating, a star twinkling. Simple geometry + few colors + tight frame count = small file. <strong>Easily fits at 64\u00d764, 12 fps, 32 colors.<\/strong><\/p>\n\n\n\n<p><strong>2. Tight reaction GIFs<\/strong> \u2014 a face making a single expression, a one-second wave, a brief eyebrow raise. Short duration limits frame count, helping size. <strong>Fits at 96\u00d796, 10 fps, 64 colors with care.<\/strong><\/p>\n\n\n\n<p><strong>3. Pixel-art style animations<\/strong> \u2014 limited palette anyway, simple movement, often game-engine generated. The native low-color count works in your favor. <strong>Fits at 128\u00d7128, 12 fps, 32\u201364 colors.<\/strong><\/p>\n\n\n\n<p>What <strong>doesn\u2019t fit:<\/strong> photo-realistic content (skin tones, gradients, lighting changes), fast-cut clips with multiple scenes, anything longer than ~2 seconds, GIFs originally captured at high resolution where every pixel matters.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"1000\" src=\"\/blog\/wp-content\/uploads\/2026\/05\/step-01-tool-28.png\" alt=\"GIF compressor with file extension and target size controls used for animated emoji preparation\" class=\"wp-image-533\" srcset=\"\/blog\/wp-content\/uploads\/2026\/05\/step-01-tool-28.png 1600w, \/blog\/wp-content\/uploads\/2026\/05\/step-01-tool-28-300x188.png 300w, \/blog\/wp-content\/uploads\/2026\/05\/step-01-tool-28-1024x640.png 1024w, \/blog\/wp-content\/uploads\/2026\/05\/step-01-tool-28-768x480.png 768w, \/blog\/wp-content\/uploads\/2026\/05\/step-01-tool-28-1536x960.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"recipe\">The four compression levers<\/h2>\n\n\n\n<p>The xconvert GIF compressor exposes four Advanced Options. For Slack emoji, you\u2019ll use all of them:<\/p>\n\n\n\n<p><strong>1. Drop Frames.<\/strong> The single most effective lever for already-optimized animations. Pick the <strong>Drop Frames<\/strong> mode, then choose how aggressively to thin the animation \u2014 every 2nd, 3rd, or 4th frame. The page itself recommends: above 20 FPS source, drop every 2nd frame; 15\u201320 FPS source, drop every 3rd. For Slack emoji going down to ~10 frames total, drop every 3rd or 4th.<\/p>\n\n\n\n<p><strong>2. Image resolution.<\/strong> Cut to 96\u00d796 or 64\u00d764. This is a huge lever for source GIFs at 480\u00d7480+. Use <strong>Resolution Percentage<\/strong> mode and pull down to ~25\u201340% \u2014 or use <strong>Width x Height<\/strong> for an exact size. <em>Note from the tool: for GIFs specifically, reducing dimensions doesn\u2019t always shrink the file as much as you\u2019d expect because of how animation frames are optimized.<\/em><\/p>\n\n\n\n<p><strong>3. Image quality (%).<\/strong> Pick <strong>Image Quality (%)<\/strong> mode and pull the slider to 60\u201375%. Slack\u2019s 22 px display size hides quality loss easily.<\/p>\n\n\n\n<p><strong>4. Colors.<\/strong> Pick <strong>By Color Reduction + Dither<\/strong> instead of ORIGINAL. Slack-sized emoji rarely need more than 32\u201364 colors visible.<\/p>\n\n\n\n<p>A typical compression chain: 480\u00d7480 4 MB \u2192 drop every 2nd frame + 30% resolution + 70% quality + color reduction \u2192 ~95 KB. Fits.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"walkthrough\">Step by step in xconvert<\/h2>\n\n\n\n<ol class=\"wp-block-list\"><li>Open <a href=\"https:\/\/www.xconvert.com\/compress-gif\">xconvert.com\/compress-gif<\/a> and click <strong>+ Add Files<\/strong> to pick your animated GIF.<\/li><li>In <strong>Advanced Options \u2192 Drop Frames<\/strong>, click the <strong>Drop Frames<\/strong> button \u2014 the default is ORIGINAL.<\/li><li><img decoding=\"async\" src=\"images\/step-02a-drop-frames-mode.png\" alt=\"Arrow pointing at the Drop Frames mode button (default is ORIGINAL)\"><\/li><li>After clicking, a <strong>Frames To Drop<\/strong> dropdown appears below. Open it and pick <strong>Remove every 3rd frame<\/strong> (or 4th if your source is over 20 FPS).<\/li><li><img decoding=\"async\" src=\"images\/step-02b-frames-dropdown.png\" alt=\"Arrow pointing at the Frames To Drop dropdown\"><\/li><li>In <strong>Image resolution<\/strong>, click the <strong>Width x Height<\/strong> mode (default is Resolution Percentage). This gives you separate Width and Height fields.<\/li><li><img decoding=\"async\" src=\"images\/step-03a-resolution-mode.png\" alt=\"Arrow pointing at the Width x Height mode button in the Image resolution section\"><\/li><li>Two input fields appear with <strong>Percent (%)<\/strong> as the unit. Type <strong>30<\/strong> in the <strong>Width<\/strong> field (Height auto-mirrors). On a typical 320\u00d7320 reaction GIF that lands you near 96\u00d796 \u2014 4\u00d7 Slack\u2019s 22 px chat render.<\/li><li><img decoding=\"async\" src=\"images\/step-03b-resolution-input.png\" alt=\"Arrow pointing at the Width input field with 30 entered\"><\/li><li>In <strong>Image quality (%)<\/strong>, click the <strong>Image Quality (%)<\/strong> button \u2014 the default is ORIGINAL.<\/li><li><img decoding=\"async\" src=\"images\/step-04a-quality-mode.png\" alt=\"Arrow pointing at the Image Quality (%) mode button\"><\/li><li>The <strong>Quality Percentage<\/strong> slider becomes editable. Drag the round handle leftward to about <strong>70%<\/strong> (default is 80%). Slack\u2019s tiny emoji rendering hides this much quality loss.<\/li><li><img decoding=\"async\" src=\"images\/step-04b-quality-slider.png\" alt=\"Arrow pointing at the Quality Percentage slider handle positioned at 70%\"><\/li><li>In <strong>Colors<\/strong>, click <strong>By Color Reduction + Dither<\/strong> (default is ORIGINAL). This drops the palette below the standard 256 colors with dithering for smoother gradients.<\/li><li><img decoding=\"async\" src=\"images\/step-05-colors.png\" alt=\"Arrow pointing at the By Color Reduction + Dither button\"><\/li><li>Click <strong>Compress<\/strong>.<\/li><li>Check the resulting file size. If still over 128 KB, increase the frame-drop rate (every 4th instead of 3rd), drop dimensions to 64\u00d764, or pull quality lower (60%). If the result is under 128 KB but the GIF looks too pixelated, walk dimensions back up to 128\u00d7128 and re-compress.<\/li><li>Verify the file is \u2264 128 KB before uploading to Slack via <em>Customize Workspace \u2192 Add Custom Emoji<\/em>.<\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"example\">Worked example: a 4 MB reaction GIF \u2192 95 KB Slack emoji<\/h2>\n\n\n\n<p><strong>Source:<\/strong> A 480\u00d7480 reaction GIF, 30 frames, 256-color palette. File: 4.2 MB.<\/p>\n\n\n\n<p><strong>Step 1 \u2014 Target.<\/strong> 120 KB (Slack 128 KB cap with headroom).<\/p>\n\n\n\n<p><strong>Step 2 \u2014 Reduction needed.<\/strong> 4200 KB \/ 120 KB = 35\u00d7 compression. Aggressive.<\/p>\n\n\n\n<p><strong>Step 3 \u2014 Lever cascade.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Resize 480 \u2192 96 (5\u00d7 smaller in each dimension): 25\u00d7 pixel reduction \u2192 ~168 KB<\/li><li>Frame rate: 30 fps \u2192 12 fps (drop every other frame): another 2.5\u00d7 \u2192 ~67 KB<\/li><li>Palette: 256 \u2192 64 colors (subtle for tiny render): ~10\u201315% smaller \u2192 ~58 KB<\/li><\/ul>\n\n\n\n<p>Total: well under 120 KB. Quality: at 96\u00d796 displayed at 22\u00d722, no one will notice the palette quantization or frame drops.<\/p>\n\n\n\n<p><strong>Step 4 \u2014 Apply via xconvert.<\/strong> Either let auto-scale handle it (set Specific file size = 120 KB) or do the manual chain (resize \u2192 trim frames \u2192 compress).<\/p>\n\n\n\n<p><strong>Step 5 \u2014 Upload to Slack.<\/strong> Slack admin \u2192 Customize Slack \u2192 Add Custom Emoji. Pick the file, give it a name, save.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"give-up\">When to give up and use a static emoji<\/h2>\n\n\n\n<p>If after aggressive compression your GIF is still over 128 KB AND visibly low-quality, consider a static PNG instead:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Static PNG at 128\u00d7128 with full color<\/strong> typically lands at 8\u201320 KB.<\/li><li><strong>Single most-expressive frame<\/strong> of the animation, exported as PNG, captures the spirit without the file-size battle.<\/li><\/ul>\n\n\n\n<p>Most \u201cwhat does X mean\u201d emoji and reactions don\u2019t actually need the animation to convey the meaning. A static thumbs-up reads identically to an animated one in chat context. Save the animated treatment for emoji where the motion is the joke (a slowly-deflating balloon, a glitching error icon).<\/p>\n\n\n\n<p>xconvert has <a href=\"https:\/\/www.xconvert.com\/convert-gif-to-png\">GIF to PNG conversion<\/a> that exports the first frame (or any specified frame) as a static PNG.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">Frequently Asked Questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Does Slack accept WebP for animated emoji?<\/h3>\n\n\n\n<p>No. Slack\u2019s custom emoji format list is PNG, JPG, and GIF only. WebP (which would compress better than GIF for animation) isn\u2019t accepted. If you have a WebP source, convert it to GIF first (<a href=\"https:\/\/www.xconvert.com\/convert-webp-to-gif\">WebP to GIF<\/a>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I make a transparent animated emoji?<\/h3>\n\n\n\n<p>Yes. GIF supports transparency (1-bit, on\/off \u2014 no semi-transparent). PNG supports alpha transparency but is static. For animated transparent backgrounds, GIF is your only option. Make sure your source GIF has a transparent background; xconvert preserves transparency through the compression.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why does my emoji look pixelated in chat but fine in preview?<\/h3>\n\n\n\n<p>Slack\u2019s chat rendering is 22\u00d722 px on desktop. If your source emoji is a finely-detailed 128\u00d7128 GIF, browsers downsample it to 22\u00d722 for chat display, which can introduce sharpening artifacts on detailed images. Counterintuitively, an emoji designed <em>for<\/em> 22\u00d722 (with thicker strokes and bolder shapes) looks better than one designed for 128\u00d7128 with fine details.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What about Slack workspace tiers?<\/h3>\n\n\n\n<p>The 128 KB \/ 128\u00d7128 emoji limits are the same on all Slack tiers \u2014 Free, Pro, Business+, Enterprise Grid. Upgrading doesn\u2019t get you a bigger cap.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I batch-upload multiple animated emoji?<\/h3>\n\n\n\n<p>Slack\u2019s Custom Emoji panel uploads one at a time. For batch uploads, several third-party tools and Slack apps automate the process \u2014 but each emoji still has to fit the same 128 KB cap individually.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Do animated emoji slow down chat?<\/h3>\n\n\n\n<p>A few animated emoji in a chat are fine. A single message with 50+ animated emoji can lag older browsers \/ mobile devices because they\u2019re decoding many GIFs simultaneously. Slack throttles animation aggressively in dense chat threads.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How do other chat platforms compare?<\/h3>\n\n\n\n<p>For reference: <strong>Discord<\/strong> custom emoji are 256 KB \/ 128\u00d7128 (twice Slack\u2019s size). <strong>Mattermost<\/strong> allows 1 MB \/ 128\u00d7128. <strong>Zulip<\/strong> allows 1 MB \/ variable. Slack\u2019s 128 KB is the strictest among major business chat platforms.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Try it now<\/h2>\n\n\n\n<p>Compress an animated GIF for a Slack emoji with the <a href=\"https:\/\/www.xconvert.com\/compress-gif\">xconvert GIF compressor<\/a> \u2014 set <strong>Specific file size<\/strong> to 120 KB, keep <strong>Auto Scale<\/strong> on, click <strong>Compress<\/strong>. For Discord (10 MB \/ 50 MB \/ 500 MB) or Twitter (5 MB mobile \/ 15 MB desktop), see the related guides on <a href=\"\/blog\/compress-gif-discord-10mb\/\">Compress GIF for Discord<\/a> and <a href=\"\/blog\/compress-gif-twitter-15mb\/\">Compress GIF for Twitter<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Slack custom emoji are capped at 128 KB and 128\u00d7128 px. Animated GIFs hit those limits fast. This guide shows the exact xconvert settings to ship a watchable animated emoji at that tiny size.<\/p>\n","protected":false},"author":3,"featured_media":532,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,14],"tags":[],"class_list":["post-415","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","category-tools"],"_links":{"self":[{"href":"\/blog\/wp-json\/wp\/v2\/posts\/415","targetHints":{"allow":["GET"]}}],"collection":[{"href":"\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"\/blog\/wp-json\/wp\/v2\/comments?post=415"}],"version-history":[{"count":1,"href":"\/blog\/wp-json\/wp\/v2\/posts\/415\/revisions"}],"predecessor-version":[{"id":541,"href":"\/blog\/wp-json\/wp\/v2\/posts\/415\/revisions\/541"}],"wp:featuredmedia":[{"embeddable":true,"href":"\/blog\/wp-json\/wp\/v2\/media\/532"}],"wp:attachment":[{"href":"\/blog\/wp-json\/wp\/v2\/media?parent=415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/blog\/wp-json\/wp\/v2\/categories?post=415"},{"taxonomy":"post_tag","embeddable":true,"href":"\/blog\/wp-json\/wp\/v2\/tags?post=415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}