What the GIFvideo → gif, the way creatives need it
// field guide

How to Make Bug Report GIFs That Actually Show the Repro

A short looping GIF autoplays right inside the issue, weighs less than your last logo PNG, and shows the steps instead of just the wreckage. Here's how to make one in about two minutes.

A screen-recording GIF inside a bug-tracker ticket.

You know the ticket. "Button doesn't work." One blurry screenshot of the aftermath. Zero repro steps. The engineer spends twenty minutes trying to reproduce a bug they can't see, then closes it "cannot reproduce," and three weeks later it's back in the backlog wearing a different hat. A short looping GIF ends that cycle. It plays the crime, not just the chalk outline.

Why a GIF beats a video link

A video link is a tax. The reader has to click out of the issue, wait for a player to spin up, maybe hit a login wall on whatever cloud drive you parked it in, and then it's gone the day someone "cleans up" the shared folder. A GIF embedded in the issue body autoplays inline, loops forever, needs no account, and travels with the ticket wherever it goes. Nobody has ever clicked a video link and thought "ah, delightful." They watch a GIF without even deciding to.

GitHub, GitLab, Linear, and Jira all render an animated GIF directly in the description and in comments. Drop it in, it plays. No embed code, no oEmbed roulette, no "this video is private" surprise for the contractor three timezones over who's actually free to look at it right now.

Why a GIF beats a screenshot

A screenshot shows a state. A bug is a sequence. "I clicked Save, the spinner ran, then the row vanished" is three frames a still image will never carry. The GIF is the repro steps, performed, in order, on a loop, so the engineer watches your exact path instead of guessing at it. That's the difference between a P3 that lingers and a P3 that gets fixed before standup.

It also kills the back-and-forth. No "can you tell me which browser / what you clicked first / does it happen every time" thread that burns a day per round-trip. The reviewer sees the order of operations and the failure in one loop, and replies with a fix instead of a question.

The two-minute workflow

  1. Record the repro. Mac: QuickTime Player (File ▸ New Screen Recording) or press Shift-Command-5. Windows: the Xbox Game Bar (Win-G) or any OBS scene. Capture a little lead-in and the moment it breaks, and keep going one beat past the failure so the bug is unmistakable. Don't start the recording mid-disaster.
  2. Convert it. Open What the GIF and drop the clip in. The whole conversion runs inside your browser tab, nothing is uploaded to a server, which matters more than you think for the section below.
  3. Crop to the UI region that's broken. Nobody needs your menu bar, your second monitor, or the tab where you were reading Hacker News. Crop tight to the component. Lock a ratio if the panel suits one (1:1 for a modal, 4:3 for a form) so the output never squashes the proportions and your buttons don't end up looking stretched.
  4. Trim to just the repro. This is where most bug GIFs go wrong: they're fourteen seconds of you finding the page. Trim to the action. Frame-perfect trimming lets you snap the start and end to exact frames (the timeline shows seconds and frames; arrow keys nudge ±1 frame), so the loop begins on the click and ends one frame after the breakage. A clean two-to-four-second loop reads better than a rambling twelve-second one.
  5. Keep it under a few MB. Set the frame rate to 10–15 fps, plenty for UI motion and a fraction of the weight of 30 fps. Aim for under ~2–5 MB. Crop before you scale down so you're not spending pixels on dead space you're about to throw away.
  6. Drag it into the issue. Drop the GIF straight into the GitHub or Linear comment box and it embeds and autoplays. Done.

Settings for crisp UI and readable text

GIFs hate two things: tiny text and gradients. You can beat the first one.

A word on internal and unreleased product

Most screen-recording-to-GIF tools upload your file to their servers to do the conversion. If your bug lives on an unreleased feature, a staging environment, or anything under NDA, that's your roadmap taking a field trip through someone else's infrastructure, and a conversation you don't want to have with security after the fact. The converter runs entirely client-side: the video never leaves your browser tab, so the only place that frame of your unannounced dashboard ends up is the GIF you choose to paste into your own private repo. No signup, no account, no file sitting on a vendor's bucket waiting to be subpoenaed or breached. Corporate IT tends to like that answer, and it's a much shorter security review.

Common mistakes

The same loop is just as handy outside the tracker. Embedding a repro in a Slack or Discord thread when you're flagging it to the team works exactly the same way, no click-through required, and it survives the scroll better than a screenshot nobody opens. One recording, pasted everywhere, finally reproducible. And yes, the tool stays free because a few tasteful ads keep the lights on, which is a fair trade for never uploading your unreleased UI to a stranger's server.

Advertisement

Got a clip? Make the GIF.

Free, frame-perfect, and it never leaves your browser.

Open the converter

Questions, answered

Will a GIF really autoplay in a GitHub or Linear issue?
Yes. GitHub, GitLab, Linear, and Jira all render animated GIFs inline in descriptions and comments, and GIFs loop automatically with no player or play button. Just drag the file into the comment box. That's the whole appeal over a video link: no click-through, no embed code, and no login wall between the reader and your repro.
How do I keep the GIF small enough to attach to a ticket?
Three levers: crop tight to the broken UI region, set the frame rate to 10–15 fps (plenty for interface motion), and trim to just the repro instead of the whole session. That combination usually lands you under 2–5 MB, which keeps the issue page snappy. Always crop before scaling so you're not spending file size on dead space.
Is it safe to convert a recording of an unreleased or internal feature?
With What the GIF, yes. The conversion runs entirely in your browser tab and the video is never uploaded to any server. That's the key difference from most online converters, which send your file off for processing. For NDA, staging, or pre-launch UI, client-side conversion means the footage only ever lives on your machine and in the GIF you choose to paste.
My error text looks blurry in the GIF. How do I fix it?
Two things. First, raise the color count: a 256-color palette keeps text, stack traces, and labels legible, where 64 colors turns them to mush. Second, crop to the relevant panel before scaling down, so the text that matters stays at a readable size instead of being shrunk along with the whole screen.
Why not just paste a screenshot?
A screenshot shows one frozen state, but a bug is a sequence: click, spinner, vanish. A short looping GIF performs the actual repro steps in order, so the engineer watches your exact path instead of guessing at it. Pair the GIF with one line of expected-vs-actual text and you've turned a 'cannot reproduce' into a fixable ticket.