What Is ScreenCaptureKit?
ScreenCaptureKit is Apple's native framework for capturing screen content on macOS (introduced in macOS 12.3). It replaced the older CGWindowList and AVCaptureScreenInput APIs with a modern, high-performance alternative.
For developers building screen recording apps — or power users curious about how Mac screen recorders work — ScreenCaptureKit is the foundation that makes features like system audio capture, per-app audio, and low-latency recording possible.
ScreenCaptureKit Audio Capture
One of the biggest improvements ScreenCaptureKit brought is native system audio capture. Before ScreenCaptureKit, recording system audio on macOS required third-party audio drivers (like Soundflower or BlackHole) or kernel extensions.
How Audio Capture Works
ScreenCaptureKit provides audio capture through SCStreamConfiguration:
- System audio — Captures all audio output from macOS, or audio from specific apps
- Microphone audio — Captures input from any connected microphone
- Both simultaneously — Record system audio and microphone at the same time
Key Audio Configuration Options
- capturesAudio — Enable or disable audio capture
- excludesCurrentProcessAudio — Prevent the recording app's own audio from being captured
- sampleRate — Set audio sample rate (default 48000 Hz)
- channelCount — Mono or stereo capture
Per-App Audio Filtering
ScreenCaptureKit can capture audio from specific applications only. This means you can:
- Record a video call without capturing your music player
- Capture a game's audio without system notifications
- Record a browser tab's audio while excluding everything else
This is done by specifying an SCContentFilter with the desired windows or applications.
ScreenCaptureKit Microphone Recording
Microphone capture in ScreenCaptureKit works alongside screen and system audio capture:
- Select any available audio input device
- Mix microphone audio with system audio in a single stream
- Apply separate volume controls to mic and system audio
- Record at configurable sample rates and channel counts
Common Microphone Setup
For tutorial and demo recording, the typical configuration is:
- Enable system audio capture (to record app sounds)
- Enable microphone capture (for narration)
- Set excludesCurrentProcessAudio = true (to avoid feedback)
- Use 48kHz sample rate for broadcast quality
Building a ScreenCaptureKit Demo App
If you are building a screen recording app with ScreenCaptureKit, here is the typical architecture:
1. Request Permission
macOS requires screen recording permission. Use SCShareableContent to request access and enumerate available content (displays, windows, apps).
2. Create a Content Filter
Define what to capture:
- Display capture — Entire screen
- Window capture — Specific app window
- App-based filter — Include or exclude specific apps
3. Configure the Stream
Set up SCStreamConfiguration with:
- Resolution and frame rate for video
- Audio settings (system audio, microphone, sample rate)
- Pixel format and color space
4. Start Capture
Create an SCStream with your filter and configuration, add output handlers, and start capturing frames and audio buffers.
5. Process Output
Handle CMSampleBuffer objects in your stream output delegate:
- Video frames for display or encoding
- Audio buffers for mixing and recording
How Creavit Studio Uses ScreenCaptureKit
Creavit Studio is built on top of ScreenCaptureKit for all recording capabilities on macOS:
- System audio recording — Uses ScreenCaptureKit's native audio capture (no third-party audio drivers needed)
- Microphone recording — Captures mic input alongside system audio
- Window and screen capture — High-performance capture of any window or full screen
- Per-app audio — Records audio from specific apps when needed
- Low latency — ScreenCaptureKit's hardware-accelerated pipeline ensures smooth capture even at 4K 60fps
This means Creavit Studio users get native audio capture quality without installing extra software or dealing with audio routing complexity.
ScreenCaptureKit vs Older APIs
| Feature | ScreenCaptureKit | CGWindowList | AVCaptureScreen |
| System Audio | Native | No | No |
| Per-App Audio | Yes | No | No |
| Performance | Hardware accelerated | CPU-based | GPU-assisted |
| Frame Rate | Up to 240fps | Limited | Up to 60fps |
| Window Capture | Native filter | Manual composition | Limited |
| macOS Version | 12.3+ | 10.0+ | 10.7+ |
| Microphone | Integrated | Separate API | Separate API |
Common Issues and Solutions
No Audio in Recording
- Check that capturesAudio is set to true
- Verify the app has screen recording permission (audio requires this)
- Ensure excludesCurrentProcessAudio is not accidentally excluding wanted audio
Microphone Not Captured
- Request microphone permission separately from screen recording permission
- Verify the correct audio input device is selected
- Check that the microphone is not being used exclusively by another app
Audio Sync Issues
- Use the same sample rate for system audio and microphone
- Process audio buffers in the same output queue as video for sync
- Use presentation timestamps from CMSampleBuffer for alignment
Resources for Developers
- Apple's ScreenCaptureKit documentation covers the full API surface
- WWDC sessions on ScreenCaptureKit (2022, 2023) walk through implementation
- Creavit Studio demonstrates what a production ScreenCaptureKit app can achieve
If you are building a screen recording app on macOS, ScreenCaptureKit is the right foundation. It handles the complex audio routing and screen capture that previously required kernel extensions and workarounds.