Camera Quality Check Guide
A reference for the DeskTest.net Camera Quality Check. It grades how you actually appear on a video call - the frame rate your machine really delivers plus your exposure and backlight - rather than the resolution printed on the box. This page explains what it measures, how to read the grade, and how to fix the two complaints it exists for: "I look dark" and "I look laggy".
Open the Camera Quality Check ->
What does it check?
The tool drives the browser's standard camera APIs - getUserMedia for capture, requestVideoFrameCallback for frame timing, and a <canvas> for pixel analysis - with no plugin, extension, or upload. It runs three checks in order:
- Camera permission and live preview. Requests
getUserMedia({video: true})from your click, then shows a live preview so you can sit as you would for a real call. - Delivered frame rate vs advertised. Counts the frames the camera actually presents over 2.5 seconds and compares that to the frame rate the camera claims through
getSettings(). A gap means the pipeline is starved. - Lighting: exposure and backlight. Draws one frame to a canvas, builds a luminance histogram to grade exposure (too dark / ok / blown out), and compares the center of the frame (where your face sits) to the edges (your background) to catch a backlit silhouette.
How is this different from the Webcam Test?
The Webcam Test answers "does my camera work at all" - permission, frames flowing, and the advertised resolution. This tool answers a harder question: "given that it works, do I actually look good?" A camera can pass the Webcam Test with a perfect 1920x1080 and still leave you as a dark, choppy silhouette on Teams. Two numbers explain almost every such case:
- Delivered frame rate. A 1080p camera on a busy CPU or a shared USB 2.0 hub may present only 8 fps even though it advertises 30. The Webcam Test reports the advertised number; this tool measures the delivered one.
- Backlight and exposure. Resolution says nothing about whether a window behind you turns your face into a shadow. This tool measures the actual brightness of your face area against your background.
When should I run this?
- Before an important call or interview. Two minutes to learn you are backlit is far better than a colleague mentioning it mid-meeting.
- When someone says you look dark, washed out, or laggy. The report puts a number on the complaint so you can act on the right cause.
- After moving desks or changing lighting. A new seat facing a window is the classic silhouette trap.
- Before ID verification or a document hold-up. The sharpness hint flags a frame too soft for a held-up card to be legible.
- During ticket triage. Have the user send the Diagnostic Report - it distinguishes "buy a light" from "close background apps" so you dispatch the right fix.
Reading the grade
Each step shows a status badge: Pending (gray), Running (yellow), Pass (green), or Fail (red). The frame-rate and lighting steps pass whenever the measurement succeeds - a low frame rate or a backlit result still counts as a completed check. The overall judgement lives in the verdict panel at the top, which has three outcomes:
| Verdict | Means |
|---|---|
| You look good on camera (green) | Frame rate is smooth and lighting is well exposed and balanced. Nothing to change. |
| Works, but you may not look your best (amber) | The camera runs, but at least one of: backlit, too dark, overexposed, or a low delivered frame rate. The panel names the single most important cause and its fix. |
| Failed (red) | The camera could not complete the checks - no permission, no device, in use by another app, or no frames delivered. |
Copy Diagnostic Report produces a plain-text report - delivered and advertised fps, exposure, face-vs-background brightness, sharpness, per-step diagnoses, user-agent, and timestamps. It contains only numbers; no image is ever included. Paste it into a ticket.
Frame rate: delivered vs advertised
The tool grades the delivered rate in three bands:
| Delivered | Grade | What you will see |
|---|---|---|
| 20 fps and up | Good | Smooth motion on calls. |
| 12 to 20 fps | Fair | Usable but slightly stuttery, especially when you move. |
| Below 12 fps | Poor | Visibly choppy and laggy. |
When the delivered rate is far below the advertised rate (for example, a camera claiming 30 fps but delivering 10), the pipeline is starved - the camera is fine, but something upstream cannot keep up. Common causes and fixes:
- Background CPU load. A sync client, antivirus scan, or a wall of browser tabs. Close them and re-run.
- USB bandwidth. A 1080p camera on a USB 2.0 hub shared with other devices gets throttled. Move it to a direct USB 3.x port.
- Low-light integration. In a dark room, some cameras drop their frame rate to expose each frame longer. Add light (which also fixes the exposure problem) and the rate usually recovers.
requestVideoFrameCallback (older Safari and Firefox), the tool falls back to a frame-difference estimator over requestAnimationFrame. The report names which method was used; the estimate is close but not exact.Lighting: exposure and backlight
The tool converts one frame to luminance (the standard 0.2126 R + 0.7152 G + 0.0722 B weighting) and reads two things.
Exposure
From the overall brightness and the histogram, exposure is graded too dark, ok, or blown out:
- Too dark. The mean brightness is low, or most of the frame is near-black. Add a light in front of you - a desk lamp bounced off the wall or aimed at your face is enough. Raising room lighting helps too.
- Blown out. Highlights are clipping to pure white and detail is lost. Move away from a bright window or direct light, or lower the camera's exposure setting.
Backlight and silhouette
This is the one people miss most. The tool measures the brightness of the center of the frame (where a face normally sits) against the periphery (your background). When the background is much brighter than your face and your face itself is dark, you are backlit - the camera exposes for the bright window behind you and turns you into a silhouette. The fix is not a better camera; it is geometry:
- Turn so the window or main light is in front of you, not behind you.
- If you cannot move, close the blinds behind you and add a light facing you.
- A cheap desk lamp or ring light in front of you beats any camera upgrade for this specific problem.
Sharpness hint
The tool also computes a Laplacian variance - a standard focus measure. A low value means the frame is soft, which is a useful hint when you plan to hold up an ID card or document: if the number is low, the text will not be legible to whoever is on the other end. Treat it as a hint, not a verdict; it depends on resolution and on how much is moving in frame.
Behind the scenes
getUserMedia({video: true}) is called from your click so the browser treats it as a user gesture. The stream is attached to a <video autoplay muted playsinline> element - muted lets it autoplay without a gesture, playsinline stops iOS forcing fullscreen.
Frame rate uses HTMLVideoElement.requestVideoFrameCallback, which fires exactly once per presented frame. That is the only way to measure the true delivered rate rather than the display's refresh rate. The advertised number comes from track.getSettings().frameRate.
Lighting analysis draws the frame to an in-memory 160-pixel-wide canvas, calls getContext('2d').getImageData(), and computes the histogram, center-vs-periphery brightness, and Laplacian variance in plain JavaScript. The frame you see graded is drawn to a second visible canvas so you can confirm what was measured.
Nothing leaves the tab. No frame is uploaded, converted to a Blob, or sent anywhere - only the derived numbers reach the report. When the analysis finishes, or when you reset or leave the page, every track is stopped so the camera-in-use indicator turns off.
For IT admins
Camera access needs both the per-site browser permission and the OS privacy switch, exactly as with the Webcam Test. If this tool reports a low delivered frame rate across many users on identical hardware, look past the camera:
- Endpoint agents. Real-time antivirus, DLP, and EDR scanning steal CPU during the exact window a call starts. Check whether the drop correlates with a scheduled scan.
- Docking stations and hubs. A 1080p camera behind a USB 2.0 dock leg, or sharing bandwidth with a scanner or second monitor, gets throttled. Standardize on a direct USB 3.x path for cameras.
- Virtual desktops. Citrix and Horizon camera redirection often negotiates a lower resolution and frame rate than local. Confirm the HDX / RTAV version supports the rate you expect.
- Backlight is a facilities problem. If a whole row of desks faces away from the windows, no amount of hardware fixes the silhouettes. A few desk lamps do.
Related
- Camera Quality Check - the tool itself
- Webcam Test Guide - does the camera work at all: permission, frames, resolution
- Microphone Test Guide - the equivalent for audio input
- Speaker Test Guide - the equivalent for audio output
- About DeskTest.net
- DeskTest.net home