Image Capture / Control Camera Background Blur Sample

Available in Chrome 106+ | View on GitHub | Browse Samples

Background

The ImageCapture Web API allows web developers to control the background blur of the camera.

Note: Background Blur is still under development. You must be using Chrome with the chrome://flags/#enable-experimental-web-platform-features flag enabled.

Live Output


JavaScript Snippet

navigator.mediaDevices.getUserMedia({ video: true })
.then((stream) => {
  document.querySelector("video").srcObject = stream;

  const [track] = stream.getVideoTracks();
  const capabilities = track.getCapabilities();
  const settings = track.getSettings();

  if (!("backgroundBlur" in settings)) {
    throw Error(`Background blur is not supported by ${track.label}`);
  }

  log(`Background blur is ${settings.backgroundBlur ? "ON" : "OFF"}`);
  
  // Listen to background blur changes.
  track.addEventListener("configurationchange", configurationChange);
  
  // Check whether the user can toggle background blur in the web app.
  if (capabilities.backgroundBlur?.length !== 2) {
    throw Error(`Background blur toggle is not supported by ${track.label}`);
  }

  const button = document.querySelector("button");
  button.addEventListener("click", buttonClick);
  button.disabled = false;
})
.catch((error) => log("Argh!", `${error}`));

function buttonClick() {
  const stream = document.querySelector("video").srcObject;
  const [track] = stream.getVideoTracks();
  const settings = track.getSettings();
  const constraints = {
    advanced: [{ backgroundBlur: !settings.backgroundBlur }],
  };
  track.applyConstraints(constraints)
  .then(() => {
    const settings = track.getSettings();
    log(`Background blur is now ${settings.backgroundBlur ? "ON" : "OFF"}`);
  })
  .catch((error) => log("Argh!", `${error}`));
}

function configurationChange(event) {
  const settings = event.target.getSettings();
  if ("backgroundBlur" in settings) {
    log(`Background blur changed to ${settings.backgroundBlur ? "ON" : "OFF"}`);
  }
}