Changelog¶
All notable changes to Streamcatcher are documented here. The format is based on Keep a Changelog, and the project aims to follow Semantic Versioning.
The project is pre-1.0 and built in small, tested vertical slices.
Unreleased¶
0.2.0 - 2026-07-21¶
Added¶
- Headless / server support — documented the
opencv-python-headlessswap sostreamcatcher serveandstreamcatcher play --snapshotrun on machines with no display or GUI system libraries (libGL.so.1on Linux). A CI smoke job now exercises the headless build.
Changed¶
play's live window now exits with a clear, actionable message when run against a headless OpenCV build, instead of dying on a cryptic highguicv2.error. The window is also created before the network connection, so headless machines fail fast without first opening the stream.
0.1.0 - 2026-07-21¶
First release on PyPI: pip install streamcatcher.
Added¶
- Documentation site — a mkdocs-material site (usage, 360/cameras, Python API, HTTP API, architecture, security, and an auto-generated API reference), plus this changelog and a contributing guide.
- Snapshots — press
pin the viewer to save the current view to a timestamped file, or capture one frame headlessly withplay --snapshot, optionally passing an exact output path. Both respect the active projection; snapshots default to the current directory. - Auto-reconnect — when a live stream drops, the OpenCV backend reconnects with
exponential backoff (retries forever by default;
--no-reconnectto opt out). The viewport orientation is preserved across a reconnect. - HTTP control API (optional
[api]extra) —streamcatcher serveruns a localhost FastAPI server so another program or an AI agent can open sessions, drive the look-around, and pull JPEG/MJPEG frames. The stream URL is never echoed back; optional bearer-token auth. An optional per-session background reader (STREAMCATCHER_API_READER_ENABLED) keeps the latest frame cached so requests don't block on a read. - 360° equirectangular viewport — pure-NumPy equirectangular→pinhole
reprojection into a flat, steerable look-around view (
W/A/S/Dor mouse drag to aim,+/-to zoom). - Live OpenCV player — view RTSP/RTMP streams in a native window from a plain Python CLI on macOS, Linux, and Windows (video only, no audio). RTSP is forced over TCP.
- CLI skeleton —
streamcatcher playwith an offlinestubbackend, typedSTREAMCATCHER_*configuration, and aSecretStrstream URL with log redaction. - Secure project baseline — CI secret scanning (gitleaks, GitGuardian) and dependency vulnerability scanning (osv-scanner), pre-commit hooks, and a TDD/branch-per-slice workflow.
Changed¶
- Playback backend moved from libVLC to OpenCV, which owns its own native window without an external media player (fixes a macOS windowing blocker). This made playback video-only — audio is no longer in scope.