Unblur the Web. See Everything.
A Chrome Extension that silently removes CSS blur filters, paywall overlays,
sign-in gates, and scroll locks — with zero popups, zero interruption.
- What It Does
- Screenshots
- Themes
- Installation
- How It Works
- File Structure
- Permissions
- Known Limitations
- Changelog
- Contributing
- License
Most paywalls don't actually hide content from your browser — they just blur it with CSS or place a div overlay on top of fully-loaded text. VISION detects and removes all of it:
| Technique | How Common | VISION |
|---|---|---|
filter: blur() on content |
★★★★★ | ✅ Removed |
backdrop-filter frosted overlay |
★★★★☆ | ✅ Removed |
| Fixed overlay div (paywall box) | ★★★★★ | ✅ Removed |
| Sign-in / register gate walls | ★★★★☆ | ✅ Removed |
overflow: hidden scroll lock |
★★★★☆ | ✅ Unlocked |
max-height content clamp |
★★★☆☆ | ✅ Unlocked |
| Opacity fade / text truncation | ★★★☆☆ | ✅ Restored |
-webkit-text-security dots |
★☆☆☆☆ | ✅ Cleared |
| Server-side truncation (NYT, WSJ) | ★★☆☆☆ | ❌ Not possible |
VISION ships with three built-in themes switchable live from the popup:
| Theme | Style | Font | Default |
|---|---|---|---|
| 🌑 Night | Black bg, silver text, surgical mono | Space Mono | ✅ |
| ⚡ Cyberpunk | Deep purple bg, neon pink + cyan, animated glows | Orbitron + Share Tech Mono | |
| ☀ Classic | White bg, black text, clean serif | EB Garamond |
Theme choice persists across sessions via chrome.storage.
# 1. Clone the repository
git clone https://github.com/Drdhx/vision.git
cd vision2. Open Chrome → chrome://extensions
3. Enable "Developer mode" (toggle, top-right corner)
4. Click "Load unpacked"
5. Select the /vision folder
The VISION icon appears in your Chrome toolbar immediately — it runs automatically on every page.
- Go to Releases
- Download
vision-extension.zip - Unzip and follow steps 2–5 above
content.js injects at document_start — before the page renders — and runs a 6-pass fix system:
Pass 1 → injectCSS() Global !important CSS override (filter, overflow, opacity)
Pass 2 → removeBlurs() Element-level inline filter removal
Pass 3 → removeScrollLocks() Unlocks body, html, and all content containers
Pass 4 → removeOverlays() Paywall & sign-in wall detection + removal
Pass 5 → revealHiddenContent() Restores opacity-hidden text, removes max-height clamps
Pass 6 → restoreInteractivity() Removes pointer-events:none tricks
Then re-runs at +1.2s and +3.0s to catch lazy-loaded paywalls.
// An element is flagged as a wall if ALL conditions match:
// 1. Position: fixed / absolute / sticky
// 2. Covers > 40% viewport width AND > 25% viewport height
// 3. z-index > 50
// 4. Visible (not display:none or opacity:0)
// 5. Class/ID matches any of 50+ paywall keywords (paywall, subscribe,
// signin, register, gate, premium, modal, piano-, tp-, …)
// OR inner text contains phrases like "sign in to continue",
// "subscribe to read", "members only", "get full access"A debounced MutationObserver watches for dynamically injected walls with a 600ms settle delay. Re-fires on childList, subtree, style, and class attribute changes — handles Medium, Substack, and other React / Vue SPAs that inject paywalls after initial load.
vision-unblur/
├── manifest.json Chrome Extension config (Manifest V3)
├── content.js Core fix engine — runs on every page
├── popup.html Extension popup UI (3 themes + scan log)
├── popup.js Theme switching, scan log, run button
├── background.js Service worker — tab events & re-injection
├── .gitignore
├── icons/
│ ├── icon16.png
│ ├── icon48.png
│ └── icon128.png
├── screenshots/
│ ├── hero.png
│ ├── popup_all_themes.png
│ ├── before_after.png
│ └── features.png
└── README.md
| Permission | Reason |
|---|---|
activeTab |
Read and modify the current tab's DOM |
scripting |
Programmatically inject content.js when needed |
storage |
Persist theme preference and fix counters locally |
tabs |
Re-inject content script on SPA navigation |
<all_urls> |
Run on any website |
Privacy: VISION never reads, collects, or transmits page content. It stores only your theme choice and block count — locally on your device.
| Scenario | Status |
|---|---|
| CSS-blurred content | ✅ Works |
| Overlay / modal paywalls | ✅ Works |
| SPA navigation (Medium, Substack) | ✅ Works via MutationObserver |
| Server-truncated content (NYT, FT, WSJ) | ❌ Content never reaches your browser |
chrome:// internal pages |
❌ Chrome blocks extensions here |
| Chrome PDF viewer | ❌ Sandboxed — extensions cannot access |
- Rebuilt 6-pass content engine from scratch
- Sign-in wall & register gate detection (50+ keywords + inner text scan)
document_startinjection withall_frames: true- Scan log terminal in popup with animated blinking cursor
chrome.scriptinginjection fallback for tabs that missed the content script- Default theme: Night Mode
- Debounced MutationObserver — prevents re-run loops on dynamic sites
- Re-injection on tab navigation events via
background.js
- Three themes: Cyberpunk, Night, Classic
- MutationObserver for dynamically injected paywalls
- Per-page and all-time fix counters
- Popup UI redesign with mode toggles
- Initial release: CSS blur removal + overlay detection
Pull requests are welcome. For major changes, open an issue first to discuss what you'd like to change.
git checkout -b feature/your-feature
git commit -m "feat: describe your change"
git push origin feature/your-feature
# Open a Pull RequestMIT © Dhanush D
Built by Dhanush D · github.com/Drdhx
If VISION saved you from a paywall today, consider giving it a ⭐


