This hub contains useful pre-built nodes for Dora.
Feel free to modify this README with your own nodes so that it benefits the community.
Type | Title | Description | Support | Downloads | License |
---|---|---|---|---|---|
Camera | Kornia GST Capture | Video Capture using Gstreamer | β | ||
Camera | Kornia V4L Capture | Video stream for Linux Cameras | β | ||
Camera | PyOrbbeckSDK | Image and depth from Orbbeck Camera | π | ||
Camera | PyRealsense | Image and depth from Realsense | Linuxπ Macπ οΈ |
||
Camera | OpenCV Video Capture | Image stream from OpenCV Camera | β | ||
Peripheral | Keyboard | Keyboard char listener | β | ||
Peripheral | Microphone | Audio from microphone | β | ||
Peripheral | PyAudio(Speaker) | Output audio from speaker | β | ||
Actuator | Feetech | Feetech Client | π | ||
Actuator | Dynamixel | Dynamixel Client | π | ||
Chassis | Agilex - UGV | Robomaster Client | π | ||
Chassis | Dora Kit Car | Open Source Chassis | π | ||
Chassis | DJI - Robomaster S1 | Robomaster Client | π | ||
Arm | Alex Koch - Low Cost Robot | Alex Koch - Low Cost Robot Client | π | ||
Arm | Agilex - Piper | Agilex arm client | π | ||
Arm | Lebai - LM3 | Lebai client | π | ||
Robot | Trossen - Aloha | Aloha client | π | ||
Robot | Pollen - Reachy 1 | Reachy 1 Client | π | ||
Robot | Pollen - Reachy 2 | Reachy 2 client | π | ||
Voice Activity Detection(VAD) | Silero VAD | Silero Voice activity detection | β | ||
Speech to Text(STT) | Whisper | Transcribe audio to text | β | ||
Object Detection | Yolov8 | Object detection | β | ||
Segmentation | SAM2 | Segment Anything | Cudaβ
Metalπ οΈ |
||
Large Language Model(LLM) | Qwen2.5 | Large Language Model using Qwen | β | ||
Vision Language Model(VLM) | InternVL | InternVL is a vision language model | π | ||
Vision Language Model(VLM) | Qwen2.5-vl | Vision Language Model using Qwen2.5 VL | β | ||
Vision Language Action(VLA) | RDT-1B | Infer policy using Robotic Diffusion Transformer | π | ||
Translation | Opus MT | Translate text between language | π | ||
Translation | ArgosTranslate | Open Source translation engine | π | ||
Text to Speech(TTS) | Kokoro TTS | Efficient Text to Speech | β | ||
Recorder | Llama Factory Recorder | Record data to train LLM and VLM | π | ||
Recorder | LeRobot Recorder | LeRobot Recorder helper | π | ||
Visualization | Plot | Simple OpenCV plot visualization | β | ||
Visualization | Rerun | Visualization tool | β | ||
Simulator | Mujoco | Mujoco Simulator | π | ||
Simulator | Gymnasium | Experimental OpenAI Gymnasium bridge | π | ||
Simulator | Carla | Carla Simulator | π | ||
nan | Kornia Sobel Operator | Kornia image processing Sobel operator | β |
Type | Title | Description | Last Commit |
---|---|---|---|
Audio | Speech to Text(STT) | Transform speech to text. | |
Audio | Translation | Translate audio in real time. | |
Vision | Vision Language Model(VLM) | Use a VLM to understand images. | |
Vision | YOLO | Use YOLO to detect object within image. | |
Vision | Camera | Simple webcam plot example | |
Model Training | Piper RDT | Piper RDT Pipeline | |
Model Training | LeRobot - Alexander Koch | Training Alexander Koch Low Cost Robot with LeRobot | |
ROS2 | C++ ROS2 Example | Example using C++ ROS2 | |
ROS2 | Rust ROS2 Example | Example using Rust ROS2 | |
ROS2 | Python ROS2 Example | Example using Python ROS2 | |
Benchmark | GPU Benchmark | GPU Benchmark of dora-rs | |
Benchmark | CPU Benchmark | CPU Benchmark of dora-rs | |
Tutorial | Rust Example | Example using Rust | |
Tutorial | Python Example | Example using Python | |
Tutorial | CMake Example | Example using CMake | |
Tutorial | C Example | Example with C node | |
Tutorial | CUDA Example | Example using CUDA Zero Copy | |
Tutorial | C++ Example | Example with C++ node |
- To work on a new node, start by:
cd node-hub
dora new your-node-name --lang python --kind node
cd ./your-node-name
uv venv --seed -p 3.11
uv pip install -e . # Install
uv run ruff check . --fix # Format
uv run ruff check . # Lint
uv run pytest . # Test
- To add a python dependency just do:
uv add numpy # for example
The package is then added to your
pyproject.toml
-
Modify the code within
main.py
in your liking. -
Create a PR and let the CI/CD run test on it π
The structure of the node hub is as follows (please use the same structure if you need to add a new node):
node-hub/
βββ your-node/
βββ README.md
βββ your-node
β βββ __init__.py
β βββ __main__.py
β βββ main.py
βββ pyproject.toml
βββ tests
βββ test_<your-node>.py
The idea is to make a pyproject.toml
file that will install the required dependencies for the node and attach main
function of the node inside a callable script in your environment.
To do so, you will need to add a main
function inside the main.py
file.
def main():
pass
And then you will need to adapt the following pyproject.toml
file:
[project]
name = "[name of the node e.g. video-encoder, with '-' to replace spaces]"
version = "0.1"
authors = [{ name = "[Pseudo/Name]", email = "[email]" }]
description = "Dora Node for []"
readme = "README.md"
license = { text = "MIT" }
dependencies = [
"dora-rs >= 0.3.8",
]
[project.scripts]
[name of the node with '-' to replace spaces] = "[name of the node with '_' to replace spaces].main:main"
[tool.ruff.lint]
extend-select = [
"D", # pydocstyle
"UP", # Ruff's UP rule
"PERF", # Ruff's PERF rule
"RET", # Ruff's RET rule
"RSE", # Ruff's RSE rule
"NPY", # Ruff's NPY rule
"N", # Ruff's N rule
"I", # Ruff's I rule
]
Finally, the README.md file should explicit all inputs/outputs of the node and how to configure it in the YAML file.
[project]
name = "opencv-plot"
version = "0.1"
authors = [
"Haixuan Xavier Tao <[email protected]>",
"Enzo Le Van <[email protected]>"
]
description = "Dora Node for plotting data with OpenCV"
readme = "README.md"
license = { text = "MIT" }
requires-python = ">=3.7"
dependencies = [
"dora-rs >= 0.3.8",
]
[dependency-groups]
dev = ["pytest >=8.1.1", "ruff >=0.9.1"]
[project.scripts]
opencv-plot = "opencv_plot.main:main"
[tool.ruff.lint]
extend-select = [
"D", # pydocstyle
"UP", # Ruff's UP rule
"PERF", # Ruff's PERF rule
"RET", # Ruff's RET rule
"RSE", # Ruff's RSE rule
"NPY", # Ruff's NPY rule
"N", # Ruff's N rule
"I", # Ruff's I rule
]
- If a git repository is added as submodule. Proper path should be added in
pyproject.toml
inorder to make sure that linting and testing are exempted for that dependency. - A very good example of how this can be done is as follows
Correct approach:
[tool.ruff]
exclude = ["dora_magma/Magma"]
[tool.black]
extend.exclude = "dora_magma/Magma"
Incorrect Approach:
[tool.ruff]
exclude = ["dora-magma/dora_magma/Magma"]
[tool.black]
extend.exclude = "dora_magma/Magma"
dora-magma
is root folder of the node.
cd node-hub
dora new your-node-name --lang rust --kind node
cd ./your-node-name
- Before building the node, make sure to add your node to the workspace members list in the root
Cargo.toml
file:
[workspace]
members = [
...
"node-hub/your-node-name"
]
- Also change the
Cargo.toml
file in your node to use the workspace version of dora-node-api:
[dependencies]
dora-node-api = { workspace = true }
The structure of the node hub for Rust is as follows (please use the same structure if you need to add a new node):
node-hub/
βββ your-node/
βββ Cargo.toml
βββ README.md
βββ src/
βββ main.rs
The README.md file should explicit all inputs/outputs of the node and how to configure it in the YAML file.
This project is licensed under Apache-2.0. Check out NOTICE.md for more information.