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 | Support | Description | Downloads | License |
---|---|---|---|---|---|
Camera | PyOrbbeckSDK | π | Image and depth from Orbbeck Camera | ||
Camera | PyRealsense | Linuxπ Macπ οΈ |
Image and depth from Realsense | ||
Camera | OpenCV Video Capture | β | Image stream from OpenCV Camera | ||
Camera | Kornia V4L Capture | β | Video stream for Linux Camera (rust) | ||
Camera | Kornia GST Capture | β | Video Capture using Gstreamer (rust) | ||
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 | DJI - Robomaster S1 | π | Robomaster Client | ||
Chassis | Dora Kit Car | π | Open Source Chassis | ||
Arm | Alex Koch - Low Cost Robot | π | Alex Koch - Low Cost Robot Client | ||
Arm | Lebai - LM3 | π | Lebai client | ||
Arm | Agilex - Piper | π | Agilex arm client | ||
Robot | Pollen - Reachy 1 | π | Reachy 1 Client | ||
Robot | Pollen - Reachy 2 | π | Reachy 2 client | ||
Robot | Trossen - Aloha | π | Aloha 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 | Cudaβ
Metalπ οΈ |
Segment Anything | ||
Large Language Model(LLM) | Qwen2.5 | β | Large Language Model using Qwen | ||
Vision Language Model(VLM) | Qwen2.5-vl | β | Vision Language Model using Qwen2.5 VL | ||
Vision Language Model(VLM) | InternVL | π | InternVL is a vision language model | ||
Vision Language Action(VLA) | RDT-1B | π | Infer policy using Robotic Diffusion Transformer | ||
Translation | ArgosTranslate | π | Open Source translation engine | ||
Translation | Opus MT | π | Translate text between language | ||
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 | Carla | π | Carla Simulator | ||
Simulator | Gymnasium | π | Experimental OpenAI Gymnasium bridge | ||
Image Processing | Kornia Sobel Operator | β | Kornia image processing Sobel operator (rust) |
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 | |
Vision | Image Processing | Multi camera image processing | |
Model Training | Piper RDT | Piper RDT Pipeline | |
Model Training | LeRobot - Alexander Koch | Training Alexander Koch Low Cost Robot with LeRobot | |
Benchmark | CPU Benchmark | CPU Benchmark of dora-rs |
- 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 <tao.xavier@outlook.com>",
"Enzo Le Van <dev@enzo-le-van.fr>"
]
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.