Skip to content

UIME/snaplens

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Snaplens

AI screen capture, straight to your Drive.

License: MIT Python 3.11+ Platform: Windows | macOS Built with Claude Code

A small hobby desktop tool that captures full-page web screenshots, regions, or windows on your screen, lets a vision model describe what it sees, and uploads the result to your Google Drive folder of choice.

Cross-platform (Windows / macOS), Python + PySide6, single-click bootstrap.


🛠 This is a hobby project. Built for fun, not a commercial product. Things may break, macOS testing is sparse, the UI is utilitarian. PRs and bug reports are welcome.


What it does

  • 📷 Full-page web screenshots — paste a URL, get a single PNG (auto-scroll
    • stitch, sticky-header neutralised, cookie banners and popups auto-dismissed).
  • 🌐 Capture with your logins — a persistent Chrome profile so you can screenshot authenticated pages (Notion, dashboards, internal tools, etc.).
  • 📌 Capture your active tab — connects to a debuggable Chrome you launch from the app and snaps whatever tab you're currently looking at.
  • Region capture — drag a rectangle anywhere on screen, over any app.
  • 🗖 Window capture — pick a window by title and snap it.
  • Google Drive sync — pick a target folder (or create one by name or today's date), upload, copy share link, copy image to clipboard, download back.
  • 🤖 AI vision — send your screenshot + a custom prompt to Gemini 2.5 Flash (free tier, no credit card); built-in templates: Describe, Extract text, Summarize, Find issues, Translate, Code.
  • 🪟 Floating panel — always-on-top, draggable, minimises to a tiny strip when you don't need the full UI.
  • Global hotkeysCtrl+Shift+S/U/F for capture / upload / change folder.

Requirements

  • Python 3.11+ with pip (Add Python to PATH on Windows)
  • Windows 10/11 or macOS 12+
  • A Google account (for Drive uploads)
  • Optional: a free Gemini API key for AI analysis — get one at aistudio.google.com/apikey
  • Optional but recommended: Google Chrome installed (otherwise Snaplens downloads Playwright's bundled Chromium, ~150 MB)

Quick start

Windows

  1. Install Python 3.11+ — tick Add Python to PATH in the installer.
  2. Download or git clone this repo.
  3. Double-click run.bat.
    • First run creates .venv, installs dependencies, and asks whether to download Chromium (skips if Chrome is already installed).
  4. The Snaplens panel appears (top-right of your primary screen).

macOS

  1. Install Python 3.11+.
  2. git clone this repo and cd into it.
  3. chmod +x run.sh && ./run.sh
  4. On first region/window capture macOS will ask for Screen Recording permission — grant it in System Settings → Privacy & Security, then restart Snaplens.

Setting up Google Drive (one-time, ~5 minutes)

Snaplens uses your own OAuth client. Google requires this for unverified desktop apps; it's the same pattern as rclone, gdrive, and similar tools.

The in-app OAuth wizard walks you through it:

  1. Click ? in the toolbar → 🔐 OAuth setup wizard.
  2. Follow the 4 numbered steps; each has an Open button that takes you straight to the right Google Cloud Console page.
  3. Download the OAuth client JSON from step 4 and drop it into the wizard's drop area (or click Browse...).
  4. Click Change folder… in the toolbar — your Drive opens, browse, pick.

You can sign out, switch accounts, or open the wizard again any time from the Help (?) dialog.

First time setting up a Google Cloud project? Read docs/OAUTH_SETUP.md for the full walkthrough — every click named, common errors fixed, troubleshooting included.

AI analysis with Gemini

Click the 🤖 button in the title bar after a capture. The dialog has template prompts (Describe / Extract text / Summarize / Find issues / Translate / Code) and a model selector:

Model Free tier Best for
Gemini 2.5 Flash ~10 RPM, 500/day Default — most prompts
Gemini 2.5 Flash-Lite ~15 RPM, 1000/day Faster, simpler tasks
Gemini 2.5 Pro ~5 RPM, 100/day Hardest reasoning, lower limit

Get a free API key at aistudio.google.com/apikey (no credit card). Snaplens stores it locally in %APPDATA%/Snaplens/config.json (or the macOS equivalent).

Capture modes — at a glance

Mode How it works Sees your logins? Notes
📷 URL Headless Chromium No Best for public pages
🌐 My Chrome Persistent profile (chrome_b_profile/) Yes — log in once First time: Help → Setup my Chrome (login)
📌 Active tab CDP to a Chrome you launched Yes (whatever you logged into) Help → Launch CDP Chrome; keep it open
Region mss + Qt overlay Works over any app
🗖 Window pygetwindow + mss Full coverage on Windows; partial on macOS

Hotkeys

Hotkey Action
Ctrl+Shift+S Capture URL (current value of the URL field)
Ctrl+Shift+U Upload the last screenshot
Ctrl+Shift+F Change Drive folder

Where things live

  • App data: %APPDATA%/Snaplens/ on Windows, ~/Library/Application Support/Snaplens/ on macOS.
  • Screenshots: <app data>/screenshots/
  • OAuth token: <app data>/token.json (delete to force re-login)
  • My Chrome profile: <app data>/chrome_b_profile/
  • CDP Chrome profile: <app data>/chrome_cdp_profile/
  • Your OAuth client JSON: in the project root (any client_secret*.json is picked up automatically)

Troubleshooting

  • Region capture is a black image (macOS) — grant Python Screen Recording permission and restart Snaplens.
  • "No tabs available via CDP" when using Active tab — click Help → Launch CDP Chrome and keep that Chrome window open.
  • Drive auth fails — delete token.json in the app data dir; retry.
  • URL capture removes legitimate content — untick Auto-dismiss popups in the toolbar and try again, or switch to My Chrome mode.
  • First-run takes 3-5 minutes — pip is fetching dependencies; Chromium download (if needed) is ~150 MB.

Architecture (one paragraph)

PySide6 frameless toolbar at the top, QStackedWidget for the full/mini state. Capture work runs in QThread workers so the UI never blocks. Web captures use Playwright (headless, persistent-profile, or CDP via connect_over_cdp); region and window captures use mss + pygetwindow with a Qt overlay for the rubber-band. Drive uses google-api-python-client with desktop OAuth (token cached in app data dir). Gemini calls go through the google-genai SDK with the user's API key. A run.bat / run.sh bootstrap creates a venv, installs deps, optionally skips the Chromium download if Chrome is detected, and runs python -m app.main.

Credits

Built by Frunze Altunyan with code-generation assistance from Claude (Anthropic) via Claude Code.

Standing on the shoulders of: PySide6, Playwright, google-genai, google-api-python-client, mss, pygetwindow, Pillow, pynput.

License

MIT

Support

If Snaplens saved you some clicks, you can ⭐ star the repo, open issues with feedback, or — if GitHub Sponsors is set up — sponsor. Totally optional, no pressure.

About

Hobby AI screen capture tool — full-page web screenshots, region/window capture, Google Drive sync, Gemini Vision analysis. Always-on-top floating panel for Win/Mac.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors