Animated GIFs are still the right format for two things in 2026: README hero clips and chat-thread micro-demos. Slack, Discord, GitHub, Notion, and Linear all autoplay them inline, no player chrome, no permission prompt. The catch is that converting a screen recording to a good GIF is non-trivial: most online converters output 256-color washes with seasick dithering, and most desktop tools want you to learn ffmpeg first. Here's a 2026-current workflow that produces a clean, well-paletted GIF in Chrome — without ever uploading the file.
The two-pass approach that makes GIFs look decent
The reason free converters look bad is that they skip a step. A GIF is limited to 256 colors per frame, and naïvely picking those colors produces banding and color-shift. The fix has been the same since 2015: a two-pass encode that first generates an optimized palette for the specific clip, then renders the GIF using that palette.
In ffmpeg, the incantation is:
ffmpeg -i in.mp4 -vf "palettegen=stats_mode=diff" palette.png
ffmpeg -i in.mp4 -i palette.png -lavfi "paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle" out.gif
The palettegen=stats_mode=diff pass weights the palette toward pixels that change between frames (the cursor, the highlighted button) rather than static pixels (the editor background). The paletteuse pass with dither=bayer produces a structured dither pattern that compresses far better than the default sierra2_4a dither — about 30% smaller files, often visually indistinguishable.
You don't have to type any of this. ClearRec's built-in editor runs exactly this pipeline via ffmpeg.wasm — the same WebAssembly build of ffmpeg, executed inside your browser tab.
The whole workflow, in Chrome, in 60 seconds
- Install ClearRec from the Chrome Web Store. Pin it.
- Click the icon → pick Screen → optionally turn off microphone (GIFs are silent) → Start Recording.
- Record what you want to demonstrate. Aim for under 15 seconds — every additional second of GIF is roughly an additional 1-2 MB at 720p.
- Click Stop. The trimmer opens in a new tab with your clip ready to scrub.
- Drag the in/out handles to trim to the part that matters. Use
[and]to nudge frame-by-frame. - In the Format selector, switch from
MP4toGIF. - Optional but recommended: crop with the aspect-locked crop tool. A 720×480 GIF weighs roughly a third of a 1280×720 GIF at the same length.
- Click Export GIF. First export warms ffmpeg.wasm (~4 sec); subsequent exports start immediately.
- The GIF lands in your Downloads folder. Drag it into Slack / GitHub / Notion.
That's the whole loop. No round-trip to a converter site, no waiting for an upload, no scrubbing metadata.
Sensible defaults for "I just want a good GIF"
The trade-offs that matter:
| Setting | Recommended for ≤15s screen clips | Why |
|---|---|---|
| Frame rate | 15 fps | UI motion reads fine at 15; 30 fps doubles file size for no gain. |
| Resolution | 720p or 1080p | Larger sizes balloon quickly; 720p reads cleanly inline. |
| Dither | Bayer (scale 5) | Structured, GIF-friendly, ~30% smaller than default. |
| Palette stats mode | diff | Weights toward moving pixels — usually what you're demonstrating. |
| Loop | Infinite (0) | Default behavior; most chat apps assume this. |
| Length | Under 15 sec | Discord auto-stops GIF playback after ~15s; longer = wasted bytes. |
Concrete numbers from the trimmer:
- A 6-second, 720p, 15 fps GIF from a recent product demo: 1.4 MB.
- A 12-second, 1080p, 15 fps GIF of the same content: 4.8 MB.
- The same 12-second clip as an MP4 at 1080p / 30 fps: 310 KB.
If file size matters and the receiving channel supports MP4 inline (Slack, Discord, Notion, GitHub PRs), send the MP4. Use GIF only where MP4 won't autoplay — which in 2026 is mostly READMEs on GitHub.com (yes, GitHub does support MP4 in issue comments, but not in README files).
Common GIF problems, and the actual fix
Q: The cursor leaves a trail / smears across frames.
That's chroma dithering on a moving mouse cursor. Switch dither from sierra2_4a to bayer (or none for crispest pixels at the cost of a slightly larger file).
Q: The GIF is twice as big as the MP4. Did I do something wrong? No, GIFs are just bigger than MP4 for video content. That's the format. If size matters, send MP4 instead.
Q: The text in my screen recording looks fuzzy as a GIF. GIF can't do sub-pixel antialiasing. Crop tighter, lower the resolution by half, and let the receiving app's pixel-doubling do the upscaling. Counter-intuitive but it reads sharper at small inline sizes.
Q: It's 60 fps and ffmpeg is slow. The two-pass palette pipeline scales linearly with frame count. Re-record at 15 or 30 fps from the launcher's quality picker.
Why we run ffmpeg in your browser
Every other "MP4 to GIF" Chrome extension I've audited works the same way: upload your video to a third-party server, wait for them to convert it, download the result. That's a terrible trade for a tool you'll use to capture sensitive screens (admin dashboards, internal Figma flows, customer support clips, security demos). ffmpeg.wasm compiles ffmpeg's C codebase to WebAssembly so the same conversion runs entirely client-side. It's the same binary every Linux server uses; it just runs in Chrome's V8 sandbox instead of on someone else's box.
If you want to verify, the ClearRec source is published — you can grep for any fetch( or XMLHttpRequest and see for yourself that there are none in the editor module.
See also
- Quality tiers — six capture presets with their bitrate trade-offs.
- Privacy policy — the full data-flow breakdown.
- Best free Loom alternative comparison — when GIF isn't the right answer.
If you've been pinging an online converter every time you need a 5-second GIF for a Slack thread, this is the kind of friction worth eliminating. Capture, trim, export — same tab, same minute, never leaves your laptop.