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.
Pranav Joglekar 💻 |
Rohan Punjani 💻 |
Siddharth 💻 |
NiiightmareXD 💻 |
MAlba124 💻 |
Anubhav Singhal 💻 |
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.