A Rust library to leverage native OS APIs for optimal performance and high-quality screen recordings. We use Apple's ScreenCaptureKit on macOS and Graphics.Capture APIs on Windows. Linux support is planned but not underway yet, PRs welcome!
🚧 WIP. Unsuitable for production use, APIs are being iterated on.
- Cross-platform support: Windows and Mac now, Linux soon.
- Check for support and user permissions.
- Utilize native OS APIs for screen capture.
- Different capture modes: audio, display or window.
I found most of Rust's tooling around screen capture either non-performant, outdated or very platform-specific. This project is my attempt to change that. It's early days and the code is fairly simple, I'll gladly accept any contributions/PRs.
If you'd like to chip in, here's a kickstart guide:
- Clone the repo and run it with
cargo run
. - Explore the API and library code in
lib.rs
. - Platform-specific code is in the
win
andmac
modules. - There's a small program in
main.rs
that "consumes" the library for dev-testing.
use scap::{Options, Recorder};
fn main() {
// Check if the platform is supported
let supported = scap::is_supported();
if !supported {
println!("❌ Platform not supported");
return;
} else {
println!("✅ Platform supported");
}
// Check if we have permission to capture the screen
let has_permission = scap::has_permission();
if !has_permission {
println!("❌ Permission not granted");
return;
} else {
println!("✅ Permission granted");
}
// Get recording targets (WIP)
let targets = scap::get_targets();
println!("🎯 Targets: {:?}", targets);
// Create Options
let options = Options {
fps: 60,
targets,
show_cursor: true,
show_highlight: true,
excluded_targets: None,
};
// Create Recorder
let mut recorder = Recorder::init(options);
// Start Capture
recorder.start_capture();
let mut input = String::new();
std::io::stdin().read_line(&mut input).unwrap();
// Stop Capture
recorder.stop_capture();
}
- Check for support and user permissions.
- Capture frames
- Capture targets: monitors, windows, region and audio.
- Encoding: encode frames to file.
The code in this repository is open-sourced under the MIT license. However, it may rely on dependencies that are licensed differently. Please consult their documentations for exact terms.
This project builds on top of the fabulous work done by @svtlabs and @NiiightmareXD.
- screencapturekit-rs: Rust bindings for Apple's ScreencaptureKit API.
- windows-capture: Rust library for Windows.Graphics.Capture.