libobsbot is a cross-platform Rust SDK for OBSBOT cameras. It implements the camera-control wire protocol from observed USB traffic and ships a stable C ABI so the same library can drive PTZ, image controls, white balance, HDR, FOV, face AE/focus, AI auto-framing, and audio controls from any GPL-compatible application.
Status: v0.0.0 - pre-release. The protocol is decoded for the Meet 2, including the selector-0x02 RPC CRC. Synchronous setters and getters work end-to-end against real hardware; a per-device status poller and a hot-plug watcher feed the same event channel; the C ABI exposes the full surface.
Got an OBSBOT camera we don't support?
See the hardware-support matrix and
open a new-hardware issue with a .pcapng attached.
The other ~200 SDK methods (file transfer, network / WiFi, Bluetooth, NDI / RTSP, gimbal presets, AI gesture, scheduling, watermark, tally light, SD card) are Tail Air / Tiny features and out of scope for v1.
| OS | Status |
|---|---|
| Linux | First-class. Goal: work while the camera is also open in
Zoom/OBS/Cheese - route through the uvcvideo
driver rather than detaching it. |
| macOS | Supported. Works while other apps (FaceTime, Zoom, OBS, Photo Booth, …) have the camera open. |
| Windows | The camera must be bound to WinUSB via
Zadig. Binding WinUSB removes
the camera from usbvideo.sys, so it becomes unusable
in Zoom/OBS until the driver is restored. |
The implementation is derived from observed USB wire behavior of a real OBSBOT Meet 2, plus public sources. Permitted inputs:
dev.hpp (API shape only,
no implementation)libdev.so
talking to a real OBSBOT Meet 2 (Wireshark with
usbmon)Every selector / payload constant in the per-model command table
references a committed .pcapng under
doc/protocol/<model>/, and the commit that adds the
constant cites the capture file. See the
sourcing rule for the contributor policy.
GPL-3.0-only. See the LICENSE
file. Note that linking to liblibobsbot from a
non-GPL-compatible application is incompatible with this license.