Capture. Annotate. Export. Right in your browser.
A free, open-source Chrome extension for capturing screenshots, annotating them, and exporting as PNG or PDF — 100% locally, with no uploads, no accounts, and no tracking.
| Mode | Description |
|---|---|
| 📷 Visible Area | Captures exactly what’s on screen right now |
| 📄 Full Page | Scrolls and stitches the entire page automatically |
| ✂ Crop Region | Drag to select any area of the page |
| 🖨 Save as PDF | Captures full page and exports directly to PDF |
After capture, a full editor opens in a new tab:
All tools support 7 colors and custom stroke sizes. 50-level undo. Full keyboard shortcuts.
git clone https://github.com/AdnanTemur/snipwise.git
chrome://extensionssnipwise folderClick mode in popup
│
├── Visible Area ──→ background.captureVisibleTab() ──→ editor.html
│
├── Full Page ──────→ content.js injects
│ ↓
│ Capture fixed elements (headers/footers)
│ ↓
│ Hide fixed elements
│ ↓
│ Scroll in viewport steps
│ Read actual window.scrollY after each step
│ Draw only new pixels onto canvas
│ ↓
│ Restore + composite fixed elements
│ ↓
│ Send to background → editor.html
│
├── Crop Region ────→ content.js injects SVG mask overlay
│ User drags selection (clear cutout, dark surround)
│ Capture → crop → editor.html
│
└── Save as PDF ────→ Same as Full Page
Routes to pdf.html instead of editor
jsPDF converts canvas → .pdf download → tab closes
The scroll-stitch reads window.scrollY after every scrollTo() call instead of trusting the requested position. Browsers clamp scrolling near the bottom, so using the actual position prevents the last strip from repeating. Fixed/sticky elements (navbars, footers) are captured separately at scroll=0, hidden during stitching, then composited back at their correct absolute positions.
Content script injection is guarded at three levels:
window.__snipwiseLoaded flag prevents re-registration of listenersexecuteScriptcaptureReady messages within 2 secondssnipwise/
├── manifest.json # MV3, no host permissions
├── popup.html # Mode selector UI — flat violet dark theme
├── popup.js # Mode routing, injection guard, theme
├── background.js # Service worker — captures, storage, tab routing
├── content.js # Page-level — full page stitch, SVG crop overlay
├── editor.html # Annotation editor UI — full tab
├── editor.js # All drawing tools, undo, export
├── pdf.html # Silent PDF converter page
├── pdf.js # Reads capture → jsPDF → download → self-close
├── jspdf.min.js # Bundled locally (no CDN, no CSP issues)
└── icons/
├── icon16.png
├── icon48.png
└── icon128.png
No build step. No npm. No dependencies to install. Edit files and reload the extension directly.
| Key | Tool |
|---|---|
P |
Pen |
A |
Arrow |
L |
Line |
C |
Circle |
T |
Text |
S |
Step Marker |
O |
Callout Bubble |
B |
Blur / Redact |
E |
Emoji Stamp |
X |
Crop Canvas |
Ctrl+Z |
Undo |
Ctrl+S |
Download PNG |
Ctrl+C |
Copy Image |
| Permission | Why |
|---|---|
activeTab |
Capture a screenshot of the current tab |
scripting |
Inject crop overlay and full-page scroll capture into the page |
tabs |
Open annotation editor and PDF exporter in new tabs |
storage |
Save theme preference and last capture reference locally |
downloads |
Save PNG and PDF files to the user’s Downloads folder |
No host permissions. No external requests. No “Proceed with caution” warning on install.
Snipwise is 100% local. No data ever leaves your device.
The only external resource is the Google Fonts stylesheet for editor typography — a standard browser request with no user identifiers.
Full privacy policy: https://adnantemur.github.io/snipwise/privacy
All colors are CSS variables at the top of popup.html and editor.html:
:root {
--accent: #a78bfa; /* primary violet */
--accent2: #7c3aed; /* deeper violet */
--bg: #0a080f; /* background */
--surface: #16121f; /* card surface */
}
editor.htmltoolMap in editor.jsmousedown / mousemove / mouseup listenerssc object at the bottomFull page capture uses only browser APIs — no external server involved. PDF conversion uses bundled jsPDF with no network calls.
Pull requests welcome. A few things to keep in mind:
MIT — do whatever you want, attribution appreciated.