Thanks for taking the time to contribute. This repository aims to stay small, stable-by-design, and easy to integrate.
AbstractCamera is part of the AbstractFramework ecosystem:
- AbstractFramework: https://github.com/lpalbou/AbstractFramework
- AbstractCore: https://github.com/lpalbou/abstractcore
- AbstractRuntime: https://github.com/lpalbou/abstractruntime
- Keep the public API stable (
CameraManager,CameraHub, and the session protocol insrc/abstractcamera/camera_manager.pyandsrc/abstractcamera/wire.py). - Prefer additive changes (new fields, new family adapters, new tools) over breaking changes.
- Do not commit model weights, large binaries, or cache artifacts.
- Make docs and examples match the code (the repo is intended to be readme-first).
- Keep
import abstractcameralight — the camera stack (OpenCV/numpy) loads on first attribute use, never at package import (seesrc/abstractcamera/__init__.py).
python -m venv .venv
. .venv/bin/activate
python -m pip install -U pip
python -m pip install -e ".[dev]"Optional (if you work on AbstractCore integration locally):
python -m pip install abstractcoreAbstractCore is intentionally supplied by the host application. The capability plugin registers through the abstractcore.capabilities_plugins entry point when both packages are installed.
python -m pytest tests/ -qCamera-less CI uses the built-in simulator (ABSTRACTCAMERA_FAKE=1 is set in CI). Hardware validation scripts live under scripts/ and are run manually against real bodies.
Core entrypoints:
After doc changes, regenerate the AI-readable bundle:
python scripts/generate_llms_full.pyDoc hygiene checklist:
- Commands are copy-pastable.
- Links resolve (relative links are preferred).
- Support claims match the current code and ADRs.
- Prefer Mermaid diagrams when they improve clarity (
docs/architecture.mdis the canonical place).
Family adapters live in src/abstractcamera/adapters/. Transport sessions and drivers live in src/abstractcamera/drivers/.
Checklist:
- Implement the session protocol (
src/abstractcamera/wire.py,src/abstractcamera/session.py). - Add a family adapter with honest capability descriptors (ADR 0004).
- Extend
tests/test_session_protocol.pyand add family-specific tests. - Document the family in
docs/api.mdand add an ADR when the design choice is load-bearing. - Validate against real hardware before claiming support (ADR 0007).
Integration surfaces:
src/abstractcamera/service.py— synchronous operation layersrc/abstractcamera/integrations/abstractcore_plugin.py— capability pluginsrc/abstractcamera/integrations/abstractcore_tools.py— explicit AI tool set
Checklist:
- Delegate through
CameraService; do not duplicate capture/wait logic in the plugin or tools. - Update
CAMERA_TOOL_CLASSIFICATIONwhen adding tools. - Add tests under
tests/test_abstractcore_plugin.pyandtests/test_abstractcore_tools.py.
Please include:
- A short explanation of the change and why it is needed.
- Test results (
python -m pytest tests/ -q). - Doc updates and
llms-full.txtregeneration when public behavior or setup changes.
If you are unsure about scope or design, open an issue with a minimal proposal and a concrete example (inputs/outputs).