Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork115
High-performance, cross-platform screen capture library in Rust.
License
CapSoftware/scap
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
A Rust library for high-quality screen capture that leverages native OS APIs for optimal performance!
- macOS:ScreenCaptureKit
- Windows:Windows.Graphics.Capture
- Linux:Pipewire
- Cross-platform across Windows, Mac and Linux!
- Checks for support and recording permissions.
- Query list of captureable targets (displays and windows).
- Exclude certain targets from being captured.
We found most of Rust's tooling around screen capture either very outdated, non-performant or platform-specific. This project is our attempt to change that. Contributions, PRs and Issues are most welcome!
If you want to contribute code, here's a quick primer:
- Clone the repo and run it with
cargo run. - Explore the API and library code inlib.rs.
- Platform-specific code lives in the
win,macandlinuxmodules. - Themain.rs is a small program that "consumes" the library, for easy testing.
use scap::{ capturer::{Point,Area,Size,Capturer,Options}, frame::Frame,};fnmain(){// Check if the platform is supportedif !scap::is_supported(){println!("❌ Platform not supported");return;}// Check if we have permission to capture screen// If we don't, request it.if !scap::has_permission(){println!("❌ Permission not granted. Requesting permission...");if !scap::request_permission(){println!("❌ Permission denied");return;}}// Get recording targetslet targets = scap::get_all_targets();println!("Targets: {:?}", targets);// All your displays and windows are targets// You can filter this and capture the one you need.// Create Optionslet options =Options{fps:60,target:None,// None captures the primary displayshow_cursor:true,show_highlight:true,excluded_targets:None,output_type: scap::frame::FrameType::BGRAFrame,output_resolution: scap::capturer::Resolution::_720p,crop_area:Some(Area{origin:Point{x:0.0,y:0.0},size:Size{width:2000.0,height:1000.0,},}), ..Default::default()};// Create Capturerletmut capturer =Capturer::build(options).unwrap();// Start Capture capturer.start_capture();letmut input =String::new(); std::io::stdin().read_line(&mut input).unwrap();// Stop Capture capturer.stop_capture();}
The code in this repository is open-sourced under the MIT license, though it may be relying on dependencies that are licensed differently. Please consult their documentation for exact terms.
Pranav Joglekar 💻 | Siddharth 💻 | Rohan Punjani 💻 | NiiightmareXD 💻 | MAlba124 💻 | Anubhav Singhal 💻 | Vasu Sharma 💻 |
This project builds on top of the fabulous work done by:
- @MAlba124 for Linux support via Pipewire
- @svtlabs forscreencapturekit-rs
- @NiiightmareXD forwindows-capture
About
High-performance, cross-platform screen capture library in Rust.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.
