Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
A Python high-performance screenshot library for Windows use Desktop Duplication API
🌟 World's Fastest Python Screenshot Library for Windows 🐍
import bettercam
camera = bettercam.create()
camera.grab()
BetterCam is the World's 🌏 Fastest Publicly available Python screenshot library for Windows, boasting 240Hz+ capturing using the Desktop Duplication API 🖥️💨. Born from DXCam, it shines in deep learning pipelines for FPS games, outpacing other Python solutions like python-mss and D3DShot.
BetterCam's superpowers include:
💞 Community contributions warmly invited!
pip install git+https://github.com/RootKit-Org/BetterCam
Note: 🧩 OpenCV is needed by BetterCam for color space conversion. Install it with pip install opencv-python
if not yet available.
Each monitor is paired with a BetterCam
instance.
To get started:
import bettercam
camera = bettercam.create() # Primary monitor's BetterCam instance
For a quick snap, call .grab
:
frame = camera.grab()
frame
is a numpy.ndarray
in the (Height, Width, 3[RGB])
format by default. Note: .grab
may return None
if there's no update since the last .grab
.
To display your screenshot:
from PIL import Image
Image.fromarray(frame).show()
For a specific region, provide the region
parameter with a tuple for the bounding box coordinates:
left, top = (1920 - 640) // 2, (1080 - 640) // 2
right, bottom = left + 640, top + 640
region = (left, top, right, bottom)
frame = camera.grab(region=region) # A 640x640x3 numpy ndarray snapshot
Start and stop screen capture with .start
and .stop
:
camera.start(region=(left, top, right, bottom)) # Capture a region (optional)
camera.is_capturing # True
# ... Your Code
camera.stop()
camera.is_capturing # False
When capturing, grab the latest frame with .get_latest_frame
:
camera.start()
for i in range(1000):
image = camera.get_latest_frame() # Waits for a new frame
camera.stop()
cam1, cam2, cam3 = [bettercam.create(device_idx=d, output_idx=o) for d, o in [(0, 0), (0, 1), (1, 1)]]
img1, img2, img3 = [cam.grab() for cam in (cam1, cam2, cam3)]
To list devices and outputs:
>>> import bettercam
>>> bettercam.device_info()
>>> bettercam.output_info()
Select your color mode when creating a BetterCam instance:
bettercam.create(output_idx=0, output_color="BGRA")
We support "RGB", "RGBA", "BGR", "BGRA", "GRAY" (for grayscale). Right now only numpy.ndarray
shapes are supported: (Height, Width, Channels)
.
Frames go into a fixed-size ring buffer. Customize its max length with max_buffer_len
on creation:
camera = bettercam.create(max_buffer_len=512)
For precise FPS targeting, we use the high-resolution CREATE_WAITABLE_TIMER_HIGH_RESOLUTION
:
camera.start(target_fps=120) # Ideally, not beyond 240Hz.
For constant framerate video recording, use video_mode=True
during .start
:
# Example: Record a 5-second, 120Hz video
camera.start(target_fps=target_fps, video_mode=True)
# ... Video writing code goes here
Call .release
to stop captures and free resources. Manual deletion also possible:
del camera
cam = bettercam.create()
# ... Benchmarking code...
BetterCam Nvidia GPU :checkered_flag: | BetterCam :checkered_flag: | DXCam | python-mss | D3DShot | |
---|---|---|---|---|---|
Avg FPS | 111.667 | 123.667 | 39 | 34.667 | N/A |
Std Dev | 0.889 | 1.778 | 1.333 | 2.222 | N/A |
# ... Sample code to test target FPS ...
Target/Result | BetterCam Nvidia GPU :checkered_flag: | BetterCam :checkered_flag: | DXCam | python-mss | D3DShot |
---|---|---|---|---|---|
120fps | 111.667, 0.889 | 88.333, 2.444 | 36.667, 0.889 | N/A | N/A |
60fps | 60, 0 | 60, 0 | 35, 5.3 | N/A | N/A |
FAQs
A Python high-performance screenshot library for Windows use Desktop Duplication API
We found that bettercam demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.