The GitHub file size limit has several layers. Git warns above 50 MiB and GitHub blocks files above 100 MiB; the web upload stops at 25 MiB; issue attachments stop at 10 MB for images and GIFs. Here is each cap with its source, and the Smol setting that stays under it.
| What you are adding | The limit you hit | The Smol setting |
|---|---|---|
| README screenshot or banner (PNG, JPG) | No hard cap, but every committed version stays in history | Compress, same format or WebP, quality 75, maximum dimension 1600 to match the display width |
| Demo GIF | 10 MB for images and GIFs attached to issues and comments | Record the demo as video and compress it (MP4, H.264); Smol cannot convert an animated GIF |
| Screen recording for a bug report | 10 MB on a free plan, 100 MB on a paid plan | Compress video, MP4, H.264, “Web” quality, reduce resolution, remove audio |
| Binary, dataset or large asset | 50 MiB warning, 100 MiB block, 25 MiB in the browser | Shrink with Compress, or move it to Git LFS |
What is the GitHub file size limit?
GitHub blocks any file over 100 MiB and warns above 50 MiB. Uploading through the browser caps a file at 25 MiB, and attachments to issues and comments have their own, smaller caps. Each number below comes from GitHub’s documentation, read 11 October 2026.
| Where | Limit | Source |
|---|---|---|
| File in a git push | Warning above 50 MiB; blocked above 100 MiB | About large files |
| File added in the browser | 25 MiB | About large files |
| Whole repository | Ideally under 1 GB; under 5 GB strongly recommended | About large files |
| Image or GIF attached to an issue or comment | 10 MB | Attaching files |
| Video attached to an issue or comment | 10 MB on a free plan; 100 MB on a paid plan | Attaching files |
| Other attached files | 25 MB | Attaching files |
| Git LFS, per file | Free and Pro 2 GB; Team 4 GB; Enterprise Cloud 5 GB | About Git LFS |
Note the units. The push limits are written in MiB (1,048,576 bytes) and the attachment limits in MB, as GitHub prints them. A 100 MiB file is about 104.9 million bytes, so a tool that reports in decimal megabytes will show a larger number for the same file.
What is the GitHub 100 MB limit, and what does it cover?
The 100 MiB block applies to each file, not the repository total. Hitting it means a single file is too large; Git LFS is GitHub’s route for anything bigger, with per-file caps from 2 GB to 5 GB depending on plan.
A README rarely comes near the GitHub file size limit, and the real cost is quieter. Say a 3 MB PNG hero is committed in four versions: that is 12 MB of history that every clone downloads. If the file is an image, the fix is cheaper than LFS: make it smaller before it is committed. If it is a data file or a build artifact, compression will not help; keep it out of the repo or use LFS.
How do images affect repo size, and can deleting them fix it?
Images affect repo size permanently, because git keeps every committed version. Deleting a file in a new commit does not shrink the clone; only rewriting history does. Compress first, commit once.
We measured this in our git commit guide. In a test repository, three PNG hero exports took the pack to 8.34 MiB; deleting the PNG and adding a WebP took it to 8.51 MiB, slightly larger. Rewriting history with git-filter-repo brought it to 173.49 KiB, but every remaining commit hash changed and everyone had to re-clone. That is why shrinking images before the commit beats cleaning up after it. The web developer image guide covers the same habit for site assets, and documentation screenshots applies it to docs.
Which Smol settings keep README images and GIFs small?
Resize to the width the README displays, then set quality. A 3200 px Retina capture shown in a column a fraction of that wide carries pixels nobody sees. The quality numbers below are starting points we chose, not measured thresholds; check every output.
| Asset | Operation and format | Quality or preset | Maximum dimension |
|---|---|---|---|
| UI screenshot | Compress, PNG (same format) | 75 as a start; check text edges | 1600 |
| Photo or banner | Compress, JPG or WebP | 75 | 1600 |
| Diagram with flat colors | Compress, PNG or WebP | 75; look for banding | 1600 |
| Demo clip (instead of a GIF) | Compress video, MP4, H.264 | “Web” (CRF 28), audio removed; check the size | Reduce resolution |
| Bug-report screen recording | Compress video, MP4, H.264 | “Web” (CRF 28), audio removed | Reduce resolution |
| PDF spec or paper | Compress PDF | Small | Preset is a pixel cap |
Smol has no lossless image mode: it always re-encodes. If you need pixel-identical PNGs, use the ImageOptim head-to-head to decide. Smol’s own figure was 69.2% smaller PNGs at default quality 75, from 24 small test photos; see the benchmark for conditions. Flat UI screenshots behave differently from photos, so measure your own.
How do I shrink README media before I commit?
Collect the assets outside the repo
Put new screenshots, GIFs and clips in a scratch folder. Originals stay untouched by default.
Drag the folder into Smol
Mixed batches work, so images and a clip can go in together.
Set size and quality from the table above
Maximum dimension 1600 for images, quality 75, then run the batch.
Check the largest output
Smol sets quality and pixels, not bytes, so confirm each file is under the cap it needs to meet.
Copy the _compressed files into the repo
Commit those, and reference them with a relative path.
GitHub’s formatting guide says to use relative links instead of absolute links for images in your repository. Compress the file you link, not a copy elsewhere. A Finder Quick Action makes it a right click.
What is a good GitHub README GIF size?
Keep a README GIF under 10 MB if it will ever be attached to an issue, since that is the documented image and GIF cap, and aim far lower for README load time. GitHub publishes no ideal README GIF size in the pages above.
GIF is an inefficient format for motion. Smol cannot convert an animated GIF, so record the demo as video and compress that, or use the method in our GIF to MP4 guide. GitHub lists MP4, MOV and WebM as supported, and says codec support is browser specific with H.264 recommended for greatest compatibility. So choose MP4 with H.264, not H.265, for anything you share. See H.265 vs H.264 for the trade-off.
How do I attach a video to a GitHub issue?
Drag an MP4, MOV or WebM into the comment box. The file must be 10 MB or less on a free plan or 100 MB on a paid plan, per GitHub’s attaching files page.
A screen recording of a bug is usually long and sharp. In Smol, choose MP4 with H.264, the Web quality label, drop the resolution, and remove the audio unless the bug is audible. Then check the size. Our screen recording guide has the details, and the screen recordings for support page covers sharing them. Smol cannot target a byte count for video, so if the clip is still over, trim it or lower the quality again.
What do maintainers use today, and how do they compare?
| Option | Cost | Good for | Limit |
|---|---|---|---|
| macOS Preview export / sips | Free, built in | Quick resize of a few images | Little control over quality; see the sips guide |
| Git LFS | Included with plan limits | Files that must stay large | Plan limits apply; it does not make files smaller |
| Pre-commit hook or CI check | Free | Enforcing a byte budget | Rejects, does not shrink |
| Online compressors | Free tiers | One-off public images | Files leave your machine |
| Smol | $29 once | Batches of images, GIFs, video and PDFs on a Mac | Mac only; not a CI tool |
The sips command is the free built-in route. For a Linux CI step, use an image library in the build or the Smol API.
When is Smol the wrong tool?
- You need pixel-identical PNGs. Smol has no lossless mode; ImageOptim is the answer there.
- Your repo builds on Linux CI and images must be optimized in the pipeline. Smol is a Mac app.
- The file is a binary, dataset or archive over 100 MiB. Image compression does not apply; use Git LFS.
- You need SVG. Smol does not write or optimize SVG.
- The bloat is already in history. Compressing now does not shrink existing clones; that takes a history rewrite.
Do you have a team?
Solo is $29 once for one Mac. Team is $49 once for three Macs, and Enterprise is $20 a seat for 5 to 500 seats. Presets live on each Mac, so write your README settings down in CONTRIBUTING and recreate them. See pricing.
Frequently asked questions
What is the GitHub file size limit?
GitHub blocks files larger than 100 MiB and warns above 50 MiB. Files added through the browser can be no larger than 25 MiB. Issue and comment attachments allow 10 MB for images and GIFs, and 25 MB for other files. For bigger files, GitHub points to Git LFS. All figures come from GitHub’s own documentation.
What is the GitHub 100 MB limit and how do I get around it?
It is a per-file block: GitHub rejects any file over 100 MiB in a push. If the file is an image, recompress or resize it before committing. If it is a binary or dataset, use Git LFS, which allows 2 GB per file on Free and Pro plans, 4 GB on Team and 5 GB on Enterprise Cloud.
How big can a GIF in a GitHub README be?
GitHub publishes 10 MB as the cap for images and GIFs attached to issues and comments, and gives no separate README GIF size. For speed, keep README GIFs far smaller. Converting a GIF to MP4 or reducing its dimensions usually helps. Check the output size after every change, because Smol sets quality and pixels, not bytes.
How do I attach a video to a GitHub issue?
Drag the video into the comment box. GitHub supports MP4, MOV and WebM, up to 10 MB on a free plan or 100 MB on a paid plan. It recommends H.264 for the widest browser compatibility. In Smol, choose MP4, H.264, the Web quality label, a lower resolution and no audio, then check the size.
Do images in a repo make it bigger forever?
Yes. Git stores every committed version, so deleting an image later does not shrink clones. In our test repo, replacing PNGs with a WebP left the pack at 8.51 MiB, up from 8.34 MiB. Only a history rewrite with git-filter-repo removed the bytes, and it changed every remaining commit hash. Compress before committing.
Does Smol upload my screenshots?
No. Smol runs on your Mac with no account and no server, so unreleased UI, customer data in a screenshot or an embargoed feature never leaves your machine. It writes a compressed copy beside the original by default and leaves the original untouched. It is $29 once for one Mac.
Keep reading
Smol for other teams
