Video to GIF converter — screen recordings for READMEs and PRs
Free · no sign-up · runs in your browser
Turn a screen recording or any MP4, MOV or WebM clip into a looping GIF sized for a README, a pull request or a docs page. Pick the start, end, frame rate and width; everything runs in your browser and nothing is uploaded.
MP4, MOV or WebM — whatever your browser can play. Nothing is uploaded.
Seconds from the start of the video.
Never wider than the video itself.
GIF
Your GIF will appear here.
The video is decoded and the GIF is written in this page. Nothing is uploaded — check your network tab.
A GIF is still the one moving image that renders everywhere a developer writes: GitHub READMEs, pull request descriptions, issue comments, npm pages and most docs sites. Most converters want the clip uploaded first. This one reads the video in the page, grabs the frames with the browser's own decoder and writes the GIF in JavaScript, so a recording of unreleased work never leaves your machine.
How it works
- 01Pick a video. The browser reads its length and size locally and shows a preview so you can find the part you want.
- 02Set the start and end in seconds. Each frame in that range is reached by seeking the video, drawn into a canvas at the width you chose and read back as pixels.
- 03One palette of up to 255 colours is built from all the frames together, so colours do not flicker from one frame to the next — the usual tell of a cheap GIF.
- 04After the first frame, only the rectangle that changed is written, and unchanged pixels inside it are left transparent. A cursor moving over a still window costs a few hundred bytes a frame instead of a full image.
- 05Frames that are identical to the one before are merged into one longer frame, so pauses in a recording add almost nothing to the file.
- 06The result loops forever, previews in the page and downloads as a .gif named after your video.
Use cases
- Showing a new feature in a pull request description without asking reviewers to download a video.
- Adding a short demo to the top of a GitHub README.
- Recording a bug reproduction for an issue.
- Embedding a looping product clip in docs or a changelog.
- Turning a simulator recording into something a chat app previews inline.
- Converting a clip you would rather not upload to a third-party server.
Frequently asked questions
How do I make a GIF for a GitHub README?
Record the screen (Cmd+Shift+5 on macOS, Win+Alt+R on Windows, or the simulator's own recorder), open the file here, trim it to the few seconds that matter, keep the width at 640–800px and 10 fps, and download the GIF. Commit it to the repository (or drag it into an issue to get a hosted URL) and reference it with standard Markdown image syntax.
Why is my GIF so large?
GIF stores every changed pixel with an old compression method, so size grows with width × height × frames. Halving the width cuts the size by roughly four; dropping from 15 to 10 fps cuts it by a third. Screen recordings compress well here because only changed areas are written; camera footage, where every pixel changes, does not, and is better shared as MP4.
What is the GitHub file size limit for GIFs?
GitHub accepts images and GIFs up to 10 MB when you attach them to issues, pull requests and comments. Files committed to a repository can be larger, but a README GIF over a few megabytes loads slowly for everyone who opens the repo, so aim for 1–5 MB.
Should I use GIF or MP4?
MP4 is far smaller and looks better, and GitHub now plays MP4 attachments inline in issues and pull requests. GIF still wins where video is not rendered: README files on npm, many docs generators, some chat apps and email. If the destination plays video, use the video compressor instead; if it only shows images, use a GIF.
Is my video uploaded?
No. The video is decoded by your browser's <video> element, frames are read from a canvas and the GIF is assembled in JavaScript in this page. There is no server step, which you can check in your browser's network tab.
Is there a length limit?
A single GIF holds at most 600 frames — a minute at 10 fps — because every frame is kept in memory until the palette is built. Longer selections are cut at that point and the page says so. A GIF that long is rarely what you want anyway; a short MP4 is a better fit.
Related reading
- Developer ToolsHow to Add a GIF or Video to a GitHub README and Pull Request (2026)Record your screen, turn it into a GIF or a small MP4, and embed it in a GitHub README, issue or pull request. Size limits, formats and the free browser tools to do it.
- Developer Tools13 Free Developer Tools, No Sign-Up RequiredThirteen free online developer tools that run in your browser with no account and no upload: color, SEO, conversion, and formatting utilities that just work.
More tools
Tailwind CSS color palette generator
Turn one hex code into a full Tailwind color scale — 11 OKLCH-tuned shades from 50 to 950, with contrast ratios, ready to paste into Tailwind v4's @theme block or a v3 config. Free, no sign-up, runs in your browser.
CSS clamp() calculator for fluid typography
Generate a responsive CSS clamp() font size from a minimum and maximum size and the viewport range they should grow across — with the slope and intercept shown, a live preview, and the rendered size at every common screen width. Free, no sign-up.
SVG to JSX converter for React components
Paste an SVG and get a React component back — attributes camelCased, class turned into className, style strings converted to objects, xmlns removed, with optional currentColor, a size prop and TypeScript output. Runs entirely in your browser; nothing is uploaded.
Meta tag generator with Google SERP preview
Fill in a title, description, canonical and Open Graph image and get the complete <head> snippet — with a live Google result preview that measures your title and description in pixels, not characters, so you can see exactly where they will be cut.
Favicon generator — .ico, PNG set and manifest
Turn a PNG or SVG, or just a couple of letters, into the full favicon set: 16, 32, 48, 180, 192 and 512 PNGs, a real multi-size favicon.ico, a web app manifest and the <head> tags. Everything runs in your browser — nothing is uploaded.
JSON-LD schema generator and validator
Build valid JSON-LD structured data for Article, FAQPage, Product, Organization and BreadcrumbList from a form, or paste existing markup to have it pretty-printed and checked for the mistakes that stop a rich result appearing. Free, runs in your browser.
robots.txt generator with validation
Build a robots.txt from user-agent groups, allow and disallow rules, crawl-delay and sitemap URLs — with presets for allowing everything, blocking AI crawlers, or locking down a staging site, and warnings for the mistakes that quietly block your whole site.
UTM link builder and campaign URL generator
Build correctly encoded UTM tracking links from a URL and your source, medium and campaign — with the existing query string and fragment preserved, values properly percent-encoded, and warnings for the capitalisation and spacing that split one campaign across several rows in an analytics report.
Colour contrast checker with WCAG suggestions
Check any two colours against WCAG 2 — normal text, large text and UI components — see the ratio and live samples, and get the nearest passing colour when a pair fails, adjusted in OKLCH so the hue stays yours. Free, runs in your browser.
Image converter — WebP, AVIF, JPEG and PNG
Convert and resize images to WebP, AVIF, JPEG or PNG at the quality you choose, see exactly how many bytes each one saved, and download them one at a time or as a zip. Everything happens in your browser — no image is uploaded.
JSON formatter and validator — free, in your browser
Format, minify and validate JSON in your browser. Broken documents get the exact line and column of the error. Nothing is uploaded, and there is no size limit but your machine.
JSON to TypeScript — generate interfaces from a payload
Paste a JSON payload and get TypeScript interfaces: merged array shapes, optional properties, and real unions instead of any. Runs in your browser — nothing is uploaded.
OG image generator — free 1200×630 social cards
Generate an Open Graph image for any page: type a title, pick a theme, download a 1200×630 PNG. Runs entirely in your browser — no account, no upload, no watermark.
AI text cleaner — remove em dashes and hidden characters
Clean AI-written text in your browser — strip invisible characters, replace em dashes and curly quotes, and flag stock chatbot phrases. Nothing is uploaded.
Remove EXIF data from photos — image metadata remover
Strip EXIF, GPS location and other hidden metadata from JPEG, PNG and WebP images without re-encoding — see what each file carries first. Nothing is uploaded.
App icon generator — iOS, Android and Expo icon sizes in one zip
Turn one 1024px image into every iOS, Android and Expo app icon — an Xcode appiconset, mipmap launcher PNGs and an adaptive icon, zipped in your browser.
Privacy policy generator for apps, with terms of use
Generate a privacy policy and terms of use for your app in Markdown — tick what it collects, from analytics and ads to AI, plus GDPR, CCPA and COPPA sections.
Video compressor — fit a screen recording under 10 MB for GitHub
Compress a screen recording or any video to fit GitHub's 10 MB attachment limit, Discord's free upload limit or an email attachment. Choose the size, the resolution and whether to keep the audio; it runs in your browser and nothing is uploaded.
Compress an image to a target size — under 100 KB, 500 KB or 1 MB
Compress JPEG, PNG or WebP images to fit under an exact size like 100 KB, 200 KB or 1 MB. The tool searches for the highest quality that fits, shrinks the image only if it has to, and runs entirely in your browser.
App Store screenshot resizer — exact sizes for App Store Connect and Google Play
Resize simulator or device screenshots to the exact pixel sizes App Store Connect and Google Play accept: iPhone 6.9″ (1320 × 2868), iPad 13″ (2064 × 2752), Play phone and tablet sizes and the feature graphic. Crop or pad, batch download as a zip, all in your browser.