Fixes black streaming video (Netflix, YouTube, etc.) in Chrome on macOS betas — without turning off graphics acceleration.
A tiny MV3 Chrome extension. One stylesheet, injected at document_start on every
http/https page:
video {
filter: saturate(1.01) !important;
}That's the whole fix.
- Video plays — audio works, subtitles render, the progress bar moves — but the video area itself is black on the physical display.
- A screenshot of the Chrome tab (or Chrome's own tab capture) shows the picture
fine.
screencapture/ a photo of the actual screen shows black. Screenshots lie here — trust your eyes. - Turning off Settings → System → Use graphics acceleration when available "fixes" it, at the cost of software compositing for everything.
Diagnosed on an M1 Max running a macOS 27.0 beta (26A5406e) with Chrome 152, but the mechanism isn't specific to that combination.
On macOS, Chrome hands a plain, unmodified <video> quad straight to the window
server as a CoreAnimation overlay layer (IOSurface-backed) — skipping its own
GPU render pass for efficiency. On some macOS builds that overlay path displays
black, even though the frame was decoded and composited correctly. Disabling
graphics acceleration only helps because software compositing has no overlays at
all.
Any non-identity CSS filter makes the video quad non-trivial, so Chrome can't
overlay-promote it and draws it through the regular GPU render pass instead.
saturate(1.01) is visually indistinguishable from the original. Everything else
— GPU raster, WebGL, hardware decode — stays on, and it's codec-independent
(AV1, H.264, VP9 all fine).
It's not DRM: this reproduces with Widevine at SW_SECURE_DECODE, and equally on
non-DRM video. Not HDCP, not AV1, not network.
- Download or clone this repo.
chrome://extensions→ enable Developer mode (top right).- Load unpacked → pick this folder.
- Reload the streaming tab.
Chrome keeps unpacked extensions across restarts; it only re-reads the files when you press the reload icon on the extension's card.
Play a video that shows black. Screenshot the Chrome tab, then capture the actual
display (screencapture on macOS). If the tab capture shows the picture and the
display capture shows black, it's the overlay path — this extension will fix it.
If both are black, your problem is upstream (decode, DRM, network) and this won't
help.
This works around an OS bug; the real fix is Apple's. If you hit this, please file it — see UPSTREAM.md for where (Apple Feedback Assistant, secondarily Chromium) and a ready-to-paste report. More reports get beta bugs fixed faster.
This is a workaround for a compositor bug, not a permanent accessory. After a
Chrome or macOS update, disable the extension and re-test by playing video and
looking at the actual screen. Once the overlay path is fixed, delete it from
chrome://extensions.
MIT