Local-first. No account. No uploads.
Install · Features · How it works · Contributing
Press record, talk, press stop. Snapcap exports an MP4 and copies it to your clipboard, ready to paste into Slack, Mail or Messages.
Snapcap is a native macOS app built on ScreenCaptureKit, AVFoundation and SwiftUI. It saves your screen, camera, microphone and system audio as separate tracks on your Mac, and adds the camera bubble only when you export. That means you can move, resize, restyle or hide your camera after you've stopped recording, and export again whenever you like.
Snapcap needs macOS 15 Sequoia or later. Prebuilt releases are for Apple silicon Macs.
brew install --cask nftechie/tap/snapcapcurl -fsSL https://raw.githubusercontent.com/nftechie/snapcap/main/scripts/install.sh | bashThe script downloads the latest release from GitHub, verifies its checksum, and
installs Snapcap into /Applications (or ~/Applications if /Applications
isn't writable). Run it again to update. You can read the script
before you run it.
- Download the
.dmgfrom the latest release. - Open it and drag Snapcap into Applications.
- Open Snapcap.
Snapcap isn't notarized by Apple yet (why?), so the first time you open a downloaded copy, macOS says it can't verify that the app is free of malware. To open it anyway:
- Click Done in the warning. Don't move the app to the Trash.
- Open System Settings → Privacy & Security.
- Scroll down to Security, find the message about Snapcap, and click Open Anyway.
- Confirm, and enter your password if asked.
You only need to do this once. The Homebrew and install script methods skip this step.
You'll need Xcode 16 or later.
git clone https://github.com/nftechie/snapcap && cd snapcap && make installThis builds and signs Snapcap.app, copies it to /Applications, and opens it.
CONTRIBUTING.md covers the full development setup.
A short onboarding walks you through three macOS permissions:
| Permission | What it's for |
|---|---|
| Screen & System Audio Recording | Recording your screen and the sound your Mac plays. macOS only applies this permission when an app launches, so Snapcap asks you to relaunch once after you turn it on. |
| Camera | The camera bubble. Optional. |
| Microphone | Your voice. Optional. |
You can skip onboarding and change any of these later in System Settings → Privacy & Security.
- A whole display, one window, or a region you drag out.
- Camera, microphone and system audio, each on its own track and each optional. Snapcap's own windows and sounds never end up in the recording.
- 30 or 60 fps, with the cursor shown or hidden and optional click highlights.
- A 3-2-1 countdown that you can click to skip, a floating HUD with a timer and mic level, and a timer in the menu bar.
- Three shapes: circle, rounded rectangle and rectangle.
- Aspect ratios of 1:1, 4:3, 16:9, 3:4 and 9:16.
- Border width and color, shadow softness and darkness, plus zoom, pan and mirroring.
- Drag the bubble on the live preview, resize it from its corner handle, or let it snap to a corner.
- Move it mid-recording. Drag the on-screen bubble out of the way. The move is saved and animated in the export, and you can switch it off later.
This is the big one. Most screen recorders burn your webcam into the video. Snapcap doesn't.
Your screen, camera, microphone and system audio are saved as separate
files, next to a small project.json that describes how to combine them. The
camera bubble is composited only when you export. After you stop, you can:
- move, resize, reshape or restyle the bubble, or hide it completely
- ignore the moves you made while recording
- trim the start and end by dragging the yellow handles under the preview
- change the microphone and system audio volume
- export at Original, 4K, 1440p, 1080p or 720p, as H.264 or HEVC
Then click Export Again. Tomorrow or next month, open the recording from Recordings (⌘L) and change it again. The original capture is never modified.
- Pause and resume from the HUD, the menu bar, or with ⌥⇧⌘P. Paused time is left out of the video.
- Start over when a take goes sideways. Snapcap throws it away and starts a new one.
- Start and stop from anywhere with ⌥⇧⌘R.
- Discard a take you don't want to keep.
- Silent-mic warning when your microphone is muted or your MacBook lid is closed, before you record ten minutes of nothing.
Click the cap icon in the menu bar to pick a screen, camera and microphone and start recording without opening the main window. Right-click the icon for the full menu. While you're recording, clicking it gives you pause, stop, start over and discard.
- When you stop, Snapcap exports the MP4 and copies it to your clipboard. Paste it straight into Slack, Mail or Messages. You can turn this off in Settings.
- Drag the file from the editor into any app, or use Reveal in Finder or Copy File.
- Rename a recording in the editor, and its exported MP4 is renamed with it.
- Everything is saved to
~/Movies/Recordings, or to a folder you choose in Settings (⌘,). - Exports are plain MP4 files, with the raw tracks kept next to them.
- There's no account, no sign-in and no upload. Snapcap never sends your recordings anywhere.
- Settings also cover launch at login and copy to clipboard after export.
~/Movies/Recordings/
├── 2026-09-15 3.42 PM.mp4 the export, ready to share
└── Sessions/
└── 2026-09-15 3.42 PM/ the raw capture, never modified
├── screen.mov HEVC, native resolution
├── camera.mov HEVC, about 1080p at 30 fps
├── system-audio.m4a AAC, 48 kHz stereo
├── microphone.m4a AAC, 48 kHz mono
└── project.json the recipe for the export
Loom is a great product for teams that want cloud sharing. Snapcap is for people who want a fast recorder that keeps files on their own Mac.
| Snapcap | Loom | |
|---|---|---|
| Price | Free | Free plan with limits, plus paid plans |
| Open source | Yes (MIT) | No |
| Account required | No | Yes |
| Where recordings go | Your Mac, as plain MP4 files | Loom's cloud |
| Built for | macOS (Swift, SwiftUI, ScreenCaptureKit) | Mac, Windows, Chrome and mobile |
| Change the camera bubble after recording | Yes: move, resize, restyle or hide it | Limited |
| Shareable cloud links | Not yet | Yes |
| Comments, reactions and viewer insights | No | Yes |
Loom details as of September 2026 and subject to change. See loom.com/pricing for current plans.
ScreenCaptureKit ─┬─► screen.mov ─────────┐
└─► system-audio.m4a ───┤
├─► composite + export ─► .mp4
AVCaptureSession ─┬─► camera.mov ─────────┤ ▲
└─► microphone.m4a ─────┘ │
project.json
- Separate tracks. Each source is written to its own file by an
AVAssetWriter. The camera is combined with the screen only at export, by a customAVVideoCompositingcompositor that followsproject.json. - One clock. Every sample is stamped on the Mac's host clock, and all writers start at the same instant, so the files line up without any post-processing. Pauses are cut out of every track by the same amount.
- Snapcap stays out of the shot. The capture filter excludes Snapcap's own
windows, so the floating bubble, HUD and countdown never appear in
screen.mov. - The preview matches the export. The live bubble (Core Animation) and the
exporter (Core Graphics and Core Image) get their geometry from the same
OverlayLayoutcode. - Colors come out as captured. Frames go through the compositor without color conversion, and a pixel-level test checks it.
For the full story, including the project.json schema, see
docs/ARCHITECTURE.md.
Sources/
├── SnapcapCore/ No UI. Capture, models, layout, rendering and export.
│ ├── Capture/ ScreenCaptureKit and AVCaptureSession into track writers
│ ├── Layout/ OverlayLayout and BubbleShape: bubble geometry
│ ├── Model/ Project (project.json), CameraOverlay, RecordingLibrary
│ ├── Render/ CompositionBuilder, OverlayCompositor, FrameComposer, VideoExporter
│ └── Support/ SessionFixture: synthetic recordings for tests
├── Snapcap/ The SwiftUI and AppKit app
│ ├── App/ App delegate, recording state machine, hotkeys, menu bar, demo mode
│ ├── Views/ Setup, editor, recordings, settings, onboarding, menu bar popover
│ └── Windows/ Floating camera bubble, HUD, countdown, region selector
└── snapcap-cli/ Headless fixture, export and record commands
Tests/SnapcapCoreTests/ Layout, model, pause, trim and pixel-level export tests
Resources/ Info.plist, entitlements and icon artwork
scripts/ Build, icon, DMG, notarization and install scripts
packaging/homebrew/ Homebrew cask template
docs/ Architecture, releasing and README images
snapcap-cli uses the same core as the app. It's useful for testing, batch
re-exports and CI.
make cli # builds snapcap-cli and prints its pathsnapcap-cli fixture <folder> [--seconds 3] [--no-camera] [--no-audio] [--screen-image shot.png] [--camera-image face.png]
snapcap-cli export <session-folder> [--resolution original|p2160|p1440|p1080|p720] [--codec h264|hevc] [--output out.mp4]
snapcap-cli record <folder> [--seconds 3] [--camera] [--mic] [--camera-device name] [--mic-device name] [--no-system-audio] [--export]fixturewrites a synthetic session (screen, camera, audio andproject.json) without touching any devices. Pass PNGs to use your own screen and camera images.exportrenders a session folder to MP4 (<session-folder>/final.mp4by default), honoring its trim and camera settings. It's handy after hand-editingproject.json.recordrecords the main display headlessly for a few seconds, as a smoke test.
To open a session folder straight in the editor, run
/Applications/Snapcap.app/Contents/MacOS/Snapcap --open <session-folder>.
In ~/Movies/Recordings, unless you picked another folder in Settings. Exported
MP4s are at the top level, and the raw tracks and project.json for each
recording are in Sessions/. You can also get there from File → Show
Recordings Folder or the Recordings window (⌘L). Changing the folder in
Settings doesn't move recordings you've already made.
macOS applies the Screen & System Audio Recording permission when an app launches, so a running app can't use a permission you grant afterwards. macOS offers Quit & Reopen, and Snapcap has a Relaunch button too. It's a one-time step.
Until releases are notarized, macOS sometimes doesn't recognize an updated copy as the same app. Open System Settings → Privacy & Security → Screen & System Audio Recording, remove Snapcap with the − button, add it back, and relaunch.
No. There's no account, no server and no analytics, and Snapcap doesn't make network requests. Recordings stay on your Mac until you share them yourself.
Notarization requires a paid Apple Developer Program membership and a Developer ID certificate. The release scripts already support notarization, but the project doesn't have those credentials yet. Until it does, the DMG shows Gatekeeper's warning the first time you open it (see Download the DMG). Installing with Homebrew or the install script avoids that warning, and so does building from source.
If you installed with Homebrew:
brew uninstall --cask snapcap # add --zap to remove Snapcap's preferences tooOtherwise, quit Snapcap and delete Snapcap.app from /Applications (or
~/Applications).
Uninstalling never deletes your recordings. They stay in ~/Movies/Recordings
(or your chosen folder) until you delete them yourself.
Yes. Missing keys fall back to their defaults. Re-export from the editor or with
snapcap-cli export. The schema is documented in
docs/ARCHITECTURE.md.
Planned features, roughly in order of interest:
- Cursor zoom that follows your clicks
- Click and keystroke overlays
- Silence removal
- Backgrounds and device frames
- 9:16 and 1:1 exports
- Captions and transcripts
- Shareable links
- Custom keyboard shortcuts
- Localization
Have an idea, or want to vote on one of these? Start a thread in Discussions.
Contributions of every size are welcome, from bug reports and docs fixes to whole features.
- Read CONTRIBUTING.md for setup (
make run,make test) and for how to work without a camera or permissions. - Pick a good first issue.
- Learn how the pieces fit in docs/ARCHITECTURE.md, and how the app is meant to feel in docs/USER_JOURNEYS.md.
- Please follow the Code of Conduct, and report security issues privately as described in SECURITY.md.
Snapcap is released under the MIT License. Copyright (c) 2026 Alex Wormuth.
- Built on Apple's ScreenCaptureKit, AVFoundation, Core Image and SwiftUI.
- Inspired by Loom, and by every "quick video" that was meant to take a minute.
- Badges by shields.io. Code of Conduct adapted from the Contributor Covenant. Changelog format from Keep a Changelog.




