About this project

Labelme is a graphical image annotation tool written in Python with a Qt interface, inspired by the MIT LabelMe project. It is distributed on PyPI and also offered as a paid standalone app for users who prefer not to install Python or Qt. Annotation primitives include polygon, rectangle, circle, line, and point, plus image flag annotation for classification and cleaning. Video annotation is supported. The GUI can be customized with predefined labels and flags, auto-saving, and label validation. Annotations are stored as JSON files. AI-assisted features include point-to-polygon or mask annotation using SAM and EfficientSAM models, and text-to-annotation using YOLO-world and SAM3 models. Datasets can be exported in VOC format for semantic and instance segmentation, and in COCO format for instance segmentation. Example workflows cover image classification, bounding box detection, semantic segmentation, instance segmentation, and video annotation. The interface is available in about 20 languages, including English, Japanese, Korean, Simplified and Traditional Chinese, German, Greek, French, Spanish, Italian, Portuguese, Dutch, Hungarian, Russian, Thai, Vietnamese, Turkish, Ukrainian, Polish, and Persian, selectable via the LANG environment variable. Installation options are pip (`pip install labelme`), a standalone executable, or native Linux distribution packages tracked by Repology. Version 7.x targets Python 3.12-3.14 with Qt6 via PySide6 on 64-bit macOS, Windows, and Linux; version 6.3.x is a maintenance line for Qt5 and Python 3.10/3.11. The project follows SPEC 0 for dropping Python versions in step with numpy, scipy, and scikit-image. Labelme is an application rather than a library: the stable interfaces are the command-line interface, the on-disk JSON annotation format, and the `~/.labelmerc` config format. Internal Python modules were privatized in v7, so imports such as `labelme.app` or `labelme.utils` no longer work; reference code for reading the JSON format without depending on labelme is provided in examples. Config booleans now follow YAML 1.2 parsing, so `yes`/`no`/`on`/`off` must be written as `true`/`false`. Development uses just and uv, with commands such as `just setup`, `just lint`, and `just test`. The repository is a fork of mpitid/pylabelme.