🤖 No humans were involved in developing this. Completely built and reviewed by AI — only tested by a human.
A macOS menu bar app that captures screenshots and dresses them up — gradient, solid, or pattern backgrounds, padding, rounded corners, soft shadows, and an optional fake macOS window frame with traffic-light buttons. Like Xnapper or Shots.so, but yours.
Requires macOS 14 (Sonoma) or later.
-
Download the latest
ScreenshotStudio-*.dmgfrom the Releases page. -
Open the
.dmgand drag Screenshot Studio into Applications. -
First launch: right-click the app → Open → Open in the dialog.
This build is open-source and ad-hoc signed but not notarized, so macOS Gatekeeper shows a one-time "Apple could not verify…" warning. Right-click → Open clears it. (Alternatively:
xattr -dr com.apple.quarantine "/Applications/Screenshot Studio.app".) -
The first capture prompts for Screen Recording permission — grant it, then quit and relaunch. See Permissions below.
Building from source instead? You'll need the Swift toolchain (Xcode, or
xcode-select --installfor Command Line Tools).
cd ScreenshotStudio
chmod +x build.sh
./build.sh
open build/ScreenshotStudio.appbrew install xcodegen
cd ScreenshotStudio
xcodegen
open ScreenshotStudio.xcodeproj # then ⌘R- Xcode → New Project → macOS App, SwiftUI, name it
ScreenshotStudio. - Delete the generated
ContentView.swiftand*App.swift. - Drag everything from
Sources/into the project. - Target settings → Info: add
Application is agent (UIElement)= YES. - Signing & Capabilities: remove the App Sandbox capability (the app
shells out to
/usr/bin/screencapture, which the sandbox blocks). - Set deployment target to macOS 14.0. Run.
The app lives in the menu bar (camera icon) — no Dock icon.
The first capture triggers macOS's Screen Recording permission prompt. Grant it under System Settings → Privacy & Security → Screen & System Audio Recording, then quit and relaunch the app.
macOS ties the Screen Recording grant to the app's code signature. With the
default ad-hoc signature, every ./build.sh run produces a new signature,
which invalidates the previous grant — the capture then fails silently
(no crosshair). The build script clears the stale entry so macOS re-prompts,
but you must re-grant (and relaunch) after every rebuild.
To make the grant survive rebuilds, sign with a stable identity:
- Keychain Access → Certificate Assistant → Create a Certificate…
Name it e.g.
ScreenshotStudio Dev, set Certificate Type to Code Signing, and create it in the login keychain. - Build with
CODESIGN_ID="ScreenshotStudio Dev" ./build.sh.
(If you have Xcode signed in to an Apple ID, an Apple Development: …
identity from security find-identity -v -p codesigning works too.)
- ⌃⇧S anywhere (or menu bar → Capture Screenshot) starts a capture.
- Drag to select a region, or press Space to switch to window mode, Esc to cancel.
- The editor opens with your shot composited live. Tweak:
- Background: 12 gradient presets, any solid color, or dot/grid/stripe patterns
- Padding, corner radius, aspect ratio (Auto / 1:1 / 4:3 / 16:9)
- Shadow size and opacity
- Window chrome toggle + optional title text
- ⌘C copies the result, ⌘S saves a PNG, ⌘N starts a new capture.
- Menu bar → "Open Image…" lets you beautify any existing image too.
Exports render at 2× scale, so Retina captures stay pixel-sharp.
| File | Role |
|---|---|
App.swift |
Menu bar app entry, capture/open flow |
HotKeyManager.swift |
Global ⌃⇧S hotkey (Carbon, zero dependencies) |
CaptureManager.swift |
Capture via the system screencapture -i -o tool |
Style.swift |
CompositionStyle model, gradient presets, layout math |
CompositionView.swift |
The canvas: background + chrome bar + clipped screenshot |
EditorView.swift |
Editor window UI: live preview + control panel |
Exporter.swift |
ImageRenderer export, clipboard, save panel, window controller |
The same CompositionView drives the live preview and the export
(ImageRenderer at 2×), so output always matches the preview exactly.
- Replace the
screencaptureshell-out with ScreenCaptureKit and a custom selection overlay (also unblocks App Sandbox / App Store distribution) - Auto-copy to clipboard right after capture
- Remember the last-used style between sessions (
@AppStorage) - Blurred-desktop and image backgrounds, mesh gradients
- Annotations: arrows, text, redaction blur
- Configurable hotkey (swap
HotKeyManagerfor the KeyboardShortcuts package)
- Not sandboxed (see above) — fine for personal use and direct distribution with notarization, but not App Store-ready as-is.
- Window chrome bar is light-mode styled; a dark variant is an easy follow-up.
Material/blur effects can't be used in the composition becauseImageRendererdoesn't render them — stick to colors, gradients, shadows.
./package.sh # builds a universal binary and a build/ScreenshotStudio-<version>.dmgOr let CI do it: push a tag and
.github/workflows/release.yml builds the
universal .dmg and attaches it to a GitHub Release.
git tag v1.0
git push origin v1.0Bump CFBundleShortVersionString in build.sh before tagging.
Note: released builds are ad-hoc signed, not notarized, so downloaders see a one-time Gatekeeper warning (handled in the Install steps). For a warning-free install, join the Apple Developer Program ($99/yr), sign with a Developer ID, and notarize with
xcrun notarytool— then the same.dmgflow works without any user bypass.
Issues and PRs welcome. The whole app is ~7 small Swift files (see
How it's put together) and builds with a single
./build.sh — no Xcode project required.
Licensed under the Apache License 2.0. See NOTICE for
attribution.
