v145 · macOS · Device Inventory Diff

Device inventory diff

Enumerate every camera Chrome can see, classify each as real / DAL-virtual / CMIO-virtual, and diff against what Chrome 144 would have shown. Built-in macOS continuity + CoreMediaIO-aware virtual cameras stay; legacy DAL-only virtual cameras are gone.

macOS-specific. On other platforms, this page still enumerates cameras but the real/virtual classification heuristic is macOS-shaped. The labels you see depend on what your OS reports to enumerateDevices().

cameras on this machine

No scan yet. Click "Scan" to grant camera permission once — the page only reads labels, no frames captured.

Still supported (Chrome 145)

No devices yet.

Removed in Chrome 145

No devices yet.

how the diff works

Chrome 145 drops support for cameras that only register through the legacy DAL (Device Abstraction Layer) plug-in API on macOS — a long-deprecated Apple framework. Cameras that adopt the modern CoreMediaIO (CMIO) extension framework (the path Apple ships with macOS Monterey+) keep working. Continuity Camera, iOS passthrough, and AVCaptureDevice-backed virtual cameras are unaffected.

We can't read the underlying framework from JavaScript, but the device label is a strong signal. The page applies a heuristic — labels matching well-known DAL-only virtual camera names (older OBS Virtual Camera builds, ManyCam DAL, CamTwist) move to the "Removed" column.

const devices = await navigator.mediaDevices.enumerateDevices();
const cameras = devices.filter(d => d.kind === 'videoinput');

const DAL_HINTS = [/obs.*virtual.*camera\s*\(.*dal/i, /camtwist/i, /manycam.*dal/i];
const classify = (label) => {
  if (DAL_HINTS.some(rx => rx.test(label))) return 'removed';
  if (/virtual/i.test(label)) return 'virtual-cmio';     // assumes CMIO migration
  if (/iphone|continuity/i.test(label)) return 'continuity';
  return 'real';
};
const removed = cameras.filter(c => classify(c.label) === 'removed');

see also