A tool based application for collecting human demonstration data from simulated and real-world environments.
- 2024/09/19: Our project is currently under active development. Contributions via pull requests (PRs) are warmly welcome! 😊
- 2024/11/11: Added support for the Meta-World environment.
- 2025/10/01: Added multi-camera support.
- 2025/10/02: Added support for the LIBERO environment.
Different environments require specific installation procedures. Please follow the instructions below according to your target environment.
conda create -n democat_metaworld python=3.11 -y
conda activate democat_metaworld
pip install -r requirements.txt
pip install metaworldconda create -n democat_libero python=3.8 -y
conda activate democat_libero
pip install -r requirements.txt
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git third_party/LIBERO
cd third_party/LIBERO
pip install -r requirements.txt
pip install -e .Note for Windows users (LIBERO only):
You may need to install a patched version ofegl_probeto ensure compatibility:pip install https://github.com/mhandb/egl_probe/archive/fix_windows_build.zip
To launch the GUI for human demonstration collection:
python gui.pyThis will open the main interface, which includes two primary modules:
This module allows you to collect demonstrations using predefined keyboard controls.
Keyboard Shortcuts:
p: Pause recordingq: Start/resume recordinge: Save the current trajectory
This module enables you to view, delete, and manage previously collected demonstrations.
To integrate a new environment into DemoCat, follow these steps:
-
Create an environment folder under
environments/, and implement a class that inherits fromBaseEnv(defined inenvironments/base_env.py).- Example implementations:
environments/libero/libero_env.pyenvironments/metaworld/metaworld_env.py
- Example implementations:
-
Register the new environment and its tasks in the environment manager.
Editapp/environment.pyand update the_register_default_environmentsmethod inEnvironmentManager:# Example: Registering Meta-World tasks self.register_environment('metaworld_mt10') # Environment name self.register_task('metaworld_mt10', 'Reach', Reach) self.register_task('metaworld_mt10', 'Push', Push) # ... add more tasks as needed # Example: Registering LIBERO tasks self.register_environment('libero_object') self.register_task('libero_object', 'Task1', libero_object_task_0) self.register_task('libero_object', 'Task2', libero_object_task_1)
Ensure your new environment follows the same interface and data format conventions to maintain compatibility with the rest of the system.


