91e75e620b
CI: cua-driver distro-compat matrix / debian:12 (glibc 2.36) (push) Has been cancelled
CI: SPDX Headers / Check SPDX headers (warn-only) (push) Has been cancelled
CD: Docs MCP Server / build (linux/amd64) (push) Has been cancelled
CD: Docs MCP Server / build (linux/arm64) (push) Has been cancelled
CD: Docs MCP Server / merge (push) Has been cancelled
CI: cua-driver distro-compat matrix / Resolve release version (push) Has been cancelled
CI: cua-driver distro-compat matrix / fedora:41 (glibc 2.40) (push) Has been cancelled
CI: cua-driver distro-compat matrix / rockylinux:9 (glibc 2.34) (push) Has been cancelled
CI: cua-driver distro-compat matrix / ubuntu:22.04 (glibc 2.35) (push) Has been cancelled
CI: cua-driver distro-compat matrix / ubuntu:24.04 (glibc 2.39) (push) Has been cancelled
CI: cua-driver distro-compat matrix / Distro compat summary (push) Has been cancelled
CI: Rust Linux unit / Rust Linux unit and compile (push) Has been cancelled
CI: Rust Windows unit / Rust Windows unit and compile (push) Has been cancelled
CI: Nix Linux Rust source / Nix / compositor build (push) Has been cancelled
CI: Nix Linux Rust source / Nix / driver package (push) Has been cancelled
CI: Nix Linux Rust source / Nix / Rust unit tests (push) Has been cancelled
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
"""Screen interface — screenshots and screen info, backed by a Transport."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import base64
|
|
from typing import Tuple
|
|
|
|
from cua_sandbox.transport.base import Transport
|
|
|
|
|
|
class Screen:
|
|
"""Screen capture and info."""
|
|
|
|
def __init__(self, transport: Transport):
|
|
self._t = transport
|
|
|
|
async def screenshot(self, format: str = "png", quality: int = 95) -> bytes:
|
|
"""Capture a screenshot and return raw image bytes.
|
|
|
|
Args:
|
|
format: "png" (lossless, default) or "jpeg" (lossy, ~5-10x smaller).
|
|
quality: JPEG quality 1-95, ignored for PNG.
|
|
"""
|
|
return await self._t.screenshot(format=format, quality=quality)
|
|
|
|
async def screenshot_base64(self, format: str = "png", quality: int = 95) -> str:
|
|
"""Capture a screenshot and return as a base64-encoded string."""
|
|
raw = await self._t.screenshot(format=format, quality=quality)
|
|
return base64.b64encode(raw).decode("ascii")
|
|
|
|
async def size(self) -> Tuple[int, int]:
|
|
"""Return (width, height) of the screen."""
|
|
d = await self._t.get_screen_size()
|
|
return d["width"], d["height"]
|