Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-release |
| Last Updated | 2026-01-26 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai | 2.31.1 |
README
DepthAI C++ Library
Core C++ library
Important — You’re viewing the
v2.x.ybranch.
- For the latest version with support for RVC4 devices, please switch to the
mainbranch.
Documentation
Documentation is available over at Luxonis DepthAI API
Disclaimer
DepthAI library doesn’t yet provide API stability guarantees. While we take care to properly deprecate old functions, some changes might still be breaking. We expect to provide API stability from version 3.0.0 onwards.
Dependencies
- CMake >= 3.10
- C/C++14 compiler
- [optional] OpenCV 4 (required if building examples)
- [optional] PCL (required for point cloud example)
To install OpenCV:
MacOS: brew install opencv
Linux: sudo apt install libopencv-dev
To install PCL:
MacOS: brew install pcl
Linux: sudo apt install libpcl-dev
ℹ️ On Linux distributions based on RPMs, you need to install
perl-corerequired by OpenSSL dependency.sudo yum install perl-coreAnother option is to disable CURL support by setting
DEPTHAI_ENABLE_CURL=OFFwhen configuring CMake.cmake -S. -Bbuild -D'DEPTHAI_ENABLE_CURL=OFF'Building
Make sure submodules are updated
git submodule update --init --recursive
Then configure and build
cmake -S. -Bbuild
cmake --build build
ℹ️ To speed up build times, use
cmake --build build --parallel [num CPU cores](CMake >= 3.12). For older versions use: Linux/macOS:cmake --build build -- -j[num CPU cores], MSVC:cmake --build build -- /MP[num CPU cores]
⚠️ If any CMake commands error with
CMake Error: The source directory "" does not exist.replace argument-Swith-H
Dynamic library
To build dynamic version of library configure with following option added
cmake -S. -Bbuild -D'BUILD_SHARED_LIBS=ON'
cmake --build build
Android
Android is supported to some extent but not actively pursued nor tested. PRs with any improvements are welcome.
Steps:
- Install Android NDK (for example via Android Studio).
- Set the NDK path:
export ANDROID_HOME=$HOME/.local/lib/Android
export PATH=$PATH:$ANDROID_HOME/emulator:$ANDROID_HOME/platform-tools
export NDK=$ANDROID_HOME/ndk/23.1.7779620/ # Check version
- Ensure a recent version of cmake (apt version is outdated, install snap install cmake –classic)
- Run cmake, set your ABI and Platform as needed:
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=android-25
cmake --build build
Running examples
To build the examples configure with following option added
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-release |
| Last Updated | 2026-01-26 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai | 2.31.1 |
README
DepthAI C++ Library
Core C++ library
Important — You’re viewing the
v2.x.ybranch.
- For the latest version with support for RVC4 devices, please switch to the
mainbranch.
Documentation
Documentation is available over at Luxonis DepthAI API
Disclaimer
DepthAI library doesn’t yet provide API stability guarantees. While we take care to properly deprecate old functions, some changes might still be breaking. We expect to provide API stability from version 3.0.0 onwards.
Dependencies
- CMake >= 3.10
- C/C++14 compiler
- [optional] OpenCV 4 (required if building examples)
- [optional] PCL (required for point cloud example)
To install OpenCV:
MacOS: brew install opencv
Linux: sudo apt install libopencv-dev
To install PCL:
MacOS: brew install pcl
Linux: sudo apt install libpcl-dev
ℹ️ On Linux distributions based on RPMs, you need to install
perl-corerequired by OpenSSL dependency.sudo yum install perl-coreAnother option is to disable CURL support by setting
DEPTHAI_ENABLE_CURL=OFFwhen configuring CMake.cmake -S. -Bbuild -D'DEPTHAI_ENABLE_CURL=OFF'Building
Make sure submodules are updated
git submodule update --init --recursive
Then configure and build
cmake -S. -Bbuild
cmake --build build
ℹ️ To speed up build times, use
cmake --build build --parallel [num CPU cores](CMake >= 3.12). For older versions use: Linux/macOS:cmake --build build -- -j[num CPU cores], MSVC:cmake --build build -- /MP[num CPU cores]
⚠️ If any CMake commands error with
CMake Error: The source directory "" does not exist.replace argument-Swith-H
Dynamic library
To build dynamic version of library configure with following option added
cmake -S. -Bbuild -D'BUILD_SHARED_LIBS=ON'
cmake --build build
Android
Android is supported to some extent but not actively pursued nor tested. PRs with any improvements are welcome.
Steps:
- Install Android NDK (for example via Android Studio).
- Set the NDK path:
export ANDROID_HOME=$HOME/.local/lib/Android
export PATH=$PATH:$ANDROID_HOME/emulator:$ANDROID_HOME/platform-tools
export NDK=$ANDROID_HOME/ndk/23.1.7779620/ # Check version
- Ensure a recent version of cmake (apt version is outdated, install snap install cmake –classic)
- Run cmake, set your ABI and Platform as needed:
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=android-25
cmake --build build
Running examples
To build the examples configure with following option added
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-release |
| Last Updated | 2026-01-26 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai | 2.31.1 |
README
DepthAI C++ Library
Core C++ library
Important — You’re viewing the
v2.x.ybranch.
- For the latest version with support for RVC4 devices, please switch to the
mainbranch.
Documentation
Documentation is available over at Luxonis DepthAI API
Disclaimer
DepthAI library doesn’t yet provide API stability guarantees. While we take care to properly deprecate old functions, some changes might still be breaking. We expect to provide API stability from version 3.0.0 onwards.
Dependencies
- CMake >= 3.10
- C/C++14 compiler
- [optional] OpenCV 4 (required if building examples)
- [optional] PCL (required for point cloud example)
To install OpenCV:
MacOS: brew install opencv
Linux: sudo apt install libopencv-dev
To install PCL:
MacOS: brew install pcl
Linux: sudo apt install libpcl-dev
ℹ️ On Linux distributions based on RPMs, you need to install
perl-corerequired by OpenSSL dependency.sudo yum install perl-coreAnother option is to disable CURL support by setting
DEPTHAI_ENABLE_CURL=OFFwhen configuring CMake.cmake -S. -Bbuild -D'DEPTHAI_ENABLE_CURL=OFF'Building
Make sure submodules are updated
git submodule update --init --recursive
Then configure and build
cmake -S. -Bbuild
cmake --build build
ℹ️ To speed up build times, use
cmake --build build --parallel [num CPU cores](CMake >= 3.12). For older versions use: Linux/macOS:cmake --build build -- -j[num CPU cores], MSVC:cmake --build build -- /MP[num CPU cores]
⚠️ If any CMake commands error with
CMake Error: The source directory "" does not exist.replace argument-Swith-H
Dynamic library
To build dynamic version of library configure with following option added
cmake -S. -Bbuild -D'BUILD_SHARED_LIBS=ON'
cmake --build build
Android
Android is supported to some extent but not actively pursued nor tested. PRs with any improvements are welcome.
Steps:
- Install Android NDK (for example via Android Studio).
- Set the NDK path:
export ANDROID_HOME=$HOME/.local/lib/Android
export PATH=$PATH:$ANDROID_HOME/emulator:$ANDROID_HOME/platform-tools
export NDK=$ANDROID_HOME/ndk/23.1.7779620/ # Check version
- Ensure a recent version of cmake (apt version is outdated, install snap install cmake –classic)
- Run cmake, set your ABI and Platform as needed:
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=android-25
cmake --build build
Running examples
To build the examples configure with following option added
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-old-devel |
| Last Updated | 2026-10-12 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai_v3 | 3.11.0 |
README
DepthAI Library
DepthAI library for interfacing with Luxonis DepthAI hardware. It’s written in C++ and offers Python bindings out of the box.
Important — You’re viewing the
v3.x.ybranch.
- For production projects that still rely on v2, check out the
v2_stablebranch.- Need to migrate? Follow the step-by-step v2 → v3 Porting Guide.
Documentation
Documentation is available over at Luxonis DepthAI API
Examples
Examples for both C++ and Python are available in the examples folder. To see how to build and run them see README.md for more information.
To build the examples in C++ configure with the following option added:
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
Beta features
The beta namespace is a staging area for experimental DepthAI features. It
allows new features to be developed and iterated on quickly before they are
promoted to the main depthai namespace.
Beta features are well-developed, but minor API and behavioral changes may occur between DepthAI releases without notice.
In C++, beta nodes are available under dai::beta::node:
auto node = pipeline.create<dai::beta::node::ImgDetectionsFilter>();
In Python, they are available under dai.beta.node:
node = pipeline.create(dai.beta.node.ImgDetectionsFilter)
On-device execution of Beta nodes is supported only on RVC4. If running Beta nodes on RVC2, DepthAI automatically configures beta nodes to run on the host.
Multiple devices in one pipeline
A single dai::Pipeline can drive several devices. Devices become part of the pipeline
explicitly with addDevice(...) or implicitly when a node is created with an explicit
device; the first device becomes the master (default device) used by nodes created
without one.
pipeline = dai.Pipeline(False) # no implicit device
devA = pipeline.addDevice("10.0.0.10") # promoted to master
devB = pipeline.addDevice("10.0.0.11")
camA = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) # master
camB = pipeline.create(dai.node.Camera, device=devB).build(dai.CameraBoardSocket.CAM_A)
sync = pipeline.create(dai.node.Sync) # host Sync aligns both streams
sync.setRunOnHost(True)
camA.requestOutput((640, 400)).link(sync.inputs["a"])
camB.requestOutput((640, 400)).link(sync.inputs["b"])
Key behaviors:
- Device-to-device links. Linking an output on device A to an input on device B inserts a host relay automatically at build time.
-
Partial operation. Losing one device leaves its streams idle while the rest of
the pipeline keeps running; the lost device reconnects on its own. Observe this via
pipeline.getDeviceState(device)andpipeline.setDeviceStateCallback(...). The pipeline stops itself only when the last device is gone or when a device that consumes another device’s streams is lost for good. Callpipeline.setStopOnDeviceLoss(True)to stop when any device that runs a node is lost for good (reconnection exhausted); withdevice.setMaxReconnectionAttempts(0)it stops as soon as the disconnect is detected. -
Time.
getTimestamp()values are host-clock based and comparable across devices; per-devicegetTimestampDevice()values are not (a hostSyncnode rejects the DEVICE timestamp source across devices at build). -
Source devices. After build, a host node can ask
input.getSourceDevice()/inputs.getSourceDevices()which device produces each of its inputs. -
Per-device configuration. Every pipeline-level device setter/getter has a
(device, ...)overload; the form without a device targets the master. - Holistic record/replay is not supported with more than one device yet.
See examples/{cpp,python}/.../MultiDevice/ for frame sync, a device-to-device relay
and a multi-device host node.
Running on the device (standalone)
The pipeline process may itself run on an RVC4 and use the local device over shared memory, with further devices attached over the network:
```python local = pipeline.addDevice(dai.DeviceInfo.local()) # this RVC4, no search timeout remote = pipeline.addDevice(“10.0.0.11”) # a remote device over TCP
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | DepthAI C++ Library |
| Checkout URI | https://github.com/luxonis/depthai-core.git |
| VCS Type | git |
| VCS Version | ros-release |
| Last Updated | 2026-01-26 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| depthai | 2.31.1 |
README
DepthAI C++ Library
Core C++ library
Important — You’re viewing the
v2.x.ybranch.
- For the latest version with support for RVC4 devices, please switch to the
mainbranch.
Documentation
Documentation is available over at Luxonis DepthAI API
Disclaimer
DepthAI library doesn’t yet provide API stability guarantees. While we take care to properly deprecate old functions, some changes might still be breaking. We expect to provide API stability from version 3.0.0 onwards.
Dependencies
- CMake >= 3.10
- C/C++14 compiler
- [optional] OpenCV 4 (required if building examples)
- [optional] PCL (required for point cloud example)
To install OpenCV:
MacOS: brew install opencv
Linux: sudo apt install libopencv-dev
To install PCL:
MacOS: brew install pcl
Linux: sudo apt install libpcl-dev
ℹ️ On Linux distributions based on RPMs, you need to install
perl-corerequired by OpenSSL dependency.sudo yum install perl-coreAnother option is to disable CURL support by setting
DEPTHAI_ENABLE_CURL=OFFwhen configuring CMake.cmake -S. -Bbuild -D'DEPTHAI_ENABLE_CURL=OFF'Building
Make sure submodules are updated
git submodule update --init --recursive
Then configure and build
cmake -S. -Bbuild
cmake --build build
ℹ️ To speed up build times, use
cmake --build build --parallel [num CPU cores](CMake >= 3.12). For older versions use: Linux/macOS:cmake --build build -- -j[num CPU cores], MSVC:cmake --build build -- /MP[num CPU cores]
⚠️ If any CMake commands error with
CMake Error: The source directory "" does not exist.replace argument-Swith-H
Dynamic library
To build dynamic version of library configure with following option added
cmake -S. -Bbuild -D'BUILD_SHARED_LIBS=ON'
cmake --build build
Android
Android is supported to some extent but not actively pursued nor tested. PRs with any improvements are welcome.
Steps:
- Install Android NDK (for example via Android Studio).
- Set the NDK path:
export ANDROID_HOME=$HOME/.local/lib/Android
export PATH=$PATH:$ANDROID_HOME/emulator:$ANDROID_HOME/platform-tools
export NDK=$ANDROID_HOME/ndk/23.1.7779620/ # Check version
- Ensure a recent version of cmake (apt version is outdated, install snap install cmake –classic)
- Run cmake, set your ABI and Platform as needed:
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=android-25
cmake --build build
Running examples
To build the examples configure with following option added
cmake -S. -Bbuild -D'DEPTHAI_BUILD_EXAMPLES=ON'
cmake --build build
File truncated at 100 lines see the full file