# open-edge-platform/physical-ai-studio architecture

> Architecture diagram of the GitHub repository open-edge-platform/physical-ai-studio, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/open-edge-platform/physical-ai-studio
- Repository: https://github.com/open-edge-platform/physical-ai-studio

## Overview

Physical AI Studio is an end-to-end robotic imitation-learning application: users configure projects and robot hardware, capture demonstrations into datasets, train policies, then inspect, export, and run models for inference. The repository tree supports these stages across a browser UI and Python backend, including local and remote training and detached robot runtime sessions. The README also describes library-based benchmarking, but no library source tree is included here. Some backend wiring is unsampled, so the graph shows only broad documented interactions and clear runtime responsibilities.

Main entry points: [`application/backend/src/api`](https://github.com/open-edge-platform/physical-ai-studio/tree/main/application/backend/src/api) (HTTP and WS API), [`application/backend/src/runtime/hosts/session_worker.py`](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/runtime/hosts/session_worker.py) (Session worker), [`application/backend/src/services/training_service.py`](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/training_service.py) (Training orchestration), [`application/backend/src/db/engine.py`](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/db/engine.py) (SQLite database)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User interface"]
  node_ui["Studio UI<br/>[app.layout.tsx]"]
end

subgraph group_capture["Robot setup and capture"]
  node_projects["Projects and environments<br/>[project_service.py]"]
  node_hardware["Robot and camera setup"]
  node_robot["Robot clients<br/>[robot_service.py]"]
  node_runtime["Runtime sessions"]
  node_worker["Session worker<br/>[session_worker.py]"]
  node_transport["Runtime transport<br/>[server.py]"]
end

subgraph group_learning["Datasets and models"]
  node_datasets["Dataset management<br/>[dataset_service.py]"]
  node_recording["Recording mutations"]
  node_training["Training orchestration"]
  node_train_worker["Training worker<br/>[training_worker.py]"]
  node_trainer["Trainer service<br/>[main.py]"]
  node_models["Model management<br/>[model_service.py]"]
  node_inference["Inference and export<br/>[inference-page.tsx]"]
end

subgraph group_platform["Backend platform"]
  node_api["HTTP and WS API"]
  node_remote["Remote trainers"]
  node_storage[("SQLite database<br/>[engine.py]")]
end

node_user(("Operator"))
node_robot_device(("Robot and cameras"))
node_external_trainer(("Remote training host"))

node_user -->|"operates"| node_ui
node_ui -->|"requests and streams"| node_api
node_api -->|"manages projects"| node_projects
node_api -->|"configures hardware"| node_hardware
node_api -->|"starts and monitors"| node_runtime
node_hardware -->|"configures clients"| node_robot
node_runtime -->|"launches session"| node_worker
node_worker -->|"controls robot"| node_robot
node_worker -->|"publishes session events"| node_transport
node_robot_device -->|"device I/O"| node_robot
node_api -->|"manages datasets"| node_datasets
node_worker -->|"commits recordings"| node_recording
node_recording -->|"writes episodes"| node_datasets
node_api -->|"starts training"| node_training
node_training -->|"dispatches job"| node_train_worker
node_train_worker -->|"runs training"| node_trainer
node_training -.->|"selects remote target"| node_remote
node_remote -.->|"forwards training"| node_external_trainer
node_api -->|"manages models"| node_models
node_ui -->|"configures inference and export"| node_inference
node_models -->|"provides model artifacts"| node_inference
node_projects -->|"persists records"| node_storage
node_datasets -->|"persists metadata"| node_storage
node_training -->|"persists jobs"| node_storage
node_models -->|"persists metadata"| node_storage

click node_ui "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/ui/src/routes/app/app.layout.tsx"
click node_api "https://github.com/open-edge-platform/physical-ai-studio/tree/main/application/backend/src/api"
click node_projects "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/project_service.py"
click node_hardware "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/environment_service.py"
click node_robot "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/robots/robot_service.py"
click node_runtime "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/runtime_session_service.py"
click node_worker "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/runtime/hosts/session_worker.py"
click node_transport "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/runtime/transport/server.py"
click node_datasets "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/dataset_service.py"
click node_recording "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/internal_datasets/mutations/recording_mutation.py"
click node_training "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/training_service.py"
click node_train_worker "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/workers/training_worker.py"
click node_trainer "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/trainer/main.py"
click node_remote "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/remote_trainer_service.py"
click node_models "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/model_service.py"
click node_inference "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/ui/src/features/models/inference/inference-page.tsx"
click node_storage "https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/db/engine.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_ui toneBlue
class node_projects,node_hardware,node_robot,node_runtime,node_worker,node_transport toneAmber
class node_datasets,node_recording,node_training,node_train_worker,node_trainer,node_models,node_inference toneMint
class node_api,node_remote,node_storage toneRose
class node_user,node_robot_device,node_external_trainer toneIndigo
```

## Components

### User interface

- [Studio UI](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/ui/src/routes/app/app.layout.tsx): `application/ui/src/routes/app/app.layout.tsx`

### Robot setup and capture

- [Projects and environments](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/project_service.py): `application/backend/src/services/project_service.py`
- [Robot and camera setup](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/environment_service.py): `application/backend/src/services/environment_service.py`
- [Robot clients](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/robots/robot_service.py): `application/backend/src/robots/robot_service.py`
- [Runtime sessions](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/runtime_session_service.py): `application/backend/src/services/runtime_session_service.py`
- [Session worker](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/runtime/hosts/session_worker.py): `application/backend/src/runtime/hosts/session_worker.py`
- [Runtime transport](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/runtime/transport/server.py): `application/backend/src/runtime/transport/server.py`

### Datasets and models

- [Dataset management](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/dataset_service.py): `application/backend/src/services/dataset_service.py`
- [Recording mutations](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/internal_datasets/mutations/recording_mutation.py): `application/backend/src/internal_datasets/mutations/recording_mutation.py`
- [Training orchestration](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/training_service.py): `application/backend/src/services/training_service.py`
- [Training worker](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/workers/training_worker.py): `application/backend/src/workers/training_worker.py`
- [Trainer service](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/trainer/main.py): `application/backend/src/trainer/main.py`
- [Model management](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/model_service.py): `application/backend/src/services/model_service.py`
- [Inference and export](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/ui/src/features/models/inference/inference-page.tsx): `application/ui/src/features/models/inference/inference-page.tsx`

### Backend platform

- [HTTP and WS API](https://github.com/open-edge-platform/physical-ai-studio/tree/main/application/backend/src/api): `application/backend/src/api`
- [Remote trainers](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/services/remote_trainer_service.py): `application/backend/src/services/remote_trainer_service.py`
- [SQLite database](https://github.com/open-edge-platform/physical-ai-studio/blob/main/application/backend/src/db/engine.py): `application/backend/src/db/engine.py`

### Other components

- **Operator**
- **Robot and cameras**
- **Remote training host**

## Connections

- Operator → Studio UI: operates
- Studio UI → HTTP and WS API: requests and streams
- HTTP and WS API → Projects and environments: manages projects
- HTTP and WS API → Robot and camera setup: configures hardware
- HTTP and WS API → Runtime sessions: starts and monitors
- Robot and camera setup → Robot clients: configures clients
- Runtime sessions → Session worker: launches session
- Session worker → Robot clients: controls robot
- Session worker → Runtime transport: publishes session events
- Robot and cameras → Robot clients: device I/O
- HTTP and WS API → Dataset management: manages datasets
- Session worker → Recording mutations: commits recordings
- Recording mutations → Dataset management: writes episodes
- HTTP and WS API → Training orchestration: starts training
- Training orchestration → Training worker: dispatches job
- Training worker → Trainer service: runs training
- Training orchestration → Remote trainers: selects remote target
- Remote trainers → Remote training host: forwards training
- HTTP and WS API → Model management: manages models
- Studio UI → Inference and export: configures inference and export
- Model management → Inference and export: provides model artifacts
- Projects and environments → SQLite database: persists records
- Dataset management → SQLite database: persists metadata
- Training orchestration → SQLite database: persists jobs
- Model management → SQLite database: persists metadata
