Cinematic screen recording for macOS — turn raw captures into polished product videos.
Native macOS screen recorder built in Swift, SwiftUI, and Metal. Capture any window, display, or region with ScreenCaptureKit; polish it in a per-frame timeline editor with smooth cursor motion, automatic zooms, and gradient backdrops; then export through an AVAssetWriter pipeline that never drops a frame.
Free and open source (MIT) · macOS 14+ · Apple Silicon & Intel.
⬇ Download for Mac · Product page & demo
Apple's native capture API drives every frame. Pick a window, a display, or a region — CineScreen pipes the raw stream straight into a Metal compositor.
Smooth cursor motion, automatic click highlights, and zoom keyframes you tune in the timeline. Style recordings with gradient backdrops, padding, and rounded window chrome.
A dedicated export compositor renders the final video offline at a locked frame
rate. ProRes or H.264, no dropped frames, signed and notarized .dmg.
A whole studio in your menu bar. CineScreen sits quietly until you need it — tap record, pick a window, and the editor opens with your clip already loaded.
- Install — drag CineScreen into Applications; the menu-bar icon appears on first launch.
- Grant access — enable Screen Recording for CineScreen in System Settings, then relaunch.
- Record — open the floating control bar, pick a window or display, hit record. Stop, and your clip drops straight into the editor.
- Export — style, scrub, and tune; the Metal compositor renders every frame offline at a locked frame rate.
CineScreen updates itself in place via Sparkle. Because the app is replaced at its existing path, macOS keeps the Screen Recording / Accessibility permissions you already granted — no re-granting after updates. The app verifies each download against an embedded EdDSA key before installing. See docs/UPDATES.md for the full pipeline.
Swift 5.9 · SwiftUI · Metal · ScreenCaptureKit · AVFoundation · AVAssetWriter · AppKit · Sparkle
Prereqs: macOS 14+, Xcode 15+, XcodeGen.
brew install xcodegen
make project # generate CineScreen.xcodeproj from project.yml
make open # open in XcodeCineScreen.xcodeproj is gitignored — it's regenerated from project.yml. Edit project.yml (not the pbxproj) when adding files or changing settings.
make build # debug build (current arch)
make build-release # release build (universal)
make archive # xcarchive for distribution
make export # signed .app from archive
make dmg # package .app into .dmg
make notarize # submit DMG to Apple and staple
make release # full pipeline
make clean # nuke build/ and CineScreen.xcodeprojFor local notarization, run once:
xcrun notarytool store-credentials cinescreen-notary \
--apple-id YOU@example.com \
--team-id JAT3GYBPJ4 \
--password APP-SPECIFIC-PASSWORDCutting a release: bump MARKETING_VERSION in project.yml, commit, then push a
vX.Y.Z tag. The .github/workflows/release.yml pipeline signs with Developer ID,
notarizes, publishes the GitHub Release, and deploys the Sparkle appcast to GitHub
Pages — which auto-updates existing users.
.
├── project.yml # XcodeGen spec
├── Makefile # build/sign/notarize targets
├── exportOptions.plist # xcodebuild -exportArchive options
├── scripts/ # make_release.sh (archive→sign→notarize→DMG/appcast)
├── docs/ # UPDATES.md (Sparkle auto-update setup)
└── CineScreen/
├── App/ # @main + root views, Sparkle updater
├── Capture/ # ScreenCaptureKit + mouse tracking
├── Compositor/ # Metal renderer
├── ControlBar/ # floating control bar window
├── Editor/ # SwiftUI editor + per-frame state
├── Export/ # AVAssetWriter export pipeline
├── MainWindow/ # projects library, settings
├── Models/ # metadata + project structs
├── Projects/ # project library on disk
├── StatusItem/ # menu-bar UI
├── Util/
└── Resources/ # Assets.xcassets, Info.plist, entitlements
macOS 14 (Sonoma) or later · Apple Silicon & Intel.
MIT — see LICENSE.