files/en-us/web/api/imagecapture/getphotocapabilities/index.md
{{APIRef("Image Capture API")}}
The getPhotoCapabilities()
method of the {{domxref("ImageCapture")}} interface returns a {{jsxref("Promise")}}
that resolves with an object containing the ranges of
available configuration options.
getPhotoCapabilities()
None.
A {{jsxref("Promise")}} that resolves with an object containing the following properties:
redEyeReduction
"never", "always", or "controllable". The "controllable" value means the device's red-eye reduction is controllable by the user.imageHeight
imageWidth
fillLightMode
auto, off, or flash.InvalidStateError {{domxref("DOMException")}}
readyState property of the MediaStreamTrack passing in the constructor is not live.OperationError {{domxref("DOMException")}}
The following example, extracted from Chrome's Image Capture / Photo Resolution Sample, uses the results from
getPhotoCapabilities() to modify the size of an input range. This example
also shows how the {{domxref("ImageCapture")}} object is created using a
{{domxref("MediaStreamTrack")}} retrieved from a device's {{domxref("MediaStream")}}.
const input = document.querySelector('input[type="range"]');
let imageCapture;
navigator.mediaDevices
.getUserMedia({ video: true })
.then((mediaStream) => {
document.querySelector("video").srcObject = mediaStream;
const track = mediaStream.getVideoTracks()[0];
imageCapture = new ImageCapture(track);
return imageCapture.getPhotoCapabilities();
})
.then((photoCapabilities) => {
const settings = imageCapture.track.getSettings();
input.min = photoCapabilities.imageWidth.min;
input.max = photoCapabilities.imageWidth.max;
input.step = photoCapabilities.imageWidth.step;
return imageCapture.getPhotoSettings();
})
.then((photoSettings) => {
input.value = photoSettings.imageWidth;
})
.catch((error) => console.error("Argh!", error.name || error));
{{Specifications}}
{{Compat}}