---
config:
layout: dagre
flowchart:
htmlLabels: true
---
flowchart TB
User(["User
Person interacting with system"])
-- audio stream -->
UI@{ label: "UI Layer
Gradio/Console" }
UI -- audio stream -->
OpenAI@{ label: "gpt-realtime API
Audio+Tool Calls+Vision" }
OpenAI -- audio stream -->
Motion@{ label: "Motion Control
Audio Sync + Tracking" }
OpenAI -- tool calls -->
Handlers@{ label: "Tool Handlers
move_head, camera, head_tracking,
dance, play_emotion, do_nothing" }
Handlers -- movement
requests --> Motion
Handlers -- camera frames, face tracking -->
Camera@{ label: "Camera Worker
Frame Buffer + Face Tracking" }
Handlers -. image for
analysis .-> OpenAI
Camera -- face tracking --> Motion
Camera -. frames .->
Vision@{ label: "Vision Processor
Local VLM (optional)" }
Vision -. description .-> Handlers
Robot@{ label: "reachy_mini
Robot Control Library" }
-- camera
frames --> Camera
Motion -- commands --> Robot
Handlers -- results --> OpenAI
User:::userStyle
UI:::uiStyle
OpenAI:::aiStyle
Motion:::coreStyle
Handlers:::toolStyle
Camera:::coreStyle
Vision:::aiStyle
Robot:::hardwareStyle
classDef userStyle fill:#e1f5fe,stroke:#01579b,stroke-width:3px
classDef uiStyle fill:#b3e5fc,stroke:#0277bd,stroke-width:2px
classDef aiStyle fill:#e1bee7,stroke:#7b1fa2,stroke-width:3px
classDef coreStyle fill:#fff9c4,stroke:#f57f17,stroke-width:2px
classDef hardwareStyle fill:#ef9a9a,stroke:#c62828,stroke-width:3px
classDef toolStyle fill:#fffde7,stroke:#f9a825,stroke-width:1px