Refresh Rate Test
MediaEverything runs locally in your browser — nothing is uploaded
- Frames
- —
- Median frame
- —
- Worst frame
- —
- Dropped frames
- —
⚠️ This measures the compositor frame rate the browser gives this page, not the number on the monitor box. The two differ for good reasons: power saving, insufficient cable bandwidth (common above 60 Hz at 4K), the display sync setting, or the browser throttling a background tab. Keep this window in the foreground while measuring.
⚠️ This measures the compositor frame rate the browser gives this page, not the number printed on the monitor box, and the two differing is normal: a laptop in a power saving mode, a cable without the bandwidth (4K above 60 Hz over HDMI 2.0 is the classic case), a display sync mode, or a browser throttling a background tab all push it lower. None of that raises an error; it just feels less smooth. The method is direct: the rate of requestAnimationFrame callbacks is the rate the compositor gives you. Two things make naive implementations untrustworthy, though: the first few dozen frames are slower (the page is still settling, the GPU is still warming) and browsers impose a timer resolution limit. So the estimate here uses the median interval, not the mean — one long stall can drag a mean below 30 Hz on a perfectly good 60 Hz panel. A number saying 60 Hz does not mean motion is smooth either, so there is also a block moving at constant speed. Its position comes from the time phase, so when frames drop it jumps rather than gliding. Everything runs locally.
Features
- A five-second window, reporting the compositor rate snapped to common steps: 24, 30, 48, 50, 60, 75, 90, 120, 144, 165, 240
- ⚠️ The median interval is used, not the mean, so one stall cannot turn 60 Hz into 30 Hz
- ⚠️ The first second of warm-up samples is dropped, since those frames are not representative
- Frame count, median frame time, worst frame and dropped frames are all reported
- A frame counts as dropped when it exceeds 1.5 times the median — half a frame late is visible
- A three-way verdict: smooth, slightly uneven, dropping frames
- A block moving at constant speed shows smoothness directly: it jumps on a dropped frame rather than gliding
- Everything runs in your browser; no network requests
How to use
- Keep the window in the foreground, since a background tab is throttled and the numbers mean nothing
- Press Measure and wait five seconds
- Watch the moving block while it runs; the number and the look should agree
- Read the worst frame and the dropped count: a normal median with a very long worst frame means occasional stalls
FAQ
- Why is this different from my monitor specification?
- Because this is what the browser actually negotiated, while the specification is the panel ceiling. The usual gaps: insufficient cable bandwidth (4K above 60 Hz needs chroma subsampling or a lower rate on HDMI 2.0), a power saving or sync mode on the display, an integrated GPU output limit, and background throttling in the browser. ⚠️ If the window is not in the foreground the measurement is essentially meaningless, because browsers deliberately reduce the frame rate of invisible tabs.
- Why the median rather than the mean?
- Because the mean is dominated by outliers. Nearly every measurement contains a stall or two (garbage collection, the moment you switched away, another process taking the CPU). One 800 millisecond gap among 200 gaps of 16.7 milliseconds drags the mean below 30 Hz even though the panel is fine, while the median is immune. That is also why the worst frame is reported separately: it is the direct evidence of a stall.
- How are dropped frames counted?
- A frame is dropped when it takes more than 1.5 times the median frame time. Half a frame late is visible as a hitch, and the threshold deliberately errs on the strict side. ⚠️ It counts drops on this page, so an animation running here is included in the measurement; for a clean number, leave the page alone while measuring.
- What is the moving block for?
- The number and the impression are two different things. At a steady 60 Hz a block moving at constant speed looks smooth; when frames drop it jumps, because its position is computed from the time phase and a late time means a late position. That is much closer to what you actually notice while scrolling, dragging or playing. A smooth block with an ugly number means occasional stalls; a stuttering block with a normal median means the answer is in the dropped count.
Related tools
Dead Pixel Test
MediaFill the screen with black, white, the primaries and greys to find stuck pixels, dead pixels and panel uniformity problems.
Your Browser Info
WebSee what your browser exposes to websites: user agent, screen, time zone, CPU cores, WebGL renderer and feature probes — all read locally, never sent.
HTML5 Detect
LookupsMeasure HTML elements, CSS capabilities, browser APIs and media formats in the browser you are using right now, and copy the result as a report.
Video to GIF
MediaTurn part of a video into a GIF with adjustable frame rate, width, colours and looping. Pick the range from the preview; nothing is uploaded.
Video Frame
MediaExport the exact frame at any moment, at the video's own resolution, as PNG, JPEG or WebP. Sharper than a screenshot: no controls, no display scaling.
Audio to WAV
MediaConvert MP3 / M4A / FLAC and more to WAV, with an optional sample rate (16k speech, 48k video), mono downmix and peak normalisation. All in the browser.