Python bindings for the TRAA (To Record Anything Anywhere) library - a high-performance, cross-platform solution for screen capture, window enumeration, and desktop recording. Supports Windows, macOS, and Linux with a clean, Pythonic API.
Project description
TRAA Python Bindings
Python bindings for the TRAA (To Record Anything Anywhere) library - a high-performance, cross-platform solution for screen capture, window enumeration, and desktop recording. Supports Windows, macOS, and Linux with a clean, Pythonic API.
Features
- Screen and window enumeration with filtering options
- High-performance screen capture
- Support for multiple displays and windows
- Thumbnail and icon capture
- Cross-platform compatibility (Windows, macOS, Linux)
Installation
pip install traa
Quick Start
from traa import Size, ScreenSourceFlags, enum_screen_sources, create_snapshot
from PIL import Image
# Enumerate screen sources
sources = enum_screen_sources(
thumbnail_size=Size(160, 120), # Optional: Get thumbnails
icon_size=Size(32, 32), # Optional: Get icons
external_flags=ScreenSourceFlags.NONE # Use default enumeration behavior
)
# Print available sources
for source in sources:
print(f"Found source: {source}")
# Save thumbnail if available
if source.thumbnail_data is not None:
Image.fromarray(source.thumbnail_data).save(f"thumb_{source.id}.png")
# Save icon if available
if source.icon_data is not None:
Image.fromarray(source.icon_data).save(f"icon_{source.id}.png")
# Capture from the first source
if sources:
# Capture at Full HD resolution
image, actual_size = create_snapshot(sources[0].id, Size(1920, 1080))
# Determine image mode based on shape
mode = "RGB" if len(image.shape) == 3 and image.shape[2] == 3 else \
"RGBA" if len(image.shape) == 3 and image.shape[2] == 4 else "L"
# Save the snapshot
Image.fromarray(image, mode=mode).save("snapshot.png")
print(f"Captured image size: {actual_size}")
API Reference
Functions
enum_screen_sources(icon_size: Optional[Size] = None, thumbnail_size: Optional[Size] = None, external_flags: ScreenSourceFlags = ScreenSourceFlags.NONE) -> List[ScreenSourceInfo]
Enumerates available screen sources (displays and windows).
icon_size: Optional size for source iconsthumbnail_size: Optional size for source thumbnailsexternal_flags: Flags to control enumeration behavior- Returns: List of
ScreenSourceInfoobjects
Example:
# Get only non-minimized windows with thumbnails
sources = enum_screen_sources(
thumbnail_size=Size(160, 120),
external_flags=ScreenSourceFlags.IGNORE_SCREEN | ScreenSourceFlags.IGNORE_MINIMIZED
)
create_snapshot(source_id: int, size: Size) -> Tuple[np.ndarray, Size]
Creates a snapshot of the specified screen source.
source_id: ID of the source to capturesize: Requested size of the snapshot- Returns: Tuple of (image data as numpy array, actual capture size)
Example:
# Capture a window at 4K resolution
image, size = create_snapshot(window_id, Size(3840, 2160))
Image.fromarray(image, mode="RGB").save("4k_snapshot.png")
Classes
Size
Represents a size with width and height.
# Create a Full HD size
size = Size(width=1920, height=1080)
print(size) # "1920x1080"
# Create a 4K UHD size
size_4k = Size(3840, 2160)
Rect
Represents a rectangle with left, top, right, and bottom coordinates.
# Create a rectangle
rect = Rect(left=0, top=0, right=1920, bottom=1080)
print(rect) # "(0, 0, 1920, 1080)"
print(rect.width) # 1920
print(rect.height) # 1080
ScreenSourceInfo
Contains information about a screen source.
Properties:
id: Unique identifieris_window: Whether this is a window or displayrect: Source rectangletitle: Source titleprocess_path: Process path (windows only)is_minimized: Window minimized stateis_maximized: Window maximized stateis_primary: Whether this is the primary displayicon_data: Optional icon image data (numpy array)thumbnail_data: Optional thumbnail image data (numpy array)
Example:
# Print detailed information about a source
def print_source_info(source):
print(f"Source: {source.title}")
print(f"Type: {'Window' if source.is_window else 'Display'}")
print(f"Rectangle: {source.rect}")
if source.is_window:
print(f"Process: {source.process_path}")
print(f"Minimized: {source.is_minimized}")
else:
print(f"Primary Display: {source.is_primary}")
ScreenSourceFlags
Enumeration flags for controlling screen source enumeration behavior.
class ScreenSourceFlags(IntFlag):
NONE = 0 # Default behavior
IGNORE_SCREEN = 1 << 0 # Ignore display screens
IGNORE_WINDOW = 1 << 1 # Ignore windows
IGNORE_MINIMIZED = 1 << 2 # Ignore minimized windows
NOT_IGNORE_UNTITLED = 1 << 3 # Include untitled windows
NOT_IGNORE_UNRESPONSIVE = 1 << 4 # Include unresponsive windows
IGNORE_CURRENT_PROCESS_WINDOWS = 1 << 5 # Ignore windows from current process
NOT_IGNORE_TOOLWINDOW = 1 << 6 # Include tool windows
IGNORE_NOPROCESS_PATH = 1 << 7 # Ignore windows without process path
NOT_SKIP_SYSTEM_WINDOWS = 1 << 8 # Include system windows
NOT_SKIP_ZERO_LAYER_WINDOWS = 1 << 9 # Include zero layer windows
ALL = 0xFFFFFFFF # All flags enabled
Common flag combinations:
# Get only displays (no windows)
displays = enum_screen_sources(
external_flags=ScreenSourceFlags.IGNORE_WINDOW
)
# Get only active windows (no displays, no minimized)
active_windows = enum_screen_sources(
external_flags=ScreenSourceFlags.IGNORE_SCREEN |
ScreenSourceFlags.IGNORE_MINIMIZED
)
# Get all sources including system windows
all_sources = enum_screen_sources(
external_flags=ScreenSourceFlags.NOT_SKIP_SYSTEM_WINDOWS |
ScreenSourceFlags.NOT_IGNORE_TOOLWINDOW
)
Examples
See the examples directory for more detailed examples:
-
basic_usage.py: Demonstrates basic screen capture functionality- Enumerating screen sources
- Selecting a source interactively
- Capturing and saving screenshots
-
enum_sources.py: Shows advanced source enumeration with filtering- Using different flag combinations
- Getting thumbnails and icons
- Displaying detailed source information
- Filtering sources by type and state
Requirements
- Python 3.7+
- NumPy for array operations
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file traa-0.1.5-cp310-cp310-win_arm64.whl.
File metadata
- Download URL: traa-0.1.5-cp310-cp310-win_arm64.whl
- Upload date:
- Size: 634.1 kB
- Tags: CPython 3.10, Windows ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee29f0dd217bbd15e7196713c1a5f47b341187b6ea0250ee94eeb2b2f442f98c
|
|
| MD5 |
d6693483e7cb74f19db26b7aa549475d
|
|
| BLAKE2b-256 |
41a64eb0d51f6f2dbddaa6dd70e944d52801e91ef01e9b76a55de222b05ae9f2
|
File details
Details for the file traa-0.1.5-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: traa-0.1.5-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 634.1 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb076941275f510459e435dc9bb04f94d60c73cb9367ab7110248db49957fc27
|
|
| MD5 |
aafaf07e022eaadf4841f7235e227ea9
|
|
| BLAKE2b-256 |
3a4186bbb03e8b68d1dad28b9d7df0d2c19f6d8113d6d98493ddcd082f8949ad
|
File details
Details for the file traa-0.1.5-cp310-cp310-win32.whl.
File metadata
- Download URL: traa-0.1.5-cp310-cp310-win32.whl
- Upload date:
- Size: 508.5 kB
- Tags: CPython 3.10, Windows x86
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2037cd0a9596135e054160816a7d29ff51162106a836a6cea2f6a070164082ba
|
|
| MD5 |
d938c30e48b2fc760dd4608b36abd1de
|
|
| BLAKE2b-256 |
83064de004fd10b50d6d3fe6afada50044a0a06eb964e1921c2dcdec7ada74ca
|
File details
Details for the file traa-0.1.5-cp310-cp310-manylinux2014_x86_64.whl.
File metadata
- Download URL: traa-0.1.5-cp310-cp310-manylinux2014_x86_64.whl
- Upload date:
- Size: 202.3 kB
- Tags: CPython 3.10
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1936b9f21f50b71af506c6b7a6eb1eec07a6d0b3945f9089118400638bf0ba1c
|
|
| MD5 |
182a6a36eb05a696cc2dcbd9ce36ce62
|
|
| BLAKE2b-256 |
9bacc9de73d26d5cb90271384cb3727094751e0c71214b3897249d7ca6668e7b
|
File details
Details for the file traa-0.1.5-cp310-cp310-manylinux2014_aarch64.whl.
File metadata
- Download URL: traa-0.1.5-cp310-cp310-manylinux2014_aarch64.whl
- Upload date:
- Size: 202.3 kB
- Tags: CPython 3.10
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0482528812367b608d6031d9b5efacdf66babc9a411621183818e5f0bf638fd
|
|
| MD5 |
5f82004758b97b67ddf415463b990efc
|
|
| BLAKE2b-256 |
1512dcc7023d90a76c0917c0ad426f5298c593692392413678f76118ecf5bb4d
|
File details
Details for the file traa-0.1.5-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: traa-0.1.5-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 260.8 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b5df00fd3550cc6402998e4de91c1fdd339606956a95ac9682e63f27da52b55
|
|
| MD5 |
61b57ef512cda6c500ba66c5fc7873b2
|
|
| BLAKE2b-256 |
6e6534fe48916eb6661cc83807ecccba2eef905a19db1ab163333eb338e472ab
|
File details
Details for the file traa-0.1.5-cp310-cp310-macosx_10_9_x86_64.whl.
File metadata
- Download URL: traa-0.1.5-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 260.8 kB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0bfbd332beeae0d4ac3a8e8aff7c34f145988612c577846e4c9709b657374d65
|
|
| MD5 |
47bb3abccdec72cf04faba62e7c2cdd8
|
|
| BLAKE2b-256 |
61947b1cd1cc89207e5a299c513ecdffcb88541d677c4bf487dffb65e350fe44
|