Pure bash · macOS 13+ · MIT
Netflix plays in Helium again.
Helium ships without Google’s Widevine library, so Netflix, Hotstar, Disney+ and Spotify refuse to play. better-helium copies Widevine in from Chrome’s own installer and re-signs the app. One script. Idempotent. Re-run it after every Helium update.
brew tap vinayakkulkarni/better-helium https://github.com/vinayakkulkarni/better-heliumbrew trust vinayakkulkarni/better-heliumbrew install better-heliumNo Homebrew? Clone it with git. macOS asks for your password once, in its own dialog.
DRM gates on macOS
RCA.md- Stock Helium: Fails, MissingAfter better-helium: Passes, Present, 4.10.x
Widevine CDM
Present, 4.10.x
- Stock Helium: Not applicable, n/aAfter better-helium: Passes, L3, same as Chrome
Security level
L3, same as Chrome
- Stock Helium: Fails, Not licensedAfter better-helium: Fails, Only Google can grant it
VMP signing
Only Google can grant it
- Stock Helium: Passes, Signed by imput.netAfter better-helium: Passes, Ad-hoc re-signed
Gatekeeper
Ad-hoc re-signed
01
Install and run
Requirements
- macOS 13 (Ventura) or later
- Apple Silicon or Intel, auto-detected
- Helium installed in /Applications
- Internet on the first run for the Chrome.dmg download
You do not need Google Chrome installed.
brew tap vinayakkulkarni/better-helium https://github.com/vinayakkulkarni/better-heliumbrew trust vinayakkulkarni/better-heliumbrew install better-helium Homebrew 7 asks you to trust a third-party tap before it installs from it; brew trust is that step. Upgrade later with brew upgrade better-helium.
git clone https://github.com/vinayakkulkarni/better-helium.gitcd better-helium./better-helium The script is self-contained. Run it from the clone, or put it anywhere on your PATH.
The first patch downloads Google’s Chrome.dmg (~250 MB) and caches the Widevine library. Later patches reuse the cache and take about 30 seconds.
Usage
- better-helium
- Patch Helium. No-op if already patched.
- --check
- Report status without changing anything. Exit 0 patched, 1 unpatched, 2 error.
- --force
- Re-patch even if Helium already has Widevine.
- --refresh
- Re-download Widevine from Chrome to get a newer version.
- --uninstall
- Remove Widevine from Helium and re-sign.
02
What plays after the patch
Every Chromium browser on macOS runs Widevine at L3, Chrome included. The caps below are the same ones Chrome has.
| Service | Plays at | Notes |
|---|---|---|
| Netflix | up to 720p | Widevine L3 cap, same as Chrome itself on macOS |
| Hotstar (Disney+) | up to 1080p | Generous on L3 |
| Disney+ (.com) | up to 720p | L3 + HDCP |
| YouTube | full | Widevine helps with paid DRM titles |
| Spotify web player | full | |
| Apple Music web | full | FairPlay, with the Widevine path also exercised |
What still won’t work
Amazon Prime Video SD only
Amazon also checks VMP signing on the browser binary. Only Google can grant VMP, and Helium is not on its licensed-publisher list. Use Safari for HD Prime Video.
Widevine L1 content not possible
L1 needs a hardware TEE. Every Chromium browser on macOS, Chrome included, is L3-only.
03
How it works
Widevine is closed-source and only ships inside commercial Chromium builds. Downloading it from Google’s own installer keeps the repo free of redistributed binaries.
The full technical story is in RCA.md.
- 01
Detect Helium and the CPU
Finds the Helium framework version inside /Applications/Helium.app. Apple Silicon maps to mac_arm64, Intel to mac_x64.
- 02
Take Widevine from Chrome
Downloads Google’s public Chrome.dmg once (~250 MB), mounts it, copies the WidevineCdm directory to ~/.cache/better-helium and throws the rest away. You do not need Chrome installed.
- 03
Move Helium out of /Applications
macOS App Management blocks writes inside app bundles in /Applications, even with sudo. The script quits Helium and moves the bundle to /tmp, where it can write.
sudo mv /Applications/Helium.app /tmp/Helium.app.better-helium.<pid> - 04
Inject, strip, re-sign
Copies WidevineCdm into the Helium framework, strips extended attributes and ad-hoc re-signs the bundle, then verifies the signature.
codesign --force --deep -s - "<tmp_app>" - 05
Move it back
Returns the bundle to /Applications. Open helium://components to see the Widevine Content Decryption Module listed.
Why it asks for your password
Moving a bundle in and out of /Applications needs administrator rights. The script asks macOS through AppleScript’s with administrator privileges, so the password goes to Apple’s own dialog. The script never sees or stores it.
After a Helium update
Updates rewrite the bundle and remove Widevine. Run better-helium again. better-helium --check answers in about 40 ms, fast enough for a shell prompt indicator that warns you when Helium is unpatched.