📓 Complete Release Notes can be found [here ↗️](https://abhitronix.github.io/vidgear/latest/changelog/#v031-2023-07-22)
----
New Features ✨
- **WebGear:**
* Added an option to add a custom video endpoint path.
+ Users can now change the video endpoint path from `"/video"` to any alphanumeric string.
+ Added the `custom_video_endpoint` optional string attribute for this purpose.
+ Only alphanumeric strings with no spaces in between are allowed as its value.
- **ScreenGear:**
* Added `dxcam` backend support for Windows machines.
+ `dxcam` is now the default backend for Windows machines when no backend is defined.
+ Added support for variable screen dimensions to capture an area from the screen.
+ Added the optional flag `dxcam_target_fps` to control the target fps in `dxcam`. Defaults to `0` (disabled).
* Added support for tuple values in the monitor parameter to specify device and output indexes as `(int[device_idx], int[output_idx])` in the `dxcam` backend only.
+ Default `int` index is also allowed as a value for selecting device index.
- **Helper**
* Added multiple servers support for downloading assets.
+ Added GitHub server to the `generate_webdata` method to make it more robust for rate limits and other shortcomings.
+ Now, the `generate_webdata` method will retry a different server when one fails.
- **Setup.py**
* Added `dxcam` dependency in `core` and `asyncio` extra requires for Windows machines.
Updates/Improvements ⚡️
- WebGear:
* Improved the conditions logic to check if non-empty values are assigned to optional parameters.
- WebGear_RTC:
* Improved the handling of the `format` parameter when constructing a `VideoFrame` from ndarray frames.
- ScreenGear:
* Enforced `dxcam` backend (if installed) when `monitor` is defined on Windows machines.
* Refactored code blocks to ensure backward compatibility.
Breaking Updates/Changes 💥
- ScreenGear:
* 💣 Previously enforced threaded queue mode is now completely removed, resulting in a potential performance boost.
+ 💬 Reason: The IO is automatically blocked by the screen refresh rate, so adding the overhead of maintaining a separate queue is pointless.
* 💣 Removed the `THREAD_TIMEOUT` optional flag.
Bug-fixes 🐛
- WebGear_RTC:
* Fixed a bug caused by PyAV's error when `ndim==3` grayscale frames are encountered.
+ The API will now drop the third dimension if `ndim==3` grayscale frames are detected.
- Setup.py:
* Starting from version `8.0.0`, the python-mss library dropped support for Python `3.7`, so as a temporary measure, `mss` dependency has been pinned to version `7.0.1`.