Automatic + manual YOLO bounding box annotation tool (GUI + console)
Project description
annobel
Automatic + manual YOLO-format bounding box annotation tool with a Tkinter GUI (editor) and console fallback.
Version: 0.0.2 (Alpha)
Overview
annobel streamlines creating and refining object detection datasets. It
wraps Ultralytics YOLOv8 models for optional automatic bounding box proposal,
then lets you refine or create labels manually. The tool stores annotations in
standard YOLO text format (class x_center y_center width height, normalized
values).
Main Features
- Automatic annotation (detection) using Ultralytics YOLOv8 model variants or local weights.
- Manual drawing, moving, resizing, deleting bounding boxes.
- Class list management (add / rename) saved to a
classes.txtfile. - Autosave after every modification.
- Console fallback when
tkinteris not present. - Per-image navigation and keyboard shortcuts.
- Optional subset filtering of detection classes.
- Non-destructive: detection stage creates / overwrites only label files.
Installation
pip install annobel
Dependencies
- Python >= 3.8
ultralytics(YOLO) – installed automatically.pillowfor image handling.
Quick Start (CLI)
After installation:
annobel
You will be prompted (GUI or console fallback) to choose:
- Mode: Automatic Annotation (YOLO) or Manual Annotation / Editing.
- Image & label directories.
- (Auto mode) model selection (download variant or local path) and optional class subset.
Labels are saved as <image_stem>.txt in the labels directory. A classes.txt
is created/updated as needed.
Programmatic Usage
from annobel import run
run(
images_dir="/path/to/images",
mode="auto", # or "manual"
model_path="yolov8n.pt", # only needed for auto mode
conf=0.25,
classes_filter_ids=[0, 2], # optional subset
)
For full interactive loop (menu reappears after exiting editor):
from annobel import main
main()
Directory Structure (Generated)
images/
img001.jpg
img002.jpg
labels/
img001.txt
img002.txt
classes.txt
YOLO Label Format Recap
Each line: class_id x_center y_center width height with all coordinates
normalized to [0,1] relative to image width/height.
Keyboard & Mouse Shortcuts (Editor)
- A: Add mode
- E: Edit mode
- C: Change class of selected box
- M: Manage classes dialog
- Delete: Remove selected box
- ← / →: Previous / next image
- Q: Return to main menu
- I: Print info about current boxes
- Mouse (Add mode): Click-drag to draw box
- Mouse (Edit mode): Drag box interior to move; handles to resize; right-click to delete
Recommended Workflow
- Place raw images into an
imagesdirectory. - Run auto mode with a YOLO model (e.g.,
yolov8n.pt) to bootstrap labels. - Inspect & refine with manual editor (resize, delete, add boxes, change classes).
- Iterate until dataset is satisfactory.
Ultralytics Notice & Licensing
This package depends on the external ultralytics project for YOLO model
loading and inference. Key points:
- Ultralytics repository: https://github.com/ultralytics/ultralytics
- Their code / weights are subject to the AGPL-3.0 license by default and/or alternative commercial terms offered by Ultralytics. See their LICENSE and documentation for the authoritative terms.
- This package does NOT bundle or redistribute model weights; it only invokes
the
YOLOAPI when you request detection. - If you deploy or integrate this in a network service or commercial product, ensure you meet the obligations of the Ultralytics license (e.g., providing source, offering access, or acquiring a commercial license if required).
You (the end user) are solely responsible for verifying that your intended use of the models and resulting annotations complies with applicable licenses and data privacy regulations.
Contributing
- Fork repository
- Create a feature branch:
git checkout -b feature/awesome - Install dev extras:
pip install -e .[dev] - Run linters / tests:
flake8,black --check .,pytest - Submit PR
Versioning / Changelog
- 0.0.1: Initial packaged release (renamed to annobel)
Roadmap Ideas
- Export to COCO format
- Integrated image augmentation preview
- Polygon / segmentation support
- Multi-threaded batch detection
- Custom hotkey configuration
- Dark / light UI themes
Security / Privacy
Images are processed locally. No images or labels are uploaded by this package. Be cautious with sensitive imagery and model weight redistribution restrictions.
Disclaimer
Provided "AS IS" under AGPL-3.0-or-later. No warranty of fitness for a particular purpose. Always validate annotations before using for training.
License
- This package: AGPL-3.0-or-later (see LICENSE)
- Ultralytics YOLO: AGPL-3.0 (or commercial) – external dependency
© 2025 Sayali Dongre
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 annobel-0.0.2.tar.gz.
File metadata
- Download URL: annobel-0.0.2.tar.gz
- Upload date:
- Size: 52.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a04785cda02908be35f90416de947fcd18e2bbc3ae3f05aaff59608496c0916c
|
|
| MD5 |
56cf7f1593db4bc6e8fc6f250d79fbfa
|
|
| BLAKE2b-256 |
b201453678f5b3efdac545b9b44ef8ec3a5dbc591d406310c01a5276a981e9b8
|
File details
Details for the file annobel-0.0.2-py3-none-any.whl.
File metadata
- Download URL: annobel-0.0.2-py3-none-any.whl
- Upload date:
- Size: 38.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
239bcb332a829e59deadf040fda6b774a8f499c00a5edf75d4c7ff262c335202
|
|
| MD5 |
bb1f5d464e26dd3213a118c70493a4c7
|
|
| BLAKE2b-256 |
f25c9219886943cb10f4c021e509d110a8d6e8de37d39ec9aa6c82115a6985f8
|