Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

video-overlay-fix

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.

The symptom

  • 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.

Why this works

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.

Install

  1. Download or clone this repo.
  2. chrome://extensions → enable Developer mode (top right).
  3. Load unpacked → pick this folder.
  4. 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.

Is this my bug?

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.

File it upstream

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.

Remove

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.

License

MIT

About

Chrome extension: fixes black streaming video on macOS betas without disabling graphics acceleration (one CSS rule that blocks overlay-layer promotion)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages