[2025-06-28] ๐ UIPro has been accepted to ICCV 2025!
[2025-11-23] Uploaded UIPro Grounding models.
[2025-11-23] Uploaded data processing scripts, and systematic denoising procedures for AITW, AITZ, MobileViews, WAE, WebUI, MultiUI, AndroidControl, GUIOdyssey, AMEX, GUIAct
[2025-11-27] Uploaded data processing scripts, and systematic denoising procedures for SeeClick-Web, RefExp
[2025-12-10] Uploaded data processing scripts, and systematic denoising procedures for MOTIF, RefExp, and GUIEnv
[2025-12-15] Uploaded UIPro Web Agent model and UIPro Mobile Agent model.
[2026-02-03] Uploaded evaluation scripts.
[TODO] Upload whole datasets
UIPro represents a paradigm shift in GUI automation, achieving human-level interaction capabilities across multiple platforms through advanced AI.
A two-stage revolutionary approach to GUI agent development
The training process involves a sophisticated pipeline designed to enhance both understanding and execution capabilities.
| Capability | Description | Performance |
|---|---|---|
| ๐ฏ Element Grounding | Accurately locates UI elements based on descriptions | โญโญโญโญโญ |
| ๐ Functionality Recognition | Understands purpose and function of interface components | โญโญโญโญโญ |
| ๐งญ Intent Mapping | Connects user intentions to appropriate UI interactions | โญโญโญโญโญ |
| Capability | Description | Performance |
|---|---|---|
| ๐ Task Planning | Breaks down complex requests into actionable steps | โญโญโญโญโญ |
| โก Action Execution | Performs clicks, typing, scrolling with high precision | โญโญโญโญโญ |
| ๐ Cross-Platform Navigation | Seamless operation across different device types | โญโญโญโญโญ |
Industry-leading results across all major GUI benchmarks
| ๐ฏ Benchmark | ๐ค UIPro-SLiME (3B) | ๐ UIPro-Qwen2VL (7B) | ๐ Metric |
|---|---|---|---|
| AITW | 68.0% | 70.4% | Step SR |
| AndroidControl | 61.1% | 85.5% | Step SR |
| GUIAct-Web | 68.2% | 69.1% | Step SR |
| Mind2Web | 28.7% | 48.4% | Step SR |
Step Success Rate (Step SR) - Higher is better
Get up and running with UIPro in minutes
git clone https://github.com/ZJULiHongxin/UIPro.git
cd UIPro
pip install -r requirements.txt
The world's largest and most comprehensive GUI understanding collection
| Metric | Value | Description |
|---|---|---|
| ๐Task Samples | 20.6M | GUI understanding tasks |
| ๐ผ๏ธScreenshots | 2.5M | Unique GUI screenshots |
| ๐ฏElements | 3.3M | Clean GUI elements |
| ๐ขTask Types | 13 | Different task categories |
We provide comprehensive scripts to process various GUI datasets. Please follow the instructions below for each dataset.
Note: We also implemented a systematic denoising procedure to ensure data quality, removing up to 29% of noise from some data sources.
Download the MobileViews raw data from HuggingFace via:
hf download mllmTeam/MobileViews --repo-type dataset --local-dir ./MobileViews
Unzip and organize the data as follows:
root/
โโโ MobileViews/
โ โโโ MobileViews_0-150000/
โ โโโ MobileViews_0-150000.csv
โ โโโ MobileViews_150001-291197/
โ โโโ MobileViews_150001-291197.csv
โ โโโ ...
Modify MOBILEVIEWS_DIR, ROOT, SCALE (coordinate scale), and PROB_BOX (proportion of the box-prediction samples) in utils/data_utils/make_mobileviews_data/extract_and_generate_mobilebiews_data.py.
Run the processing script (this may take ~48 hours due to the large number of screenshots):
python utils/data_utils/make_mobileviews_data/extract_and_generate_mobilebiews_data.py
Processed training samples will be saved in ROOT/mobileviews_processed.
Finally, run utils/data_utils/make_mobileviews_data/run_generate_symlinks.sh to create a unified folder for screenshots.
Download the WAE raw data from WAE DropBox.
Merge, unzip and organize the data as follows:
root/
โโโ WAE/
โ โโโ COM.HSBFREE_25-output
โ โโโ Com.sktelecom.minit_52-output
โ โโโ Draziw.Button.Mines_71-output
โ โโโ HBVerbrauchszaehler.lite_119-output
โ โโโ ...
Modify WAE_DIR, ROOT_DIR, SCALE (coordinate scale), and PROB_BOX (proportion of the box-prediction samples) in utils/data_utils/make_WAE_data/make_WAE_data.py.
Run the processing script (this may take ~24 hours due to the large number of screenshots):
python utils/data_utils/make_WAE_data/make_WAE_data.py
Processed training samples will be saved in ROOT/WAE_processed.
Download the WebUI raw data from biglab/webui-all.
Merge, unzip and organize the data as follows:
root/
โโโ WebUI/
โ โโโ dh2 (GUI metadata resulting from unzipping)
โ โโโ WebUI_screenshots (A folder used to save processed GUI screenshots)
Modify WEBUI_DIR, WEBUI_PROCESSED_IMG_DIR, ROOT, SCALE (coordinate scale), and PROB_BOX (proportion of the box-prediction samples) in utils/data_utils/make_webui_data/make_webui_data.py.
Run the processing script (this may take ~24 hours due to the large number of screenshots):
python utils/data_utils/make_webui_data/make_webui_data.py
Processed training samples will be saved in ROOT/WebUI_processed.
Download the MultiUI raw data from neulab/MultiUI.
Merge, unzip and organize the data as follows:
root/
โโโ MultiUI/
โ โโโ v0.6_5M
โ โโโ v0.7_exclude_v0.6
| โโโ v0.8_exclude_v0.7
โ โโโ stage1_data.json
โ โโโ stage1_data_10k.json
| โโโ stage2_data_to_be_combined_with_general_data.json
Modify MULTIUI_SAMPLE_FILE, IMG_DIR, SAVE_ROOT, and SCALE (coordinate scale) in utils/data_utils/make_multiui_data/make_multiui_data.py.
Run the processing script (this may take ~2 hours due to the large number of screenshots):
python utils/data_utils/make_multiui_data/make_multiui_data.py
Processed training samples will be saved in ROOT/MultiUI_processed.
Download the SeeClick-Web raw data from SeeClick-Web Annotation File and SeeClick-Web Images.
Unzip and organize the data as follows:
root/
โโโ SeeClick-Web/
โ โโโ 0a5c8a5b7d73de574f2a21f27dbc9a53.png
โ โโโ 0a6dcd3f9e1907af232e2c038a866f74.png
| ...
Modify IMG_DIR, ANNO_FILE, SAVE_ROOT, and SCALE (coordinate scale) in utils/data_utils/make_seeclickweb_data/make_seeclickweb_data.py.
Run the processing script (this may take ~24 hours due to the large number of screenshots):
python utils/data_utils/make_seeclickweb_data/make_seeclickweb_data.py
Processed training samples will be saved in ROOT/SeeClick-Web_processed.
Download the GUIEnv raw data from yiye2023/GUIEnv.
Unzip and organize the data as follows:
root/
โ โโโ GUICourse/
โ โโโ GUIEnv/
โ โโโ imgs
โ โโโ ocr_grounding_train_stage2_images.parquet
โ โโโ ocr_grounding_train_stage2_data.json
โ โโโ ocr_grounding_train_stage1_images.parquet
โ โโโ ocr_grounding_train_stage1_data.json
โ โโโ ocr_grounding_test_images.parquet
โ โโโ ocr_grounding_test_data.json
Modify SUBTASK, CURRENT_SPLIT, DATA_ROOT, SAVE_DIR, ENABLE_TEXTLOC, ENABLE_OCR, ENABLE_INTENT_GND, and SCALE (coordinate scale) in utils/data_utils/make_refexp_data/make_refexp_data.py.
Run the processing script:
python utils/data_utils/make_refexp_data/make_refexp_data.py
Processed training samples will be saved in ROOT/RefExp_processed.
Download the RICO image data from SeeClick RICO Data.
Unzip and organize the data as follows:
root/
โ โโโ rico/
โ โโโ 72197.jpg
โ โโโ ...
โ โโโ 71949.json
โ โโโ ...
Modify IMG_DIR, SAVE_ROOT, , and SCALE (coordinate scale) in utils/data_utils/make_refexp_data/make_refexp_data.py.
Run the processing script:
python utils/data_utils/make_refexp_data/make_refexp_data.py
Processed training samples will be saved in ROOT/RefExp_processed.
Download the MOTIF image data from HongxinLi/MOTIF.
Unzip and organize the data as follows:
root/
โ โโโ motif/
Modify IMG_DIR, SAVE_ROOT_DIR, and SCALE (coordinate scale) in utils/data_utils/make_motif_data/make_motif_data.py.
Run the processing script:
python utils/data_utils/make_motif_data/make_motif_data.py
Processed training samples will be saved in ROOT/MOTIF_processed.
Download the OmniAct raw data from Writer/omniact.
Unzip and organize the data as follows:
root/
โโโ OmniAct/
โ โโโ data/
โ โโโ tasks/
โ โโโ metadata/
โ โโโ data/
Modify ROOT_DIR, SAVE_ROOT_DIR, SPLIT, and SCALE (coordinate scale) in utils/data_utils/make_omniact_data/make_omniact_data.py.
Run the processing script:
python utils/data_utils/make_omniact_data/make_omniact_data.py
Processed training samples will be saved in ROOT/OmniAct_processed.
root/
โโโ AITW/
โ โโโ aitw_data_test.json
โ โโโ aitw_data_train.json
โ โโโ aitw_data_val.json
โ โโโ aitw_images/
โ โโโ general/
โ โโโ googleapps/
โ โโโ install/
โ โโโ single/
โ โโโ webshopping/
ROOT, SAVE_DIR, SPLIT, and POINT_FORMAT in utils/data_utils/make_aitw_data/make_aitw_data.py.python utils/data_utils/make_aitw_data/make_aitw_data.py
Processed samples will be saved in SAVE_DIR/AITW_processed.root/
โโโ AITZ/
โ โโโ train/
โ โ โโโ general/
โ โ โโโ googleapps/
โ โ โโโ install/
โ โ โโโ single/
โ โ โโโ webshopping/
โ โโโ test/
โ โโโ general/
โ โโโ googleapps/
โ โโโ install/
โ โโโ webshopping/
ROOT, SAVE_DIR, SCALE, SPLIT, and USE_ACTION_REFEXP in utils/data_utils/make_aitz_data/make_aitz_data.py.python utils/data_utils/make_aitz_data/make_aitz_data.py
Processed samples will be saved in SAVE_DIR/AITZ_processed.root/
โโโ AndroidControl/
โ โโโ raw/
โ โ โโโ android_control-00000-of-00020
โ โ โโโ android_control-00001-of-00020
โ โ โโโ ...
โ โ โโโ android_control-00019-of-00020
โ โ โโโ splits.json
ANDROIDCONTROL_ROOT, SAVE_DIR, SPLIT, and POINT_FORMAT in utils/data_utils/make_androidcontrol_data/make_androidcontrol_data.py.python utils/data_utils/make_androidcontrol_data/make_androidcontrol_data.py
Processed samples will be saved in SAVE_DIR/AndroidControl_processed.root/
โโโ GUIOdyssey_raw/
โ โโโ screenshots/
โ โ โโโ 2386365564178401_9.png
โ โ โโโ 5022534067657028_12.png
โ โ โโโ 7287738713744873_13.png
โ โ โโโ ...
โ โโโ splits/
โ โโโ annotations/
data_* subfolders in screenshots directly to screenshots.DATA_ROOT, SAVE_ROOT, and SPLIT in utils/data_utils/make_guiodyssey_data/make_guiodyssey_data.py.python utils/data_utils/make_guiodyssey_data/make_guiodyssey_data.py
Processed samples will be saved in SAVE_ROOT/GUIOdyssey_processed.root/
โโโ AMEX/
โ โโโ element_anno/
โ โโโ screenshot/
โ โโโ metadata/
DATA_ROOT, SAVE_ROOT, and SPLIT in utils/data_utils/make_amex_data/make_amex_data.py.python utils/data_utils/make_amex_data/make_amex_data.py
Processed samples will be saved in SAVE_ROOT/AMEX_processed.hf download yiye2023/GUIAct --repo-type dataset --local-dir path/to/GUICourse/GUIAct.root/
โโโ GUICourse/
โ โโโ GUIAct/
โ โ โโโ smartphone_test_data.json
โ โ โโโ smartphone_test_images.parquet
โ โ โโโ smartphone_train_data.json
โ โ โโโ ...
DATA_ROOT, SAVE_DIR, CURRENT_SPLIT, and CURRENT_DEVICE_TYPE in the DatasetConfig class within utils/data_utils/make_guicourse_data/make_guicourse_data.py.python utils/data_utils/make_guicourse_data/make_guicourse_data.py
Processed samples will be saved in SAVE_DIR.Advanced technical details for researchers and developers
{
"mobile_actions": [
"tap", "long_press", "drag", "input_text",
"navigate_home", "navigate_back", "navigate_recent",
"press_enter", "swipe", "wait", "status_complete"
]
}
{
"action": "swipe",
"start": [x, y], // Starting coordinates
"direction": "up", // Movement direction
"distance": 200 // Swipe distance in pixels
}
Stage 1: GUI Element Grounding
Follow the code below to test the stage 1 model for GUI element grounding evaluation.
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info
# Default: Load the model on the available device(s)
model = Qwen2VLForConditionalGeneration.from_pretrained(
"HongxinLi/UIPro_1stage", torch_dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained("HongxinLi/UIPro_1stage")
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "./web_6f93090a-81f6-489e-bb35-1a2838b18c01.png",
},
# For ScreenSpot-v2, MOTIF, RefExp, and VisualWebBench Action Grounding
{"type": "text", "text": "I want to {goal_info}. Please locate the target element I should interact with. (Output the center coordinates of the target)"},
# For AutoGUI
{"type": "text", "text": "Locate the element according to its detailed functionality description. {goal_info} (Output the center coordinates of the target)"},
# For VisualWebBench Element Grounding
{"type": "text", "text": "Locate the text "{goal_info}" (Output the center coordinates of the target)"},
],
}
]
Stage 2: Web Agent Embodiment
Follow the code below to test the stage 2 model for Web agent task evaluation.
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info
# Default: Load the model on the available device(s)
model = Qwen2VLForConditionalGeneration.from_pretrained(
"HongxinLi/UIPro-7B_Stage2_Web", torch_dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained("HongxinLi/UIPro-7B_Stage2_Web")
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "./web_6f93090a-81f6-489e-bb35-1a2838b18c01.png",
},
{"type": "text", "text": """Given the Web UI screenshot and previous actions, please generate the next move necessary to advance towards task completion. The user's task is: {task}
Action history: {action_history}
Now, first describe the action intent and then directly plan the next action."""},
],
}
]
Stage 2: Mobile Agent Embodiment
Follow the code below to test the stage 2 model for Mobile agent task evaluation.
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info
# Default: Load the model on the available device(s)
model = Qwen2VLForConditionalGeneration.from_pretrained(
"HongxinLi/UIPro-7B_Stage2_Mobile", torch_dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained("HongxinLi/UIPro-7B_Stage2_Mobile")
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "./web_6f93090a-81f6-489e-bb35-1a2838b18c01.png",
},
{"type": "text", "text": """Given the Mobile UI screenshot and previous actions, please generate the next move necessary to advance towards task completion. The user's task is: {task}
Action history: {action_history}
Now, first describe the action intent and then directly plan the next action."""},
],
}
]
Run the agentic task evaluation scripts for AiTW / AndroidControl / GUIAct / Mind2Web.
Note
- These scripts perform online action prediction step-by-step (i.e., they will run model inference), so a GPU environment is recommended.
- Outputs are saved as JSON files under
utils/eval_utils/eval_results/.
What you need
HongxinLi/AITW_test.Expected images layout
/path/to/AITW/aitw_images/
โโโ general/
โโโ googleapps/
โโโ install/
โโโ single/
โโโ webshopping/
Run
python utils/eval_utils/eval_aitw.py \
--pretrained "HongxinLi/UIPro_2stage_Mobile" \
--imgs_dir "/path/to/AITW/aitw_images" \
--action_refexp \
--scale 1000
Common options
--debug: only evaluate a few steps for quick sanity check--cot: enable Chain-of-Thought prompting--action_refexp: used to drive the UIPro model to output a short action intent before predicting the action function call.--max_prev_acts: how many previous actions are included in history--original_actspace: use the original AITW action space in prompts. Ignore this to use the unified action space provided by UIPro.Outputs
utils/eval_utils/eval_results/AITW/<model_postfix>[_CoT][_wActRef]/<timestamp>.jsonWhat you need
utils/data_utils/make_androidcontrol_data/make_androidcontrol_data.py).--data_root with the image field in the test JSON.We also provide a preprocessed zip file of the AndroidControl test data used in the UIPro paper. First download and unzip the GoClick AndroidControl Test Data via
hf download HongxinLi/AndroidControl_test --repo-type dataset --local-dir path/to/AndroidControl_test
Run
python utils/eval_utils/eval_androidcontrol.py \
--pretrained "HongxinLi/UIPro_2stage_Mobile" \
--testset_path "utils/eval_utils/AndroidControl-test_12685.json" \
--data_root "/path/to/AndroidControl"
Useful options
--action_refexp: (only used for UIPro) Please use this to prompt UIPro to output short reasoning before planning the actionOutputs
utils/eval_utils/eval_results/androidcontrol/<model_postfix>/<timestamp>.jsonWhat you need
image field.--root to point to your processed GUIAct directory, and --imgs_dir to override the image base.
If omitted, the script auto-detects local/server paths inside get_dataset_paths() in utils/eval_utils/eval_guiact.py.We also provide the preprocessed GUIAct test data zip file. First download the GUIAct data from HongxinLi/GUIAct, unzip it, and organize it as follows:
root/
โโโ GUICourse/
โ โโโ GUIAct/
โ โ โโโ imgs
โ โโโ Web_test.json
โ โโโ Mobile_test.json
Run
python utils/eval_utils/eval_guiact.py \
--pretrained "HongxinLi/UIPro-7B_Stage2_Web" \
--device_type Web \
--scale 1000 \
--root "/path/to/GUICourse_processed" \
--imgs_dir "/path/to/images_base"
Common options
--device_type: Web or Mobile--root: processed GUIAct directory (overrides auto-detect)--imgs_dir: image base directory (overrides auto-detect)--debug: evaluate a small random subset--cot: enable Chain-of-Thought prompting--action_refexp: (only used for UIPro) Please use this to prompt UIPro to output short reasoning before planning the action--original_actspace: use the original GUIAct action spaceOutputs
utils/eval_utils/eval_results/GUIAct-<device_type>/<model_postfix>/<timestamp>.jsonWhat you need
mind2web_images/ (evaluation screenshots)mind2web_data_test_{website|task|domain}.json (test annotations)--root to point to your local Mind2Web directory. If omitted, the script auto-selects
the first existing path in DEFAULT_ROOTS inside utils/eval_utils/eval_mind2web.py.Expected layout
/path/to/Mind2Web/
โโโ mind2web_images/
โโโ mind2web_data_test_website.json
mind2web_data_test_task.json
mind2web_data_test_domain.json
Run
python utils/eval_utils/eval_mind2web.py \
--pretrained "HongxinLi/UIPro-7B_Stage2_Web" \
--task website \
--scale 1000 \
--root "/path/to/Mind2Web"
Common options
--task: either 'task', 'domain', or 'website' (the three splits of Mind2Web)--debug: only evaluate a few episodes--cot: enable Chain-of-Thought prompting--action_refexp: (only used for UIPro) Please use this to prompt UIPro to output short reasoning before planning the action--max_prev_acts: how many previous actions are included in historyOutputs
utils/eval_utils/eval_results/mind2web/<model_postfix>/{website|task|domain}-<timestamp>.jsonIf you use UIPro in your research, please cite our paper
@inproceedings{li2025uipro,
title={UIPro: Unleashing Superior Interaction Capability For GUI Agents},
author={Li, Hongxin and Su, Jingran and Chen, Jingfan and Ju, Zheng and Chen, Yuntao and Li, Qing and Zhang, Zhaoxiang},
booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},
year={2025}
}
Special thanks to our research team and the open-source community
This work was supported in part by the National Key R&D Program of China and the National Natural Science Foundation of China. We extend our gratitude to the open-source community for providing foundational datasets and tools that made this research possible.
๐ Revolutionizing GUI automation, one interaction at a time
25 commits
Python
99.9%
[2025-06-28] ๐ UIPro has been accepted to ICCV 2025!
[2025-11-23] Uploaded UIPro Grounding models.
[2025-11-23] Uploaded data processing scripts, and systematic denoising procedures for AITW, AITZ, MobileViews, WAE, WebUI, MultiUI, AndroidControl, GUIOdyssey, AMEX, GUIAct
[2025-11-27] Uploaded data processing scripts, and systematic denoising procedures for SeeClick-Web, RefExp
[2025-12-10] Uploaded data processing scripts, and systematic denoising procedures for MOTIF, RefExp, and GUIEnv
[2025-12-15] Uploaded UIPro Web Agent model and UIPro Mobile Agent model.
[2026-02-03] Uploaded evaluation scripts.
[TODO] Upload whole datasets
UIPro represents a paradigm shift in GUI automation, achieving human-level interaction capabilities across multiple platforms through advanced AI.
A two-stage revolutionary approach to GUI agent development
The training process involves a sophisticated pipeline designed to enhance both understanding and execution capabilities.
| Capability | Description | Performance |
|---|---|---|
| ๐ฏ Element Grounding | Accurately locates UI elements based on descriptions | โญโญโญโญโญ |
| ๐ Functionality Recognition | Understands purpose and function of interface components | โญโญโญโญโญ |
| ๐งญ Intent Mapping | Connects user intentions to appropriate UI interactions | โญโญโญโญโญ |
| Capability | Description | Performance |
|---|---|---|
| ๐ Task Planning | Breaks down complex requests into actionable steps | โญโญโญโญโญ |
| โก Action Execution | Performs clicks, typing, scrolling with high precision | โญโญโญโญโญ |
| ๐ Cross-Platform Navigation | Seamless operation across different device types | โญโญโญโญโญ |
Industry-leading results across all major GUI benchmarks
| ๐ฏ Benchmark | ๐ค UIPro-SLiME (3B) | ๐ UIPro-Qwen2VL (7B) | ๐ Metric |
|---|---|---|---|
| AITW | 68.0% | 70.4% | Step SR |
| AndroidControl | 61.1% | 85.5% | Step SR |
| GUIAct-Web | 68.2% | 69.1% | Step SR |
| Mind2Web | 28.7% | 48.4% | Step SR |
Step Success Rate (Step SR) - Higher is better
Get up and running with UIPro in minutes
git clone https://github.com/ZJULiHongxin/UIPro.git
cd UIPro
pip install -r requirements.txt
The world's largest and most comprehensive GUI understanding collection
| Metric | Value | Description |
|---|---|---|
| ๐Task Samples | 20.6M | GUI understanding tasks |
| ๐ผ๏ธScreenshots | 2.5M | Unique GUI screenshots |
| ๐ฏElements | 3.3M | Clean GUI elements |
| ๐ขTask Types | 13 | Different task categories |
We provide comprehensive scripts to process various GUI datasets. Please follow the instructions below for each dataset.
Note: We also implemented a systematic denoising procedure to ensure data quality, removing up to 29% of noise from some data sources.
Download the MobileViews raw data from HuggingFace via:
hf download mllmTeam/MobileViews --repo-type dataset --local-dir ./MobileViews
Unzip and organize the data as follows:
root/
โโโ MobileViews/
โ โโโ MobileViews_0-150000/
โ โโโ MobileViews_0-150000.csv
โ โโโ MobileViews_150001-291197/
โ โโโ MobileViews_150001-291197.csv
โ โโโ ...
Modify MOBILEVIEWS_DIR, ROOT, SCALE (coordinate scale), and PROB_BOX (proportion of the box-prediction samples) in utils/data_utils/make_mobileviews_data/extract_and_generate_mobilebiews_data.py.
Run the processing script (this may take ~48 hours due to the large number of screenshots):
python utils/data_utils/make_mobileviews_data/extract_and_generate_mobilebiews_data.py
Processed training samples will be saved in ROOT/mobileviews_processed.
Finally, run utils/data_utils/make_mobileviews_data/run_generate_symlinks.sh to create a unified folder for screenshots.
Download the WAE raw data from WAE DropBox.
Merge, unzip and organize the data as follows:
root/
โโโ WAE/
โ โโโ COM.HSBFREE_25-output
โ โโโ Com.sktelecom.minit_52-output
โ โโโ Draziw.Button.Mines_71-output
โ โโโ HBVerbrauchszaehler.lite_119-output
โ โโโ ...
Modify WAE_DIR, ROOT_DIR, SCALE (coordinate scale), and PROB_BOX (proportion of the box-prediction samples) in utils/data_utils/make_WAE_data/make_WAE_data.py.
Run the processing script (this may take ~24 hours due to the large number of screenshots):
python utils/data_utils/make_WAE_data/make_WAE_data.py
Processed training samples will be saved in ROOT/WAE_processed.
Download the WebUI raw data from biglab/webui-all.
Merge, unzip and organize the data as follows:
root/
โโโ WebUI/
โ โโโ dh2 (GUI metadata resulting from unzipping)
โ โโโ WebUI_screenshots (A folder used to save processed GUI screenshots)
Modify WEBUI_DIR, WEBUI_PROCESSED_IMG_DIR, ROOT, SCALE (coordinate scale), and PROB_BOX (proportion of the box-prediction samples) in utils/data_utils/make_webui_data/make_webui_data.py.
Run the processing script (this may take ~24 hours due to the large number of screenshots):
python utils/data_utils/make_webui_data/make_webui_data.py
Processed training samples will be saved in ROOT/WebUI_processed.
Download the MultiUI raw data from neulab/MultiUI.
Merge, unzip and organize the data as follows:
root/
โโโ MultiUI/
โ โโโ v0.6_5M
โ โโโ v0.7_exclude_v0.6
| โโโ v0.8_exclude_v0.7
โ โโโ stage1_data.json
โ โโโ stage1_data_10k.json
| โโโ stage2_data_to_be_combined_with_general_data.json
Modify MULTIUI_SAMPLE_FILE, IMG_DIR, SAVE_ROOT, and SCALE (coordinate scale) in utils/data_utils/make_multiui_data/make_multiui_data.py.
Run the processing script (this may take ~2 hours due to the large number of screenshots):
python utils/data_utils/make_multiui_data/make_multiui_data.py
Processed training samples will be saved in ROOT/MultiUI_processed.
Download the SeeClick-Web raw data from SeeClick-Web Annotation File and SeeClick-Web Images.
Unzip and organize the data as follows:
root/
โโโ SeeClick-Web/
โ โโโ 0a5c8a5b7d73de574f2a21f27dbc9a53.png
โ โโโ 0a6dcd3f9e1907af232e2c038a866f74.png
| ...
Modify IMG_DIR, ANNO_FILE, SAVE_ROOT, and SCALE (coordinate scale) in utils/data_utils/make_seeclickweb_data/make_seeclickweb_data.py.
Run the processing script (this may take ~24 hours due to the large number of screenshots):
python utils/data_utils/make_seeclickweb_data/make_seeclickweb_data.py
Processed training samples will be saved in ROOT/SeeClick-Web_processed.
Download the GUIEnv raw data from yiye2023/GUIEnv.
Unzip and organize the data as follows:
root/
โ โโโ GUICourse/
โ โโโ GUIEnv/
โ โโโ imgs
โ โโโ ocr_grounding_train_stage2_images.parquet
โ โโโ ocr_grounding_train_stage2_data.json
โ โโโ ocr_grounding_train_stage1_images.parquet
โ โโโ ocr_grounding_train_stage1_data.json
โ โโโ ocr_grounding_test_images.parquet
โ โโโ ocr_grounding_test_data.json
Modify SUBTASK, CURRENT_SPLIT, DATA_ROOT, SAVE_DIR, ENABLE_TEXTLOC, ENABLE_OCR, ENABLE_INTENT_GND, and SCALE (coordinate scale) in utils/data_utils/make_refexp_data/make_refexp_data.py.
Run the processing script:
python utils/data_utils/make_refexp_data/make_refexp_data.py
Processed training samples will be saved in ROOT/RefExp_processed.
Download the RICO image data from SeeClick RICO Data.
Unzip and organize the data as follows:
root/
โ โโโ rico/
โ โโโ 72197.jpg
โ โโโ ...
โ โโโ 71949.json
โ โโโ ...
Modify IMG_DIR, SAVE_ROOT, , and SCALE (coordinate scale) in utils/data_utils/make_refexp_data/make_refexp_data.py.
Run the processing script:
python utils/data_utils/make_refexp_data/make_refexp_data.py
Processed training samples will be saved in ROOT/RefExp_processed.
Download the MOTIF image data from HongxinLi/MOTIF.
Unzip and organize the data as follows:
root/
โ โโโ motif/
Modify IMG_DIR, SAVE_ROOT_DIR, and SCALE (coordinate scale) in utils/data_utils/make_motif_data/make_motif_data.py.
Run the processing script:
python utils/data_utils/make_motif_data/make_motif_data.py
Processed training samples will be saved in ROOT/MOTIF_processed.
Download the OmniAct raw data from Writer/omniact.
Unzip and organize the data as follows:
root/
โโโ OmniAct/
โ โโโ data/
โ โโโ tasks/
โ โโโ metadata/
โ โโโ data/
Modify ROOT_DIR, SAVE_ROOT_DIR, SPLIT, and SCALE (coordinate scale) in utils/data_utils/make_omniact_data/make_omniact_data.py.
Run the processing script:
python utils/data_utils/make_omniact_data/make_omniact_data.py
Processed training samples will be saved in ROOT/OmniAct_processed.
root/
โโโ AITW/
โ โโโ aitw_data_test.json
โ โโโ aitw_data_train.json
โ โโโ aitw_data_val.json
โ โโโ aitw_images/
โ โโโ general/
โ โโโ googleapps/
โ โโโ install/
โ โโโ single/
โ โโโ webshopping/
ROOT, SAVE_DIR, SPLIT, and POINT_FORMAT in utils/data_utils/make_aitw_data/make_aitw_data.py.python utils/data_utils/make_aitw_data/make_aitw_data.py
Processed samples will be saved in SAVE_DIR/AITW_processed.root/
โโโ AITZ/
โ โโโ train/
โ โ โโโ general/
โ โ โโโ googleapps/
โ โ โโโ install/
โ โ โโโ single/
โ โ โโโ webshopping/
โ โโโ test/
โ โโโ general/
โ โโโ googleapps/
โ โโโ install/
โ โโโ webshopping/
ROOT, SAVE_DIR, SCALE, SPLIT, and USE_ACTION_REFEXP in utils/data_utils/make_aitz_data/make_aitz_data.py.python utils/data_utils/make_aitz_data/make_aitz_data.py
Processed samples will be saved in SAVE_DIR/AITZ_processed.root/
โโโ AndroidControl/
โ โโโ raw/
โ โ โโโ android_control-00000-of-00020
โ โ โโโ android_control-00001-of-00020
โ โ โโโ ...
โ โ โโโ android_control-00019-of-00020
โ โ โโโ splits.json
ANDROIDCONTROL_ROOT, SAVE_DIR, SPLIT, and POINT_FORMAT in utils/data_utils/make_androidcontrol_data/make_androidcontrol_data.py.python utils/data_utils/make_androidcontrol_data/make_androidcontrol_data.py
Processed samples will be saved in SAVE_DIR/AndroidControl_processed.root/
โโโ GUIOdyssey_raw/
โ โโโ screenshots/
โ โ โโโ 2386365564178401_9.png
โ โ โโโ 5022534067657028_12.png
โ โ โโโ 7287738713744873_13.png
โ โ โโโ ...
โ โโโ splits/
โ โโโ annotations/
data_* subfolders in screenshots directly to screenshots.DATA_ROOT, SAVE_ROOT, and SPLIT in utils/data_utils/make_guiodyssey_data/make_guiodyssey_data.py.python utils/data_utils/make_guiodyssey_data/make_guiodyssey_data.py
Processed samples will be saved in SAVE_ROOT/GUIOdyssey_processed.root/
โโโ AMEX/
โ โโโ element_anno/
โ โโโ screenshot/
โ โโโ metadata/
DATA_ROOT, SAVE_ROOT, and SPLIT in utils/data_utils/make_amex_data/make_amex_data.py.python utils/data_utils/make_amex_data/make_amex_data.py
Processed samples will be saved in SAVE_ROOT/AMEX_processed.hf download yiye2023/GUIAct --repo-type dataset --local-dir path/to/GUICourse/GUIAct.root/
โโโ GUICourse/
โ โโโ GUIAct/
โ โ โโโ smartphone_test_data.json
โ โ โโโ smartphone_test_images.parquet
โ โ โโโ smartphone_train_data.json
โ โ โโโ ...
DATA_ROOT, SAVE_DIR, CURRENT_SPLIT, and CURRENT_DEVICE_TYPE in the DatasetConfig class within utils/data_utils/make_guicourse_data/make_guicourse_data.py.python utils/data_utils/make_guicourse_data/make_guicourse_data.py
Processed samples will be saved in SAVE_DIR.Advanced technical details for researchers and developers
{
"mobile_actions": [
"tap", "long_press", "drag", "input_text",
"navigate_home", "navigate_back", "navigate_recent",
"press_enter", "swipe", "wait", "status_complete"
]
}
{
"action": "swipe",
"start": [x, y], // Starting coordinates
"direction": "up", // Movement direction
"distance": 200 // Swipe distance in pixels
}
Stage 1: GUI Element Grounding
Follow the code below to test the stage 1 model for GUI element grounding evaluation.
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info
# Default: Load the model on the available device(s)
model = Qwen2VLForConditionalGeneration.from_pretrained(
"HongxinLi/UIPro_1stage", torch_dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained("HongxinLi/UIPro_1stage")
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "./web_6f93090a-81f6-489e-bb35-1a2838b18c01.png",
},
# For ScreenSpot-v2, MOTIF, RefExp, and VisualWebBench Action Grounding
{"type": "text", "text": "I want to {goal_info}. Please locate the target element I should interact with. (Output the center coordinates of the target)"},
# For AutoGUI
{"type": "text", "text": "Locate the element according to its detailed functionality description. {goal_info} (Output the center coordinates of the target)"},
# For VisualWebBench Element Grounding
{"type": "text", "text": "Locate the text "{goal_info}" (Output the center coordinates of the target)"},
],
}
]
Stage 2: Web Agent Embodiment
Follow the code below to test the stage 2 model for Web agent task evaluation.
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info
# Default: Load the model on the available device(s)
model = Qwen2VLForConditionalGeneration.from_pretrained(
"HongxinLi/UIPro-7B_Stage2_Web", torch_dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained("HongxinLi/UIPro-7B_Stage2_Web")
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "./web_6f93090a-81f6-489e-bb35-1a2838b18c01.png",
},
{"type": "text", "text": """Given the Web UI screenshot and previous actions, please generate the next move necessary to advance towards task completion. The user's task is: {task}
Action history: {action_history}
Now, first describe the action intent and then directly plan the next action."""},
],
}
]
Stage 2: Mobile Agent Embodiment
Follow the code below to test the stage 2 model for Mobile agent task evaluation.
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info
# Default: Load the model on the available device(s)
model = Qwen2VLForConditionalGeneration.from_pretrained(
"HongxinLi/UIPro-7B_Stage2_Mobile", torch_dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained("HongxinLi/UIPro-7B_Stage2_Mobile")
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "./web_6f93090a-81f6-489e-bb35-1a2838b18c01.png",
},
{"type": "text", "text": """Given the Mobile UI screenshot and previous actions, please generate the next move necessary to advance towards task completion. The user's task is: {task}
Action history: {action_history}
Now, first describe the action intent and then directly plan the next action."""},
],
}
]
Run the agentic task evaluation scripts for AiTW / AndroidControl / GUIAct / Mind2Web.
Note
- These scripts perform online action prediction step-by-step (i.e., they will run model inference), so a GPU environment is recommended.
- Outputs are saved as JSON files under
utils/eval_utils/eval_results/.
What you need
HongxinLi/AITW_test.Expected images layout
/path/to/AITW/aitw_images/
โโโ general/
โโโ googleapps/
โโโ install/
โโโ single/
โโโ webshopping/
Run
python utils/eval_utils/eval_aitw.py \
--pretrained "HongxinLi/UIPro_2stage_Mobile" \
--imgs_dir "/path/to/AITW/aitw_images" \
--action_refexp \
--scale 1000
Common options
--debug: only evaluate a few steps for quick sanity check--cot: enable Chain-of-Thought prompting--action_refexp: used to drive the UIPro model to output a short action intent before predicting the action function call.--max_prev_acts: how many previous actions are included in history--original_actspace: use the original AITW action space in prompts. Ignore this to use the unified action space provided by UIPro.Outputs
utils/eval_utils/eval_results/AITW/<model_postfix>[_CoT][_wActRef]/<timestamp>.jsonWhat you need
utils/data_utils/make_androidcontrol_data/make_androidcontrol_data.py).--data_root with the image field in the test JSON.We also provide a preprocessed zip file of the AndroidControl test data used in the UIPro paper. First download and unzip the GoClick AndroidControl Test Data via
hf download HongxinLi/AndroidControl_test --repo-type dataset --local-dir path/to/AndroidControl_test
Run
python utils/eval_utils/eval_androidcontrol.py \
--pretrained "HongxinLi/UIPro_2stage_Mobile" \
--testset_path "utils/eval_utils/AndroidControl-test_12685.json" \
--data_root "/path/to/AndroidControl"
Useful options
--action_refexp: (only used for UIPro) Please use this to prompt UIPro to output short reasoning before planning the actionOutputs
utils/eval_utils/eval_results/androidcontrol/<model_postfix>/<timestamp>.jsonWhat you need
image field.--root to point to your processed GUIAct directory, and --imgs_dir to override the image base.
If omitted, the script auto-detects local/server paths inside get_dataset_paths() in utils/eval_utils/eval_guiact.py.We also provide the preprocessed GUIAct test data zip file. First download the GUIAct data from HongxinLi/GUIAct, unzip it, and organize it as follows:
root/
โโโ GUICourse/
โ โโโ GUIAct/
โ โ โโโ imgs
โ โโโ Web_test.json
โ โโโ Mobile_test.json
Run
python utils/eval_utils/eval_guiact.py \
--pretrained "HongxinLi/UIPro-7B_Stage2_Web" \
--device_type Web \
--scale 1000 \
--root "/path/to/GUICourse_processed" \
--imgs_dir "/path/to/images_base"
Common options
--device_type: Web or Mobile--root: processed GUIAct directory (overrides auto-detect)--imgs_dir: image base directory (overrides auto-detect)--debug: evaluate a small random subset--cot: enable Chain-of-Thought prompting--action_refexp: (only used for UIPro) Please use this to prompt UIPro to output short reasoning before planning the action--original_actspace: use the original GUIAct action spaceOutputs
utils/eval_utils/eval_results/GUIAct-<device_type>/<model_postfix>/<timestamp>.jsonWhat you need
mind2web_images/ (evaluation screenshots)mind2web_data_test_{website|task|domain}.json (test annotations)--root to point to your local Mind2Web directory. If omitted, the script auto-selects
the first existing path in DEFAULT_ROOTS inside utils/eval_utils/eval_mind2web.py.Expected layout
/path/to/Mind2Web/
โโโ mind2web_images/
โโโ mind2web_data_test_website.json
mind2web_data_test_task.json
mind2web_data_test_domain.json
Run
python utils/eval_utils/eval_mind2web.py \
--pretrained "HongxinLi/UIPro-7B_Stage2_Web" \
--task website \
--scale 1000 \
--root "/path/to/Mind2Web"
Common options
--task: either 'task', 'domain', or 'website' (the three splits of Mind2Web)--debug: only evaluate a few episodes--cot: enable Chain-of-Thought prompting--action_refexp: (only used for UIPro) Please use this to prompt UIPro to output short reasoning before planning the action--max_prev_acts: how many previous actions are included in historyOutputs
utils/eval_utils/eval_results/mind2web/<model_postfix>/{website|task|domain}-<timestamp>.jsonIf you use UIPro in your research, please cite our paper
@inproceedings{li2025uipro,
title={UIPro: Unleashing Superior Interaction Capability For GUI Agents},
author={Li, Hongxin and Su, Jingran and Chen, Jingfan and Ju, Zheng and Chen, Yuntao and Li, Qing and Zhang, Zhaoxiang},
booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},
year={2025}
}
Special thanks to our research team and the open-source community
This work was supported in part by the National Key R&D Program of China and the National Natural Science Foundation of China. We extend our gratitude to the open-source community for providing foundational datasets and tools that made this research possible.
๐ Revolutionizing GUI automation, one interaction at a time
25 commits
Python
99.9%