Universal Annotation Tool for images
Project description
📦 Universal Annotator A modern, high-performance image annotation tool for computer vision datasets
Universal Annotator is a powerful and user-friendly annotation tool designed for creating high-quality bounding box annotations. It supports TXT, JSON, and COCO formats, offers an advanced dark UI, and includes dozens of quality-of-life features for fast annotation workflows.
🔥 Key Features 🧰 Core Annotation Features
Create, edit, move, and resize bounding boxes
Nested annotations (draw boxes inside existing boxes)
Edit Mode + View Mode
Auto-save when navigating images
Selection memory (restores previously selected boxes per image)
Intelligent natural sorting (image_2.jpg before image_10.jpg)
Format auto-detection (TXT / JSON / COCO)
Smart JSON class discovery
Supports JPG, PNG, BMP, TIFF, WebP
🎨 UI Features
Professional dark theme
Mouse-wheel image zoom
Full menu bar + rich status bar
Help dialog (F1) with shortcuts
Descriptive tooltips on all controls
Optimized keyboard shortcuts for speed
🚀 Installation Install directly from PyPI pip install universal-annotator
Run the application:
universal-annotator
Optional: use a virtual environment python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install universal-annotator universal-annotator
🧭 Basic Usage Guide
- Load Dataset
Select an image folder & label folder
Annotation format is auto-detected
If empty, choose TXT, JSON, or COCO manually
- Draw Bounding Boxes
Press E → Edit Mode
Press M → Draw Mode
Click & drag to draw
Select a class from the popup dialog
Navigate images with A / D or Previous/Next buttons
- Edit Annotations
Select a box to move or resize
Drag handles to resize
Press Delete to remove
Create nested boxes inside existing ones
- Save
Press S to save manually
Or enable Auto Save in the UI
Status bar confirms save actions
📁 Supported Annotation Formats TXT (YOLO format) <class_id> <x_center> <y_center>
JSON { "annotations": [ {"bbox": [x, y, w, h], "category_id": 0} ] }
COCO format
Fully supported
Reads & writes _annotations.coco.json
🗂 Exporters & Converters
All conversion tools avoid overwriting your root labels. Outputs go into folders such as:
converted_txt/
converted_json/
converted_coco_json/
Supported conversions include:
TXT → JSON
JSON → TXT
TXT → COCO JSON
COCO → JSON
COCO → TXT
JSON Folder → COCO merge
🎮 Keyboard Shortcuts Key Action A Previous Image D Next Image S Save E Edit Mode V View Mode M Draw Bounding Box X Exit Draw Mode Delete Remove selected box F1 Help dialog ⚙ Configuration
Edit sample_classes/classes.txt to change class names:
person car bicycle dog cat
Edit utils/config.py for:
Default colors
Line widths
App name & version
🛠 Troubleshooting Images not loading
Make sure file formats are supported
Check folder permissions
Labels not found
Ensure filenames match
Ensure correct label folder is selected
Shortcuts not working
Make sure the app window is focused
🖼 Supported Image Formats
JPG / JPEG
PNG
BMP
TIFF
WebP
🚧 Known Limitations
No in-place label editing (must delete & recreate)
Only rectangular bounding boxes
No polygon/segmentation tools (coming soon)
🛠️ Future Enhancements
Change class label of existing box
Polygon and segmentation support
Custom keyboard shortcuts
Analytics dashboard
Undo/Redo
Plugin system
🤝 Contributing
Pull requests are welcome! See the contribution guide in:
CONTRIBUTING_UI.md
📄 License
(Add your license here)
👨💻 Author
Madan Mohan Jha
📌 Version
Current Version: 1.0.0 Updated: November 2025
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file universal_annotator-0.1.3.tar.gz.
File metadata
- Download URL: universal_annotator-0.1.3.tar.gz
- Upload date:
- Size: 587.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a73fa87a8b704c7374737c1ace1217ce3d703bda1ebbb4f991d1dda21cc2513
|
|
| MD5 |
56f8e4c022b6ced8ecd49f1d27d6d586
|
|
| BLAKE2b-256 |
fbeb8e5c8514626e107e8027906c4f47ed2d13d939c12a8ce6e79c34fd8c2e2d
|
File details
Details for the file universal_annotator-0.1.3-py3-none-any.whl.
File metadata
- Download URL: universal_annotator-0.1.3-py3-none-any.whl
- Upload date:
- Size: 679.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c18ce0efaf372ba934edcaefe384f243c434ade71d77072cf9bbf20aff6ca9e
|
|
| MD5 |
a642f734ec2fed93946ee1acabf4c0b0
|
|
| BLAKE2b-256 |
0dd23d5e105f39979f182ff7022266070d6e9fc843a0c7432e3f1b91185a73e0
|