Screenshots, beautifully simple.
A fast, local-first screenshot tool for macOS and Windows.
Hover to find a window, click to capture it, then annotate, beautify and stitch. Everything stays on your computer.
Website · Download · 简体中文 · Features · Shortcuts · Development
Click to watch the demos: window capture, area capture, annotation, styles, signature, default style, stitching, pinning and text extraction.
| Hover a window, click, done | The screen stays exactly as it is. The window under the pointer lights up in a spectrum outline; click to capture just that window, drag for any area, or click the desktop for the full screen. |
| Ten annotation tools, one key each | Boxes, arrows, numbered steps, text, highlighter and blur, all still editable after you draw them. |
| Presentation-ready in one click | Gradients, window frames, rounded corners, soft shadows, aspect ratios and your own signature. Set a style as the default and every new capture starts that way. |
| Stitch several captures | Add another capture with Mod+Shift+A, or paste and drop images, then lay them out vertically, horizontally or in a grid. |
| Pin and read | Float a capture above everything, or pull out its text with on-device OCR. Smart Redact covers user and host names, emails, IPs and keys in one step. |
| Zoom, pan and crop | Scroll to zoom into details, drag to pan, then crop the capture. Crops support undo and keep the annotations inside the selection. |
| Private by design | Screenshots never leave your computer. No account, no cloud, just an anonymous launch count. |
| Platform | Installer |
|---|---|
| macOS · Apple silicon | QuickShot-Mac-arm64-<version>.dmg |
| macOS · Intel | QuickShot-Mac-x64-<version>.dmg |
| Windows 10 / 11 (64-bit) | QuickShot-Win-x64-<version>-Setup.exe |
Get them from the latest release or the website. Installation notes are below.
- One shortcut, anywhere.
⌘⇧Xon macOS,Ctrl+Shift+Xon Windows, or click the tray icon. - QuickShot selection (default): the screen stays exactly as it is. Hover to ring the window under the pointer in a soft spectrum and click to capture just that window and open the editor. Or drag out an area: after you let go you can still move it, resize it by an edge or corner, or nudge it with the arrow keys, then press Return, double-click or click ✓ to open the editor (Esc starts over). On macOS a window is captured on its own, so overlapping windows are left out and rounded corners stay transparent.
- System selection (optional on macOS, via the tray menu → Selection Style): the native crosshair, including
Spaceto capture a single window. - The selection's Copy button uses your saved background, frame, shadow and watermark, then closes the overlay. Styled Quick Copies is on by default; turn it off in Settings to copy the original capture. Clicking a detected window still opens the editor. Double-Click Copies Only makes double-clicking a selection copy it directly and is off by default. Opening the editor leaves your clipboard unchanged, and copying from the editor exports your current annotations and style.
- On macOS, turn off Left-Click Tray Captures in Settings to open the menu without starting a capture. The menu's capture item and keyboard shortcut remain available, including when using menu-bar managers such as Bartender or Ice.
- On multi-display setups, selection follows the pointer's display. The overlay refreshes its position before appearing; disconnecting that display or changing its resolution during preparation cancels the stale capture so its pixels cannot be stretched onto another screen.
- The editor window is kept warm in the background. After ten minutes without a capture, hidden helper windows are released to save memory and rebuilt when needed.
Ten tools, each on a single key: select, rectangle, ellipse, arrow, line, pen, highlighter, text, numbered steps, and redaction (pixelate or blur).
- Every annotation stays editable. Select it to move, resize, recolor, restyle, duplicate or delete it.
- Smart Redact (
Mod+Shift+M, or the button in the redact tool's bar) reads the capture's text on-device and covers, in one step, this computer's user and host names (inuser@hostprompts andls -lowners), the user folder in paths like/Users/name, emails, IP and MAC addresses, and common keys such assk-…,ghp_…andAKIA…or the value inKEY=value. One undo removes it all. It is an aid, so check the result before you share. - Hold
Shiftfor squares, circles and 45° lines. Drawing tools pick up existing marks of the same kind, so an arrow can still start on the edge of a box. - Text supports plain, background and outline styles, multiple lines, and Chinese/Japanese input methods.
- Sizes follow the capture's pixel density, so annotations look the same on Retina and standard displays.
- Unlimited undo and redo.
- Scroll over the canvas to zoom around the pointer, or use the bottom controls to choose 1%–800%, actual size or fit to window. Trackpad pinch and
Mod+=/Mod+-also zoom. - Pan with the hand tool, hold
Spaceand drag, or drag with the middle mouse button. Scrolling pans in hand mode;Shift+ scroll pans horizontally. - Press
Cto crop. Draw a selection, move it or resize its edges and corners; press Return to apply or Esc to cancel. Crops support undo/redo, retain the original image and preserve annotations within the crop. Text extraction, Smart Redact and export use the cropped content. - Zoom changes only the view, so saving and copying keep the output resolution. Long captures render only the visible canvas area to keep memory use bounded.
- Press Stitch (
Mod+Shift+A) in the editor to take another capture and join it to the current one. Pasting or dropping an image adds it too. - Arrange the captures vertically, horizontally or in a grid, with adjustable spacing and alignment. Reorder or remove any capture.
- Annotations move with the capture they were drawn on, and every change can be undone. Beautify, export, pin and text extraction work on the stitched image.
- Curated mesh gradients, wallpapers, solid colors, a blurred copy of the capture itself, or a transparent background.
- Window frames: classic card, frosted glass, macOS dark and light, and a browser window.
- Padding, corner radius, layered soft shadows and social-ready aspect ratios (1:1, 4:3, 16:9, 3:4, 9:16).
- An optional signature watermark that picks a readable color automatically.
- Turn Beautify off to export the plain capture with annotations.
- Copy to the clipboard, save to Downloads, or Save As.
- Pin a capture as a floating, always-on-top reference with adjustable opacity and click-through.
- Extract text from the capture on-device, with Apple Vision on macOS and Windows OCR on Windows.
Screenshots, and any text in them, never leave your computer. There is no account and no cloud. From 1.2.0, QuickShot sends one anonymous report per launch so we can tell how many people use it: a random installation ID, the app version, the OS and its version, and the CPU type. Nothing about what you capture is included. To turn it off, set "usageStats": false in settings.json (in ~/Library/Application Support/quickshot/ on macOS, %APPDATA%\quickshot\ on Windows) and restart QuickShot; development builds never send it. The renderer runs with context isolation, no Node.js access and an allow-listed IPC bridge.
Mod is ⌘ on macOS and Ctrl on Windows. The global capture shortcut can be changed, and scrolling capture given its own, under Settings… in the menu bar menu.
| Where | Shortcut | Action |
|---|---|---|
| Anywhere | Mod+Shift+X |
Capture a region |
| Anywhere | Mod+Shift+L |
Restore interaction with click-through pins |
| Selecting | Click / drag | Capture the window under the pointer / an area, then edit |
| Selecting | Right-click / Esc |
Cancel |
| Editor | V R O A L P H T N M |
Select, rectangle, ellipse, arrow, line, pen, highlighter, text, counter, redact |
| Editor | Mod+Z / Mod+Shift+Z |
Undo / redo |
| Editor | Mod+C |
Copy the final image and close the editor (Settings can keep it open) |
| Editor | Mod+Enter |
Copy and close, always |
| Editor | Mod+S / Mod+Shift+S |
Save to Downloads / Save As |
| Editor | Mod+Shift+P / Mod+Shift+T |
Pin / extract text |
| Editor | Mod+Shift+M |
Smart Redact |
| Editor | C |
Crop; Return applies, Esc cancels |
| Editor | Mod+= / Mod+- |
Zoom in / out |
| Editor | Mod+0 / Mod+9 |
Actual size / fit to window |
| Editor | Mod+Shift+A, Mod+V |
Stitch another capture / a copied image |
| Editor | Mod+D, Delete, arrow keys |
Duplicate, delete, nudge the selected annotation |
| Editor | [ / ] |
Thinner / thicker |
| Editor | Mod+. |
Show or hide the style panel |
| Editor | Esc |
Deselect, then close |
Download the latest installer from Releases:
- macOS:
QuickShot-Mac-arm64-<version>.dmg(Apple Silicon) or-x64-(Intel).- Open the DMG and drag QuickShot into Applications.
- If macOS blocks the first launch (the app is not notarized), run this in Terminal, then open QuickShot again:
Or click Open Anyway in System Settings → Privacy & Security.
sudo xattr -rd com.apple.quarantine /Applications/QuickShot.app
- A welcome guide shows the shortcut and walks you through allowing Screen Recording. Reopen it any time from the menu bar icon.
- Windows:
QuickShot-Win-x64-<version>-Setup.exe. Text extraction uses the OCR languages installed in Windows Settings.
QuickShot lives in the menu bar (macOS) or the notification area (Windows). The tray menu offers the selection style, language, launch at login and diagnostics.
Requirements: Node.js 20.19+ or 22.12+, and Xcode Command Line Tools on macOS for the OCR helper.
git clone https://github.com/cclank/quickshot.git
cd quickshot
npm install
npm run devnpm run dev:ui serves the editor and the selection overlay against HTML fixtures, without Electron or screen permissions. It is the fastest way to work on the interface:
- Editor:
http://localhost:5188/test-fixtures/screenshot-preview.html?windowType=screenshot-preview&sessionId=1&fixtureSource=/test-fixtures/sample-ui.svg&scaleFactor=2 - Selection:
http://localhost:5188/test-fixtures/region-selector.html?windowType=screenshot-region(add&scroll=onfor scrolling capture) - Scrolling capture panel:
http://localhost:5188/test-fixtures/scroll-capture.html?windowType=scroll-capture
Development-only environment variables (ignored by packaged builds):
| Variable | Effect |
|---|---|
QUICKSHOT_USER_DATA_DIR |
Use a separate profile, so a dev build never shares state or the single-instance lock with an installed copy |
QUICKSHOT_DEV_CAPTURE_FILE |
Use this PNG instead of the screen, so the whole capture flow runs without Screen Recording permission |
QUICKSHOT_DEV_SCROLL_FIXTURE |
macOS: a tall PNG that a scrolling capture (--capture-scroll) scrolls through instead of the screen |
QUICKSHOT_ENABLE_DEV_SHORTCUT=0 |
Do not register global shortcuts (the capture shortcut, and Esc/Return during a scrolling capture) |
QUICKSHOT_DEV_REMOTE_DEBUGGING_PORT |
Expose the Chrome DevTools Protocol for automated checks |
QUICKSHOT_DEV_USAGE_STATS=1 |
Send the anonymous usage report from a dev build (off by default); QUICKSHOT_DEV_USAGE_STATS_ENDPOINT points it elsewhere, such as a local test server |
QUICKSHOT_DEV_SETTINGS_BUNDLE |
Test the Screen Recording helper against another app's window (e.g. com.apple.finder) instead of opening System Settings |
| Command | Purpose |
|---|---|
npm run dev |
Vite with Electron |
npm run dev:ui |
Renderer-only fixtures for UI work |
npm test |
Unit tests |
npm run verify |
Tests, type check, production build and bundle budgets |
npm run test:ocr-helper |
Build and smoke-test the macOS OCR helper |
npm run test:scroll-stitcher |
Check the macOS scrolling-capture stitcher against synthetic pages |
npm run build:mac |
macOS DMGs (arm64 and x64) |
node scripts/render-dmg-background.mjs |
Re-render the DMG background from installer/dmg-background.html |
node scripts/record-site-demos.mjs |
Re-record the landing page videos in site/assets/video (needs npm run dev:ui running, Chrome, ffmpeg and cwebp) |
npm run build:win |
Windows NSIS installer |
electron/ Main process: tray, capture, windows, IPC, OCR
main.ts Capture flow and window lifecycle
preload.ts The only bridge exposed to the renderer
windowsOcr.ts Windows.Media.Ocr through PowerShell
src/
editor/ Pure editor logic: annotations, geometry, layout, rendering
components/editor/ Editor UI: toolbar, context bar, style panel, canvas stage
components/screenshot/ Selection overlay, pinned window, text extraction panel
native/quickshot-ocr/ Apple Vision OCR helper for macOS
native/quickshot-window-list/ Window detection helper for the macOS overlay
native/quickshot-capture-agent/ Resident ScreenCaptureKit helper: screen, window and window-list capture
test-fixtures/ Browser fixtures for the editor and overlay
scripts/ Build verification, packaging and fixture capture tools
Pushing a v* tag runs .github/workflows/release.yml, which builds the macOS DMGs and the Windows installer and attaches them to a draft GitHub release. The CSC_LINK and CSC_KEY_PASSWORD secrets hold the macOS release certificate; with them, the macOS apps are signed with it and checked after the build (see docs/release-signing.md, in Chinese, for where the certificate comes from and how to set it up). Notarization also runs when APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD and APPLE_TEAM_ID are set, which needs an Apple Developer ID certificate. Keep the macOS signing identity stable across releases: changing it makes macOS ask for Screen Recording permission again.
The release also carries latest.json, the update feed QuickShot reads (see electron/updates.ts). Installed copies check dl.lanshuagent.com/quickshot/latest.json first, then the feed on GitHub's latest release, and GitHub's API only when neither answers; they check at launch and every six hours, offer what they find, and install it only when asked, after verifying its SHA-256. After publishing the draft release, mirror it to the download host:
WRANGLER=/path/to/wrangler node scripts/publish-update-feed.mjs vX.Y.ZBuilds installed with npm run install:mac:local skip the automatic checks, so a public release never replaces an unreleased local fix.
Issues and pull requests are welcome. Please read CONTRIBUTING.md first.
Thank you to the contributors who help improve QuickShot.
| Contributor | Contributions |
|---|---|
| @wlzh | Transparent icon corners (#4), capture overlay copy actions and a double-click setting (#5), idle window recycling (#6), stable local signing requirements (#7), a tray-click capture setting (#11), multi-display capture placement (#12), and styled quick copies (#13). |
| @dcn-autotest-team | Capture size rounding for fractional display scale factors (#3). |
QuickShot's early implementation grew out of OpenScreen's screenshot work. The current resource loader and renderer build configuration have been reworked for QuickShot. We acknowledge the project's origins and thank OpenScreen's author, Siddharth Vaddem; the original code copyright and MIT terms are preserved in THIRD_PARTY_NOTICES.md.
The bundled public/wallpapers/wallpaper1.jpg through wallpaper12.jpg, together with their thumbnails, were inherited from this historical OpenScreen asset directory. These images are third-party assets; QuickShot does not claim authorship. Their original creators and redistribution permissions have not yet been verified. A license for QuickShot's code does not grant rights to these images. Anyone redistributing them must separately confirm the necessary permissions; this notice does not replace authorization. If you hold rights to an image, please contact the maintainers through a repository issue so its attribution, permission or inclusion can be corrected.
QuickShot is built by 岚叔 (@cclank on GitHub, @LufzzLiz on X).
QuickShot's source code is released under the GNU General Public License v3.0. Third-party code keeps its own license, listed in THIRD_PARTY_NOTICES.md. The bundled wallpapers are not covered by this license; see the notice above.