Skip to main content

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 icons
  • thumbnail_size: Optional size for source thumbnails
  • external_flags: Flags to control enumeration behavior
  • Returns: List of ScreenSourceInfo objects

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 capture
  • size: 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 identifier
  • is_window: Whether this is a window or display
  • rect: Source rectangle
  • title: Source title
  • process_path: Process path (windows only)
  • is_minimized: Window minimized state
  • is_maximized: Window maximized state
  • is_primary: Whether this is the primary display
  • icon_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 Basic Usage Example
  • 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 Enum sources Example

Requirements

  • Python 3.7+
  • NumPy for array operations

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

traa-0.1.5-cp310-cp310-win_arm64.whl (634.1 kB view details)

Uploaded CPython 3.10Windows ARM64

traa-0.1.5-cp310-cp310-win_amd64.whl (634.1 kB view details)

Uploaded CPython 3.10Windows x86-64

traa-0.1.5-cp310-cp310-win32.whl (508.5 kB view details)

Uploaded CPython 3.10Windows x86

traa-0.1.5-cp310-cp310-manylinux2014_x86_64.whl (202.3 kB view details)

Uploaded CPython 3.10

traa-0.1.5-cp310-cp310-manylinux2014_aarch64.whl (202.3 kB view details)

Uploaded CPython 3.10

traa-0.1.5-cp310-cp310-macosx_11_0_arm64.whl (260.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

traa-0.1.5-cp310-cp310-macosx_10_9_x86_64.whl (260.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

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

Hashes for traa-0.1.5-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 ee29f0dd217bbd15e7196713c1a5f47b341187b6ea0250ee94eeb2b2f442f98c
MD5 d6693483e7cb74f19db26b7aa549475d
BLAKE2b-256 41a64eb0d51f6f2dbddaa6dd70e944d52801e91ef01e9b76a55de222b05ae9f2

See more details on using hashes here.

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

Hashes for traa-0.1.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 cb076941275f510459e435dc9bb04f94d60c73cb9367ab7110248db49957fc27
MD5 aafaf07e022eaadf4841f7235e227ea9
BLAKE2b-256 3a4186bbb03e8b68d1dad28b9d7df0d2c19f6d8113d6d98493ddcd082f8949ad

See more details on using hashes here.

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

Hashes for traa-0.1.5-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 2037cd0a9596135e054160816a7d29ff51162106a836a6cea2f6a070164082ba
MD5 d938c30e48b2fc760dd4608b36abd1de
BLAKE2b-256 83064de004fd10b50d6d3fe6afada50044a0a06eb964e1921c2dcdec7ada74ca

See more details on using hashes here.

File details

Details for the file traa-0.1.5-cp310-cp310-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for traa-0.1.5-cp310-cp310-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1936b9f21f50b71af506c6b7a6eb1eec07a6d0b3945f9089118400638bf0ba1c
MD5 182a6a36eb05a696cc2dcbd9ce36ce62
BLAKE2b-256 9bacc9de73d26d5cb90271384cb3727094751e0c71214b3897249d7ca6668e7b

See more details on using hashes here.

File details

Details for the file traa-0.1.5-cp310-cp310-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for traa-0.1.5-cp310-cp310-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b0482528812367b608d6031d9b5efacdf66babc9a411621183818e5f0bf638fd
MD5 5f82004758b97b67ddf415463b990efc
BLAKE2b-256 1512dcc7023d90a76c0917c0ad426f5298c593692392413678f76118ecf5bb4d

See more details on using hashes here.

File details

Details for the file traa-0.1.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for traa-0.1.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6b5df00fd3550cc6402998e4de91c1fdd339606956a95ac9682e63f27da52b55
MD5 61b57ef512cda6c500ba66c5fc7873b2
BLAKE2b-256 6e6534fe48916eb6661cc83807ecccba2eef905a19db1ab163333eb338e472ab

See more details on using hashes here.

File details

Details for the file traa-0.1.5-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for traa-0.1.5-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0bfbd332beeae0d4ac3a8e8aff7c34f145988612c577846e4c9709b657374d65
MD5 47bb3abccdec72cf04faba62e7c2cdd8
BLAKE2b-256 61947b1cd1cc89207e5a299c513ecdffcb88541d677c4bf487dffb65e350fe44

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page