Skip to content

Repository files navigation

The Snapcap logo, a yellow baseball cap with a black play button, next to two smiling people wearing matching yellow caps

The free, open-source Loom alternative for Mac.

Local-first. No account. No uploads.

License: MIT macOS 15 or later Swift 6 Latest release CI status PRs welcome

Install · Features · How it works · Contributing


A video exported by Snapcap: a slide deck about weekly active teams, with the cursor moving over a bar chart and the presenter's camera in a round, yellow-bordered bubble that glides from the bottom-right corner to the top-right and back as it was dragged during recording

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.

Install

Snapcap needs macOS 15 Sequoia or later. Prebuilt releases are for Apple silicon Macs.

Homebrew (recommended)

brew install --cask nftechie/tap/snapcap

Install script

curl -fsSL https://raw.githubusercontent.com/nftechie/snapcap/main/scripts/install.sh | bash

The 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 DMG

  1. Download the .dmg from the latest release.
  2. Open it and drag Snapcap into Applications.
  3. 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:

  1. Click Done in the warning. Don't move the app to the Trash.
  2. Open System Settings → Privacy & Security.
  3. Scroll down to Security, find the message about Snapcap, and click Open Anyway.
  4. Confirm, and enter your password if asked.

You only need to do this once. The Homebrew and install script methods skip this step.

Build from source

You'll need Xcode 16 or later.

git clone https://github.com/nftechie/snapcap && cd snapcap && make install

This builds and signs Snapcap.app, copies it to /Applications, and opens it. CONTRIBUTING.md covers the full development setup.

First launch

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.

Features

Record anything on your screen

  • 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.

The Snapcap setup window: capture, camera and microphone settings on the left, and on the right a live preview of the screen with a draggable camera bubble above a yellow Start Recording button

A camera bubble that fits your style

  • 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.

Edit the camera after recording

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.

The Snapcap editor: the recording plays on the left with the camera bubble drawn on top and a trim bar underneath, and camera, audio and export settings sit in a panel on the right

Stay in control while recording

  • 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.

Quick record from the menu bar

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.

The Snapcap menu bar popover with pickers for the screen, camera and microphone, a system audio switch, and a yellow Start Recording button

Share in seconds

  • 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.

Your files stay on your Mac

  • 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

Snapcap vs Loom

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.

How it works

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 custom AVVideoCompositing compositor that follows project.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 OverlayLayout code.
  • 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.

Project layout

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

Command-line tool

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 path
snapcap-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]
  • fixture writes a synthetic session (screen, camera, audio and project.json) without touching any devices. Pass PNGs to use your own screen and camera images.
  • export renders a session folder to MP4 (<session-folder>/final.mp4 by default), honoring its trim and camera settings. It's handy after hand-editing project.json.
  • record records 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>.

FAQ

Where are my recordings?

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.

Why does macOS ask me to relaunch after I allow Screen Recording?

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.

Why is Snapcap asking for Screen Recording again after an update?

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.

Does Snapcap upload anything?

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.

Why isn't Snapcap notarized yet?

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.

How do I uninstall Snapcap?

If you installed with Homebrew:

brew uninstall --cask snapcap          # add --zap to remove Snapcap's preferences too

Otherwise, 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.

Can I edit project.json by hand?

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.

Roadmap

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.

Contributing

Contributions of every size are welcome, from bug reports and docs fixes to whole features.

License

Snapcap is released under the MIT License. Copyright (c) 2026 Alex Wormuth.

Credits

  • 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.

About

The free, open-source Loom alternative for Mac. Local-first screen and camera recorder with a camera bubble you can edit after recording.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages