buddy-desktop / screen_capture.py
carbonx's picture
Add screen_capture.py
4585960 verified
"""Fast cross-platform screen capture using mss (desktop) or PIL fallback (headless)."""
import numpy as np
from PIL import Image
def capture_primary_monitor() -> Image.Image:
"""Capture the primary monitor and return a PIL RGB Image."""
try:
import mss
with mss.mss() as sct:
monitor = sct.monitors[1] # primary monitor
screenshot = sct.grab(monitor)
img = Image.frombytes("RGB", screenshot.size, screenshot.bgra, "raw", "BGRX")
return img
except Exception:
# Fallback for headless/server environments
img = Image.new("RGB", (1280, 720), color=(30, 30, 46))
return img
def capture_all_monitors() -> Image.Image:
"""Capture all monitors combined."""
try:
import mss
with mss.mss() as sct:
monitor = sct.monitors[0] # all monitors
screenshot = sct.grab(monitor)
img = Image.frombytes("RGB", screenshot.size, screenshot.bgra, "raw", "BGRX")
return img
except Exception:
img = Image.new("RGB", (1280, 720), color=(30, 30, 46))
return img
def capture_region(top: int, left: int, width: int, height: int) -> Image.Image:
"""Capture a specific region."""
try:
import mss
with mss.mss() as sct:
region = {"top": top, "left": left, "width": width, "height": height}
screenshot = sct.grab(region)
img = Image.frombytes("RGB", screenshot.size, screenshot.bgra, "raw", "BGRX")
return img
except Exception:
img = Image.new("RGB", (width, height), color=(30, 30, 46))
return img