physicalai-runtime-adding-a-camera-backend
Installation
SKILL.md
Adding a Camera Backend
Cameras implement the Camera interface in src/physicalai/capture/camera.py. Factory entry: create_camera() in src/physicalai/capture/factory.py maps lowercase type names (uvc, realsense, basler, …) to implementations. Reference layouts: src/physicalai/capture/cameras/uvc/, src/physicalai/capture/cameras/realsense/, src/physicalai/capture/cameras/basler/.
Workflow
- Pick a reference backend closest to the new hardware (UVC for USB video, RealSense for RGB-D, Basler for GenICam industrial).
- Done when: you can list which modules to mirror (
_camera.py,_discover.py,__init__.pyexports).
- Done when: you can list which modules to mirror (
- Implement
Camera:connect(),disconnect(),read()/read_latest(), context manager support, monotonic timestamps onFrame(src/physicalai/capture/frame.py).- Done when: fake or mocked device tests can exercise connect/read without hardware.
- Wire discovery if the device is enumerable — add helpers under
src/physicalai/capture/discovery.pyor backend-specific_discover.py. - Register the type in
src/physicalai/capture/factory.pyand export public class fromsrc/physicalai/capture/__init__.pywhen user-facing. - Optional extra in
pyproject.tomlfor vendor SDKs; lazy-import inside the camera module sopip install physicalaistays light.- Done when:
import physicalai.captureworks without the extra; importing the camera class fails with a clear message if the extra is missing.
- Done when:
- Tests in
tests/unit/capture/using existing fakes (tests/unit/capture/fake.py,conftest.pypatterns).- Done when:
uv run pytest tests/unit/capture -k <backend>passes.
- Done when: