A lightweight, powerful Safari App Extension for macOS that automatically skips YouTube ads. Built natively for macOS to ensure the best performance and minimal battery drain.
- Auto-Click "Skip Ad": Instantly detects and clicks all variations of the YouTube "Skip Ad" button.
- The Fast-Forward Hack: Defeats "unskippable" ads by instantly muting them and fast-forwarding to the last second at 16x speed.
- Ad Banner Removal: Automatically closes pop-up overlay banners at the bottom of videos.
- Stats Tracker: Keeps a running tally of how many ads you've skipped (with a satisfying reset animation).
- Toggle Switch: Easily enable or disable the extension right from the Safari toolbar.
- Native macOS Performance: Built as a Safari Web Extension bundled within a native macOS app, making it incredibly lightweight compared to traditional Chrome extensions ported to Mac.
- Go to the Releases page and download the latest
AD_bye-bye.dmgfile. - Open the
.dmgfile and dragAD bye-bye.appinto yourApplicationsfolder. - Launch
AD bye-byefrom your Applications folder (or Launchpad). - Open Safari.
- Go to
Safari > Settings (or Preferences) > Extensions. - Find AD bye-bye in the left sidebar and check the box to enable it.
- Important: Click "Always Allow on Every Website" in the permissions pane on the right.
Note: Since this app is not signed with a paid Apple Developer account, you may need to right-click (or Control-click) the app in your Applications folder and select "Open" the very first time you run it to bypass macOS Gatekeeper.
- Clone this repository.
- Open
AD bye-bye.xcodeprojin Xcode. - Select the
AD bye-byescheme and your Mac as the destination. - Press
Cmd + Rto build and run. - Follow steps 4-7 from Option 1 to enable it in Safari. (Note: You will need to enable "Allow Unsigned Extensions" in Safari's Develop menu if building locally without a provisioning profile).
Unlike extensions that try to aggressively block network requests (which YouTube constantly tries to fight and often results in playback errors), AD bye-bye uses a DOM-level approach:
- It uses a
MutationObserverto watch for ad elements appearing on the page. - If a skip button is found, it clicks it.
- If a video ad is playing (especially unskippable ones), it cranks the
playbackRateto16.0and jumps thecurrentTimeto the end, instantly finishing the ad without breaking the YouTube player state.
The core logic for ad skipping is located in:
AD bye-bye Extension/Resources/content.js
The popup UI and state management are handled in:
AD bye-bye Extension/Resources/popup.html
AD bye-bye Extension/Resources/popup.js
AD bye-bye Extension/Resources/background.js
MIT License. Feel free to fork, modify, and improve!