Why GIFs beat video for developer workflows

A GIF plays inline everywhere — Slack, GitHub PRs, Notion docs, email. No video player needed, no clicking play, no buffering. When you're filing a bug report or documenting a UI interaction, a 3-second GIF communicates the problem faster than a paragraph of text or a 30-second screen recording that nobody watches.

The problem: macOS can't record GIFs. Cmd+Shift+5 records MOV files. You need a conversion step or a different tool.

Method 1: Record a MOV, then convert to GIF with ffmpeg

This is the free, zero-app approach. Record your screen with the built-in macOS screen recorder, then convert the output file using ffmpeg in Terminal.

First, record your screen: press Cmd+Shift+5, select a region, click Record, then click the stop button in the menu bar when you're done.

Then install ffmpeg if you don't have it:

brew install ffmpeg

Convert the MOV to a GIF:

ffmpeg -i recording.mov -vf "fps=12,scale=640:-1:flags=lanczos" -loop 0 output.gif

The key flags: fps=12 keeps the frame rate low enough for a small file size. scale=640:-1 resizes to 640px wide (proportional height). These two settings are the difference between a 500 KB GIF and a 15 MB one.

For higher quality with a color palette optimization pass:

ffmpeg -i recording.mov -vf "fps=12,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif

Method 2: Use Gifski for drag-and-drop conversion

If Terminal isn't your thing, Gifski is a free Mac app that converts video files to high-quality GIFs. Drag a MOV file onto the app, adjust the frame rate and size, and export. It uses the same pngquant engine under the hood, so quality is excellent.

The workflow: record with Cmd+Shift+5, open the MOV in Gifski, trim if needed, export. Two steps instead of one, but no Terminal required.

Method 3: Record directly as GIF with Kap

Kap is a free, open-source screen recorder built specifically for GIF output on Mac. It sits in your menu bar, lets you select a recording region, and exports directly to GIF, MP4, WebM, or APNG.

The advantage over the record-then-convert workflow: you skip the MOV intermediate step. Kap also lets you trim the recording before export, adjust frame rate, and set the output size — all in a minimal interface.

Install via Homebrew:

brew install --cask kap

Or download it from the Kap website. Click the menu bar icon, drag to select a region, hit record, hit stop, and choose GIF as your export format.

Method 4: LICEcap for the simplest workflow

LICEcap is the oldest and simplest GIF recorder for Mac. It's a single window that you position over what you want to record. Hit record, choose a save location, and it writes a GIF file directly. No conversion, no export menu, no settings to configure.

The tradeoff: LICEcap's interface looks dated and the output quality isn't as good as Kap or ffmpeg. But if you just need a quick GIF for a Slack message and don't care about polish, it's the fastest path from recording to file.

Method 5: CleanShot X and Gifox (paid options)

If you already use CleanShot X for screenshots, it includes GIF recording built in. Select a region, record, and it saves directly as GIF with options for frame rate and max size. It's part of the $29 license you already have.

Gifox is another paid option ($15) that focuses specifically on GIF recording. It offers window-specific recording, adjustable frame rate, and automatic file size optimization. If GIF recording is something you do daily, Gifox's workflow is hard to beat.

Keeping your GIF files small

GIFs get big fast. A 10-second recording at Retina resolution can easily hit 20 MB, which defeats the purpose of using a GIF instead of video. Follow these rules to keep file sizes under control:

Setting Recommended value Why
Frame rate 10–15 fps GIFs don't need 30 fps — the eye can follow UI interactions at 12 fps
Width 480–640 px Retina-width GIFs are 4x the file size with no visible benefit in Slack or GitHub
Duration Under 5 seconds Trim to just the interaction — before and after dead time adds file size for nothing
Colors 128 or 256 GIF supports max 256 colors per frame — reducing to 128 saves ~20% file size

Quick comparison of GIF recording methods

Method Cost Direct GIF? Best for
ffmpeg (Terminal) Free No (convert MOV) Developers comfortable with CLI, scripting/automation
Gifski Free No (convert MOV) Best quality conversion without Terminal
Kap Free Yes Daily GIF recording with a clean UI
LICEcap Free Yes Quick and dirty — fastest path to a GIF file
CleanShot X $29 Yes All-in-one screenshot + GIF tool
Gifox $15 Yes Dedicated GIF recording with the best workflow

Automating GIF creation from Terminal

If you record GIFs frequently for bug reports or documentation, you can script the entire workflow. Here's a shell function that records a screen region and outputs a GIF in one step:

# Add to your .zshrc or .bashrc
gif-record() {
  local output="${1:-recording.gif}"
  local tmpfile="/tmp/screenrecord-$$.mov"
  echo "Recording... Press Ctrl+C to stop."
  screencapture -v -R 0,0,800,600 "$tmpfile"
  ffmpeg -i "$tmpfile" -vf "fps=12,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 "$output"
  rm "$tmpfile"
  echo "Saved: $output ($(du -h "$output" | cut -f1))"
}

Run gif-record my-bug.gif and you get a single command that records, converts, and cleans up the temporary file.

When to use GIF vs. video vs. screenshot

GIFs are ideal for short UI interactions: hover states, animation bugs, a quick walkthrough of a 3-step flow. For anything over 10 seconds, use a video — the file size advantage of GIF disappears at longer durations. For a static bug or layout issue, a single annotated screenshot is still the best option — it's smaller, sharper, and easier to reference in a ticket.

The best workflow combines all three: screenshots for static issues, GIFs for short interactions, and video for full walkthroughs. The trick is making each format fast enough that you actually use the right one instead of defaulting to whatever is easiest.

Screenshots are half the equation. LazyScreenshots captures, annotates, and auto-pastes into any app — so the screenshot part of your workflow takes zero friction. $29 one-time.

Try LazyScreenshots — $29 one-time