AnyTool
Your files never leave your device. All processing happens locally in your browser.

How do I test my webcam in the browser?

Open AnyTool Webcam Test, press Start camera and allow the camera when your browser asks. Your webcam appears live in a full-screen preview and the tool reads the active video track to show the camera’s name, the negotiated resolution, the real frame rate and the aspect ratio. If you have more than one camera, pick another from the dropdown and the preview switches instantly. Toggle Mirror for a selfie view, take a Snapshot to capture the current frame and download it as a PNG, or go fullscreen. Everything runs locally — your camera feed is shown only on your device and is never recorded or uploaded, and the camera stops the moment you press Stop camera or leave the page.

  • Live webcam preview with one-tap Start / Stop — nothing to install
  • Shows the real camera name, resolution, frame rate and aspect ratio (track.getSettings)
  • Switch between multiple cameras, mirror the view, and go fullscreen
  • Snapshot the current frame and download it as a PNG — saved locally only
  • 100% client-side: your video is never recorded, uploaded or sent anywhere

What is

Webcam Test

A webcam test confirms that your camera works and shows what it actually delivers: a live picture, the capture resolution in pixels, the frame rate and the camera’s name. A browser-based test uses the MediaDevices getUserMedia API to request the camera with your permission, streams it into a video element for preview, and reads the active track’s settings for the technical details — all on your device, with no app and no recording.

Generators

Related terms

getUserMediaMediaDevicesenumerateDevicesResolutionFrame rate (fps)Aspect ratioMirror / selfie view

Frequently Asked Questions

No. The video is shown only on your device, live in your browser, and is never recorded, saved or uploaded. The camera runs only while the preview is on and stops the instant you press Stop camera or leave the page.

Everything happens locally. The browser opens the camera with getUserMedia only after you grant permission, and the MediaStream is wired straight into a muted video element for preview — there is no server, no account and no video file, and nothing is transmitted. Any snapshot you take is drawn to a canvas in your browser and downloaded directly to your own device. The camera track is stopped and released the moment you press Stop camera, leave the page or close the tab, which turns the camera light off.

It reads the active video track’s getSettings(), which reports the resolution, frame rate, aspect ratio and device the browser negotiated, and it also measures the real on-screen frame rate with a per-frame timer.

When the camera starts, the tool takes the live video track from the MediaStream and calls track.getSettings(), which returns the width and height in pixels, the frame rate, the aspect ratio and the deviceId the browser and camera agreed on, plus track.label for the camera name. A requestAnimationFrame loop separately counts how many frames actually render each second, so the fps figure reflects what you really see, not just what the driver reports. These are the negotiated settings for this preview — a different app may request a different mode — so they show how the camera is running right now rather than its theoretical maximum.

Yes. After you grant permission, every webcam is listed in the dropdown; pick another and the preview restarts on that camera. A one-tap Mirror toggle flips the preview to selfie view and is baked into snapshots.

The tool calls enumerateDevices() to list your video inputs — the camera names appear once you have granted permission — and selecting a different one restarts the stream with that camera’s deviceId, so built-in and external (USB) webcams are both easy to test. Mirror mode flips the preview horizontally with CSS so it behaves like a real mirror (selfie view), which is how you see yourself, while other people on a call see the un-mirrored image; the mirror setting is also applied when you capture a snapshot.

Usually another app is using the camera, or permission/HTTPS is missing. Close Zoom, Teams, Meet or OBS, allow the camera for the site, make sure the page is on https, and check any hardware privacy shutter.

A black, frozen or failing preview almost always means the camera is busy in another app — close Zoom, Teams, Meet, OBS or another browser tab using it, then press Start camera again. The tool also needs camera permission and a secure (https) context: if access was blocked, click the camera icon in the address bar to allow it. Some laptops have a physical privacy shutter or a function-key switch that disables the webcam, and if no camera is detected at all you may need to connect or enable one. The tool maps each of these cases — permission denied, no camera, in use, insecure context, unsupported browser — to a clear on-screen message.

Detailed Explanation

Methodology

How the Webcam Test Opens and Reads the Camera

AnyTool Webcam Test runs entirely on the native MediaDevices API — navigator.mediaDevices.getUserMedia and enumerateDevices — with no library, CDN or upload. Pressing Start camera calls getUserMedia({ video, audio: false }) after checking window.isSecureContext, and the returned MediaStream is assigned to a muted, autoplay, playsInline <video> element so it previews live and is never recorded. The active video track’s getSettings() reports the negotiated width and height, frameRate, aspectRatio, deviceId and the human-readable track.label (camera name), and a separate requestAnimationFrame loop counts rendered frames to display the true on-screen fps alongside the value the driver reports. enumerateDevices() lists every videoinput — labels populate once permission is granted — to fill the camera dropdown; choosing another camera stops the current tracks and restarts getUserMedia with { deviceId: { exact } } for that device. A track ‘ended’ listener catches a camera that is unplugged or grabbed by another app mid-session.

  • getUserMedia({ video }) → muted autoplay <video>; the feed is previewed, never recorded
  • track.getSettings() → resolution, frame rate, aspect ratio, deviceId and label
  • requestAnimationFrame loop measures the real on-screen fps, not just the reported rate
  • enumerateDevices() populates a camera selector; switching restarts on the chosen deviceId
  • Secure-context check + a track ‘ended’ listener for unplugged / in-use cameras
How It Works

Mirror, Snapshot, Fullscreen and Multi-Camera

Mirror mode flips the preview horizontally with a pure CSS scaleX(-1) for a selfie view — the way you see yourself, while others on a call see the un-mirrored image — and the mirror setting is honoured when capturing. Snapshot draws the current video frame onto a hidden canvas (translating and scaling the context when mirrored), exports it with toDataURL('image/png') and lets you download the PNG; recent shots are kept in a small strip with their pixel dimensions and a one-tap clear. The preview can enter the Fullscreen API, and the same controls appear in a sticky mobile bar. Multiple webcams — built-in and external USB — are listed once permission is granted and can be switched live, making the tool a quick check before a video call or stream.

  • Mirror = CSS scaleX(-1) selfie view, also baked into snapshots
  • Snapshot = canvas → toDataURL(image/png) → local download, kept in a strip
  • Fullscreen preview via the Fullscreen API; sticky mobile action bar
  • Switch between multiple cameras (built-in + USB) live after permission
  • Friendly messages for permission denied, no camera, in use, insecure context
Limitations

Privacy and Honest Limits

Because the camera is opened and previewed entirely in the browser, the video feed is shown only on your device and is never recorded, saved or uploaded — there is no server, no account and no video file, and snapshots are written straight to your own downloads. The camera track is stopped and released the instant you press Stop camera, leave the page or unmount the component, which turns the camera light off. Honestly, the resolution and frame rate shown are what the browser and camera negotiated for this preview rather than the camera’s theoretical maximum, and the measured fps can dip when the machine is busy. A black, frozen or non-starting preview almost always means another app (Zoom, Teams, Meet, OBS or another tab) holds the camera — close it and start again. Camera access also requires permission and a secure (https) context, and some laptops have a hardware privacy shutter or function-key switch that physically disables the webcam.

Webcam Test: in-browser (AnyTool) vs typical online testers
CapabilityAnyToolTypical online testers
Camera accessNative getUserMedia, secure-context checkedgetUserMedia, varies
Device infoName, resolution, measured + reported fps, aspect ratioOften resolution only
Multi-cameraenumerateDevices selector, live switchingSometimes single camera
Mirror viewYes — CSS flip, baked into snapshotsSometimes
SnapshotCanvas → PNG download, local onlySometimes none / watermarked
FullscreenYes (Fullscreen API)Varies
PrivacyFeed previewed locally, never recorded/uploadedMay stream or record remotely

AnyTool previews your camera locally with the native getUserMedia API; your video feed is never recorded or uploaded, and the camera stops the moment you press Stop.