A Web-Based Annotation System for High-Fidelity GUI Element Grounding
This system was developed as part of an Honours thesis at the University of Sydney:
AccuAnnotate: Scalable Labelling of Graphical User Interfaces and Reinforcement Learning for Vision-Language Model Grounding
Note: The AccuAnnotate-2B model and training artifacts will be released soon.
This Honours thesis addresses pixel-level grounding on desktop GUIs: given a screenshot and a natural-language instruction, the agent must predict an exact on-screen click point. Current datasets under-represent diverse widgets and auto-labels are often imprecise, constraining both supervised learning and RL fine-tuning.
The thesis introduces two contributions:
AccuAnnotate couples OmniParser-v2 element discovery with image pre/post-processing, instruction validation, a crop-level prompt builder, and a web workspace for controllable detail and organisation. Manual verification over 1,740 tasks yields 98.77% correct labels.
AccuAnnotate-2B, trained based on ShowUI-2B with distance-based reward optimization, demonstrates AUC gains of +5.29% on ScreenSpot-desktop (N=334) and +16.95% on ScreenSpot-Pro (N=1,581), with DTB reduced by 9.08% on ScreenSpot-desktop.
This repository hosts the AccuAnnotate web annotation pipeline described in Chapter 3 of the thesis. The system provides:
# Clone the repository
git clone git@github.com:ning-bao/AccuAnnotate-Web.git
cd AccuAnnotate-Web
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp env.example .env
# Edit .env and add your OpenAI API key
# Run the application
python app.py
Open your browser to http://localhost:5000
The AccuAnnotate pipeline follows a multi-stage architecture:
ββββββββββββββββββββ
β Image Upload β
ββββββββββ¬ββββββββββ
β
β
ββββββββββββββββββββ βββββββββββββββββββ
β Preprocessing ββββββββ OmniParser v2 β
β (Element Detect)β β Element Hints β
ββββββββββ¬ββββββββββ βββββββββββββββββββ
β
β
ββββββββββββββββββββ βββββββββββββββββββ
β Crop Generation β β Directional β
β & Prompt Build ββββββββ Text Padding β
ββββββββββ¬ββββββββββ βββββββββββββββββββ
β
β
ββββββββββββββββββββ βββββββββββββββββββ
β GPT-4o/5 API ββββββββ Instruction β
β Inference β β Generation β
ββββββββββ¬ββββββββββ βββββββββββββββββββ
β
β
ββββββββββββββββββββ
β Post-processing β
β & Validation β
ββββββββββ¬ββββββββββ
β
β
ββββββββββββββββββββ βββββββββββββββββββ
β JSON Export β β SQLite Metadataβ
ββββββββββββββββββββ βββββββββββββββββββ
Leverages Microsoft's state-of-the-art UI element detector for high-precision candidate proposals.
Generates tight and directional crops for each candidate element, enabling the VLM to read labels and context more accurately.
Enforces constraints: 1-5 unique elements per image, absolute pixel coordinates, actionable instructions (β€120 chars), and duplicate removal.
Provides a modern interface for batch processing, visual verification, manual editing, and export to training formats.
data/images/Key environment variables (see env.example):
# OpenAI Configuration
OPENAI_API_KEY=sk-your-api-key-here
OPENAI_MODEL=gpt-4o # or gpt-5
# Annotation Settings
ANNOTATOR_DETAIL_LEVEL=high # low, normal, or high
ANNOTATOR_MAX_INSTRUCTIONS=5 # 1-5 elements per image
ANNOTATOR_PREPROCESS_MAX_ELEMENTS=24 # Candidate hints
# OmniParser Configuration
OMNIPARSER_URL=local # Use local inference
OMNIPARSER_MIN_CONF=0.3 # Detection threshold
For detailed configuration and advanced usage, see DOCUMENTATION.md.
If you use AccuAnnotate-Web in your research, please cite:
@thesis{bao2026accuannotate,
title={AccuAnnotate: Scalable Labelling of Graphical User Interfaces
and Reinforcement Learning for Vision-Language Model Grounding},
author={Bao, Ning},
year={2026},
school={The University of Sydney},
type={Bachelor of Advanced Computing (Honours) thesis}
}
AccuAnnotate-Web/
βββ app.py # Flask backend and batch job manager
βββ db.py # SQLite metadata interface
βββ utils/
β βββ annotator.py # Core annotation logic (crop-first prompting)
β βββ visualizer.py # Canvas visualization
βββ static/
β βββ css/style.css # UI styles
β βββ js/main.js # Frontend logic
βββ templates/
β βββ index.html # Web interface
βββ scripts/
β βββ export_showui_desktop.py # ShowUI format export
β βββ import_data.py # Dataset import utility
β βββ ... # Other utilities
βββ data/
β βββ images/ # Input screenshots
β βββ annotations/ # Generated JSON annotations
β βββ metadata.db # SQLite index
βββ requirements.txt # Python dependencies
βββ env.example # Environment template
This work builds upon:
Special thanks to Dr. Hazem El-Alfy for supervision and guidance throughout this research.
This project is licensed under the MIT License - see the LICENSE file for details.
For questions, collaboration, or issues:
Last Updated: January 2026
Status: Research Prototype - Model Release Pending
1 commits
Python
46.7%
JavaScript
36.9%
CSS
8.3%
HTML
6.4%
Shell
1.7%
A Web-Based Annotation System for High-Fidelity GUI Element Grounding
This system was developed as part of an Honours thesis at the University of Sydney:
AccuAnnotate: Scalable Labelling of Graphical User Interfaces and Reinforcement Learning for Vision-Language Model Grounding
Note: The AccuAnnotate-2B model and training artifacts will be released soon.
This Honours thesis addresses pixel-level grounding on desktop GUIs: given a screenshot and a natural-language instruction, the agent must predict an exact on-screen click point. Current datasets under-represent diverse widgets and auto-labels are often imprecise, constraining both supervised learning and RL fine-tuning.
The thesis introduces two contributions:
AccuAnnotate couples OmniParser-v2 element discovery with image pre/post-processing, instruction validation, a crop-level prompt builder, and a web workspace for controllable detail and organisation. Manual verification over 1,740 tasks yields 98.77% correct labels.
AccuAnnotate-2B, trained based on ShowUI-2B with distance-based reward optimization, demonstrates AUC gains of +5.29% on ScreenSpot-desktop (N=334) and +16.95% on ScreenSpot-Pro (N=1,581), with DTB reduced by 9.08% on ScreenSpot-desktop.
This repository hosts the AccuAnnotate web annotation pipeline described in Chapter 3 of the thesis. The system provides:
# Clone the repository
git clone git@github.com:ning-bao/AccuAnnotate-Web.git
cd AccuAnnotate-Web
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp env.example .env
# Edit .env and add your OpenAI API key
# Run the application
python app.py
Open your browser to http://localhost:5000
The AccuAnnotate pipeline follows a multi-stage architecture:
ββββββββββββββββββββ
β Image Upload β
ββββββββββ¬ββββββββββ
β
β
ββββββββββββββββββββ βββββββββββββββββββ
β Preprocessing ββββββββ OmniParser v2 β
β (Element Detect)β β Element Hints β
ββββββββββ¬ββββββββββ βββββββββββββββββββ
β
β
ββββββββββββββββββββ βββββββββββββββββββ
β Crop Generation β β Directional β
β & Prompt Build ββββββββ Text Padding β
ββββββββββ¬ββββββββββ βββββββββββββββββββ
β
β
ββββββββββββββββββββ βββββββββββββββββββ
β GPT-4o/5 API ββββββββ Instruction β
β Inference β β Generation β
ββββββββββ¬ββββββββββ βββββββββββββββββββ
β
β
ββββββββββββββββββββ
β Post-processing β
β & Validation β
ββββββββββ¬ββββββββββ
β
β
ββββββββββββββββββββ βββββββββββββββββββ
β JSON Export β β SQLite Metadataβ
ββββββββββββββββββββ βββββββββββββββββββ
Leverages Microsoft's state-of-the-art UI element detector for high-precision candidate proposals.
Generates tight and directional crops for each candidate element, enabling the VLM to read labels and context more accurately.
Enforces constraints: 1-5 unique elements per image, absolute pixel coordinates, actionable instructions (β€120 chars), and duplicate removal.
Provides a modern interface for batch processing, visual verification, manual editing, and export to training formats.
data/images/Key environment variables (see env.example):
# OpenAI Configuration
OPENAI_API_KEY=sk-your-api-key-here
OPENAI_MODEL=gpt-4o # or gpt-5
# Annotation Settings
ANNOTATOR_DETAIL_LEVEL=high # low, normal, or high
ANNOTATOR_MAX_INSTRUCTIONS=5 # 1-5 elements per image
ANNOTATOR_PREPROCESS_MAX_ELEMENTS=24 # Candidate hints
# OmniParser Configuration
OMNIPARSER_URL=local # Use local inference
OMNIPARSER_MIN_CONF=0.3 # Detection threshold
For detailed configuration and advanced usage, see DOCUMENTATION.md.
If you use AccuAnnotate-Web in your research, please cite:
@thesis{bao2026accuannotate,
title={AccuAnnotate: Scalable Labelling of Graphical User Interfaces
and Reinforcement Learning for Vision-Language Model Grounding},
author={Bao, Ning},
year={2026},
school={The University of Sydney},
type={Bachelor of Advanced Computing (Honours) thesis}
}
AccuAnnotate-Web/
βββ app.py # Flask backend and batch job manager
βββ db.py # SQLite metadata interface
βββ utils/
β βββ annotator.py # Core annotation logic (crop-first prompting)
β βββ visualizer.py # Canvas visualization
βββ static/
β βββ css/style.css # UI styles
β βββ js/main.js # Frontend logic
βββ templates/
β βββ index.html # Web interface
βββ scripts/
β βββ export_showui_desktop.py # ShowUI format export
β βββ import_data.py # Dataset import utility
β βββ ... # Other utilities
βββ data/
β βββ images/ # Input screenshots
β βββ annotations/ # Generated JSON annotations
β βββ metadata.db # SQLite index
βββ requirements.txt # Python dependencies
βββ env.example # Environment template
This work builds upon:
Special thanks to Dr. Hazem El-Alfy for supervision and guidance throughout this research.
This project is licensed under the MIT License - see the LICENSE file for details.
For questions, collaboration, or issues:
Last Updated: January 2026
Status: Research Prototype - Model Release Pending
1 commits
Python
46.7%
JavaScript
36.9%
CSS
8.3%
HTML
6.4%
Shell
1.7%