ImageCapture API works in Chrome 59+, Edge 79+, Opera 46+, and Samsung Internet 5+. Firefox hides it behind a flag, Safari does not support it. See methods and limits.

Prince Dewani
May 1, 2026
The ImageCapture API is a W3C JavaScript interface from the Web Real-Time Communications Working Group that captures still photos from a MediaStreamTrack. It works in Chrome 59+, Edge 79+, Opera 46+, and Samsung Internet 5+, while Firefox keeps it behind a flag and Safari does not support it on macOS or iOS.
This guide covers what the ImageCapture API is, the browsers that support it, its key methods, how to enable it in Firefox, and the known issues.
The ImageCapture API is a JavaScript interface that takes still photos and grabs live frames from a camera MediaStreamTrack. The W3C Web Real-Time Communications Working Group edits the spec, which exposes the ImageCapture constructor plus takePhoto, grabFrame, getPhotoCapabilities, and getPhotoSettings methods. Pages can also read camera capabilities like zoom, ISO, and white balance.
Chromium-based desktop and Android browsers ship the ImageCapture API by default, while Firefox keeps it behind a preference flag and Safari does not support it, so global support sits at about 76% of installed browsers.
Chrome supports the ImageCapture API from Chrome 59 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 53 to 58 had the API disabled by default behind the experimental web platform features flag. Chrome 4 to 52 did not support it at all. Chrome for Android tracks the same desktop release line, so Pixel and Android tablet users on Chrome 59+ get takePhoto, grabFrame, and the photo capability methods.
Microsoft Edge supports the ImageCapture API from Edge 79 on Windows, macOS, and Linux, the first Chromium-based Edge release. Pre-Chromium EdgeHTML versions 12 to 18 never added the API. Edge on Android and Edge on iOS inherit the support story of the underlying engine, so Edge for Android matches Chrome for Android while Edge for iOS uses WebKit and does not support it.
Firefox keeps the ImageCapture API disabled by default in every version on Windows, macOS, Linux, and Android. The dom.imagecapture.enabled preference in about:config turns it on, but only takePhoto and grabFrame are implemented. getPhotoCapabilities, getPhotoSettings, and the photo-options object throw NotSupportedError, so feature-detect each method, not just the constructor.
Safari does not support the ImageCapture API on macOS, iPadOS, or iOS in any stable version, including Safari 26. WebKit has shown partial scaffolding in Safari Technology Preview, but takePhoto and grabFrame remain unshipped on stable. iPhone and iPad pages have to draw a hidden video element to a canvas and call canvas.toBlob as the fallback path.
Opera supports the ImageCapture API from Opera 46 on Windows, macOS, and Linux. Opera 40 to 45 had it disabled by default behind the experimental web platform features flag. Opera 9 to 39 did not support it. Opera Mobile on Android tracks the Chromium release after Opera Mobile 80, while Opera Mini on any platform never adds the API because the proxy renderer cannot stream a camera.
Samsung Internet supports the ImageCapture API from Samsung Internet 5 on Galaxy phones and tablets. Every newer Samsung Internet build inherits the same Chromium plumbing, so takePhoto, grabFrame, and the photo capability methods work without a flag. The Galaxy camera hardware adds extra zoom, ISO, and white-balance ranges that show up in getPhotoCapabilities.
Chrome for Android supports the ImageCapture API from Chrome 59. The legacy stock Android Browser based on the system WebView only exposes the API on Android devices that ship a recent Chromium WebView. Firefox for Android does not support it because the desktop dom.imagecapture.enabled flag does not surface in the Android about:config UI.
Internet Explorer does not support the ImageCapture API in any version from IE 5.5 to IE 11. The API depends on getUserMedia, the MediaStream pipeline, and Promises, none of which the Trident engine ever shipped. Microsoft has retired Internet Explorer, so move any IE-bound camera code to Chromium-based Edge.
Note: The ImageCapture API breaks across Safari, Firefox, and iOS. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!
The ImageCapture API gives a page two ways to pull pixels from a live camera and three ways to inspect or change the camera settings. The headline methods build on a single MediaStreamTrack passed into the constructor.
Paste this snippet into the DevTools console of Chrome, Edge, or Opera. Click anywhere on the page and a still photo from the front camera appears below.
// Paste this into a Chrome, Edge, or Opera DevTools console to confirm ImageCapture support and snap a photo.
async function snapPhoto() {
if (typeof ImageCapture === "undefined") {
console.log("ImageCapture is not supported in this browser.");
return;
}
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const [track] = stream.getVideoTracks();
const capture = new ImageCapture(track);
const blob = await capture.takePhoto();
console.log("Photo captured:", blob.type, blob.size, "bytes");
const preview = document.createElement("img");
preview.src = URL.createObjectURL(blob);
document.body.appendChild(preview);
track.stop();
}
document.body.addEventListener("click", snapPhoto, { once: true });Firefox ships the ImageCapture API in every desktop and Android build, but the dom.imagecapture.enabled preference is off by default. Flip the preference in about:config to expose the constructor, and only takePhoto and grabFrame will work after that.
If typeof ImageCapture still prints undefined, the page is loaded over plain http or inside a private window with secure-context restrictions. Reload the page from an https origin or from http://localhost and the constructor shows up.
The ImageCapture API ships unevenly across browsers and exposes hardware that misbehaves on the same chip across vendors. The painful edge cases tend to land on Safari, Firefox feature gaps, and camera control quirks.
In my experience, the trickiest failure is the Firefox capability gap paired with optimistic feature detection. Code that checks typeof ImageCapture and assumes the full API throws halfway through the photo flow on Firefox, because getPhotoCapabilities is missing while the constructor is present. Feature-detect each method on the prototype, not just the constructor on window, and the cross-browser path stays clean.
All ImageCapture API version numbers and platform notes in this guide come from these primary sources:
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance