You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Shared stream architecture — New start_stream() / stop_stream() lifecycle replaces per-call streaming. Once a stream is started, frames(), latest_frame(), record(), and capture() all tap into the shared connection instead of creating their own.
stream() context manager — Convenience wrapper around start_stream() / stop_stream() for scoped usage.
capture() method — Single-screenshot helper that grabs the latest frame and saves it as an image.
start_recording() / stop_recording() — Background recording to video or image directory, running in a separate thread until explicitly stopped.
frames() iterator — Dedicated method for iterating decoded frames from the shared stream.
Auto-pairing in connect() — connect() now automatically pairs with the server if needed, removing the need to call pair() separately.
Windows and macOS wheel builds — CI workflows for building and publishing wheels on all three platforms.
Bug Fixes
Fixed auto-pair detection — Pairing status is now checked via an authenticated HTTPS request (mutual TLS) instead of the HTTP /serverinfo endpoint, which couldn't identify the client. Previously, connect() would trigger pairing on every call even for already-paired clients.
Fixed IDR frame requests — Resolved issues with IDR frame delivery when multiple clients connect, using a mouse-movement workaround.
Fixed video aspect ratio — Corrected aspect ratio distortion in recorded video output.
Fixed custom port handling — Non-default server ports now work correctly throughout the connection and streaming flow.
Fixed black-start recording — Recordings now capture the latest available frame first to avoid starting with black frames.
Fixed VFR recording — Video recording uses wall-clock PTS timestamps, producing correct playback timing for variable-framerate streams instead of assuming constant framerate.
Improvements
StreamNotActiveError exception — New exception raised when calling stream-dependent methods without an active stream, with a clear message to call start_stream() first.