Skip to content

Latest commit

 

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MacShot icon MacShot

Build MacShot

MacShot is a lightweight ShareX-style capture utility for macOS. It lives in the menu bar, captures screenshots and recordings, keeps a local history, and can upload captures to configurable destinations.

The goal is a fast native macOS tool with the workflows people expect from ShareX, without carrying a heavy always-on UI.

Install

Download the latest MacShot.dmg from the releases page, open it, and drop MacShot into /Applications. Requires macOS 15 or newer.

Builds are ad-hoc signed, so Gatekeeper blocks the first launch — right-click the app and choose Open once to get past it.

Features

  • Area, screen, and window screenshots
  • Repeat the last captured region without picking it again
  • Area and full-screen recordings
  • Optional GIF output for recordings
  • Replay buffer for saving the last moments of your screen
  • Annotation tools in the selection overlay: arrow, pen, line, rectangle, ellipse, highlighter, text, step numbers, blur, pixelate, spotlight
  • Image effects with live preview: canvas, background, rounded corners, shadow, border, macOS window frame, image, resize, blur, glow, opacity
  • Shareable effect presets via .msie, with import for ShareX .sxie and .json effect configs
  • Pin captures on top of everything, with drag, zoom, and copy
  • Text recognition (OCR) straight from a picked region
  • Screen color picker that copies the hex value
  • Filename templates with app name, window title, dimensions, counter and date parts
  • Update check against the releases page, with an in-app banner
  • Configurable global hotkeys
  • Custom idle menu bar icon
  • Custom sidebar accent color
  • Custom capture sounds
  • After-capture workflow: save to disk, copy to clipboard, upload, preview popup, pin to screen, sounds
  • After-upload workflow: copy URL, open in browser, show notification
  • Local capture history with thumbnails and upload links
  • Custom upload destinations with headers, form fields, response templates, thumbnail URLs, deletion URLs, and error messages
  • MacShot custom uploader files via .mscu
  • Built-in presets for 0x0.st, cops.bio, Gyazo and ImgBB

Why MacShot

ShareX is excellent, but it is Windows-first. MacShot is the same kind of workflow tool built directly for macOS:

  • native Swift/AppKit/SwiftUI app
  • menu-bar only by default
  • ScreenCaptureKit based capture and recording
  • system-managed recording output instead of a custom encoder pipeline
  • debounced settings writes
  • lazy thumbnail loading in history
  • no background polling loop for normal idle operation

Idle Usage

Measured on July 9, 2026 with the release app running from /Applications on macOS 26.5.2, Apple Macbook Air M5, 16 GB RAM:

State CPU Resident memory Threads
Menu bar idle, no recording, no replay buffer 0.0% ~61-63 MB 7

The CPU figure came from 12 consecutive top samples over roughly 12 seconds. ps reported 64,784 KB RSS for the same process. These numbers are not a benchmark suite, but they describe the current idle footprint on the measured machine.

Custom Uploaders

MacShot stores custom uploader configs as .mscu files. The format is JSON and intentionally close to ShareX custom uploader configs, so common fields are easy to map:

{
  "Name": "cops.bio",
  "RequestMethod": "POST",
  "RequestURL": "https://cops.bio/api/imagehost/upload",
  "FileFormName": "file",
  "Headers": {
    "Accept": "application/json",
    "Authorization": "Bearer YOUR_TOKEN"
  },
  "Body": "MultipartFormData",
  "URL": "{json:url}",
  "ThumbnailURL": "{json:rawUrl}",
  "ErrorMessage": "{json:error}"
}

Supported response placeholders:

  • {response} for the full response body
  • {json:path.to.value} for JSON values
  • {regex:pattern} for regex extraction
  • {header:Name} for response headers
  • {filename} in request URL, headers, and form fields

Filename Templates

The save name is built from a template. Tokens resolve at capture time:

{date} {time} {year} {month} {day} {hour} {minute} {second} {app} {title} {type} {width} {height} {counter} {random} {user}

{app} and {title} come from the window that was active when the hotkey fired, so {app}_{date}_{random} yields Safari_2026-07-30_A1B2C3.png. Settings → Capture lists every token and previews the result as you type.

Image Effects

Effects run on screenshots before anything else touches them, so the saved file, the clipboard copy, the preview and the upload all show the same result. Turn them on under Settings → Workflow → Apply image effects, and build the chain under Settings → Effects with a live preview.

A preset is an ordered chain of these primitives:

Canvas pads or crops the frame, negative values cut in
Background solid or gradient fill behind the capture
RoundedCorners clips the corners
Shadow drop shadow, grows the frame to fit the blur
Border stroked outline
WindowFrame drawn macOS titlebar with traffic lights and an optional caption
Image composites a bundled image at an anchor
Resize scales, a side left at 0 keeps the aspect ratio
Blur Glow Opacity filters over the whole frame

Presets are shared as .msie files: a ZIP holding Config.json plus any images the chain draws. The config is JSON and deliberately close to ShareX image effect configs:

{
  "Name": "macOS Window",
  "Effects": [
    { "Type": "WindowFrame", "Color": "#2B2B2E", "Radius": 10, "Title": "Safari" },
    { "Type": "RoundedCorners", "Radius": 10 },
    { "Type": "Shadow", "Radius": 28, "OffsetY": -10, "Opacity": 0.4 },
    { "Type": "Canvas", "Top": 56, "Left": 56, "Right": 56, "Bottom": 56 },
    { "Type": "Background", "Color": "#FF7E5F", "SecondColor": "#FEB47B", "Angle": 135 }
  ]
}

ShareX .sxie packages and plain .json effect configs import directly — their $type names, Padding/Point objects and "R, G, B" colors are translated on the way in. Effects with no counterpart here (particles, torn edges, convolution matrices and the like) are skipped and named in the import notice, so you always see what did not come across.

Build

Requirements:

  • macOS 15 or newer
  • Xcode Command Line Tools
  • Swift Package Manager

Build and run locally:

swift run MacShot

Build the app bundle:

make app

Build the distributable DMG:

make dmg

The DMG is written to dist/MacShot.dmg.

CI

The GitHub Actions workflow builds MacShot on pushes to main and on manual runs. It packages the app as a DMG and uploads it as a workflow artifact.

Privacy

MacShot captures your screen only when you trigger a capture, recording, or replay-buffer action. Uploads only happen when enabled in the workflow settings and use the configured upload destination.

License

MIT — see LICENSE.

About

MacShot is a lightweight capture utility for macOS. It lives in the menu bar, captures screenshots and recordings, keeps a local history, and can upload captures to configurable destinations.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages