Desktop tool for whole-image classification and bounding-box image annotation
Project description
PyQt Image Annotation Tool
A desktop app for labeling images in a folder — either assigning whole-image classes, or drawing bounding boxes. Built with PySide6.
| Whole-image classification | Bounding boxes |
|---|---|
Features
Whole-image classification
- Assign one or more labels to each image
- Move or copy labeled images into per-label sub-folders, or leave files untouched
- Export to CSV and/or XLSX
Bounding boxes
- Draw, move, resize, and delete rectangular regions per image, each with its own label
- Export to COCO JSON and/or YOLO txt (with
classes.txt)
Both modes
- Zoom & pan on the image (mouse wheel to zoom, drag to pan)
- Thumbnail filmstrip showing every image's labeling status
- Undo (Ctrl+Z)
- Dark theme
- Drag & drop a folder onto the app to open it
- Autosave: progress is saved continuously and offered back to you if you reopen the same folder, so a crash or an accidental close doesn't lose your work
Installation
From PyPI:
pip install pyqt-image-annotation-tool
annotator
Standalone build (no Python required): download the archive for your OS from the
latest release and
run the annotator executable inside it.
From source:
git clone https://github.com/nikuznetsov/PyQt-image-annotation-tool.git
cd PyQt-image-annotation-tool
pip install -e .
annotator # or: python -m annotator
Usage
- Pick the folder containing your images (or drag & drop it onto the window).
- Choose an annotation type — whole-image classification or bounding boxes.
- For classification, also choose a mode:
- csv — labels are tracked and exported to CSV/XLSX; files aren't moved.
- copy / move — a folder is created per label and labeled images are copied/moved into it.
- Enter your label names (or load them from a text file, one label per line).
- Click Next and start labeling.
Keyboard shortcuts
| Key | Action |
|---|---|
| → / ← | Next / previous image |
| 1–9, 0 | Select label (wraps after the 9th) |
| Ctrl+Z | Undo |
| Mouse wheel | Zoom |
| Middle-drag (bbox mode) / drag (classification mode) | Pan |
| Delete (bbox mode) | Remove selected box |
Development
pip install -e ".[dev]"
pytest
ruff check .
See CONTRIBUTING.md for more.
Contributing
Pull requests are welcome.
License
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 pyqt_image_annotation_tool-0.1.0.tar.gz.
File metadata
- Download URL: pyqt_image_annotation_tool-0.1.0.tar.gz
- Upload date:
- Size: 208.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
407d0f6aad34f4300f8faeb0cef23bcaed5daf71364209970d35896dcfb7deb2
|
|
| MD5 |
2556e57c610cf0ba16c230475fe0be52
|
|
| BLAKE2b-256 |
fd3fb7fc0b824d6ea53a3801f09af27c6bd6252bca90cdd0c3b4ee069dae1964
|
Provenance
The following attestation bundles were made for pyqt_image_annotation_tool-0.1.0.tar.gz:
Publisher:
release.yml on nikuznetsov/PyQt-image-annotation-tool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyqt_image_annotation_tool-0.1.0.tar.gz -
Subject digest:
407d0f6aad34f4300f8faeb0cef23bcaed5daf71364209970d35896dcfb7deb2 - Sigstore transparency entry: 2162610331
- Sigstore integration time:
-
Permalink:
nikuznetsov/PyQt-image-annotation-tool@2158421192bf9074810e9f977144f93fbde6fa3d -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/nikuznetsov
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2158421192bf9074810e9f977144f93fbde6fa3d -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyqt_image_annotation_tool-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pyqt_image_annotation_tool-0.1.0-py3-none-any.whl
- Upload date:
- Size: 31.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20277838a65ced17e1fab06f9ac168b9b304b5f8baeb3feea8733b65a9408a06
|
|
| MD5 |
838581fc0b92559b2a75e7aaed853283
|
|
| BLAKE2b-256 |
62f54f2777bfc6e33395697f1f6355dc6af812997eecadf2c9202da1b15b1f04
|
Provenance
The following attestation bundles were made for pyqt_image_annotation_tool-0.1.0-py3-none-any.whl:
Publisher:
release.yml on nikuznetsov/PyQt-image-annotation-tool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyqt_image_annotation_tool-0.1.0-py3-none-any.whl -
Subject digest:
20277838a65ced17e1fab06f9ac168b9b304b5f8baeb3feea8733b65a9408a06 - Sigstore transparency entry: 2162610595
- Sigstore integration time:
-
Permalink:
nikuznetsov/PyQt-image-annotation-tool@2158421192bf9074810e9f977144f93fbde6fa3d -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/nikuznetsov
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2158421192bf9074810e9f977144f93fbde6fa3d -
Trigger Event:
push
-
Statement type: