# sarxos/webcam-capture architecture

> Architecture diagram of the GitHub repository sarxos/webcam-capture, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sarxos/webcam-capture
- Repository: https://github.com/sarxos/webcam-capture

## Overview

Webcam Capture is a Java API that hides capture-framework differences behind a common camera interface. The principal workflow is to discover a camera, select and configure it, open it, and obtain images; applications can then display, analyze, or stream those images. Drivers cover built-in, network, and framework-specific devices, while the core also provides Swing UI, motion detection, and lifecycle support. The graph reflects documented capabilities and the sampled source; several driver and utility implementations are represented by their exact enclosing directories because their source was not sampled.

Main entry points: [`webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java`](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java) (Device Discovery), [`webcam-capture/src/main/java/com/github/sarxos/webcam/Webcam.java`](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/Webcam.java) (Camera API), [`webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDriver.java`](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDriver.java) (Driver Contract), [`webcam-capture-examples/webcam-capture-akka/src/main/java/Application.java`](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture-examples/webcam-capture-akka/src/main/java/Application.java) (Akka Example)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Capture Core"]
  node_api["Camera API<br/>[Webcam.java]"]
  node_discovery["Device Discovery"]
  node_drivercontract["Driver Contract<br/>[WebcamDriver.java]"]
  node_devicecontract["Device Contract<br/>[WebcamDevice.java]"]
  node_resolution["Resolution Options"]
  node_events["Camera Events<br/>[WebcamEvent.java]"]
  node_lifecycle["Resource Lifecycle"]
end

subgraph group_drivers["Capture Drivers"]
  node_builtin["Built-in Capture"]
  node_nativecapture["Native Capture<br/>[Device.java]"]
  node_ipcam["IP Cameras"]
  node_captureframeworks["Framework Drivers"]
  node_raspberry["Raspberry Pi"]
end

subgraph group_features["Image Features"]
  node_motion["Motion Detection"]
  node_streamer["MJPEG Streaming"]
  node_transformer["Image Transformation"]
end

subgraph group_apps["Application Interfaces"]
  node_panel["Swing Preview<br/>[WebcamPanel.java]"]
  node_picker["Camera Picker<br/>[WebcamPicker.java]"]
  node_liveexample["Live Stream Example"]
  node_akkaexample["Akka Example<br/>[Application.java]"]
end

node_developer(("Java Application"))

node_developer -->|"uses camera API"| node_api
node_api -->|"gets devices"| node_discovery
node_discovery -->|"scans driver"| node_drivercontract
node_drivercontract -.->|"provides devices"| node_devicecontract
node_builtin -.->|"captures natively"| node_nativecapture
node_discovery -.->|"discovers cameras"| node_ipcam
node_discovery -.->|"selects driver"| node_captureframeworks
node_discovery -.->|"discovers cameras"| node_raspberry
node_developer -->|"chooses size"| node_resolution
node_developer -->|"displays feed"| node_panel
node_developer -->|"selects camera"| node_picker
node_developer -->|"detects motion"| node_motion
node_developer -->|"exposes stream"| node_streamer
node_developer -.->|"transforms images"| node_transformer
node_discovery -->|"notifies changes"| node_events
node_discovery -->|"updates cleanup"| node_lifecycle
node_developer -->|"requests capture"| node_akkaexample
node_akkaexample -->|"opens and captures"| node_api
node_developer -.->|"views live video"| node_liveexample

click node_api "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/Webcam.java"
click node_discovery "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java"
click node_drivercontract "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDriver.java"
click node_devicecontract "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDevice.java"
click node_builtin "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/ds/buildin/WebcamDefaultDriver.java"
click node_nativecapture "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/ds/buildin/natives/Device.java"
click node_ipcam "https://github.com/sarxos/webcam-capture/tree/master/webcam-capture-drivers/driver-ipcam/src/main/java/com/github/sarxos/webcam/ds/ipcam"
click node_captureframeworks "https://github.com/sarxos/webcam-capture/tree/master/webcam-capture-drivers"
click node_raspberry "https://github.com/sarxos/webcam-capture/tree/master/webcam-capture-drivers/driver-raspberrypi/src/main/java/com/github/sarxos/webcam/ds/raspberrypi"
click node_resolution "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamResolution.java"
click node_panel "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamPanel.java"
click node_picker "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamPicker.java"
click node_motion "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamMotionDetector.java"
click node_streamer "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamStreamer.java"
click node_transformer "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamImageTransformer.java"
click node_events "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamEvent.java"
click node_lifecycle "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDeallocator.java"
click node_liveexample "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture-examples/webcam-capture-live-streaming/src/main/java/us/sosia/video/stream/agent/StreamClientAgent.java"
click node_akkaexample "https://github.com/sarxos/webcam-capture/blob/master/webcam-capture-examples/webcam-capture-akka/src/main/java/Application.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api,node_discovery,node_drivercontract,node_devicecontract,node_resolution,node_events,node_lifecycle toneBlue
class node_builtin,node_nativecapture,node_ipcam,node_captureframeworks,node_raspberry toneAmber
class node_motion,node_streamer,node_transformer toneMint
class node_panel,node_picker,node_liveexample,node_akkaexample toneRose
class node_developer toneIndigo
```

## Components

### Capture Core

- [Camera API](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/Webcam.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/Webcam.java`
- [Device Discovery](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java`
- [Driver Contract](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDriver.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDriver.java`
- [Device Contract](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDevice.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDevice.java`
- [Resolution Options](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamResolution.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamResolution.java`
- [Camera Events](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamEvent.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamEvent.java`
- [Resource Lifecycle](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDeallocator.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDeallocator.java`

### Capture Drivers

- [Built-in Capture](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/ds/buildin/WebcamDefaultDriver.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/ds/buildin/WebcamDefaultDriver.java`
- [Native Capture](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/ds/buildin/natives/Device.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/ds/buildin/natives/Device.java`
- [IP Cameras](https://github.com/sarxos/webcam-capture/tree/master/webcam-capture-drivers/driver-ipcam/src/main/java/com/github/sarxos/webcam/ds/ipcam): `webcam-capture-drivers/driver-ipcam/src/main/java/com/github/sarxos/webcam/ds/ipcam`
- [Framework Drivers](https://github.com/sarxos/webcam-capture/tree/master/webcam-capture-drivers): `webcam-capture-drivers`
- [Raspberry Pi](https://github.com/sarxos/webcam-capture/tree/master/webcam-capture-drivers/driver-raspberrypi/src/main/java/com/github/sarxos/webcam/ds/raspberrypi): `webcam-capture-drivers/driver-raspberrypi/src/main/java/com/github/sarxos/webcam/ds/raspberrypi`

### Image Features

- [Motion Detection](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamMotionDetector.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamMotionDetector.java`
- [MJPEG Streaming](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamStreamer.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamStreamer.java`
- [Image Transformation](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamImageTransformer.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamImageTransformer.java`

### Application Interfaces

- [Swing Preview](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamPanel.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamPanel.java`
- [Camera Picker](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamPicker.java): `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamPicker.java`
- [Live Stream Example](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture-examples/webcam-capture-live-streaming/src/main/java/us/sosia/video/stream/agent/StreamClientAgent.java): `webcam-capture-examples/webcam-capture-live-streaming/src/main/java/us/sosia/video/stream/agent/StreamClientAgent.java`
- [Akka Example](https://github.com/sarxos/webcam-capture/blob/master/webcam-capture-examples/webcam-capture-akka/src/main/java/Application.java): `webcam-capture-examples/webcam-capture-akka/src/main/java/Application.java`

### Other components

- **Java Application**

## Connections

- Java Application → Camera API: uses camera API (evidence: `README.md`)
- Camera API → Device Discovery: gets devices (evidence: `webcam-capture/src/main/java/com/github/sarxos/webcam/Webcam.java`)
- Device Discovery → Driver Contract: scans driver (evidence: `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java`)
- Driver Contract → Device Contract: provides devices
- Built-in Capture → Native Capture: captures natively
- Device Discovery → IP Cameras: discovers cameras (evidence: `webcam-capture-drivers/driver-ipcam/src/main/java/com/github/sarxos/webcam/ds/ipcam/IpCamDeviceRegistry.java`)
- Device Discovery → Framework Drivers: selects driver (evidence: `webcam-capture-drivers/driver-ipcam/src/main/java/com/github/sarxos/webcam/ds/ipcam/IpCamDeviceRegistry.java`)
- Device Discovery → Raspberry Pi: discovers cameras
- Java Application → Resolution Options: chooses size (evidence: `README.md`)
- Java Application → Swing Preview: displays feed (evidence: `README.md`)
- Java Application → Camera Picker: selects camera (evidence: `README.md`)
- Java Application → Motion Detection: detects motion (evidence: `README.md`)
- Java Application → MJPEG Streaming: exposes stream (evidence: `README.md`)
- Java Application → Image Transformation: transforms images
- Device Discovery → Camera Events: notifies changes (evidence: `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java`)
- Device Discovery → Resource Lifecycle: updates cleanup (evidence: `webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java`)
- Java Application → Akka Example: requests capture (evidence: `webcam-capture-examples/webcam-capture-akka/src/main/java/Application.java`)
- Akka Example → Camera API: opens and captures (evidence: `webcam-capture-examples/webcam-capture-akka/src/main/java/Application.java`)
- Java Application → Live Stream Example: views live video
