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, desktop-grade, and user-friendly tool engineered for creating high-quality bounding box annotations with exceptional speed. It's built for computer vision practitioners who demand a fast, flexible, and reliable annotation workflow.
🔥 Key Features
🧰 Core Annotation & Data
- Format Flexibility: Supports TXT (YOLO), JSON, and COCO formats with auto-detection.
- Bounding Boxes: Create, edit, move, and resize annotations efficiently.
- Nested Annotations: The ability to draw boxes inside existing boxes.
- Smart Data Handling:
- Intelligent natural sorting (e.g.,
image_2.jpgbeforeimage_10.jpg). - Smart JSON class discovery.
- Automatic label file creation prompt for new datasets.
- Intelligent natural sorting (e.g.,
- Reliable Workflow: Auto-save when navigating, selection memory (restores selection per image).
- Image Support: Supports common formats: JPG, PNG, BMP, TIFF, WebP.
🎨 User Experience (UI/UX)
- Professional Dark Theme: Advanced, high-contrast dark UI for reduced eye strain.
- Optimized Navigation: Mouse-wheel image zoom, full menu bar, and rich status bar.
- Speed-Focused Shortcuts: Descriptive tooltips and a comprehensive help dialog (F1) with optimized keyboard shortcuts.
- Modes: Dedicated Edit Mode (
E) and View Mode (V) for focused work.
🚀 Installation
Universal Annotator is available directly on PyPI.
Install from PyPI
pip install universal-annotator
Run the Application
universal-annotator
Optional: Use a Virtual Environment
It is highly recommended to use a virtual environment to manage dependencies:
python3 -m venv venv
source venv/bin/activate # On Linux/macOS
# venv\Scripts\activate # On Windows
pip install universal-annotator
universal-annotator
🧭 Basic Usage Guide
1. Load Dataset
- Select your Image Folder and your Label Folder.
- The annotation format is auto-detected.
- If the label folder is empty, the app will offer to create label files in your chosen format (TXT, JSON, or COCO).
2. Draw Bounding Boxes
- Press
Eto switch to Edit Mode. - Press
Mto switch to Draw Mode. - Click & drag to draw a new box.
- Select a class from the popup dialog.
- Navigate between images with
A(Previous) /D(Next) keys or the navigation buttons.
3. Edit Annotations
- Select an existing box to move or resize it.
- Drag the box handles to resize.
- Press
Deleteto remove the selected box. - Draw nested boxes inside existing annotations.
4. Save
- Press
Sto save manually. - Alternatively, enable Auto Save in the UI settings.
- The status bar will confirm all save actions.
📁 Supported Annotation Formats
| Format | Structure | Notes |
|---|---|---|
| TXT | <class_id> <x_center> <y_center> <width> <height> |
Standard YOLO format. |
| JSON | {"annotations": [{"bbox": [x, y, w, h], "category_id": 0}]} |
Custom simple JSON structure. |
| COCO | Fully supported | Reads and writes _annotations.coco.json. |
🗂 Exporters & Converters
The tool includes powerful conversion utilities. All conversion tools are non-destructive and avoid overwriting your root labels.
Outputs are placed into dedicated folders, such as converted_txt/, converted_json/, etc.
Supported Conversions:
TXT→JSONJSON→TXTTXT→COCO JSONCOCO→JSONCOCO→TXTJSON 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 / View shortcuts |
⚙ Configuration
You can easily customize the tool's behavior and class definitions:
- Classes: Edit
sample_classes/classes.txtto define your class names:person car bicycle dog cat - App Settings: Edit
utils/config.pyto change default settings like colors, line widths, app name, and version.
🛠 Troubleshooting
| Issue | Solution |
|---|---|
| Images not loading | Ensure file formats are supported (JPG, PNG, etc.) and check folder permissions. |
| Labels not found | Verify that label filenames match image filenames and the correct label folder is selected. |
| Shortcuts not working | Make sure the application window is focused. |
🚧 Known Limitations & Future Enhancements
Known Limitations (v0.1.4)
- No in-place label editing (must delete and recreate a box to change its class).
- Only rectangular bounding boxes are supported.
🛠️ Future Enhancements
- Polygon and segmentation support (High Priority)
- Change class label of existing box
- Customizable keyboard shortcuts
- Analytics dashboard
- Undo/Redo functionality
- Plugin system
🤝 Contributing
Pull requests are welcome! If you have a feature idea or a bug fix, please check out the contribution guide:
📄 See the CONTRIBUTING_UI.md file for details.
📄 License
This project is licensed under the [LICENSE] - see the LICENSE.md file for details.
👨💻 Author & Version
- Author: Madan Mohan Jha
- Current Version: v0.1.7
- 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.7.tar.gz.
File metadata
- Download URL: universal_annotator-0.1.7.tar.gz
- Upload date:
- Size: 597.9 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 |
ee6fd4a91cd93a2d46294ffb2a4f81f36919a6e7612df5b11259babdf96fff2c
|
|
| MD5 |
a5fb9f7a899cd2376253b30152adb94c
|
|
| BLAKE2b-256 |
07136f54bb3d057cb7ad06c03bf73eea1dafdeea293172c01d264267040f9309
|
File details
Details for the file universal_annotator-0.1.7-py3-none-any.whl.
File metadata
- Download URL: universal_annotator-0.1.7-py3-none-any.whl
- Upload date:
- Size: 692.6 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 |
ab176213bf45b61aa03d109df3f993b00411c3892392cf707cd4f04cf9acd78b
|
|
| MD5 |
82ed48799f117d390f05ade658e00eb3
|
|
| BLAKE2b-256 |
ac97631afd5b4c9c98f07e8760f19b1e6f41a0acf4fe1b51687ed7dedf22db41
|