Lightweight Windows screenshot pinning tool. Capture up to 10 screenshots and keep them floating above all other windows.
PinShot is built for one focused job: quickly capture reference screenshots and keep them visible while you work. Snip any rectangular region, pin up to 10 resizable screenshots on top of every other window, then mark them up, copy, save, or extract text when needed.
Download PinShot from GitHub Releases: PinShot.zip
Do not use the green Code button if you only want to run the app. The Code button downloads the source code for developers.
- Open the latest release page.
- Under Assets, download
PinShot.zip. - Extract the zip file anywhere on your computer.
- Open the extracted folder.
- Double-click
PinShot.exe.
No installer. No admin rights. No Python required.
On first launch, Windows SmartScreen may show "Unknown publisher" because this free release is currently unsigned. If you trust the GitHub download, click More info -> Run anyway.
Demo images use mock data only.
| Annotation tools | OCR to clipboard |
|---|---|
![]() |
![]() |
- Capture up to 10 screenshots at the same time
- Every screenshot stays floating above all other windows
- Resize each pinned screenshot freely
- Close one screenshot or clear all pinned screenshots from the toolbar
- Drag-select any rectangular region across all monitors (full virtual desktop)
- Snap-to-window-edges while dragging (8 px threshold) — hold
Shiftfor a perfect square - Timed capture: 0 / 3 / 5 / 10 second delay (frozen-screen mode preserves dropdown menus)
- Live
W × Hreadout while selecting - Pixel-precise magnifier loupe at the cursor with a 21×21 zoom, crosshair, hex code and on-screen coordinates
Esccancels selection any time
- Up to 10 floating, always-on-top, freely resizable screenshot windows simultaneously
- Indices reuse — closing #2 frees up #2 for the next capture
- One-click Close All in the toolbar
| Tool | What it does |
|---|---|
| Highlight | Translucent freehand stroke (RDP simplification + Catmull-Rom smoothing) |
| Rectangle | Outline a region |
| Rectangle (filled) | Translucent fill + outline |
| Ellipse / Ellipse (filled) | Outlined or translucent oval |
| Arrow | Sleek arrow with proportional head |
| Number | 1, 2, 3 markers — auto-renumber on undo |
| Text | Inline text annotation with soft backdrop |
| Spotlight | Dim everything outside a chosen rectangle |
| Blur / Redact | Pixelate sensitive regions |
- Colors: Yellow, Red, Green, or any custom hex
Ctrl+Zundo per window — accumulates as you edit- Adjustable Number Size (Small / Medium / Large / Extra Large) — DPI-aware, targets ~1 cm physical diameter
- Auto-copied to clipboard the moment a screenshot is taken
- Copy to Clipboard (after edits) — supports both
CF_DIB(Outlook, Word, Teams) andCF_PNG(modern web apps) - Save As… — PNG (lossless, ~135 ms encode for 1080p), WebP (lossless, 35–65% smaller than PNG), JPEG (q92, optimised), BMP. Encodes happen on a background thread.
- Pick Color at Cursor — copies hex, shows OkLab/OKLCH readout + perceptual delta-E to white/black
- Magnify Region — floating loupe that follows the cursor on a pinned screenshot
- Grab Text — native Windows OCR copies extracted text straight to your clipboard
- Minimize the toolbar to the system tray
- Tray menu: Capture / Show PinShot / Quit
- Capture from the tray without restoring the toolbar
Saved to %LOCALAPPDATA%\PinShot\pinshot.json:
- Last save folder
- Last delay choice
- Default tool / color / number size
- Toolbar position
- First-run dialog suppression
Crash logs at %LOCALAPPDATA%\PinShot\pinshot.log (rotating, capped at 512 KB × 2 backups).
- Cold launch: ~0.6–0.8 sec from double-click to toolbar visible (PyInstaller
--onedirwith stripped stdlib modules) - Stroke commit: ~1 ms regardless of how many strokes already exist (dirty-rect compositing)
- Resampling: LANCZOS for sharp display at any window size; 1:1 native rendering by default
- Single-instance enforcement via Win32 named mutex — second launch surfaces the existing toolbar instead of duplicating it
- Per-monitor DPI awareness so markup looks the right physical size on any monitor
- Launch
PinShot.exeand click Capture. - Optionally pick a 3 / 5 / 10 sec delay from the dropdown.
- Hover the screen — a magnifier loupe shows pixel detail.
- Click and drag to select; snap to window edges or hold
Shiftfor a square. - Release the mouse — the screenshot appears AND is auto-copied to your clipboard.
- Resize the floating window by dragging its edges/corners.
- Left-click and drag on a screenshot to apply the current markup tool.
- Right-click for the full action menu (tool, color, number size, copy, save, OCR, magnify, undo, clear, close).
- Drag the toolbar to reposition — PinShot remembers its location.
- Click
–to minimize to tray,✕to quit. Click the PinShot wordmark for the About dialog.
If you'd rather build the binary yourself:
# Requirements: Windows 10/11, Python 3.11+, pip
git clone https://github.com/<your-username>/pinshot.git
cd pinshot
pip install -r requirements.txt
build.batOutput:
dist\PinShot\PinShot.exe— the application (folder build, fast cold-start)dist\PinShot.zip— the distributable zip (drop anywhere and run)
pinshot/
├── assets/ # README screenshots and short demo GIFs
├── screenshot_tool.py # The whole app (single Python file)
├── pinshot.ico # App icon
├── PinShot.spec # PyInstaller build spec
├── build.bat # One-shot build script
├── requirements.txt # Pillow, PyInstaller, pystray, winrt-* (OCR)
├── README.md # This file
├── NOTICE # Ownership/provenance signature
└── LICENSE # Personal use only
Personal Use License — free for personal use only. Resale, redistribution, repackaging, sublicensing, and commercial exploitation are not allowed without written permission from Jim. Provided as-is, no warranty.
Project signature for ownership/provenance: PINSHOT-JIM-2026-PERSONAL-USE-7F3A9C2D.
See NOTICE.
PinShot is built and maintained by Jim as a free product, with no ads, no telemetry, no paywall. If it saves you time or makes your day a little smoother, a star on this repo or a kind word goes a long way.
For questions, bugs, or feature requests, open an issue.





