tr4mpass
Free, open-source iCloud activation lock bypass tool. Remove iCloud lock from iPhone 5s through iPhone 15 Pro (iOS 12-26.1). Fully offline -- no servers, no payments. Supports checkm8 (A5-A11) and ses
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Ad-free YouTube and a cleaner web in Safari. On the Mac App Store now; iPhone and iPad are still in review. YouTube ad removal with background playback, plus content blockers from EasyList, EasyPrivacy and RU AdList.
翻訳待ち
Loading the full README.
Read the full README ↗Rinse 1.0 is on the Mac App Store for macOS 15 and later. iPhone and iPad are still in review; the same purchase will cover them.
Rinse is a Safari extension app in the spirit of Vinegar, with a site-wide ad blocker built in.
youtube.com. Nothing is collected or sent anywhere.| Extension | What it does | Access |
|---|---|---|
| Rinse for YouTube | Strips ad payloads from the player, skips stitched ads, optional background playback | youtube.com only |
| Rinse Ads | Blocks ad networks (EasyList + RU AdList network rules, 75.7k) | none |
| Rinse Privacy | Blocks trackers and analytics (EasyPrivacy, 56.3k) | none |
| Rinse Page Cleaner | Hides leftover ad slots, banners and brandings (element hiding, 11k) | none |
The app shows at a glance whether everything is on, walks you through enabling the extensions step by step, and holds the settings: background playback and the sites where Rinse is off. It's in English and Russian.
flowchart LR
subgraph YouTube["Rinse for YouTube (Web Extension)"]
BG["background.js<br/>scripting.executeScript<br/>world: MAIN"] --> PAGE["page.js<br/>YouTube's JS world"]
CS["content.js<br/>isolated world"]
end
PAGE -- "prunes adPlacements / adSlots / playerAds<br/>from ytInitialPlayerResponse, fetch, XHR" --> P[YouTube player]
PAGE -- "hides visibility & focus changes" --> P
CS -- "ad-showing? mute · 16× · press Skip" --> P
CS -- "iOS paused on background? play()" --> P
subgraph Blockers["Content Blockers"]
L["EasyList · EasyPrivacy · RU AdList · filters/rinse.txt"] --> C["tools/filters/compile.py"] --> J["blockerList.json ×3"]
end
J --> S[Safari applies rules natively]
YouTube. A custom <video> player like the original Vinegar is no longer possible: as of 2026 YouTube serves no HLS, and direct stream URLs return 403 after about 12–16 MB without a PO token (spike report). So Rinse keeps YouTube's own player and takes the ads out of it:
page.js runs in YouTube's own JS world and deletes the ad fields from player responses before the player reads them. It's injected through scripting.executeScript, because YouTube's CSP blocks a plain <script src>.content.js hides it with rinse.css and mutes it. A separate ad video jumps straight to its end; a stitched one plays at 16×. Then the ad's own Skip button gets pressed, found by its label inside the ad UI.
After a removed or skipped ad, YouTube holds the video back server-side for about the ad's length. That can't be avoided from the page, so a small "Ad skipped · your video starts in a moment" note is shown instead of a frozen-looking player.
YouTube's "Ad blockers are not allowed" popup pauses the video and dims the page. page.js prunes it from the player response; if it still opens, rinse.css hides it and content.js resumes the video. The dimming backdrop is removed by content.js whenever no dialog is displayed over it: a dialog hidden with display: none never finishes its close transition, so YouTube would leave the backdrop over the page, blocking every click.content.js caches it in storage.local and sets <html data-rinse-background> for page.js. When it's on, content.js swallows visibilitychange, pagehide, blur and freeze before YouTube sees them, page.js reports the page as visible, and if iOS still pauses the video while going to the background, it's resumed.Everything else. tools/filters/compile.py converts Adblock Plus syntax into Safari's content-blocker JSON:
@@ exceptions;#@# exceptions;site.* TLD wildcards, turned into page URL filters.What Safari can't express (regex rules, $redirect, scriptlets, procedural selectors) is dropped and counted. The output is verified with WebKit's own compiler, and each CSS selector is checked by WebKit, because a single invalid one would silently disable the 250 selectors batched with it.
nikolaikushner.github.io/rinse · Privacy Policy · Support (also in Russian). The pages live in site/ and are published by .github/workflows/pages.yml on every push to main that changes them.
Requirements: Xcode 27+, XcodeGen (brew install xcodegen), and an Apple Developer team. The team ID is set in project.yml.
This is the beginning of the README. Read the rest at the original. Read the full README ↗