What the GIFvideo → gif, the way creatives need it
capture website animation as gif

Getting a live page's motion out of the browser and into a file

Recording a website's animation is easy. Recording it cleanly, at the right size, without the browser quietly switching it off, is about four decisions.

Drop a video, get a GIF free · frame-perfect · nothing leaves your browser Open the converter →

Capture a website animation as a GIF

What the GIF does the whole thing locally, right in your browser: nothing here ever leaves your machine.

  1. Check reduced motion is off. If the animation refuses to play, look at your operating system's reduce-motion setting first. Most well-built sites honor it and will show you nothing.
  2. Size the window to the export. Resize the browser so the component renders at or above the width you want out, close DevTools, and scroll it into position.
  3. Record the tab. Press Record a Tab, pick the tab in the browser's share picker, trigger the animation, and stop. Keep the tab visible the whole time.
  4. Crop and trim to the loop. Crop to the component, then set in and out points on two frames where the element is in the same state so the loop closes with no seam.
  5. Export at motion frame rates. 24 to 30 fps for eased motion, 128 colors for gradients, and a narrow width to pay for the extra frames. Try the MP4 output if the GIF lands heavy.

Size the window before you press record

A tab capture records the tab at whatever size the tab currently is, which makes the biggest quality decision one you take before any recording starts. Resize the browser until the component you care about is being drawn at, or above, the size you intend to export at. Captured at 800 px and scaled down, a card stays crisp. Captured at 400 and scaled up, it is mush, and nothing downstream repairs that.

Then clear the frame. Close DevTools, hide the bookmarks bar, scroll the element to where you want it, and set the page to whatever state the animation begins from. You are shooting a component, not a browser. Record a Tab in the editor opens the browser's own share picker, and the crop takes the last of the chrome off afterwards, locked to 1:1, 16:9, or whichever ratio the destination wants.

Your own accessibility setting can switch the animation off

A genuinely common way to lose fifteen minutes: the animation refuses to run and the code looks fine. Most carefully built sites wrap their motion in a prefers-reduced-motion media query, which reads an operating-system preference (Reduce Motion on macOS and iOS, the animations toggle in Windows accessibility settings, equivalents elsewhere). If that preference is on, the site is behaving exactly as designed and there is nothing on screen to capture.

The related trap is the browser throttling work in a tab it believes nobody is looking at. Keep the tab you are capturing visible, put it in its own window if you need to click elsewhere, and do not minimize it partway through a take. If the animation is triggered by an element entering the viewport, reload with the element out of view and scroll it in while recording, because a page that already fired the trigger will not fire it again.

Motion design needs frames that interface footage does not

Screen recordings of a user interface are forgiving. A pointer crossing a menu reads perfectly at 10 to 12 fps. Motion design is the opposite: an eased transform, a spring, or a Lottie curve at 12 fps becomes a slideshow, because the entire content of the animation is the shape of the acceleration and you have just thrown most of it away.

Budget 24 to 30 fps for real motion work and accept that the file lands several times heavier than a UI loop of the same length. Buy the bytes back somewhere cheaper: crop harder, drop the export width, and cut the loop to two or three seconds. Flat vector work also compresses unusually well, since large areas of a single flat color are the one thing a palette-based format is genuinely good at.

Two ceilings worth knowing. The capture cannot beat the display, so a 60 Hz screen produces at most sixty distinct frames per second no matter what you ask of it. And the encoder invents nothing: the source clip's own frame rate is the ceiling for the export, so a choppy capture stays choppy however high you set the dial. Fix it at the capture, not at the settings panel.

Close the loop on the animation, not on the clip

Most web motion either loops already or returns to rest, which turns trimming into a hunt for two identical frames. Scrub to the moment the element is at rest, set the in point, scrub forward to the next time it is in exactly that state, set the out point, then nudge by single frames until the two ends match. GIFs loop forever by default, so a cut that lands on the same frame at both ends plays as continuous motion with no visible seam.

Trim handles pulled in around a short section of a clip, then stepped frame by frame with the preview following each move.
Find the two frames that match, then let single-frame nudges close the gap.

When the motion runs one way and stops, Bounce is the cheap repair: the clip plays forward then straight back inside a single loop, which roughly doubles the frame count and removes the snap-back completely. The boomerang page explains why a palindrome has no seam to hide.

Four things this approach will not get you

Capturing a rendered page is a copy of the rendering, not access to the source, and the gap shows up in specific places.

And the one that rarely gets said: somebody else's site is somebody else's work. Capturing a page for a bug report, a spec, a teardown, or a private design review is ordinary practice. Republishing a competitor's motion as your own showreel is not, and no export setting makes that call for you.

Catch the motion while it is running

Record the tab, crop to the component, close the loop on two matching frames, and export at a frame rate that keeps the easing intact.

Open the converter

Questions, answered

How do I record a CSS animation as a GIF?
Record the tab it is playing in. There is no file to export, because the animation is code the browser runs, so a capture of the running page is the only way to hand it to somebody.
Why will the animation not play while I try to record it?
Usually your operating system has reduce-motion enabled and the site is honoring it. The other common cause is a scroll-triggered animation that already fired; reload with the element out of view and scroll it in during the recording.
What frame rate should I use for a website animation?
24 to 30 fps for eased or spring motion, where the acceleration is the content. Plain interface footage is fine at 10 to 12. The source recording's own frame rate is the ceiling either way.
Can I capture a scroll-linked animation?
Yes, but your scrolling becomes part of the performance. Use arrow keys or a trackpad rather than a wheel, move slower than feels natural, and plan on several takes.
Is the page or the recording sent anywhere?
No. The capture is recorded inside this page and encoded by your own processor, so a staging URL or an unreleased design never reaches a server.