Skip to main content

Github banner

Discord Twitter GitHub Repo stars docs.rs Crates.io MSRV

A Rust library for high-quality screen capture that leverages native OS APIs for optimal performance!

  1. macOS: ScreenCaptureKit
  2. Windows: Windows.Graphics.Capture
  3. Linux: Pipewire

Features

  1. Cross-platform across Windows, Mac and Linux!
  2. Checks for support and recording permissions.
  3. Query list of captureable targets (displays and windows).
  4. Exclude certain targets from being captured.

Contributing

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:

  1. Clone the repo and run it with cargo run.
  2. Explore the API and library code in lib.rs.
  3. Platform-specific code lives in the win, mac and linux modules.
  4. The main.rs is a small program that "consumes" the library, for easy testing.

Usage

use scap::{
    capturer::{Point, Area, Size, Capturer, Options},
    frame::Frame,
};

fn main() {
    // Check if the platform is supported
    if !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 targets
    let 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 Options
    let options = Options {
        fps: 60,
        target: None, // None captures the primary display
        show_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 Capturer
    let mut capturer = Capturer::build(options).unwrap();

    // Start Capture
    capturer.start_capture();

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).unwrap();

    // Stop Capture
    capturer.stop_capture();
}

Python bindings

The optional Python extension is built with maturin and returns captured data as owned NumPy arrays. Install a development build with:

python -m pip install maturin numpy
maturin develop --features python

Example:

import scap

if not scap.has_permission():
    if not scap.request_permission():
        raise RuntimeError("screen capture permission was denied")

options = scap.CaptureOptions(
    fps=30,
    output_type="bgra",
    output_resolution="720p",
)
capturer = scap.Capturer(options)
capturer.start()
try:
    frame = capturer.next_frame()
    print(frame.data.shape, frame.data.dtype, frame.format)
finally:
    capturer.stop()

Video arrays currently contain the native packed byte order reported by frame.format (rgb, rgbx, xbgr, bgrx, bgr0, or bgra) and have shape (height, width, channels). Audio arrays contain the owned raw bytes as a one-dimensional uint8 NumPy array; AudioFrameInfo exposes the sample format, channel count, sample rate, sample count, and planar layout.

The extension is feature-gated, so normal Rust builds are unchanged. macOS requires Screen Recording permission. Linux capture requires a working PipeWire and desktop portal setup.

License

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.

Contributors

Pranav Joglekar
Pranav Joglekar

💻
Siddharth
Siddharth

💻
Rohan Punjani
Rohan Punjani

💻
NiiightmareXD
NiiightmareXD

💻
MAlba124
MAlba124

💻
Anubhav Singhal
Anubhav Singhal

💻
Vasu Sharma
Vasu Sharma

💻

Credits

This project builds on top of the fabulous work done by:

Metadata

Release files for lexian-pyscap 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for lexian-pyscap 0.1.0
File Interpreter ABI Platform Actions
lexian_pyscap-0.1.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for lexian_pyscap-0.1.0-cp313-cp313-win_amd64.whl
lexian_pyscap-0.1.0-cp313-cp313-manylinux_2_38_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.38+ x86-64 Details for lexian_pyscap-0.1.0-cp313-cp313-manylinux_2_38_x86_64.whl
lexian_pyscap-0.1.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for lexian_pyscap-0.1.0-cp313-cp313-macosx_11_0_arm64.whl

Total release size: 3.3 MB

Release files / lexian_pyscap-0.1.0-cp313-cp313-win_amd64.whl

Download URL lexian_pyscap-0.1.0-cp313-cp313-win_amd64.whl
Size 346.6 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
81f3a3776147a419cc9dfe507a9e5222b4d403c378c87e9e31971fb2a839b307
BLAKE2b-256 checksum
How to use checksums
bd32c2c7316a825dd86d55ff0aeb5b54cf9e0590190065e88613eef6d0a855e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.

Transparency log

Release files / lexian_pyscap-0.1.0-cp313-cp313-manylinux_2_38_x86_64.whl

Download URL lexian_pyscap-0.1.0-cp313-cp313-manylinux_2_38_x86_64.whl
Size 2.7 MB
Tags CPython 3.13 Linux glibc 2.38+ x86-64
SHA-256 checksum
How to use checksums
5f25c9d54daaa84722511029332cb0d3be9927f3ad8cc227f0286e2821aa24a2
BLAKE2b-256 checksum
How to use checksums
94db251f58f6f4a553ee990416c4d7ce3eba4e0745996878d7cf20ddca48d54b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.

Transparency log

Release files / lexian_pyscap-0.1.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL lexian_pyscap-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Size 336.9 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4a5f2a945a54c7a28d894f9992e0ae08747560a539638ec0eedb29162526a816
BLAKE2b-256 checksum
How to use checksums
8f34302b0d9f1ab508f4491352180087bee33a99666a38eb61d665bd514167aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.

Transparency log

Security for lexian-pyscap 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 3 files in this release have been uploaded with provenance metadata.

Select from 3 files

Attestation for lexian_pyscap-0.1.0-cp313-cp313-win_amd64.whl

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page