{"id":2004,"date":"2026-10-25T09:13:00","date_gmt":"2026-10-25T13:13:00","guid":{"rendered":"https:\/\/www.xconvert.com\/blog\/?p=2004"},"modified":"2026-08-31T23:06:32","modified_gmt":"2026-09-01T03:06:32","slug":"gif-for-github-readme","status":"publish","type":"post","link":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme","title":{"rendered":"GIF for a GitHub README: The 10 MB Limit and How to Stay Under"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The CLI works, the README is written, and the only thing left is the demo. You record 40 seconds of your tool running full-screen on a retina display, convert it to a GIF, and get back a 68 MB file GitHub will not take. Then you find three different size limits in GitHub\u2019s docs and no two blog posts agree on which applies. Here is the answer, straight from GitHub\u2019s documentation \u2014 plus why a GIF is so much larger than the video it came from, and how to land under the cap without the demo turning into a slideshow.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><strong>Quick answer:<\/strong> GitHub\u2019s documented cap for <strong>attached images and gifs is 10 MB<\/strong> \u2014 that is the limit you hit when you drag a GIF into an issue, a pull request, or the README editor. A GIF you <strong>commit to the repository<\/strong> is governed by different numbers: 25 MiB through the browser uploader, a Git warning at 50 MiB, and a hard block at 100 MiB. Aim well under 10 MB regardless: record a single window rather than a full screen, keep the demo to roughly 10\u201315 seconds, and export at 10 FPS. If it is still too big, set an explicit target with <strong>Max file size \u2192 Custom size value<\/strong> on the <a href=\"https:\/\/www.xconvert.com\/convert-mp4-to-gif\">MP4 to GIF converter<\/a>.<\/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=\"#limits\">Which GitHub limit actually applies<\/a><\/li><li><a href=\"#inflation\">Why the GIF is far bigger than the recording<\/a><\/li><li><a href=\"#record\">Record it small before you compress it<\/a><\/li><li><a href=\"#tool\">Convert a screen recording to a GIF under 10 MB<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"limits\">Which GitHub limit actually applies<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">There is no single \u201cGitHub GIF limit.\u201d There are several, and which one binds depends on how the file gets onto GitHub. These all come from GitHub\u2019s own documentation, including the mixed units \u2014 GitHub writes attachment limits in MB and repository limits in MiB.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>How the file gets there<\/th><th>Limit<\/th><th>What it covers<\/th><\/tr><\/thead><tbody><tr><td>Dragged into an issue, PR or comment box<\/td><td><strong>10 MB<\/strong><\/td><td>\u201cimages and gifs\u201d<\/td><\/tr><tr><td>Dragged in as a video (free plan)<\/td><td><strong>10 MB<\/strong><\/td><td><code>.mp4<\/code>, <code>.mov<\/code>, <code>.webm<\/code> on a user or org <strong>free<\/strong> plan<\/td><\/tr><tr><td>Dragged in as a video (paid plan)<\/td><td><strong>100 MB<\/strong><\/td><td>same file types on a <strong>paid<\/strong> plan<\/td><\/tr><tr><td>Any other attached file type<\/td><td><strong>25 MB<\/strong><\/td><td>PDFs, ZIPs, logs, etc.<\/td><\/tr><tr><td>Added to a repo through the browser<\/td><td><strong>25 MiB<\/strong><\/td><td>\u201cIf you add a file to a repository via a browser\u201d<\/td><\/tr><tr><td>Pushed to a repo with Git<\/td><td>Warning at <strong>50 MiB<\/strong>, blocked over <strong>100 MiB<\/strong><\/td><td>any file in the repository<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Two consequences most guides miss.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The 10 MB number is an <em>attachment<\/em> limit, not a README limit.<\/strong> If you <code>git add docs\/demo.gif<\/code> and reference it as <code>![demo](docs\/demo.gif)<\/code>, you are not attaching anything \u2014 the GIF is a repository file and the 50\/100 MiB thresholds apply. In practice almost everyone gets their GIF onto GitHub by dragging it into a comment box to obtain a hosted URL, which is exactly the path the 10 MB cap governs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Committing the GIF makes it permanent.<\/strong> Every clone pulls every version of that file ever committed. Replace a 9 MB demo GIF four times over a project\u2019s life and you have added roughly 36 MB to the clone size forever, because Git history keeps the old blobs. GitHub\u2019s guidance is explicit that repositories should \u201cremain small, ideally less than 1 GB.\u201d That, not the cap, is the real reason to be disciplined.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Worth knowing too: GitHub does not serve README images directly. It proxies them through <strong>Camo<\/strong>, which \u201cgenerates an anonymous URL proxy for each file which hides your browser details.\u201d Images from a private network, or from a server requiring authentication, cannot be displayed at all \u2014 which is why a demo GIF linked from your own staging box renders as broken for everyone else.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"477\" src=\"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/github-gif-limits.png\" alt=\"Three GitHub size limits side by side: 10 MB for attached images and GIFs, 25 MiB for files added to a repository through the browser, and 100 MiB as the hard block for files pushed with Git\" class=\"wp-image-2002\" srcset=\"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/github-gif-limits.png 1600w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/github-gif-limits-300x89.png 300w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/github-gif-limits-1024x305.png 1024w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/github-gif-limits-768x229.png 768w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/github-gif-limits-1536x458.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"inflation\">Why the GIF is far bigger than the recording<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Developers are consistently surprised that a 4 MB screen recording becomes a 40 MB GIF. It is not a conversion failure \u2014 it is what GIF is. Across <strong>all 73,688 GIF-output jobs run on xconvert in a 30-day window<\/strong>, an MP4 converted to GIF came out at <strong>4.9\u00d7 the size of the source video at the median<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Three properties of the format explain it:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>No modern interframe compression.<\/strong> H.264 stores one keyframe and describes subsequent frames as motion vectors and small residuals against it. GIF has only one comparable trick \u2014 leaving unchanged pixels out of the next frame \u2014 and it collapses the moment anything moves. A terminal demo where one line changes compresses beautifully; a scrolling page or a cursor tracking over a busy background does not.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>256 colours, maximum.<\/strong> The GIF89a specification caps a colour table at 256 entries. Your recording is 24-bit, so every frame has to be quantised down. Fine for flat UI and terminal text; punishing for gradients and antialiased text over photographic backgrounds, where the encoder must either band the image or spend bytes on dithering.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Frame delays are stored in hundredths of a second.<\/strong> The spec\u2019s Delay Time field \u201cspecifies the number of hundredths (1\/100) of a second to wait before continuing.\u201d That makes 10 FPS exact \u2014 a delay of 10 \u2014 while 15 FPS is 6.67 hundredths and has to round. Nothing between 50 and 100 FPS is representable at all, and the 1-centisecond delay that would give you 100 FPS is replaced with 100 ms by both Chrome and Firefox \u2014 so 50 FPS is the real ceiling. There is no 60 FPS GIF.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a deeper walk through palettes, frame dropping and lossy LZW, see <a href=\"https:\/\/www.xconvert.com\/blog\/how-gif-optimization-works\/\">How GIF optimization actually works<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"record\">Record it small before you compress it<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The cheapest bytes are the ones you never record. A GIF\u2019s size is roughly <em>frames \u00d7 pixels per frame \u00d7 how much changes between them<\/em>, and you control all three at capture time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Record the window, not the screen.<\/strong> GitHub renders README content in a fixed-width column, so a 2560-pixel-wide capture is downscaled in the browser and you paid for every one of those pixels. Capture the terminal or app window at roughly the width it will be displayed at \u2014 halving both dimensions cuts pixels per frame to a quarter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Keep it to 10\u201315 seconds.<\/strong> Frame count is linear in duration: at 10 FPS, a 12-second demo is 120 frames; a 40-second one is 400. If your recording is longer, cut the interesting slice out first \u2014 the <a href=\"https:\/\/www.xconvert.com\/video-cutter\">video cutter<\/a> does that, and the MP4-to-GIF page itself has no trim control.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Export at 10 FPS.<\/strong> It is the converter\u2019s default for a reason: it is an exact GIF delay value, smooth enough for UI motion, and a third of the frames of a 30 FPS capture. Dropping to 5 FPS saves less than you would expect and looks noticeably stuttery.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Avoid gratuitous motion and busy backgrounds.<\/strong> Do not drag windows, page rather than scroll, and turn off animated wallpapers in the captured region \u2014 every moving pixel is one GIF cannot skip. A terminal on a solid colour quantises to 256 colours almost losslessly; the same terminal over a photo wallpaper does not.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tool\">Convert a screen recording to a GIF under 10 MB<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once the recording is as tight as you can make it, the <a href=\"https:\/\/www.xconvert.com\/convert-mp4-to-gif\">MP4 to GIF converter<\/a> can hit a hard size target for you instead of making you guess at quality settings.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Open <a href=\"https:\/\/www.xconvert.com\/convert-mp4-to-gif\">xconvert.com\/convert-mp4-to-gif<\/a> and click <strong>Upload<\/strong> \u2014 or drag the file onto the page. <strong>From my Computer<\/strong>, <strong>From Google Drive<\/strong> and <strong>From Dropbox<\/strong> are all available, and batch upload is supported if you have several demos.<\/li><li>Open <strong>Advanced Options<\/strong> (the gear icon).<\/li><li>Under <strong>File Compression<\/strong>, switch from <strong>Quality preset<\/strong> to <strong>Max file size<\/strong>. Set the <strong>Size limit<\/strong> dropdown to <strong>Custom size value<\/strong>, then type <code>9<\/code> and leave the unit on <strong>MB<\/strong>. Nine leaves headroom under GitHub\u2019s 10 MB attachment cap. (The <strong>Discord (10 MB max)<\/strong> preset in the same dropdown is an absolute 10 MB cap and happens to match GitHub\u2019s number exactly, if you would rather not type one.)<\/li><li>Leave <strong>Framerate<\/strong> on <strong>10 FPS (Recommended)<\/strong> unless the demo has fast motion; the framerate group is separate from File Compression and is always visible.<\/li><li>Click <strong>Convert<\/strong>, then download. If you want to hand-tune instead, choose <strong>Custom<\/strong> in File Compression to expose <strong>Image quality (%)<\/strong>, <strong>Image resolution<\/strong> and <strong>Colors<\/strong> (palette size plus a dither toggle).<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Files upload over an encrypted connection, are processed on our servers, and are deleted automatically a few hours later. No sign-up and no watermark.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A note on expectations: the target is a best-effort search, not a guarantee. Asking a 60-second 1440p capture to land under 9 MB will get you something under 9 MB, but it gets there by dropping resolution and colours until it does. Trimming and downscaling first always looks better than asking the encoder to perform a rescue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n\n\n<h5 class=\"wp-block-heading\">What is GitHub\u2019s actual GIF size limit for a README?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">For a GIF <strong>attached<\/strong> through the web interface \u2014 the usual way people get a hosted URL \u2014 GitHub\u2019s documentation states a maximum of <strong>10 MB for images and gifs<\/strong>. For a GIF <strong>committed into the repository<\/strong> and referenced with a relative path, the attachment cap does not apply: the browser uploader allows up to 25 MiB, Git warns above 50 MiB, and GitHub blocks files over 100 MiB.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Should I use an MP4 instead of a GIF?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes, but check your plan first. GitHub lists <code>.mp4<\/code>, <code>.mov<\/code> and <code>.webm<\/code> among the media types supported in all contexts and recommends \u201cusing H.264 for greatest compatibility\u201d \u2014 but the video attachment cap on a user or organisation <strong>free<\/strong> plan is the same 10 MB. Only on a paid plan does it rise to 100 MB. So video buys you real headroom only if you are paying, and it costs you the thing a GIF gives you for free: silent, autoplaying, loop-forever motion that renders identically everywhere.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Why did my 5 MB screen recording turn into a 40 MB GIF?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Because GIF has no interframe compression worth the name and is limited to 256 colours per frame, so it stores much of each frame again rather than describing the difference. On xconvert\u2019s own production data \u2014 every GIF-output job over a 30-day window, 73,688 of them \u2014 MP4 to GIF came out at 4.9\u00d7 the source size at the median. Inflation is normal; the fix is fewer frames, fewer pixels and less motion, not a different converter. <a href=\"https:\/\/www.xconvert.com\/blog\/why-is-my-gif-file-so-big\/\">Why is my GIF file so big<\/a> goes through the arithmetic.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">My README GIF shows as a broken image. What went wrong?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">If it is hosted somewhere other than GitHub, the likely cause is GitHub\u2019s Camo proxy. GitHub documents that an image \u201cbeing served from a private network or from a server that requires authentication \u2026 can\u2019t be viewed by GitHub\u201d, and that unsupported content types also fail. Serving the GIF from the repository itself, or from an attachment URL GitHub gave you, sidesteps the whole class of problem. If the GIF changed but GitHub still shows the old one, that is Camo caching \u2014 GitHub\u2019s guidance is to check your <code>Cache-Control<\/code> headers.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Does a demo GIF in the repo slow down clones?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, permanently. Git keeps every version of every committed file, so each time you replace the demo the old blob stays in history and is downloaded by everyone who clones. GitHub recommends repositories \u201cremain small, ideally less than 1 GB.\u201d If you expect to iterate on the demo, host it as an attachment and reference the URL instead.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Can I get a sharp 30 FPS README GIF under 10 MB?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Only for a short, small, low-motion demo. Tripling the frame rate roughly triples the frame count, so a 30 FPS capture needs about a third the duration or a third the pixel area to fit the same budget. For a terminal demo the honest trade is 10 FPS at full readable size rather than 30 FPS at half size \u2014 legible text is what a README demo is for.<\/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:\/\/docs.github.com\/en\/get-started\/writing-on-github\/working-with-advanced-formatting\/attaching-files\">Attaching files \u2014 GitHub Docs<\/a> \u2014 \u201c10MB for images and gifs\u201d, 25 MB for other files, 10 MB \/ 100 MB video caps by plan, the supported media type list, and the H.264 recommendation.<\/li><li><a href=\"https:\/\/docs.github.com\/en\/repositories\/working-with-files\/managing-large-files\/about-large-files-on-github\">About large files on GitHub \u2014 GitHub Docs<\/a> \u2014 25 MiB browser upload, 50 MiB Git warning, 100 MiB hard block, and the \u201cideally less than 1 GB\u201d repository guidance.<\/li><li><a href=\"https:\/\/docs.github.com\/en\/authentication\/keeping-your-account-and-data-secure\/about-anonymized-urls\">About anonymized URLs \u2014 GitHub Docs<\/a> \u2014 the Camo image proxy, why private or authenticated hosts fail, and image cache behaviour.<\/li><li><a href=\"https:\/\/www.w3.org\/Graphics\/GIF\/spec-gif89a.txt\">GIF89a specification (W3C copy)<\/a> \u2014 the Graphic Control Extension Delay Time field measured in hundredths of a second, and the 256-entry colour table maximum.<\/li><li><a href=\"https:\/\/chromium.googlesource.com\/chromium\/src\/+\/main\/third_party\/blink\/renderer\/platform\/graphics\/deferred_image_decoder.cc\">Chromium <code>deferred_image_decoder.cc<\/code><\/a> and <a href=\"https:\/\/github.com\/mozilla\/gecko-dev\/blob\/master\/image\/FrameTimeout.h\">Gecko <code>image\/FrameTimeout.h<\/code><\/a> \u2014 both engines replace any frame duration of 10 ms or less with 100 ms, which is what puts the practical ceiling at 50 FPS.<\/li><li>xconvert production data, <code>GIF_EXACT_SIZE_DESIGN<\/code> analysis \u2014 all 73,688 GIF-output workflows over a 30-day window; MP4 to GIF inflates 4.9\u00d7 the source video size at the median.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>GitHub caps attached images and gifs at 10 MB. Which limit applies to a README GIF, why GIFs inflate 4.9x, and how to land a demo under the cap.<\/p>\n","protected":false},"author":3,"featured_media":2001,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,14],"tags":[],"class_list":["post-2004","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>GIF for a GitHub README: The 10 MB Limit and How to Stay Under<\/title>\n<meta name=\"description\" content=\"GitHub caps attached images and gifs at 10 MB. Which limit applies to a README GIF, why GIFs inflate 4.9x, and how to land a demo under the cap.\" \/>\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\/gif-for-github-readme\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GIF for a GitHub README: The 10 MB Limit and How to Stay Under\" \/>\n<meta property=\"og:description\" content=\"GitHub caps attached images and gifs at 10 MB. Which limit applies to a README GIF, why GIFs inflate 4.9x, and how to land a demo under the cap.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme\" \/>\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-10-25T13:13:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-36.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=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme\"},\"author\":{\"name\":\"James\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/3434db135e6a7f239ba8414244df9845\"},\"headline\":\"GIF for a GitHub README: The 10 MB Limit and How to Stay Under\",\"datePublished\":\"2026-10-25T13:13:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme\"},\"wordCount\":2059,\"image\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-36.png\",\"articleSection\":[\"How To Guides\",\"Tools\"],\"inLanguage\":\"en-CA\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme\",\"name\":\"GIF for a GitHub README: The 10 MB Limit and How to Stay Under\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-36.png\",\"datePublished\":\"2026-10-25T13:13:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/3434db135e6a7f239ba8414244df9845\"},\"description\":\"GitHub caps attached images and gifs at 10 MB. Which limit applies to a README GIF, why GIFs inflate 4.9x, and how to land a demo under the cap.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme#breadcrumb\"},\"inLanguage\":\"en-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme#primaryimage\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-36.png\",\"contentUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-36.png\",\"width\":1600,\"height\":840,\"caption\":\"The xconvert MP4 to GIF converter at \\\/convert-mp4-to-gif with the Upload button highlighted - turn a screen recording into a demo GIF under GitHub's 10 MB limit\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/gif-for-github-readme#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.xconvert.com\\\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GIF for a GitHub README: The 10 MB Limit and How to Stay Under\"}]},{\"@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":"GIF for a GitHub README: The 10 MB Limit and How to Stay Under","description":"GitHub caps attached images and gifs at 10 MB. Which limit applies to a README GIF, why GIFs inflate 4.9x, and how to land a demo under the cap.","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\/gif-for-github-readme","og_locale":"en_US","og_type":"article","og_title":"GIF for a GitHub README: The 10 MB Limit and How to Stay Under","og_description":"GitHub caps attached images and gifs at 10 MB. Which limit applies to a README GIF, why GIFs inflate 4.9x, and how to land a demo under the cap.","og_url":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme","og_site_name":"XConvert Blog","article_publisher":"https:\/\/www.facebook.com\/xconvertcom","article_published_time":"2026-10-25T13:13:00+00:00","og_image":[{"width":1600,"height":840,"url":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-36.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":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme#article","isPartOf":{"@id":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme"},"author":{"name":"James","@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/3434db135e6a7f239ba8414244df9845"},"headline":"GIF for a GitHub README: The 10 MB Limit and How to Stay Under","datePublished":"2026-10-25T13:13:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme"},"wordCount":2059,"image":{"@id":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme#primaryimage"},"thumbnailUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-36.png","articleSection":["How To Guides","Tools"],"inLanguage":"en-CA"},{"@type":"WebPage","@id":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme","url":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme","name":"GIF for a GitHub README: The 10 MB Limit and How to Stay Under","isPartOf":{"@id":"https:\/\/www.xconvert.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme#primaryimage"},"image":{"@id":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme#primaryimage"},"thumbnailUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-36.png","datePublished":"2026-10-25T13:13:00+00:00","author":{"@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/3434db135e6a7f239ba8414244df9845"},"description":"GitHub caps attached images and gifs at 10 MB. Which limit applies to a README GIF, why GIFs inflate 4.9x, and how to land a demo under the cap.","breadcrumb":{"@id":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme#breadcrumb"},"inLanguage":"en-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.xconvert.com\/blog\/gif-for-github-readme"]}]},{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme#primaryimage","url":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-36.png","contentUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-36.png","width":1600,"height":840,"caption":"The xconvert MP4 to GIF converter at \/convert-mp4-to-gif with the Upload button highlighted - turn a screen recording into a demo GIF under GitHub's 10 MB limit"},{"@type":"BreadcrumbList","@id":"https:\/\/www.xconvert.com\/blog\/gif-for-github-readme#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.xconvert.com\/blog"},{"@type":"ListItem","position":2,"name":"GIF for a GitHub README: The 10 MB Limit and How to Stay Under"}]},{"@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\/2004","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=2004"}],"version-history":[{"count":1,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/2004\/revisions"}],"predecessor-version":[{"id":2005,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/2004\/revisions\/2005"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/media\/2001"}],"wp:attachment":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/media?parent=2004"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/categories?post=2004"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/tags?post=2004"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}