Skip to content

WHots/Anonpic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Anonpic logo

Anonpic

Capture a region of your screen, strip its identifying metadata, and save or copy a clean image.

Platform Backend Framework

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 :)**

What is Anonpic?

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.

Features

  • πŸ“Έ 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 Γ— height label 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.

How it works

  1. Trigger β€” the global Print Screen hook (or the in-app button) starts a capture.
  2. Snapshot β€” the entire virtual desktop is snapshotted up front, then the dimmed overlay is shown, so the overlay itself never appears in your screenshot.
  3. Select β€” you drag a rectangle; the live W Γ— H size is drawn next to the cursor.
  4. Crop & clean β€” the chosen region is cropped from the snapshot, encoded to your chosen format, and run through the EXIF + metadata strippers.
  5. Dispatch β€” depending on your settings, the cleaned image is saved to disk, copied to the clipboard, or both, and a toast confirms it.

Privacy: what gets removed

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.

EXIF (camera & location) β€” xif_data

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

Authoring & "Details" tab metadata β€” metadata

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

How file names are generated

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.

Settings

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.

Project layout

.
β”œβ”€β”€ 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/

Building & running

Windows only. Anonpic uses the Win32 API throughout and is not designed to be cross-platform.

Prerequisites

  • 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

Develop

Run the app with hot-reloading:

cargo tauri dev

Build a release bundle

cargo tauri build

Type-check the backend only

cargo check --manifest-path src-tauri/Cargo.toml

Roadmap / TODO

  • 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.

Recommended IDE setup