Lightweight desktop image annotation tool for bounding box and polygon labeling with YOLO, Pascal VOC, and COCO export
Project description
AlchemyAnnotate - Lightweight Image Annotation Tool for Object Detection
AlchemyAnnotate is a free, open-source, desktop image annotation tool built with Python and PySide6. It provides a fast and intuitive interface for creating bounding box annotations used in training object detection models such as YOLO, Faster R-CNN, and SSD.
Export your annotations in YOLO, Pascal VOC, and COCO formats with a single click.
Features
- Bounding Box Annotation - Draw, select, edit, and delete bounding boxes directly on images
- Multi-Format Export - Save annotations in YOLO, Pascal VOC (XML), and COCO (JSON) formats
- Separate Annotation Folders - Each format is stored in its own folder (
annotations_yolo/,annotations_voc/,annotations_coco/) to prevent overwrites - Class Management - Create, delete, and assign annotation classes through the UI with automatic color coding
- Autosave - Annotations are saved automatically after every change
- Format Switching - Switch between YOLO, VOC, and COCO at any time with automatic conversion of existing annotations
- Existing Annotation Detection - Automatically detects and loads previously saved annotations when opening a folder
- Project Session File - Remembers your last opened image, selected format, class list, and preferences across sessions
- Image Navigation - Browse images using sidebar, keyboard shortcuts, or arrow keys
- Zoom and Pan - Zoom with Ctrl+Scroll and pan with middle-click for precise annotation on large images
- Sidebar Status - Visual indicators show which images are labeled and which are still pending
Supported Annotation Formats
| Format | Output Folder | File Type | Used By |
|---|---|---|---|
| YOLO | annotations_yolo/ |
.txt per image + classes.txt |
YOLOv5, YOLOv8, Ultralytics |
| Pascal VOC | annotations_voc/ |
.xml per image |
Faster R-CNN, SSD, Detectron |
| COCO | annotations_coco/ |
Single annotations.json |
COCO API, Detectron2, MMDetection |
Supported Image Formats
JPG, JPEG, PNG, BMP, TIFF, WEBP
Installation
Install from PyPI (recommended)
pip install alchemyannotate
Install from source
git clone https://github.com/kouya-marino/AlchemyAnnotate.git
cd AlchemyAnnotate
pip install .
Development install
git clone https://github.com/kouya-marino/AlchemyAnnotate.git
cd AlchemyAnnotate
pip install -e ".[dev]"
Requirements
- Python 3.10 or higher
- PySide6 (installed automatically)
How to Use
Launch the Application
python run.py
Or run as a Python module:
python -m alchemyannotate
Or if installed as a package:
alchemyannotate
Annotation Workflow
- Open a Folder - Click
File > Open Folderor pressCtrl+Oto select a folder containing your images - Create Classes - In the right panel, type a class name (e.g., "car", "person") and click Add
- Select a Class - Click on a class in the class list to make it active
- Draw Bounding Boxes - Left-click and drag on the image to draw a box around an object
- Navigate Images - Use the sidebar, or press
A/Dto go to the previous / next image - Edit Boxes - Click a box to select it, then change its class from the dropdown or press
Deleteto remove it - Save - Annotations autosave after every change. Press
Ctrl+Sto force a manual save - Switch Format - Use the format selector in the status bar to switch between YOLO, VOC, and COCO
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Ctrl+O |
Open image folder |
Ctrl+S |
Save annotations |
Ctrl+Q |
Quit application |
Delete |
Delete selected bounding box |
A or Left Arrow |
Previous image |
D or Right Arrow |
Next image |
Ctrl+0 |
Fit image to window |
Ctrl+Scroll |
Zoom in / out |
Middle-click drag |
Pan the image |
Project File
When you open a folder, AlchemyAnnotate creates an alchemyannotate_project.json file inside it. This file stores:
- Selected annotation format
- Class list
- Last opened image
- Autosave preferences
- Recently used class
This allows you to resume your annotation session exactly where you left off.
Project Structure
AlchemyAnnotate/
├── alchemyannotate/
│ ├── models/ # Data models (BoundingBox, ImageAnnotation, ProjectConfig)
│ ├── views/ # UI components (Canvas, Sidebar, Panels, Dialogs)
│ ├── controllers/ # Application logic (App, Canvas, Navigation controllers)
│ ├── services/ # IO, autosave, format conversion, image loading
│ └── utils/ # Constants, geometry helpers
├── tests/ # Unit tests for models, IO formats, and store
├── run.py # Quick launcher
├── pyproject.toml # Build configuration
└── requirements.txt # Dependencies
Running Tests
pip install -e ".[dev]"
pytest tests/ -v
Dependencies
| Package | Version | Purpose |
|---|---|---|
| PySide6 | >= 6.6 | Qt6 GUI framework |
No other external dependencies. XML and JSON handling use Python standard library modules.
Frequently Asked Questions
What annotation format should I use?
- Use YOLO if you are training with Ultralytics YOLOv5, YOLOv8, or similar YOLO-based models
- Use Pascal VOC if you are training with Faster R-CNN, SSD, or frameworks that expect XML annotations
- Use COCO if you are using Detectron2, MMDetection, or the COCO evaluation API
Can I switch formats after annotating?
Yes. AlchemyAnnotate will prompt you to export existing annotations to the new format when you switch.
Where are my annotations saved?
Inside your image folder, in a subfolder named after the format:
annotations_yolo/for YOLO formatannotations_voc/for Pascal VOC formatannotations_coco/for COCO format
Does it support polygons or segmentation masks?
Yes. AlchemyAnnotate supports both bounding box and polygon annotations. Polygons export as COCO segmentation fields and YOLOv8-seg format. Note: Pascal VOC does not support polygons — a warning is shown when switching to VOC if polygon data exists.
License
This project is open source. See the LICENSE file for details.
Contributing
Contributions are welcome. Please open an issue or submit a pull request on GitHub.
Project details
Release history Release notifications | RSS feed
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 alchemyannotate-1.2.0.tar.gz.
File metadata
- Download URL: alchemyannotate-1.2.0.tar.gz
- Upload date:
- Size: 258.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75cd8770523cd83b05bd730a181d533a2742bd2887e14150d74098a8633d9f60
|
|
| MD5 |
8e20b038b6cb3797137752565fd897d9
|
|
| BLAKE2b-256 |
cad2cc4c1ea15c039a1f073e1a725fa84800df7c1bc1809c59aa8d40145c60e1
|
File details
Details for the file alchemyannotate-1.2.0-py3-none-any.whl.
File metadata
- Download URL: alchemyannotate-1.2.0-py3-none-any.whl
- Upload date:
- Size: 43.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a276e80454c7887ae0056c2f4658862df1b1c2fdf0c5b617ae754499c7f0ecf8
|
|
| MD5 |
c485c5722ac98a34a9fed7ea768fb75a
|
|
| BLAKE2b-256 |
19a4f11a3697493d3c8a13949734a44ab9c04e7d3fe17f60e3145dc5c1e2a274
|