Skip to main content

Universal Annotation Tool for images

Project description

📦 Universal Annotator

A modern, high-performance image annotation tool for computer vision datasets.

PyPI Version Python Version License

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.jpg before image_10.jpg).
    • Smart JSON class discovery.
    • Automatic label file creation prompt for new datasets.
  • 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 E to switch to Edit Mode.
  • Press M to 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 Delete to remove the selected box.
  • Draw nested boxes inside existing annotations.

4. Save

  • Press S to 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:

  • TXTJSON
  • JSONTXT
  • TXTCOCO JSON
  • COCOJSON
  • COCOTXT
  • JSON FolderCOCO 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.txt to define your class names:
    person
    car
    bicycle
    dog
    cat
    
  • App Settings: Edit utils/config.py to 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

                              LICENSE
                         Version  18 Nov 2025

THIS SOFTWARE LICENSE IS PROVIDED "ALL CAPS" SO THAT YOU KNOW IT IS SUPER SERIOUS AND YOU DON'T MESS AROUND WITH COPYRIGHT LAW BECAUSE YOU WILL GET IN TROUBLE HERE ARE SOME OTHER BUZZWORDS COMMONLY IN THESE THINGS WARRANTIES LIABILITY CONTRACT TORT LIABLE CLAIMS RESTRICTION MERCHANTABILITY. NOW HERE'S THE REAL LICENSE:

  1. It's a public domain.
  2. Do whatever you want with it.

👨‍💻 Author & Version

  • Author: Madan Mohan Jha
  • Current Version: v0.1.8
  • 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

universal_annotator-0.1.9.tar.gz (597.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

universal_annotator-0.1.9-py3-none-any.whl (692.6 kB view details)

Uploaded Python 3

File details

Details for the file universal_annotator-0.1.9.tar.gz.

File metadata

  • Download URL: universal_annotator-0.1.9.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

Hashes for universal_annotator-0.1.9.tar.gz
Algorithm Hash digest
SHA256 71df0851fd95825659e9d2768ae52ff183377e2106b86699523ffb0ba52e8e23
MD5 34d1b025abe1c26d49f904e346a50d94
BLAKE2b-256 439e20f224524fac35ebe38e37e7d42d24b91e54f7313bdaf6517516da8fb6b4

See more details on using hashes here.

File details

Details for the file universal_annotator-0.1.9-py3-none-any.whl.

File metadata

  • Download URL: universal_annotator-0.1.9-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

Hashes for universal_annotator-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 6ea351aa9d34da8095f67858a9495372c200379d75b02ba55c359e7ce29a614f
MD5 9aed7dd083a1f2ec3644c36e720ecac1
BLAKE2b-256 6bad134086de8915ecaca0c2feead9a65465fd090c4776d3ffb7e205da2f4bc6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page