Skip to main content

Check if your camera is working properly. You can take preview snapshots.

All calculations performed locally in your browser. No data sent to server.

Results are for informational purposes. Verify results with other sources.

Your camera list is blank until you grant permission — that is the browser protecting you

Ask a browser to enumerate media devices before any permission has been granted and it will hand back the right number of entries with every name blank. The devices are there; the labels are withheld. That is deliberate anti-fingerprinting behaviour, and it is why this tool asks for camera access first and only then lists what you have.

How it works

  • Requests camera access, which is what makes device names readable at all.
  • Lists the cameras it can then see and lets you switch between them.
  • Shows a live preview and captures still frames so you can check focus, framing and exposure.
1. getUserMedia({ video: true })   → prompts, and unlocks device labels
2. enumerateDevices()              → now returns cameras with readable names
3. getUserMedia({ deviceId })      → opens the specific camera you picked
4. track.stop() on every track     → releases the camera and turns the light off

Worked example

Opening the tool on a laptop with a built-in and an external camera.

  1. before permission: two entries, both with an empty label
  2. the permission prompt appears because a stream was requested
  3. after granting: the same two entries, now named
  4. selecting one opens a stream constrained to that device
  5. leaving the page stops every track, which is what turns the indicator light off

A working preview and a named list. The blank labels beforehand are not a bug — a page that could enumerate your hardware without asking would have a cheap and durable way to identify you.

Reading the result

  • Camera access requires a secure context. On a plain http:// page the media device interface is simply not available, which is the most common reason a camera test appears broken on a local or self-hosted copy.
  • Everything here happens inside your browser. The video stream is rendered locally and the snapshots are drawn to a canvas in the page — no frame is uploaded, and closing the tab ends the stream.
  • If the indicator light stays on after you finish, the tracks were not stopped. Navigating away or closing the tab releases them; a light that persists past that is worth investigating as another application holding the device.
  • A camera that works here but not in a video call is usually a permissions or device-selection problem in that application rather than a hardware fault. Testing in the browser narrows the fault down; it does not diagnose the other program.

Common questions

Why does it ask for permission just to list my cameras?
Because the names are only revealed after a permission is granted. Browsers return unlabelled entries to pages that have never been given access, since a full list of your hardware would otherwise be a reliable fingerprint. The request is the price of a readable list.
Is my video being sent anywhere?
No. The preview is rendered locally and any snapshot is drawn into the page itself. The stream exists only in your browser and ends when you leave.