26
stars
216
commits
2
linked in READMEs
Aug 4, 2025
updated
A new and improved version of the GUIOdyssey dataset has been released! 🎉🎉
👉 Please use the latest version and refer to the updated README for the most up-to-date information.
We highly recommend using the new version for all training and evaluation!
GUI Odyssey is a comprehensive dataset for training and evaluating cross-app navigation agents. GUI Odyssey consists of 7,735 episodes from 6 mobile devices, spanning 6 types of cross-app tasks, 201 apps, and 1.4K app combos.
Each field of annotation is as follows:
episode_id(str): the unique identifier of this episode.device_info(dict): the detailed information of the virtual device from which the episode was collected.
product(str): the product name of the emulator.release_version(str): the Android API level of the emulator.sdk_version(str): the version of the software development kit used for the emulator.h(int): the height of the device screen.w(int): the width of the device screen.device_name(str): the name of the virtual device, one of Pixel Fold, Pixel Tablet, Pixel 8 Pro, Pixel 7 Pro, Medium Phone, Small Phonetask_info(dict): the detailed information of the task from which the episode was collected.
category(str): the category of this task, one of Multi_Apps, Web_Shopping, General_Tool, Information_Management, Media_Entertainment, Social_Sharingapp(list[str]): the Apps used for this task.meta_task(str): the template for this task, e.g., "Search for the next {} and set a reminder."task(str): the specific task created by filling in the meta-task, e.g., "Search for the next New York Fashion Week and set a reminder."instruction(str): the detailed and rephrased version of the task, including specific tools or applications, e.g., "Utilize DuckDuckgo to find the dates for the next New York Fashion Week and then use TickTick to set a reminder for the event."step_length(int): the total number of steps in this episode.steps(list[dict]): each individual step of this episode. Including the following fields:
step(int): each step within the episode is identified by a zero-indexed step number, indicating its position in sequence within the episode. For example, if the step is 1, it corresponds to the second step of the episode.screenshot(str): the current screenshot of this stepaction(str): the corresponding action of this step, one of CLICK, SCROLL, LONG_PRESS, TYPE, COMPLETE, IMPOSSIBLE, HOME, BACKinfo(Union[str, list[list]]): provides specific details required to perform the action specified in the action field. Note that all the coordinates are normalized to the range of [0, 1000].
ps(str): provides additional details or context depending on the value of the action field.
we can evaluate the in- and out-of-domain performance of Agent by splitting GUI Odyssey in two ways:
and organizing with the training set covering a portion of apps/tasks/devices and the test set covering the remaining apps/tasks/devices:
task_split: proportionally samples meta-tasks from six categories. The tasks in the test set differ significantly from those in the training set. This partitioning method allows for a robust assessment of an agent's generalization capabilities across diverse tasks.
device_split: selects episodes annotated on the Fold Phone, which differs significantly from other devices such as smartphones and tablets, as the test set.
app_split: splits based on the apps. The apps in the test set differ significantly from those in the training set.
Each of the four classifications mentioned above has a corresponding JSON file, and the fields in each JSON file are as follows:
train(list[str]): the list of annotation filenames for the training set, which are equivalent to the episode_id.test(list[str]): the list of annotation filenames for the test set, which are equivalent to the episode_id.In addition to cloning the entire repository, you can also download the files from the /zips directory directly for convenience. We are currently uploading compressed versions of the annotations and screenshots to the /zips directory to make the usage process more convenient.
cat screenshots_0* > screenshots.zip
unzip screenshots.zip
The files extracted from the .zip archives will be identical to the original versions.

This work is licensed under a Creative Commons Attribution 4.0 International License.
This dataset is intended primarily for research purposes. We strongly oppose any harmful use of the data or technology.
@article{lu2024gui,
title={GUI Odyssey: A Comprehensive Dataset for Cross-App GUI Navigation on Mobile Devices},
author={Lu, Quanfeng and Shao, Wenqi and Liu, Zitao and Meng, Fanqing and Li, Boxuan and Chen, Botong and Huang, Siyuan and Zhang, Kaipeng and Qiao, Yu and Luo, Ping},
journal={arXiv preprint arXiv:2406.08451},
year={2024}
}
216 commits
26
stars
216
commits
2
linked in READMEs
Aug 4, 2025
updated
A new and improved version of the GUIOdyssey dataset has been released! 🎉🎉
👉 Please use the latest version and refer to the updated README for the most up-to-date information.
We highly recommend using the new version for all training and evaluation!
GUI Odyssey is a comprehensive dataset for training and evaluating cross-app navigation agents. GUI Odyssey consists of 7,735 episodes from 6 mobile devices, spanning 6 types of cross-app tasks, 201 apps, and 1.4K app combos.
Each field of annotation is as follows:
episode_id(str): the unique identifier of this episode.device_info(dict): the detailed information of the virtual device from which the episode was collected.
product(str): the product name of the emulator.release_version(str): the Android API level of the emulator.sdk_version(str): the version of the software development kit used for the emulator.h(int): the height of the device screen.w(int): the width of the device screen.device_name(str): the name of the virtual device, one of Pixel Fold, Pixel Tablet, Pixel 8 Pro, Pixel 7 Pro, Medium Phone, Small Phonetask_info(dict): the detailed information of the task from which the episode was collected.
category(str): the category of this task, one of Multi_Apps, Web_Shopping, General_Tool, Information_Management, Media_Entertainment, Social_Sharingapp(list[str]): the Apps used for this task.meta_task(str): the template for this task, e.g., "Search for the next {} and set a reminder."task(str): the specific task created by filling in the meta-task, e.g., "Search for the next New York Fashion Week and set a reminder."instruction(str): the detailed and rephrased version of the task, including specific tools or applications, e.g., "Utilize DuckDuckgo to find the dates for the next New York Fashion Week and then use TickTick to set a reminder for the event."step_length(int): the total number of steps in this episode.steps(list[dict]): each individual step of this episode. Including the following fields:
step(int): each step within the episode is identified by a zero-indexed step number, indicating its position in sequence within the episode. For example, if the step is 1, it corresponds to the second step of the episode.screenshot(str): the current screenshot of this stepaction(str): the corresponding action of this step, one of CLICK, SCROLL, LONG_PRESS, TYPE, COMPLETE, IMPOSSIBLE, HOME, BACKinfo(Union[str, list[list]]): provides specific details required to perform the action specified in the action field. Note that all the coordinates are normalized to the range of [0, 1000].
ps(str): provides additional details or context depending on the value of the action field.
we can evaluate the in- and out-of-domain performance of Agent by splitting GUI Odyssey in two ways:
and organizing with the training set covering a portion of apps/tasks/devices and the test set covering the remaining apps/tasks/devices:
task_split: proportionally samples meta-tasks from six categories. The tasks in the test set differ significantly from those in the training set. This partitioning method allows for a robust assessment of an agent's generalization capabilities across diverse tasks.
device_split: selects episodes annotated on the Fold Phone, which differs significantly from other devices such as smartphones and tablets, as the test set.
app_split: splits based on the apps. The apps in the test set differ significantly from those in the training set.
Each of the four classifications mentioned above has a corresponding JSON file, and the fields in each JSON file are as follows:
train(list[str]): the list of annotation filenames for the training set, which are equivalent to the episode_id.test(list[str]): the list of annotation filenames for the test set, which are equivalent to the episode_id.In addition to cloning the entire repository, you can also download the files from the /zips directory directly for convenience. We are currently uploading compressed versions of the annotations and screenshots to the /zips directory to make the usage process more convenient.
cat screenshots_0* > screenshots.zip
unzip screenshots.zip
The files extracted from the .zip archives will be identical to the original versions.

This work is licensed under a Creative Commons Attribution 4.0 International License.
This dataset is intended primarily for research purposes. We strongly oppose any harmful use of the data or technology.
@article{lu2024gui,
title={GUI Odyssey: A Comprehensive Dataset for Cross-App GUI Navigation on Mobile Devices},
author={Lu, Quanfeng and Shao, Wenqi and Liu, Zitao and Meng, Fanqing and Li, Boxuan and Chen, Botong and Huang, Siyuan and Zhang, Kaipeng and Qiao, Yu and Luo, Ping},
journal={arXiv preprint arXiv:2406.08451},
year={2024}
}
216 commits