Skip to main content

VLAStudio: A Modular Learning Playground for Robotics

demos generated by policies trained in VLAStudio
ACT - RLBench Diffusion Policy - ALOHA-Sim ACT - Square FlowMatching - Transport SmolVLA - MetaWorld
Koch - Pick & Place -Inference SO101 - Fold Tower -Inference BC_MLP - AdroitHandDoor Pi0 - LIBERO ACT - RoboTwin

VLAStudio is a Python library for robot learning. Write your own run.py to load demonstrations, train imitation-learning and vision-language-action policies, evaluate in simulation, and deploy on real robots. Compose these steps with ordinary Python functions and run your file with python run.py.

  • Train and fine-tune ACT, Diffusion Policy, SmolVLA, Pi0/Pi0.5, and other policies with a shared Python API.
  • Combine data sources through HDF5, LeRobot, and RLDS loaders and shared data processing.
  • Evaluate and deploy locally or through a policy server, with simulation benchmarks and real robot integrations.
  • Extend the library with your own policy, dataset, simulator, or robot without rewriting the pipeline.
  • Choose your own Python environment. Use vlastudio env to install and select model or simulator runtimes.

🛠️ Installation

Install the library, then install ACT / DP / ALOHA-Sim into your current environment:

python -m pip install vlastudio
vlastudio env install
python run.py

For development, use pip install -e . before vlastudio env install. Alternatively, pip install "vlastudio[base]" installs the base Python dependencies.

Create a separate model or simulator environment:

vlastudio env create -n pi05 --policy openpi
vlastudio env run pi05 -- python train.py
vlastudio env create -n sim --env libero
vlastudio env run sim -- python evaluate.py
vlastudio env list

Selectors accept built-in names or config paths. Use -i URL for a custom index; otherwise existing uv settings and pip index environment variables apply. Cache location defaults to ~/.cache/vlastudio; override it with VLASTUDIO_CACHE. See the environment guide for RLBench, BEHAVIOR, RoboTwin and validation.

import vlastudio stays lightweight and never installs dependencies. Ordinary Python scripts use their own interpreter; env run explicitly selects one.

🚀 Write Your Own run.py

ACT on ALOHA-Sim

Prepare the demonstrations at data/sim_transfer_cube_scripted, or use a task YAML with your own dataset path. The built-in starting point is sim_transfer_cube_scripted.yaml.

Save this as run.py in your project:

import vlastudio as vla


def main():
    dataset = vla.load_dataset("sim_transfer_cube_scripted")
    policy = vla.load_policy("act")
    result = vla.train(
        policy, dataset, "default", output_dir="checkpoints/act_aloha"
    )
    benchmark = vla.load_env("aloha_transfer")
    evaluation = benchmark.evaluate(result.policy, output_dir="results/act_aloha")
    print(evaluation.metrics)


if __name__ == "__main__":
    main()
python run.py

The script uses your current Python environment. Paths resolve relative to your working directory; pass your own YAML paths or built-in names to the loaders. You can freely add preprocessing, logging, evaluation logic, or other library calls to this file.

The ACT example provides the same workflow:

python examples/01_train_and_eval_act_on_aloha/train_and_evaluate.py

Diffusion Policy

The default installation above already includes Diffusion Policy and ALOHA-Sim. Write run_dp.py:

import vlastudio as vla


def main():
    dataset = vla.load_dataset("sim_transfer_cube_scripted")
    policy = vla.load_policy("diffusion_policy")
    vla.train(
        policy, dataset, "dp", output_dir="checkpoints/dp_aloha",
        overrides={"training.max_steps": 200000, "training.save_steps": 10000},
    )
    vla.load_env("aloha_transfer").evaluate(policy, output_dir="results/dp_aloha")


if __name__ == "__main__":
    main()
python run_dp.py

SmolVLA on MetaWorld

In a separate Python 3.10 environment, run python -m pip install -e . -r requirements/smolvla.txt. The built-in task uses the LeRobot MetaWorld dataset. Provide access to that dataset and the pretrained policy weights.

Write train_smolvla.py:

import vlastudio as vla


def main():
    dataset = vla.load_dataset("metaworld")
    policy = vla.load_policy("smolvla")
    vla.train(
        policy, dataset, "smolvla", output_dir="checkpoints/smolvla_metaworld",
        overrides={"training.max_steps": 100000,
                   "training.per_device_train_batch_size": 64},
    )


if __name__ == "__main__":
    main()
python train_smolvla.py

Use the policy-server workflow below to evaluate with a simulator in another environment.

Runnable examples

Each example shows its own environment setup and Python files. Run from the repository root after installing the required dependencies.

Goal Example
Train and evaluate ACT 01 · ACT on ALOHA
Serve a policy and evaluate remotely 02 · Remote inference
Write a custom policy 03 · Custom policy
Train and evaluate across tasks 04 · Multitask policy
Fine-tune Pi0.5 05 · Pi0.5
Write and control a custom robot 06 · Custom robot
Integrate a custom simulator 07 · LIBERO Plus
Train and evaluate FastWAM 08 · FastWAM on LIBERO

Overview

framework

🌐 Policy Server

Write serve.py in the model environment:

import vlastudio as vla


if __name__ == "__main__":
    policy = vla.load_policy("smolvla", checkpoint="checkpoints/smolvla_metaworld")
    vla.serve(policy, address="127.0.0.1:5000")

In a separate simulation environment, run python -m pip install -e . -r requirements/metaworld.txt, then write evaluate.py:

import vlastudio as vla


if __name__ == "__main__":
    policy = vla.connect_policy("127.0.0.1:5000")
    benchmark = vla.load_env("metaworld.easy")
    result = benchmark.evaluate(
        policy, output_dir="results/smolvla_metaworld", num_rollout=10, batch_size=10
    )
    print(result.metrics)

Start python serve.py in the model environment, wait for the server to listen, then start python evaluate.py in the simulation environment. The server handles inference while the client handles observations and actions. See Example 02 for runnable files.

🤖 Real Robots and Data Collection

For SO101, create a dedicated Python 3.10 environment and install the model and motor SDK together:

python -m pip install -e . -r requirements/smolvla.txt "lerobot[feetech]==0.3.3"

Customize serial ports, camera devices, IDs, and calibration paths in your robot and teleoperator YAMLs. Starting points: so101.yaml, so101_leader.yaml.

Write collect.py:

import vlastudio as vla


if __name__ == "__main__":
    vla.collect(
        "so101", teleop="so101_leader", output_dir="data/so101_pick_place",
        dataset_format="hdf5", task="pick up the cube",
    )

Write infer.py to use an already running policy server:

import vlastudio as vla


if __name__ == "__main__":
    policy = vla.connect_policy("127.0.0.1:5000")
    vla.infer("so101", policy)

Run python collect.py to collect demonstrations or python infer.py to deploy. Pass custom YAML paths instead of built-in names for your own robot. See the SO101 guide.

Policy Reference
ACT [1]
Diffusion Policy [2]
Qwen2VL+DP [3] + [2]
Qwen2.5VL+DP [3] + [2]
DiVLA [4]
OpenVLA [5]
OpenVLA-OFT [6]
Pi0 [7]
Pi0.5 [8]
MLP -
ResNet [9]
SmolVLA [10]
Octo [11]
FlowMatching -
GR00T [12]
X-VLA LeRobot Docs
Environment Parallel rollouts Need Vulkan
aloha_sim ✅ ❌
gymnasium_robotics ✅ ❌
libero ✅ ❌
metaworld ✅ ❌
pandagym ✅ ❌
robomimic ✅ ❌
simplerenv ✅ ✅
robotwin ❌ ✅
rlbench ❌ ❌
calvin (Under Testing) ❌ ❌
bigym ✅ ❌
behavior1k ❌ ❌
  • SO101
  • BimanualSO101
  • Kochv1.1
  • AgilexAloha (CobotMagic)

📊 Datasets and Extensions

VLAStudio provides HDF5, LeRobot, and RLDS loaders. Data processing and batch collation adapt each source to the selected policy. Your run.py can select built-in names or your own task and policy YAML files:

import vlastudio as vla

dataset = vla.load_dataset("path/to/task.yaml")
policy = vla.load_policy("path/to/policy.yaml")

Built-in configurations live in src/vlastudio/configs. User configurations can live anywhere.

Start from the examples above to write your own components. A policy supplies load_model and a model with select_action; optional data processors, collators, and trainers customize training. The developer guide describes package and runtime internals.

🩹 Troubleshooting

  • Missing or conflicting dependencies: inspect vla.environment_plan(...) and use its pip command in the intended environment, or install the corresponding requirements file.
  • Headless MuJoCo on Linux: set os.environ["MUJOCO_GL"] = "egl" near the start of your Python file. CPU rendering needs system OSMesa libraries and the osmesa backend; a desktop display can use glfw.
  • Old CMake projects fail with “Compatibility with CMake < 3.5 has been removed”: set CMAKE_POLICY_VERSION_MINIMUM=3.5 in the terminal before running pip for that optional simulator.
  • Model or simulator resources are missing: Python dependencies, pretrained weights, datasets, and native simulator assets are separate setup steps. Follow the relevant example's README.

📫 Contact

🙏 Acknowledgements

This repo is built on the open source codebases below. Thanks to the authors' wonderful contributions.

Metadata

Release files for vlastudio 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vlastudio 0.2.1
File Size Uploaded
vlastudio-0.2.1.tar.gz 42.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for vlastudio 0.2.1
File Interpreter ABI Platform
vlastudio-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 86.1 MB

Release files / vlastudio-0.2.1.tar.gz

Download URL vlastudio-0.2.1.tar.gz
Size 42.5 MB
Tags Source
SHA-256 checksum
How to use checksums
23c30646a88f84fceb82ebce160dd0b4ac57c0f259c29f98b4988a2cf391e134
BLAKE2b-256 checksum
How to use checksums
bae082779b0fad604e49c221833ec00d16dc7a5fbc243caa6439683c3f6254a1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / vlastudio-0.2.1-py3-none-any.whl

Download URL vlastudio-0.2.1-py3-none-any.whl
Size 43.6 MB
Tags Python 3
SHA-256 checksum
How to use checksums
4f30a09d0b614ac69af5eaa8437a648b333a2973dd3a32f55026d9eea33cd0d1
BLAKE2b-256 checksum
How to use checksums
f5357ad83178e8b3479ab046abbb4faf8afb07c2287e9e43c562491449585c93
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.2

2 release files

This release

0.2.1 This release

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page