The all-in-one screenshot utility for Windows.
Region · Window · Fullscreen · Pinned overlays · Local-first · No telemetry · No cloud required.
The existing landscape on Windows in 2026:
| Tool | Strength | The catch |
|---|---|---|
| Greenshot | Mature plugin ecosystem | WinForms-era UI, GDI-only, weak on HDR/per-monitor DPI |
| ShareX | Maximum knobs | 1990s submenu maze, no theming, intimidating |
| Flameshot | Nice annotation | Windows port is second-class, DPI bugs |
| Snipping Tool | Built in | No scrolling, weak annotation, MS-opinionated UI |
| Snagit | Polished editor (paid) | $63/yr, pushes you toward TechSmith cloud |
| CleanShot X | Pinned overlay UX (paid) | Cloud-first, $29/yr |
Snapture's pitch: the polish of Snagit, the no-cloud philosophy of Greenshot, modern WinRT-class capture, and a Catppuccin-themed editor that doesn't look like it was designed in 2008.
- Sticky-header / sticky-footer detection in the image stitcher — UI chrome that doesn't scroll appears once at the top + bottom of the stitched output instead of repeating per frame.
- Animated GIF recording — Tray → Tools → Record GIF (foreground window or all monitors). 10 fps default, frames held in memory until you stop, saved through a standard file dialog.
- Per-rule auto-redact toggles — Settings → Auto-redact lists every detector rule as a checkbox. Disabled set is persisted; new rules ship enabled.
- Plugin contract resize support — capture processors may now resize, not just replace pixels. Plugin output lands in the saved file and the history index (the order is now capture → plugins → save).
docs/HOTKEYS.md+docs/CAPTURE-MATRIX.md+manifests/for winget submission.
- Image-stitch fallback for scrolling capture — pure-managed subsampled-SAD seam alignment. Browser pages that fell through to "no UIA scroll" in v0.3 now stack cleanly.
- Code-window chrome — Carbon-style export wrapper with macOS traffic-light dots, dark titlebar, rounded corners. Pairs with the existing drop-shadow / gradient frame wrappers.
The differentiator wave
- Auto-redact secrets — Editor button runs OCR + a Gitleaks-derived rule pack (AWS, GCP, GitHub, Stripe, Slack, JWT, npm) plus PII (Luhn-validated cards, SSN, IBAN, IPs, MACs, emails) and drops solid-fill redactions on every match. Each redaction is its own undo-stack entry so false positives are easy to back out.
- LAN-only share server — Local Kestrel server, binds to a single user-chosen adapter (never
0.0.0.0), serves single-fetch token URLs that expire after the TTL. Settings tab to toggle / configure / inspect; editor button to share the current document. - Smart Element Capture — Non-activating overlay highlights individual UIA controls in real time. PgUp climbs the parent chain, click captures the exact element rectangle. The capability no consumer screenshot tool currently ships during capture.
- Plugin SDK —
Snapture.Plugin.Abstractionsships as a separate multi-target library. Plugins drop into%APPDATA%\Snapture\Plugins\, load in collectibleAssemblyLoadContexts, declare capabilities via[SnapturePlugin]. Plugins window in the tray lists what's installed and reloads on demand. - Step Capture mode — Records every click, snapshots the foreground window, presents a review window with per-step caption fields, exports a
steps.md+images/Markdown bundle. The Snagit single-vendor feature with no OSS equivalent.
Capture parity pass — OCR, full-text searchable history, scrolling capture (alpha)
- Built-in OCR —
Windows.Media.Ocr, zero install. Tray → Tools → "OCR region…" picks a region, recognised text lands in the clipboard, result window opens. The History window's "OCR all" button bulk-indexes everything past captures into FTS5. - Capture history with SQLite + FTS5 at
%LOCALAPPDATA%\Snapture\history\index.db. Every capture auto-tagged with foreground process + window title. The History window lets you search across OCR text, process name, and window title with FTS5 syntax. Right-click → Open in editor / Pin / Run OCR / Reveal / Delete. - Scrolling capture (alpha) via UIA
IScrollProvider. Native scroll panes (Office side-panes, Explorer, WPF/WinForms apps) work; browsers fall through to a clear "this window doesn't expose UIA scroll" message. Image-stitching for browsers ships in v0.4.
Capture (v0.2.1)
- WinRT capture engine —
Windows.Graphics.Capturewith free-threaded frame pool, BGRA8 staging-texture readback, no flicker, no Win2D / Vortice / SharpDX dependency. Auto-falls-back to GDI on Win10 < 1809 or capture failure. - Engine selector —
auto/winrt/gdiin settings + the tray menu, hot-swappable at runtime. - AppUserModelID set on app start so the borderless-capture consent persists across reinstalls.
- First-run consent for
GraphicsCaptureAccess.RequestAccessAsync(Borderless)on Win11 22H2+. - WDA_EXCLUDEFROMCAPTURE-aware — flags windows the OS marks excluded (1Password / Bitwarden / banking) instead of saving black PNGs.
- Window-pick overlay with hover highlight + PgUp/PgDn ancestor walk.
- PrintScreen-on-Win11-24H2 detection — tray surfaces a one-click "Reclaim PrintScreen" entry when the OS hijacks the key.
- Last-region recapture (
Shift+PrintScreen) and self-timer (1/3/5/10s region capture) in the tray.
Annotation editor (v0.2.2)
- SkiaSharp-backed canvas with a vector annotation document model — every shape stays editable forever, flattened only on raster export.
- Tools: Rectangle (filled / outlined / rounded), Ellipse, Line (straight / dashed), Arrow (straight / bidirectional / dashed), Freehand pen with mouse-wheel thickness, Text, Highlight, Blur, Pixelate, solid-fill Redact, Step counter (auto-increment).
- Hotkeys:
V/R/E/L/A/F/T/H/B/X/N/CplusCtrl+Z/Yundo/redo,Ctrl+Ssave .snapture,Ctrl+Eexport PNG,Ctrl+Oopen. - Beautify wrappers: drop shadow, rounded corners, gradient backdrop — preview and export render identically.
- Adjustments: brightness, contrast, grayscale, invert.
- Export: PNG, JPG, BMP, WebP.
.snaptureproject file — zip =document.json+background.png+manifest.json. Round-trips losslessly.- Open existing image into the editor (PNG / JPG / BMP /
.snapture).
Settings dialog (v0.2.3)
- Tabbed dialog (General / Capture / Hotkeys / Output / Advanced) reachable from the tray.
- Live hotkey recorder — click a field, press combo, bound. Region / window / fullscreen / last-region all rebindable, applied without restart.
- Engine selector with capability detection.
- Output filename template with placeholder reference.
- Borderless-consent retry + Reclaim-PrintScreen buttons on the Capture tab.
- Settings JSON import/export + reveal in Explorer + runtime diagnostics.
Capture polish (v0.2.4)
- Color picker tool — HEX / RGB / HSL / APCA-Lc readout (vs white + vs black). Live cursor sample, click anywhere to lock + copy HEX.
- Pixel ruler tool — drag to measure Δx / Δy / pixel length / angle across the entire virtual screen.
- Magnifier loupe in the region overlay — 6× zoom, crosshair, pixel coordinate + HEX readout, auto-flips at screen edges.
- Pin window polish — opacity submenu (25/50/75/100% plus Ctrl-scroll), border / shadow toggles,
Alt+clickclick-through,Osolo mode,Hhide/show all pins.
See ROADMAP.md for the full picture.
- v0.7 — MP4 / HEVC / AV1 record (Media Foundation SinkWriter + hardware encoder discovery), HDR tonemap (ACES) + AVIF / JPEG XR, RapidOCR bundle, DOCX / PPTX from Step Capture, MSIX + Chocolatey + Scoop, code-signing via SignPath OSS, auto-update via Velopack
git clone https://github.com/SysAdminDoc/Snapture.git
cd Snapture
dotnet build -c Release Snapture.sln
dotnet run --project src/Snapture.App -c ReleaseRequirements: Windows 10 1903+ or Windows 11, .NET 10 SDK.
Download from Releases once the first tag is cut.
After launching, Snapture lives in the system tray.
| Hotkey | Action |
|---|---|
PrintScreen |
Capture region |
Alt+PrintScreen |
Capture foreground window |
Ctrl+PrintScreen |
Capture fullscreen (all monitors) |
Shift+PrintScreen |
Recapture last region |
| Tray left-click | Capture region |
| Tray right-click | Full menu (per-monitor, settings, tools, engine, output folder) |
All four hotkeys are rebindable from Settings → Hotkeys.
Captures are saved to %USERPROFILE%\Pictures\Snapture\ by default and copied to the clipboard. The editor window opens after every capture (configurable in settings.json).
%APPDATA%\Snapture\settings.json:
{
"outputFolder": "C:\\Users\\you\\Pictures\\Snapture",
"filenamePattern": "Snapture_{yyyy-MM-dd}_{HH-mm-ss}",
"outputFormat": "PNG",
"copyToClipboard": true,
"openEditorAfterCapture": true,
"showToastOnSave": true,
"launchAtStartup": false
}filenamePattern accepts any .NET DateTime format token inside {...}.
Snapture.sln
├─ src/
│ ├─ Snapture.Capture/ ← Capture engine library
│ │ ├─ ICaptureEngine ← Async capture contract
│ │ ├─ GdiCaptureEngine ← GDI / PrintWindow fallback
│ │ ├─ WinRtCaptureEngine ← Windows.Graphics.Capture (v0.2)
│ │ ├─ CaptureItemFactory ← IGraphicsCaptureItemInterop picker bypass
│ │ ├─ D3D11Interop ← D3D11 + IDirect3DDevice bridge (3 P/Invokes)
│ │ ├─ ImageStitcher ← Subsampled-SAD seam alignment + sticky-strip detection
│ │ ├─ MonitorEnumerator ← Per-monitor DPI awareness
│ │ └─ WindowEnumerator ← Top-level window listing + hit-test
│ ├─ Snapture.Plugin.Abstractions/ ← Public plugin surface (multi-target)
│ │ ├─ PluginAttribute ← [SnapturePlugin] + capability flags
│ │ └─ Contracts ← IDestination / ICaptureProcessor / IEditorEffect / IPluginHost
│ └─ Snapture.App/ ← WPF shell
│ ├─ App.xaml(.cs) ← Entry, AUMID, crash logging
│ ├─ Services/
│ │ ├─ AppHost ← Lifetime, hotkey wiring, engine swap
│ │ ├─ CaptureOrchestrator ← Capture → save → clipboard → editor
│ │ ├─ CaptureEngineFactory ← auto/winrt/gdi resolver
│ │ ├─ HotkeyService ← RegisterHotKey on a message-only window
│ │ ├─ SettingsService ← JSON load/save
│ │ ├─ TrayIconHost ← NotifyIcon + context menu
│ │ ├─ AppIdentity ← Sets AUMID for borderless-consent persistence
│ │ ├─ BorderlessConsent ← Win11 22H2+ first-run prompt
│ │ ├─ PrintScreenHijackDetector ← 24H2 registry probe + reclaim
│ │ ├─ OcrService ← Windows.Media.Ocr wrapper
│ │ ├─ CaptureHistoryService ← SQLite + FTS5 history index
│ │ ├─ ScrollingCaptureService ← UIA IScrollProvider driver (alpha)
│ │ ├─ LanShareServer ← Kestrel + token registry
│ │ ├─ PluginLoader ← AssemblyLoadContext-based plugin host
│ │ ├─ PluginHostBridge ← IPluginHost implementation
│ │ ├─ StepCaptureSession ← Click-recorder + Markdown exporter
│ │ └─ GifRecorder ← Continuous capture loop + animated-GIF encode
│ ├─ Editor/
│ │ ├─ AnnotationDocument ← Background bitmap + ordered shape list
│ │ ├─ Shapes ← Rect / Ellipse / Line / Arrow / Pen / Text / Highlight / Blur / Redact / Step (polymorphic JSON)
│ │ ├─ CommandStack ← Add / Remove undo/redo
│ │ └─ SnapFileFormat ← .snapture zip = document.json + background.png + manifest.json
│ └─ Views/
│ ├─ RegionOverlayWindow ← Frozen-screen drag-to-select with magnifier loupe
│ ├─ WindowPickerWindow ← Hover-highlight + PgUp/PgDn ancestor walk
│ ├─ EditorWindow ← Skia canvas + tool palette + adjustments + frame wrappers
│ ├─ PinWindow ← Always-on-top + opacity / shadow / click-through / solo / hide-all
│ ├─ SettingsWindow ← Tabbed dialog (General/Capture/Hotkeys/Output/Advanced)
│ ├─ ColorPickerWindow ← HEX / RGB / HSL / APCA-Lc + global click capture
│ ├─ PixelRulerWindow ← Δx / Δy / length / angle across the virtual screen
│ ├─ SmartCaptureWindow ← UIA element-level live highlight + click capture
│ ├─ HistoryWindow ← Thumbnail wall + FTS5 search
│ ├─ OcrResultWindow ← Recognised-text reviewer
│ ├─ PluginsWindow ← Plugin inventory + reload
│ ├─ StepCaptureWindow ← Step Capture review + Markdown export
│ └─ GifRecordingWindow ← REC indicator + Stop & save
└─ Resources/Themes/
├─ CatppuccinMocha.xaml
├─ CatppuccinLatte.xaml
└─ ThemeStyles.xaml
No telemetry, no analytics, no phone-home, no cloud account. Every network feature is opt-in and explicitly user-triggered. See docs/PRIVACY.md for the audit-grade list of every place Snapture could talk to the network, with verification steps.
