{"id":2182,"date":"2026-11-12T09:13:00","date_gmt":"2026-11-12T14:13:00","guid":{"rendered":"https:\/\/www.xconvert.com\/blog\/?p=2182"},"modified":"2026-08-31T23:12:46","modified_gmt":"2026-09-01T03:12:46","slug":"twitch-animated-emote-gif","status":"publish","type":"post","link":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif","title":{"rendered":"Twitch Animated Emotes: 112&#215;112, 60 Frames, Under 1 MB"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">You made a three-second loop, exported a crisp 112 \u00d7 112 GIF, and Twitch\u2019s emote uploader still says no. The advice you find next is usually answering a different question \u2014 it quotes the <em>static<\/em> PNG rules, or Discord\u2019s emoji spec, or an old 25 KB figure from before animated emotes existed. Twitch\u2019s animated emotes have their own rulebook, and it contains one limit almost nobody mentions: <strong>a hard cap of 60 frames<\/strong>. Get that one right and the rest is a single pass through a compressor.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><strong>Quick answer:<\/strong> A Twitch animated emote must be a <strong>square GIF<\/strong>. In <strong>auto-resize<\/strong> mode you upload one square GIF between <strong>112 \u00d7 112 and 4096 \u00d7 4096<\/strong> at <strong>1 MB max<\/strong>; in <strong>manual<\/strong> mode you upload three GIFs at <strong>28 \u00d7 28, 56 \u00d7 56 and 112 \u00d7 112<\/strong>, and <strong>each one must be under 512 KB<\/strong>. Either way the GIF <strong>cannot exceed 60 frames<\/strong>, and the emote\u2019s thumbnail is the <strong>first frame<\/strong> unless you supply a separate static image. On <a href=\"https:\/\/www.xconvert.com\/compress-gif\">xconvert\u2019s GIF compressor<\/a>, set <strong>File Compression \u2192 Custom<\/strong> to resize and drop frames, then run a second pass with <strong>Max file size \u2192 Size limit \u2192 Custom size value<\/strong> to land under the byte cap.<\/p><\/blockquote>\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=\"#rules\">Twitch\u2019s animated emote rules, from Twitch<\/a><\/li><li><a href=\"#frames\">60 frames is the constraint nobody mentions<\/a><\/li><li><a href=\"#modes\">Auto-resize or manual: two different byte budgets<\/a><\/li><li><a href=\"#levers\">Which lever to pull at 112 pixels<\/a><\/li><li><a href=\"#tool\">Fit a Twitch emote on xconvert<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"rules\">Twitch\u2019s animated emote rules, from Twitch<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Twitch publishes these in its Emote Formatting article. The static and animated rules are close enough to be confused and different enough to get you rejected.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>Animated emote<\/th><th>Static emote<\/th><\/tr><\/thead><tbody><tr><td>File format<\/td><td><strong>GIF only<\/strong><\/td><td><strong>PNG only<\/strong><\/td><\/tr><tr><td>Shape<\/td><td><strong>Must be square<\/strong> (same width and height)<\/td><td>Square (28 \/ 56 \/ 112 sizes)<\/td><\/tr><tr><td>Auto-resize upload<\/td><td>one GIF, <strong>112 \u00d7 112 to 4096 \u00d7 4096<\/strong><\/td><td>one PNG, <strong>112 \u00d7 112 to 4096 \u00d7 4096<\/strong><\/td><\/tr><tr><td>Manual upload<\/td><td>three GIFs: <strong>28 \u00d7 28, 56 \u00d7 56, 112 \u00d7 112<\/strong><\/td><td>three PNGs at the same three sizes<\/td><\/tr><tr><td>Size cap \u2014 auto-resize<\/td><td><strong>1 MB<\/strong><\/td><td><strong>1 MB<\/strong><\/td><\/tr><tr><td>Size cap \u2014 manual<\/td><td><strong>512 KB per file<\/strong><\/td><td>1 MB<\/td><\/tr><tr><td>Frame limit<\/td><td><strong>60 frames maximum<\/strong><\/td><td>n\/a<\/td><\/tr><tr><td>Flashing<\/td><td><strong>must not flash or flicker more than 3 times in any 1-second period<\/strong><\/td><td>n\/a<\/td><\/tr><tr><td>Background<\/td><td><em>not stated in the animated list<\/em><\/td><td>\u201cPlease submit your emote with a fully transparent background\u201d<\/td><\/tr><tr><td>Thumbnail<\/td><td><strong>first frame of the GIF<\/strong>, or a custom static image<\/td><td>the image itself<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Two clarifications worth pinning down, because they are where most rejected uploads come from:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>It is GIF, not APNG or WebP.<\/strong> Twitch\u2019s wording is unambiguous: for animated emotes \u201cthe image must be in .gif format.\u201d That is a real difference from Discord, where the API accepts several animated formats \u2014 so a file you already prepared for a Discord emoji is not automatically a Twitch one.<\/li><li><strong>The upload has to be square before Twitch sees it.<\/strong> Auto-resize will scale a large square down to the three rendered sizes for you, but it will not crop a rectangle into a square. A 400 \u00d7 300 loop is rejected on shape, not on size.<\/li><li><strong>There is a flashing rule, and it is the last line of Twitch\u2019s animated list.<\/strong> The emote \u201cmust not flash or flicker more than 3 times within a 1 second period.\u201d It is an accessibility limit, not a technical one \u2014 a hard strobe, a rapid colour cycle or a fast blink loop can be rejected even when the dimensions, the byte count and the frame count are all inside the caps. If your loop is built on a flash, slow it to three or fewer per second before you export.<\/li><li><strong>Transparency is a rule for the <em>static<\/em> emote, not the animated one.<\/strong> Twitch asks for \u201ca fully transparent background\u201d in its Standard Emotes section; the animated list says nothing about backgrounds either way. GIF\u2019s 1-bit transparency makes a clean cut-out hard on anti-aliased artwork anyway, so treat a transparent background as a nice-to-have here rather than a requirement someone will reject you for.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Twitch also maintains a separate content-focused <strong>Emote Guidelines<\/strong> covering what an emote may depict; the numbers above are the formatting side only.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"frames\">60 frames is the constraint nobody mentions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the limit that quietly fails most reaction loops, and it is not a size limit at all \u2014 it is a count. A GIF exported from a two-second clip at 30 fps has 60 frames and is exactly at the ceiling. The same clip at 30 fps for three seconds has 90 and is over it, no matter how small the file is.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Frame count and duration are linked through the delay stored per frame. The GIF89a specification stores Delay Time as \u201cthe number of hundredths (1\/100) of a second to wait\u201d, so only frame rates that divide 100 cleanly are exactly representable \u2014 50, 25, 20, 12.5 and 10 fps among them. Spend all 60 frames and you get:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"696\" src=\"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/twitch-frame-budget.png\" alt=\"Bar chart of how many seconds of animation fit inside Twitch's 60-frame emote cap at 50, 25, 20, 12.5 and 10 frames per second\" class=\"wp-image-2181\" srcset=\"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/twitch-frame-budget.png 1600w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/twitch-frame-budget-300x131.png 300w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/twitch-frame-budget-1024x445.png 1024w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/twitch-frame-budget-768x334.png 768w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/twitch-frame-budget-1536x668.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Frame rate<\/th><th>Delay per frame<\/th><th>Seconds you get from 60 frames<\/th><\/tr><\/thead><tbody><tr><td>50 fps<\/td><td>2\/100 s<\/td><td>1.2 s<\/td><\/tr><tr><td>25 fps<\/td><td>4\/100 s<\/td><td>2.4 s<\/td><\/tr><tr><td>20 fps<\/td><td>5\/100 s<\/td><td>3.0 s<\/td><\/tr><tr><td>12.5 fps<\/td><td>8\/100 s<\/td><td>4.8 s<\/td><\/tr><tr><td>10 fps<\/td><td>10\/100 s<\/td><td>6.0 s<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So the design decision is made before you compress anything: <strong>a smooth emote is a short emote, and a long emote is a choppy one.<\/strong> For a small looping face or a bouncing object, 10\u201312.5 fps at 112 pixels reads perfectly well and buys you five or six seconds. Reserve 25 fps and above for loops under two seconds.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your GIF is already over 60 frames, you do not have to re-export from the source. Dropping frames is a legitimate way down, and on xconvert it preserves the loop\u2019s wall-clock length: when a frame is deleted, the surviving frames\u2019 delays are extended to compensate, so the animation runs at the same speed rather than speeding up. <strong>Frames To Drop \u2192 Every 3rd frame<\/strong> removes one frame in three, which turns a 90-frame GIF into a 60-frame one. Every 2nd halves it, which rescues a 120-frame export. More on how frame rate and GIF delays interact in <a href=\"https:\/\/www.xconvert.com\/blog\/gif-frame-rate-fps-guide\/\">GIF frame rate explained<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"modes\">Auto-resize or manual: two different byte budgets<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Twitch gives you two upload paths, and they do not share a size limit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Auto-resize<\/strong> takes a single square GIF anywhere from 112 \u00d7 112 up to 4096 \u00d7 4096 and generates the 28, 56 and 112 renditions itself. The cap is <strong>1 MB<\/strong> for that one file. This is the easier path and the one to default to.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Manual<\/strong> means you supply all three sizes yourself, and there the cap is <strong>512 KB for each of the file sizes<\/strong> \u2014 half the budget, but applied per file, on images that are much smaller to begin with. A 28 \u00d7 28 GIF has one sixteenth the pixel area of a 112 \u00d7 112 one, so the small sizes come in under 512 KB almost automatically; the 112 \u00d7 112 file is the one that will fight you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Use auto-resize unless you want different artwork at different sizes.<\/strong> That is the genuine reason to go manual \u2014 a detailed emote often needs a simplified, chunkier redraw at 28 px to stay readable, and auto-resize will just shrink the complicated one into mush.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One byte-counting note: aim a little under whichever number applies. Type <strong>950<\/strong> with the unit on <strong>KB<\/strong> for the 1 MB path and <strong>500 KB<\/strong> for the manual path. \u201c1 MB\u201d is read as 1,000,000 bytes by some tools and 1,048,576 by others, and a file that reads as \u201c1 MB\u201d in your file manager can still be 1,030,000 bytes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"levers\">Which lever to pull at 112 pixels<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A GIF\u2019s size is roughly <em>pixels per frame \u00d7 frame count \u00d7 palette cost<\/em>. At emote scale those three terms are wildly unequal, and people usually reach for the wrong one first.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Get to 112 pixels before you do anything else.<\/strong> Going from 512 \u00d7 512 to 112 \u00d7 112 cuts the pixel count by about 95% in one step. Nothing else on the page comes close. Compressing a full-size GIF harder just spends your entire quality budget on pixels that are about to be thrown away.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Then cut frames, because the 60-frame cap forces it anyway.<\/strong> Once the canvas is 112 px, frame count dominates the byte total, and Twitch\u2019s own limit is telling you where to land. Dropping every 3rd frame is also the sweet spot we measured across GIF compression jobs in production.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. Palette and dither are the fine tuning \u2014 and dither is a trap this small.<\/strong> Dropping <strong>Color Palette Size<\/strong> from 256 to 64 usually costs very little on a 112 px emote. Dither works against you: in our production measurements ordered dithering costs about <strong>+12% bytes at 64 colours<\/strong> and Floyd\u2013Steinberg about <strong>+25%<\/strong>, and Floyd\u2013Steinberg also flickers between frames because the pattern is not temporally stable. On something that renders at 28 px in chat, that spend buys nothing \u2014 see <a href=\"https:\/\/www.xconvert.com\/blog\/why-gif-looks-grainy-dithering\/\">why your GIF looks grainy<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Also not worth it: a per-frame local palette, which we measured at roughly <strong>3\u00d7 the bytes for about 0.001 SSIM<\/strong>, and trusting an \u201coptimise\u201d flag to be free \u2014 a <code>gifsicle -O1<\/code> pass over an already-optimised GIF made one of our test files <strong>200% bigger<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tool\">Fit a Twitch emote on xconvert<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do it in two passes on the <a href=\"https:\/\/www.xconvert.com\/compress-gif\">xconvert GIF compressor<\/a> \u2014 geometry first, then bytes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pass 1 \u2014 square it up and cut frames:<\/strong><\/p>\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 add your GIF.<\/li><li>Switch <strong>File Compression<\/strong> to <strong>Custom<\/strong>. Resizing and frame dropping only appear in this mode.<\/li><li>Under <strong>Image resolution<\/strong>, choose <strong>Width x Height<\/strong> and enter <strong>112<\/strong> and <strong>112<\/strong> with the unit on <strong>Pixels<\/strong>. (If your source is not square, crop it square first \u2014 scaling a rectangle to 112 \u00d7 112 will squash it.)<\/li><li>Under <strong>Drop Frames<\/strong>, set <strong>Frames To Drop<\/strong> to <strong>Every 3rd frame<\/strong> if you are over 60 frames by less than half, or <strong>Every 2nd frame<\/strong> if you are well over.<\/li><li>Leave <strong>Image quality (%)<\/strong> at its default of 80 for now and download the result.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pass 2 \u2014 land under the byte cap:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Re-upload the file from pass 1. Leave <strong>File Compression<\/strong> on <strong>Max file size<\/strong>, set <strong>Size limit<\/strong> to <strong>Custom size value<\/strong>, and type <strong>950<\/strong> with the unit dropdown on <strong>KB<\/strong> \u2014 or <strong>500 KB<\/strong> if you are uploading the three sizes manually.<\/li><li>Click compress and download. The solver aims at or under the target rather than making you drag a slider until a readout clears.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Your file uploads over an encrypted connection, is processed on our servers, and is <strong>deleted automatically a few hours later<\/strong> \u2014 no sign-up, no watermark. The equivalent walkthrough for the other big emote platform is <a href=\"https:\/\/www.xconvert.com\/blog\/discord-emoji-gif-128px-256kb\/\">Discord custom emoji at 128 \u00d7 128 and 256 KB<\/a>, and Slack\u2019s much tighter budget is covered in <a href=\"https:\/\/www.xconvert.com\/blog\/slack-animated-emoji-128kb\/\">Slack animated emoji under 128 KB<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n\n\n<h5 class=\"wp-block-heading\">Can I upload an APNG or WebP animated emote to Twitch?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">No. Twitch\u2019s formatting requirements state that an animated emote \u201cmust be in .gif format\u201d, with PNG reserved for static emotes. This is one of the places Twitch and Discord genuinely differ \u2014 Discord\u2019s API accepts several animated formats for emoji \u2014 so a file prepared for one platform is not automatically valid on the other.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Why does my emote get rejected when it is well under 1 MB?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Check the frame count and the shape before anything else. Twitch caps animated emotes at <strong>60 frames<\/strong>, and the GIF must be square. A 3-second export at 30 fps is 90 frames and fails on count alone; a 400 \u00d7 300 loop fails on shape. Neither has anything to do with the file size.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">What frame rate should I export at?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">10 to 12.5 fps is the sweet spot for most emotes: it looks smooth at the size an emote actually renders in chat, and inside the 60-frame budget it buys you 4.8\u20136 seconds. Those rates are also exactly representable, because GIF stores each frame\u2019s delay in hundredths of a second \u2014 10 fps is a delay of 10, 12.5 fps a delay of 8. Rates that do not divide 100 cleanly get rounded by the encoder.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">My animation looks fine but the emote thumbnail is blank. Why?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Because Twitch takes the thumbnail from the <strong>first frame of the GIF<\/strong>. If your loop opens on an empty canvas, a fade-in, or a single-pixel wipe, that is what viewers see in the emote picker. Either re-cut the loop so frame 1 is the readable pose, or use Twitch\u2019s option to override the thumbnail with a custom static image that meets the same requirements as a normal emote.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Should I use auto-resize or upload all three sizes?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Auto-resize, unless you have drawn different artwork for the small sizes. Auto-resize gives you a single 1 MB budget and generates 28, 56 and 112 from your square source. Manual gives you three separate 512 KB budgets but no scaling help \u2014 its real purpose is letting you ship a simplified 28 \u00d7 28 version rather than a shrunken one.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Can I resize the GIF with the resize-GIF tool instead?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Not for an animated file. xconvert\u2019s <code>\/resize-gif<\/code> page opens the on-page image editor, which works on a single frame and exports still formats \u2014 it will not give you back an animation. For an animated GIF, resize inside the compressor: <strong>File Compression \u2192 Custom \u2192 Image resolution \u2192 Width x Height<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sources<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Last verified 2026-08-31.<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/help.twitch.tv\/s\/article\/emote-guidelines?language=en_US\">Twitch Help \u2014 Emote Formatting &amp; Instant Emote Upload Requirements<\/a> \u2014 animated emotes: \u201cThe image must be in .gif format\u201d; a single square GIF between 112 \u00d7 112 and 4096 \u00d7 4096 for auto-resize, or three GIFs at 28 \u00d7 28, 56 \u00d7 56 and 112 \u00d7 112 for manual; \u201cGIF images must be square shape\u201d; \u201c1MB file size max for auto-resize mode. If using manual mode, each of the file sizes cannot exceed 512KB\u201d; \u201cGIF images cannot be more than 60 frames\u201d; \u201cThe thumbnail for the animated emote will default to the first frame of the GIF\u201d with a custom-image override; and, closing the animated list, \u201cMust not flash or flicker more than 3 times within a 1 second period\u201d. Static emotes: PNG, same dimension ranges, \u201cThe file size cannot exceed 1MB\u201d, and \u201cPlease submit your emote with a fully transparent background\u201d \u2014 a line that appears only in the static section.\n<em>Note for anyone re-checking this page:<\/em> <a href=\"http:\/\/help.twitch.tv\">help.twitch.tv<\/a> is a Salesforce-rendered site that returns an empty shell to an ordinary browser user agent and the full article only to a crawler user agent. If it looks like the page has gone blank or the source has died, it has not \u2014 re-request it as a crawler.<\/li><li><a href=\"https:\/\/www.w3.org\/Graphics\/GIF\/spec-gif89a.txt\">CompuServe \u2014 GIF89a specification<\/a> \u2014 Graphic Control Extension, Delay Time: \u201cthe number of hundredths (1\/100) of a second to wait before continuing with the processing of the Data Stream.\u201d<\/li><li><a href=\"https:\/\/www.xconvert.com\/compress-gif\">xconvert GIF compressor<\/a> \u2014 live tool; the <strong>File Compression<\/strong> modes (<em>Max file size<\/em> default, <em>Custom<\/em>), the <strong>Size limit<\/strong> dropdown and its <em>Custom size value<\/em> \/ <strong>Max size<\/strong> field with B \/ KB \/ MB units, the <strong>Image quality (%)<\/strong> default of 80, <strong>Drop Frames \u2192 Frames To Drop<\/strong> (<em>Every 2nd<\/em> through <em>Every 10th<\/em>, <em>Every 3rd frame<\/em> preselected), <strong>Image resolution \u2192 Width x Height<\/strong>, and the <strong>Colors<\/strong> group were read from the page.<\/li><li>xconvert production measurements \u2014 dropping every 3rd frame as the measured sweet spot; ordered dither \u2248 +12% bytes at 64 colours and Floyd\u2013Steinberg \u2248 +25% with temporal flicker; per-frame local palettes \u2248 3\u00d7 the bytes for \u2248 0.001 SSIM; a <code>gifsicle -O1<\/code> pass that made an already-optimised GIF 200% larger. Frame-drop retiming (surviving frames\u2019 delays extended so playback length is preserved) is the behaviour of our own GIF pipeline.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Twitch animated emote rules from Twitch: square GIF, 112&#215;112 to 4096, 1 MB auto-resize or 512 KB manual, and a 60-frame cap most guides miss.<\/p>\n","protected":false},"author":3,"featured_media":2179,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,14],"tags":[],"class_list":["post-2182","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","category-tools"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Twitch Animated Emotes: 112x112, 60 Frames, Under 1 MB<\/title>\n<meta name=\"description\" content=\"Twitch animated emote rules from Twitch: square GIF, 112x112 to 4096, 1 MB auto-resize or 512 KB manual, and a 60-frame cap most guides miss.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Twitch Animated Emotes: 112x112, 60 Frames, Under 1 MB\" \/>\n<meta property=\"og:description\" content=\"Twitch animated emote rules from Twitch: square GIF, 112x112 to 4096, 1 MB auto-resize or 512 KB manual, and a 60-frame cap most guides miss.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif\" \/>\n<meta property=\"og:site_name\" content=\"XConvert Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/xconvertcom\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-12T14:13:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-72.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"840\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"James\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@xconvert_com\" \/>\n<meta name=\"twitter:site\" content=\"@xconvert_com\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif\"},\"author\":{\"name\":\"James\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/3434db135e6a7f239ba8414244df9845\"},\"headline\":\"Twitch Animated Emotes: 112&#215;112, 60 Frames, Under 1 MB\",\"datePublished\":\"2026-11-12T14:13:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif\"},\"wordCount\":2390,\"image\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-72.png\",\"articleSection\":[\"How To Guides\",\"Tools\"],\"inLanguage\":\"en-CA\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif\",\"name\":\"Twitch Animated Emotes: 112x112, 60 Frames, Under 1 MB\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-72.png\",\"datePublished\":\"2026-11-12T14:13:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/3434db135e6a7f239ba8414244df9845\"},\"description\":\"Twitch animated emote rules from Twitch: square GIF, 112x112 to 4096, 1 MB auto-resize or 512 KB manual, and a 60-frame cap most guides miss.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif#breadcrumb\"},\"inLanguage\":\"en-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif#primaryimage\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-72.png\",\"contentUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-72.png\",\"width\":1600,\"height\":840,\"caption\":\"The xconvert GIF compressor at \\\/compress-gif with the Upload button highlighted \u2014 resize and shrink a GIF into a Twitch animated emote\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/twitch-animated-emote-gif#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.xconvert.com\\\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Twitch Animated Emotes: 112&#215;112, 60 Frames, Under 1 MB\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/\",\"name\":\"XConvert Blog\",\"description\":\"Blog for XConvert file converter\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-CA\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/3434db135e6a7f239ba8414244df9845\",\"name\":\"James\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g\",\"caption\":\"James\"},\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/author\\\/james\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Twitch Animated Emotes: 112x112, 60 Frames, Under 1 MB","description":"Twitch animated emote rules from Twitch: square GIF, 112x112 to 4096, 1 MB auto-resize or 512 KB manual, and a 60-frame cap most guides miss.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif","og_locale":"en_US","og_type":"article","og_title":"Twitch Animated Emotes: 112x112, 60 Frames, Under 1 MB","og_description":"Twitch animated emote rules from Twitch: square GIF, 112x112 to 4096, 1 MB auto-resize or 512 KB manual, and a 60-frame cap most guides miss.","og_url":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif","og_site_name":"XConvert Blog","article_publisher":"https:\/\/www.facebook.com\/xconvertcom","article_published_time":"2026-11-12T14:13:00+00:00","og_image":[{"width":1600,"height":840,"url":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-72.png","type":"image\/png"}],"author":"James","twitter_card":"summary_large_image","twitter_creator":"@xconvert_com","twitter_site":"@xconvert_com","twitter_misc":{"Written by":"James","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif#article","isPartOf":{"@id":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif"},"author":{"name":"James","@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/3434db135e6a7f239ba8414244df9845"},"headline":"Twitch Animated Emotes: 112&#215;112, 60 Frames, Under 1 MB","datePublished":"2026-11-12T14:13:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif"},"wordCount":2390,"image":{"@id":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif#primaryimage"},"thumbnailUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-72.png","articleSection":["How To Guides","Tools"],"inLanguage":"en-CA"},{"@type":"WebPage","@id":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif","url":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif","name":"Twitch Animated Emotes: 112x112, 60 Frames, Under 1 MB","isPartOf":{"@id":"https:\/\/www.xconvert.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif#primaryimage"},"image":{"@id":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif#primaryimage"},"thumbnailUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-72.png","datePublished":"2026-11-12T14:13:00+00:00","author":{"@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/3434db135e6a7f239ba8414244df9845"},"description":"Twitch animated emote rules from Twitch: square GIF, 112x112 to 4096, 1 MB auto-resize or 512 KB manual, and a 60-frame cap most guides miss.","breadcrumb":{"@id":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif#breadcrumb"},"inLanguage":"en-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif"]}]},{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif#primaryimage","url":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-72.png","contentUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-72.png","width":1600,"height":840,"caption":"The xconvert GIF compressor at \/compress-gif with the Upload button highlighted \u2014 resize and shrink a GIF into a Twitch animated emote"},{"@type":"BreadcrumbList","@id":"https:\/\/www.xconvert.com\/blog\/twitch-animated-emote-gif#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.xconvert.com\/blog"},{"@type":"ListItem","position":2,"name":"Twitch Animated Emotes: 112&#215;112, 60 Frames, Under 1 MB"}]},{"@type":"WebSite","@id":"https:\/\/www.xconvert.com\/blog\/#website","url":"https:\/\/www.xconvert.com\/blog\/","name":"XConvert Blog","description":"Blog for XConvert file converter","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.xconvert.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-CA"},{"@type":"Person","@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/3434db135e6a7f239ba8414244df9845","name":"James","image":{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/secure.gravatar.com\/avatar\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g","caption":"James"},"url":"https:\/\/www.xconvert.com\/blog\/author\/james"}]}},"_links":{"self":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/2182","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/comments?post=2182"}],"version-history":[{"count":1,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/2182\/revisions"}],"predecessor-version":[{"id":2183,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/2182\/revisions\/2183"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/media\/2179"}],"wp:attachment":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/media?parent=2182"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/categories?post=2182"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/tags?post=2182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}