Capture a region of your screen, strip its identifying metadata, and save or copy a clean image.
Note
Built with AI assistance. This project was developed with the help of AI tools, primarily Claude Code, and Codex used for one or two prompts.
- Backend (Rust): AI-assisted, but every part was reviewed and structured by a human.
- Testing (User): All testing was done manually by a human.
- Frontend (UI: HTML / CSS / JS): written 100% by Claude Code, maybe Codex i can't remember but mostly Claude Code was used.
- README.md (This): 99% of this readme was generated via AI, Claude Code... Without the rocket ship :)**
Anonpic is a Windows desktop app for taking privacy-clean screenshots. You drag-select any region of your screen, and Anonpic saves the result as an image with its EXIF and authoring metadata stripped. so the file you share carries no camera, GPS, software, author, or host-machine fingerprints. It can also copy the cleaned image straight to your clipboard.
It is built with Tauri v2 (Rust backend + WebView UI) and talks to the OS directly through Microsoft's official windows-sys bindings β GDI/GDI+ for capture and encoding, a low-level keyboard hook for the hotkey, and native toast notifications.
- πΈ Region capture β press Print Screen (a global hotkey) or click Capture an area now to bring up a dimmed full-screen overlay and drag out the area you want.
- π Live size readout β a
width Γ heightlabel follows the cursor while you drag, on a flicker-free double-buffered overlay. Right-click or Esc cancels. - π§Ό Automatic metadata scrubbing β every saved image has its EXIF and common authoring metadata removed before it ever hits disk.
- π Clipboard copy β optionally place the cleaned image on the clipboard as a device-independent bitmap, so it pastes into any app and survives Anonpic closing.
- πΎ Flexible saving β auto-save to your Images folder, copy to clipboard, or both (independent toggles).
- π² Random file names β saved files get an unguessable, cryptographically random name (see below).
- πΌοΈ Format choice β save as PNG, JPEG, or BMP.
- π Native toasts β a Windows notification confirms each save / clipboard copy.
- Trigger β the global Print Screen hook (or the in-app button) starts a capture.
- Snapshot β the entire virtual desktop is snapshotted up front, then the dimmed overlay is shown, so the overlay itself never appears in your screenshot.
- Select β you drag a rectangle; the live
W Γ Hsize is drawn next to the cursor. - Crop & clean β the chosen region is cropped from the snapshot, encoded to your chosen format, and run through the EXIF + metadata strippers.
- Dispatch β depending on your settings, the cleaned image is saved to disk, copied to the clipboard, or both, and a toast confirms it.
Captured images are encoded with GDI+ and then passed through two strippers. For JPEG files the EXIF segments are scrubbed directly (lossless); for other formats the image is re-encoded with all property items removed.
All EXIF property items are removed. The privacy-relevant points specifically recognized include:
| Field | EXIF tag |
|---|---|
| Camera make | 0x010F |
| Camera model | 0x0110 |
| Software | 0x0131 |
| Original date/time | 0x9003 |
| Orientation | 0x0112 |
| Pixel X / Y dimensions | 0xA002 / 0xA003 |
| GPS latitude (+ ref) | 0x0002 / 0x0001 |
| GPS longitude (+ ref) | 0x0004 / 0x0003 |
| GPS altitude (+ ref) | 0x0006 / 0x0005 |
| Field | Tag |
|---|---|
| Document name | 0x010D |
| Image description | 0x010E |
| Software | 0x0131 |
| Date/time | 0x0132 |
| Artist | 0x013B |
| Host computer | 0x013C |
| Copyright | 0x8298 |
| XP Title | 0x9C9B |
| XP Comment | 0x9C9C |
| XP Author | 0x9C9D |
| XP Keywords | 0x9C9E |
| XP Subject | 0x9C9F |
Saved files are named with a cryptographically random string so the name leaks nothing about the content or capture time:
- Random bytes come from the OS CSPRNG via
BCryptGenRandom. - The name is 8β14 characters drawn from a filename-safe set:
AβZ,aβz,0β9, and! @ # $ % ^ & ( ) - _ = + [ ] { }. - The extension matches the chosen format β e.g.
Xy7$kQ2m.png.
The Settings tab persists to config/app.cfg and controls:
| Setting | Description |
|---|---|
| Save directory | Where cleaned images are written. Defaults to an Images folder. |
| Image format | PNG, JPEG, or BMP. |
| Copy to clipboard | After a capture, copy the cleaned image to the clipboard. |
| Auto-save to Images folder | Keep the cleaned image on disk. With this off (and clipboard on), the file is used only as a staging step and removed after copying. |
Both options are independent checkboxes, so you can do either, both, or β if you only want the clipboard β copy without leaving a file behind.
.
βββ src/ # Rust backend (bin path is set in src-tauri/Cargo.toml)
β βββ main.rs # Tauri setup, global Print Screen hook, command registration
β βββ core/
β βββ base/
β β βββ configs/ # settings model + config/app.cfg persistence
β β βββ notify/ # native Windows toast notifications
β β βββ saves/ # save cleaned image + clipboard copy (CF_DIB)
β β βββ screen_grab/ # free-roam region-capture overlay
β βββ helpers/
β β βββ file_data_operations/ # EXIF + metadata stripping via GDI+
β β βββ file_operations/ # filesystem + random filename helpers
β β βββ graphics/ # GDI screen capture
β β βββ windows_*/ # Win32 window helpers
β βββ logic/events/ # global low-level keyboard hook (Print Screen)
βββ ui/ # Frontend (vanilla HTML/CSS/JS) β Claude Code
β βββ index.html
β βββ logo.png
β βββ src/{main.js, styles.css}
βββ src-tauri/ # Tauri manifest, config, icons, capabilities
βββ Cargo.toml # [[bin]] path -> ../src/main.rs; windows-sys features
βββ tauri.conf.json
βββ capabilities/
βββ icons/
Windows only. Anonpic uses the Win32 API throughout and is not designed to be cross-platform.
-
Rust (stable toolchain)
-
Tauri's system prerequisites β on Windows: the WebView2 runtime (preinstalled on Windows 11) and the Microsoft C++ Build Tools.
-
The Tauri CLI:
cargo install tauri-cli --version "^2.0.0" --locked
Run the app with hot-reloading:
cargo tauri devcargo tauri buildcargo check --manifest-path src-tauri/Cargo.toml- Strip metadata from existing images β let the user point Anonpic at images they already have (not just new captures) and scrub them in place.
- Metadata spoofing β instead of only stripping, optionally write custom values (fake camera, timestamp, GPS, author, etc.) so the user can deliberately spoof an image's data.
