SimpleAnnotate
A napari plugin for simple image and video annotation
A napari plugin for simple image and video annotation that provides three main annotation workflows:
- Bounding Box Annotation (YOLO format): For object detection training data on images
- Video Bounding Box Annotation: For object detection training data on video files
- Image Classification Labeling: For image classification training data
This napari plugin was generated with Cookiecutter using @napari's cookiecutter-napari-plugin template.

Installation
You can install napari-simpleannotate via pip:
pip install napari-simpleannotate
To install latest development version :
pip install git+https://github.com/hiroalchem/napari-simpleannotate.git
How to use
Getting Started
After installing napari-simpleannotate, launch napari and navigate to Plugins > Add dock widget to find three annotation widgets:
- Bbox annotation: For bounding box annotation on images
- Bbox video annotation: For bounding box annotation on video files
- Label image classification: For image classification labeling
Bounding Box Annotation (Images)
Prerequisites: None required
-
Opening Files:
- Single file: Click
Open Fileto select an image file - Directory: Click
Open Directoryto select a folder containing images - If a
class.yamlfile exists in the directory, you'll be prompted to load existing classes
- Single file: Click
-
Class Management:
- Enter class names in the text box and click
Add class - Classes are automatically assigned sequential IDs (0, 1, 2, ...)
- Select a class and click
Delete selected classto remove it - Classes are saved to
class.yamlalongside annotations
- Enter class names in the text box and click
-
Creating Annotations:
- Select a class from the list (becomes your active class)
- Use napari's rectangle tool (shortcut: R) to draw bounding boxes
- New rectangles automatically inherit the selected class
- Change existing rectangles: select the shape, then click a different class
-
Saving Work:
- Click
Save Annotationsto export in YOLO format - Files saved:
image_name.txt(YOLO coordinates) +class.yaml(class definitions) - YOLO format:
class_id x_center y_center width height(normalized 0-1)
- Click
Video Bounding Box Annotation
Prerequisites: Install PyAV for video support: pip install av
-
Opening Videos:
- Click
Open Videoto select MP4, AVI, MOV, MKV, WMV, FLV, or WebM files - Frames load through a cached reader that keeps recently viewed frames ready for scrubbing
- Click
-
Navigation & Frame Tools:
- Use napari's time slider; the widget shows
Frame: current/totalalongside live cache usage - Jump between annotated frames with the
Prev (Q)andNext (W)buttons or keyboard shortcuts - Nearby frames are prefetched in the background to keep playback smooth during review
- Use napari's time slider; the widget shows
-
Annotating Frames:
- Draw rectangles after selecting a class; each shape stores its frame index automatically
- Bounding boxes are only visible on the frame where they were created
- Class management matches the image workflow, and
class.yamlis written in YOLOnames:format
-
Automatic Tracking:
- Use
Startto launch trackers for the boxes in the current frame andStopto halt processing - Keep
Track all bounding boxesenabled to follow every box, or disable it to track only selected shapes - Choose between the default OpenCV
CSRTtracker and the experimentalTrackerVit
- Use
-
Saving & Exports:
Save Annotationswrites per-frame YOLO files (imgNNN.txt) in a video-specific folder next to the source- Annotated frames are saved once as
imgNNN.pngso you can review what was labeled later - Enable
Enable crop on saveto export fixed-size crops plus matching YOLO labels undercrops/ - Existing exports are reused when present so repeated saves only write new annotations
Image Classification Labeling
Prerequisites: None required
-
Opening Directory:
- Click
Open Directoryto select image folder - Recursively finds all images (PNG, TIF, JPG, JPEG, TIFF)
- Automatically loads existing
labels.csvandclass.txtif present
- Click
-
Display Options:
- Split Channels: Check to display multi-channel images as separate layers
- Contrast settings preserved when switching between images
- Navigate images using the file list on the left
-
Labeling Workflow:
- Add classes: Type in text box and press Enter (or click
Add class) - Remove classes: Type existing class name and press Enter
- Assign labels: Select image → Click class name to label it
- Real-time auto-save to
labels.csvandclass.txt
- Add classes: Type in text box and press Enter (or click
-
Resume Sessions:
- Previous work automatically loaded when reopening directories
- Continue labeling from where you left off
Performance Notes
- Video annotation: Optimized with frame caching and parallel prefetching for smooth playback
- Large datasets: Classification widget handles thousands of images efficiently
- Memory management: LRU cache prevents memory overflow during long annotation sessions
Output Formats
| Widget | Annotation File | Class File | Format |
|---|---|---|---|
| Bbox (Images) | image.txt |
class.yaml |
YOLO standard |
| Bbox (Video) | imgNNN.txt per frame (+ optional crops/*.txt) |
class.yaml |
YOLO normalized (per frame/crop) |
| Classification | labels.csv |
class.txt |
CSV with image-label pairs |
Contributing
Contributions are very welcome. Tests can be run with tox, please ensure the coverage at least stays the same before you submit a pull request.
License
Distributed under the terms of the BSD-3 license, "napari-simpleannotate" is free and open source software
Issues
If you encounter any problems, please file an issue along with a detailed description.
Version:
- 0.1.5
Last updated:
- 2026-01-19
First released:
- 2023-10-29
License:
- BSD-3-Clause
Operating system:
- Information not submitted
Requirements:
- numpy
- magicgui
- pyyaml
- qtpy
- scikit-image
- pandas
- napari_video
- zarr
- numcodecs
- opencv-contrib-python
- tox; extra == "testing"
- pytest; extra == "testing"
- pytest-cov; extra == "testing"
- pytest-qt; extra == "testing"
- napari; extra == "testing"
- pyqt5; extra == "testing"

