Train and deploy Vision-Language-Action (VLA) models for robotic imitation learning
Key Features • Quick Start • Documentation • Contributing
What is Physical AI Studio?
Physical AI Studio is an end-to-end framework for teaching robots to perform tasks through imitation learning from human demonstrations.
Key Features
- End-to-End Pipeline - From demonstration recording to robot deployment
- State-of-the-Art Policies - Native policy implementations such as ACT, SmolVLA, Pi0.5, and RLDX-1, plus the full LeRobot policy zoo
- Flexible Interface - Use Python API, CLI, or GUI
- Production Export - Deploy to OpenVINO, ONNX, or Torch for any hardware
- Standardized Benchmarks - Evaluate on benchmarks such as LIBERO, PushT, and RoboCasa
- Inference Optimizations - SnapFlow gives about 3× faster Pi0.5 action-chunk inference; LIBERO results
- Built on Lightning - PyTorch Lightning for distributed training, mixed precision, and more
Quick Start
Application (GUI)
For users who prefer a visual interface for end-to-end workflow:
Download the full demo video →
Docker
Run the full application (backend + UI) in a single container (using Docker):
# Clone the repository
git clone https://github.com/open-edge-platform/physical-ai-studio.git
cd physical-ai-studio
Setup and run docker services
cd application/docker
./setup-devices.sh --xpu # or use --cuda, --cpu
docker compose up -d
Application runs at
If you plan to train Hugging Face Hub-backed policies (for example, SmolVLA, Pi0.5,
and others), configure HF_TOKEN to avoid unauthenticated Hub access warnings. See
Hugging Face Integration.
Native: installation & running
Run the application in development mode, using uv package manager and node v24 (we recommend using nvm)
Note: native setup requires additional OS-level libraries (OpenCV/video/USB and Python build dependencies). See the Prerequisites section in Application Installation.
# Clone the repository
git clone https://github.com/open-edge-platform/physical-ai-studio.git
cd physical-ai-studio
Install and run backend
cd application/backend
Start the backend, or use --extra cpu, --extra cuda
uv run --extra xpu physicalai-studio serve # or: ./run.sh
# In a new terminal: install and run UI
cd application/ui
npm install
Start the UI
npm run start
Open
If you plan to train Hugging Face Hub-backed policies (for example, SmolVLA, Pi0.5, and others), configure a Hugging Face token in Settings > General > Hugging Face in the UI to avoid unauthenticated Hub access warnings. See Hugging Face Integration.
Library (Python/CLI)
For programmatic control over training, benchmarking, and deployment with both API and CLI
pip install physicalai-train
Training
``python test="skip" reason="requires dataset download"
from physicalai.data import LeRobotDataModule
from physicalai.policies import ACT
from physicalai.train import Trainer
datamodule = LeRobotDataModule(repo_id="lerobot/aloha_sim_transfer_cube_human") model = ACT() trainer = Trainer(max_epochs=100) trainer.fit(model=model, datamodule=datamodule)
</details>
<details>
<summary>Benchmark</summary>
python test="skip" reason="requires checkpoint and libero"
from physicalai.benchmark import LiberoBenchmark
from physicalai.policies import ACT
policy = ACT.load_from_checkpoint("experiments/lightning_logs/version_0/checkpoints/last.ckpt") benchmark = LiberoBenchmark(task_suite="libero_10", num_episodes=20) results = benchmark.evaluate(policy) print(f"Success rate: {results.aggregate_success_rate:.1f}%")
</details>
<details>
<summary>Export</summary>
python test="skip" reason="requires checkpoint"
from physicalai.export import get_available_backends
from physicalai.policies import ACT
See available backends
print(get_available_backends()) # ['onnx', 'openvino', 'torch', 'executorch']Export to OpenVINO
policy = ACT.load_from_checkpoint("experiments/lightning_logs/version_0/checkpoints/last.ckpt") policy.export("./policy", backend="openvino")</details>
<details>
<summary>Inference</summary>
python test="skip" reason="requires exported model and environment"
from physicalai.inference import InferenceModel
policy = InferenceModel("./policy") obs, info = env.reset() done = False
while not done: action = policy.select_action(obs) obs, reward, terminated, truncated, info = env.step(action) done = terminated or truncated
</details>
<details>
<summary>CLI Usage</summary>
bash
Train
physicalai fit --config configs/physicalai/act/pusht/default.yamlEvaluate
physicalai benchmark --config configs/benchmark/libero.yaml --ckpt_path model.ckptExport (Python API only - CLI coming soon)
Use: policy.export("./policy", backend="openvino")
``Documentation
| Resource | Description | | ------------------------------------------- | ----------------------------------- | | Library Docs | API reference, guides, and examples | | Application Docs | GUI setup and usage | | Contributing | Contributing and development setup |
Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines.