Skip to content

Releases

v0.4.12 — ads on refresh-heavy sites now stay covered (fixes flicker)

Choose a tag to compare

@NickEngmann NickEngmann released this 17 Aug 12:21

Fixes "ads still showing" on ad-dense / live-cam sites.

On sites that constantly refresh their ads (live-cam pages, recipe/news sites using AdSense/Ezoic), the ad slots swap out their creative every 30–60 seconds. Minus was tearing its cover down the instant the old ad element was replaced, then having to re-analyze the new one from scratch — so on pages with lots of fast-refreshing ads, the covers couldn't keep up and most ads showed through.

Now Minus remembers the ad slot's position: when an ad refreshes, its replacement is re-covered instantly (no re-analysis), and the cover is held in place during the swap so the ad never flashes into view. Covers stay put as ads rotate.

Verified on the reported site (6 ad slots now covered stably) plus a spread of news/sports/recipe/weather sites, with no false positives on ad-free pages.

v0.4.11 — Aggressive mode: catch native & hidden ads (opt-in)

Choose a tag to compare

@NickEngmann NickEngmann released this 14 Aug 15:07

New: Aggressive mode (popup toggle, off by default).

By default Minus only covers ads in the usual places — ad slots and standard banner sizes — which keeps it from mistaking your article photos and product images for ads. The downside: native "around the web" ad widgets and ads disguised as content can slip through, because they look identical to real content.

Turn on Aggressive mode and Minus will judge everything on the page, not just the obvious ad spots — catching those native and hidden ads. The trade-off, stated right on the toggle: expect more false positives (it'll sometimes cover a real photo it's confident is an ad). Flip it back off any time and coverage instantly returns to the precise default — no reload.

Great for stubborn, ad-heavy sites; leave it off for a cleaner experience on everyday browsing.

v0.4.10 — engine recovers from real GPU device loss (no reload needed)

Choose a tag to compare

@NickEngmann NickEngmann released this 14 Aug 04:20

Auto-recovery from a real GPU device loss. A long soak revealed that under heavy real-world GPU pressure (autoplay-video + ad-laden pages), the browser can lose the GPU device in a way v0.4.9 couldn't recover from in place — the engine would stay safely paused but not come back until you reloaded.

v0.4.10 fixes that: when the engine has been paused (GPU busy) too long to recover on its own, it rebuilds itself in a fresh GPU context automatically — no reload. If the GPU is momentarily lost it still recovers instantly in place as before; the heavier recovery only kicks in for a genuine, persistent loss, and is rate-limited so it never thrashes.

Throughout, the safety guarantees from v0.4.9 hold: while paused the engine never mistakenly marks an ad as "not an ad," and there's no runaway retry loop.

Backed by a deterministic regression that proves the recreation path fires and recovers.

v0.4.9 — engine self-recovers under GPU pressure (no more silent stalls)

Choose a tag to compare

@NickEngmann NickEngmann released this 13 Aug 22:00

The engine no longer stalls under load. minus-v0.1 runs on WebGPU, and under heavy GPU pressure (lots of tabs, video-heavy pages) the browser can drop the GPU device out from under it. Previously the engine would try to rebuild on a still-busy GPU, fail, retry, and get stuck — silently blocking nothing until you reloaded, sometimes not even then.

This release replaces that with a proper recovery state machine:

  • When the GPU is momentarily unavailable, the engine pauses (the popup shows "paused — GPU busy, retrying…") instead of thrashing.
  • It backs off (5s→60s) and rebuilds on its own the moment the GPU frees up — no reload needed.
  • While paused it fails fast, so page scans reschedule cleanly and never mistakenly mark an ad as "not an ad".
  • A truly no-WebGPU browser still gets the clear "enable WebGPU in chrome://flags" guidance.

Backed by a new deterministic regression (test_gpu_death_spiral.mjs) that reproduces the exact device-loss-under-pressure failure and proves the engine recovers.

v0.4.8 — recover native/chum-box ads (Taboola/Outbrain/MGID/…)

Choose a tag to compare

@NickEngmann NickEngmann released this 13 Aug 20:20

Native ad recovery. A 500-site soak showed standard banner ads get covered reliably, but native "chum-box" units — Taboola, Outbrain, MGID, RevContent, and friends — were slipping through. They're pixel- and shape-identical to the editorial thumbnails the model deliberately protects, so the bare-image gate couldn't distinguish them.

This release expands the ad-slot detector with the major native-ad network identifiers, so those units route to the ad-context gate and get covered — without touching the editorial-photo protection that keeps real article images clickable.

Validated on real native containers (5/6 matched, 0 editorial false-matches).

Note: minus-v0.1 runs on WebGPU. Under sustained GPU pressure a lost GPU device can stall the engine; a dedicated backoff/graceful-degradation fix is tracked separately.

v0.4.7 — popup guard catches mousedown-popunders + redirect-chain ad landings

Choose a tag to compare

@NickEngmann NickEngmann released this 10 Aug 16:56

Hardens the popup guard after testing it across a batch of popup-heavy sites:

  • Arms on pointerdown, not just click — many popunders fire window.open() from a mousedown handler (before the click event), so they previously slipped past the guard entirely.
  • Follows redirect chains — popunders bounce through blank tracker pages; the guard now re-judges each hop (up to 3) so it covers the actual ad landing instead of a blank intermediate.

Verified live on real popunder chains (covered at p=1.0) while legitimate links and same-site reopens stay untouched. Ships the open-source Minus v0.1 model.

Requires WebGPU (Chrome/Edge 121+). Load unpacked from the zip.

v0.4.6 — popup guard: hijack-click popup ads get judged and covered

Choose a tag to compare

@NickEngmann NickEngmann released this 10 Aug 15:47

Popup guard 🛡

Aggressive sites (manga/stream readers and friends) hijack clicks anywhere on the page to spawn popup/popunder tabs whose entire page is an ad. Filter-list blockers block known popup domains; Minus now judges the page itself:

  • A tab spawned from your click is compared against where the clicked link said it was going — mismatches (or non-link clicks) get screenshotted and scored by the vision model.
  • Confident ad landings (p ≥ 0.85) are covered with an explicit choice — Close tab or Show page. Never auto-closes, and tabs opened from real links are never touched.
  • Verified live on the reported site: the rotating popunder chain is covered at p = 0.955 while legitimate navigation stays untouched.
  • New Popup tabs toggle in the popup (default on).

Ships Minus v0.1 (the newly open-sourced model) as the default engine.

Install

Download minus-extension-v0.4.6.zip, unzip, Load unpacked at chrome://extensions (Developer mode). Requires WebGPU (Chrome/Edge 121+).

v0.4.5 — UX polish: discoverable overlays, undo re-block, threshold slider

Choose a tag to compare

@NickEngmann NickEngmann released this 10 Aug 14:21

UX fixes from a full interaction audit

Every button and interaction was driven in a real browser; these are the fixes.

Overlays

  • The ✕ reveal and ⚑ not an ad buttons are now faintly visible at rest (full on hover/focus) — no more invisible-until-hover cards with no apparent way to see the ad.
  • Revealing an ad leaves a transient ↩ re-block chip so an accidental ✕ is one click to undo.

Popup

  • Ad threshold is now a slider with a live value — the old text box accepted junk ("abc", "1.5") and silently stored something else.
  • Warning when both ad types are off while the master toggle is still on ("nothing will be blocked").
  • Engine switching gives immediate feedback ("saved — new engine loads on the next scan"); engine names shortened so the dropdown isn't truncated; internal jargon ("engine: cold") replaced with plain language.

Options

  • Threshold slider added (popup parity) + the same both-off warning.
  • Reset progress uses an on-theme two-click armed confirm instead of a native dialog.

Review

  • The TO REVIEW counter now counts down as you grade and hits 0 with "All caught up ✓".

Tests

New 26-assertion UX e2e + reusable interaction-audit harness; regression suites green (learning 12/12, multi-tab phase suite now fully deterministic).

Install

Download minus-extension-v0.4.5.zip, unzip, Load unpacked at chrome://extensions (Developer mode). Requires WebGPU (Chrome/Edge 121+).

v0.4.4 — learn as you block (spaced-repetition review) + Greek

Choose a tag to compare

@NickEngmann NickEngmann released this 09 Aug 12:42

Learn as you block 📚

The flashcards Minus shows over blocked ads are no longer just decoration — every word is saved into a real spaced-repetition deck, built in.

  • 📚 Review flashcards in the popup (shows how many cards are due) and a full Review page: flip with space, grade Again / Good / Easy (1 / 2 / 3).
  • An SM-2-style scheduler spaces words you know further out and brings back the ones you miss; new cards are introduced a few per day.
  • A progress strip tracks seen · learning · learned · to review, filterable by language.
  • The options page gains a Learning section (stats · open review · reset progress).
  • 100% local — progress lives in your browser, nothing is uploaded.

New language: Greek 🇬🇷

Adds Greek (Ελληνικά) as the 7th flashcard language — a full 500-card deck (word → translation → example sentence). Pick it under Options → Block action → Flashcard language.

Install

Download minus-extension-v0.4.4.zip, unzip, and Load unpacked the folder at chrome://extensions (Developer mode). Requires WebGPU (Chrome/Edge 121+).

v0.4.3 — timed pause, false-positive reporting, YouTube video recovery

Choose a tag to compare

@NickEngmann NickEngmann released this 09 Aug 04:23

New features

  • Timed pause — Pause blocking for 10m / 30m / 1h from the popup; it auto-resumes on a timer (live countdown + Resume now while paused). Popup also shows an all-time blocked tally.
  • False-positive reporting — with anonymous snapshot contribution enabled, each overlay gets a ⚑ not an ad button (revealed on hover/focus) that flags the crop for review.

In-player video fixes ("blocks the ad then never unblocks")

Four distinct root causes fixed so a covered player reliably uncovers when the ad ends:

  • Display scanner no longer covers the video player (YouTube's ad-showing/ad-interrupting classes matched the ad-hint heuristic and stacked never-clearing covers).
  • Dark, near-flat directly-read frames are treated as unreadable (not a confident ad).
  • DRM/Vevo hardware-overlay letterboxes (tainted screenshots) use an aggressive two-tier unreadable bar so they can't hold a cover.
  • A pre-roll that ends/pauses/swaps to content now clears immediately.

Known limit: genuinely DRM-protected players render as an unreadable black overlay, so their pre-rolls can't be read to cover — but their content is never mistakenly covered either.

Engine

Ships LFM2.5-VL Iter 28-web as the default (fresh streaming + static device captures; best-ever streaming holdout).

Install

Download minus-extension-v0.4.3.zip, unzip, and Load unpacked the folder at chrome://extensions (Developer mode). Requires WebGPU (Chrome/Edge 121+).