EasyAnnotate v0.4.0 · on PyPI

Image annotation for computer vision

Open a folder. Draw a box.

EasyAnnotate asks for nothing before the first box: no organisation, no project, no label setup. Point it at a folder of images and it edits that folder's own label files, on your computer. Type a class name as you draw and the class exists.

$ easyannotate annotate ./photos
localhost:8765/annotate

Recorded from the real editor and the real models on a 4 GB laptop GPU: a box by hand, SAM 2.1 outlining from a rough box, YOLO-World finding every person, dog and car on the unreviewed photos, then review least sure first. Photos are public domain (CC0).

Before the first box

Most annotation tools start with a form. This one starts with the image.

A self-hosted annotation server, such as CVAT

  1. Start the server and sign in
  2. Create a task
  3. Define its labels
  4. Upload the images
  5. Open the job

Then draw. Afterwards, export to get the labels back to your folder.

EasyAnnotate

  1. Run easyannotate annotate ./photos

Then draw. The labels are already in your folder, in the format they were in: VOC, YOLO, COCO or LabelMe.

Three ways to run it

The same editor, wherever the work is.

One core with three front ends. Nothing heavy is downloaded until you ask for it.

web · this computer

In your browser, bound to your machine

A small local server and the editor in a tab. Your images stay where they are.

# edit a folder's labels in place
easyannotate annotate D:\photos\doors

# or open the front page and pick folders
easyannotate serve
  • Answers only to this computer, with a key minted for each launch.
  • Opens folders from the front page by path or with the system dialog.
  • Uploads nothing. The AI tools stay off until you install them.
headless · pypi

Headless, in your pipeline

The same projects from Python, the command line, or an API on a server.

import easyannotate as ea

project = ea.open_folder("D:/photos/doors")
print(project.counts())
hardest = project.images(state="predicted",
                         order="uncertain")
project.export("out/", to="yolo")
# reviewed images only, by default
  • easyannotate serve --headless for a server with no browser.
  • 28 dataset operations: convert, clean, deduplicate, split, analyse.
desktop · full app

A desktop app with everything in it

One download per platform. No Python needed, and a native window.

  • Windows, macOS and Linux builds. The Windows app is 311 MB.
  • “Install AI tools” inside the app reads your GPU and driver, then installs the PyTorch build that runs there.
  • Train a detector on your reviewed images and predict the rest, from the editor.

AI tools, on request

Sized to the machine, and checked on it.

Segment anything with a box or a click, find objects from a text prompt, and run your own model over the rest. The installer chooses the build and the model sizes from your hardware.

Segmentation · SAM 2.1, one box or one click per object
This computerPyTorchSegmenting (SAM 2.1)Text prompts (YOLO-World)
NVIDIA, 8 GB or moreCUDA 12.8 or 12.6baselarge
NVIDIA, 3.5 to 8 GBCUDA 12.8 or 12.6smallmedium
NVIDIA, 3.5 GB or more, driver 522 to 559CUDA 11.8 (PyTorch 2.7)sized by memory, as above
Apple siliconMetalsmallmedium
Anything else, including NVIDIA under 3.5 GB or with a driver older than 522CPUtinysmall

Before it reports a GPU, the installer runs real work on it. If the CUDA build cannot, the tools use the CPU and say why. This rule comes from a real case: on a 529 driver, PyTorch's CUDA 12.6 build said the GPU was available and then failed every allocation. The same laptop on the CUDA 11.8 build segments in 0.044 s a click and answers a new text prompt in about a second.

What's in it

An editor, a review loop, and a dataset you can trust.

Five shape kinds box · polygon · obb · line · point

Draw, edit and undo. Saves as you go and resumes where you stopped. Keyboard first: one key to accept, one to move on.

Six formats, both ways voc · yolo · coco · labelme · csv · dota

Reads a folder's existing labels and writes them back in the same format, including YOLO oriented boxes.

Class indices that never move

Renaming keeps a class's index, retiring keeps its slot, new classes append. YOLO files you exported last month still mean what they meant.

Review predictions, hardest first

Import a model's output, filter by confidence, accept with one key. The queue puts the predictions most likely to be wrong at the top.

AI assist

SAM 2.1 turns a box or a click into a polygon. YOLO-World finds objects from text such as door, handle, on one image or the whole project.

Train and predict

Train a YOLO detector on the images you reviewed, then predict the rest. The agreement figure shows how often the model was right.

Exports you can train on

Export takes reviewed images only, by default. Unreviewed model output fed back into training teaches a model its own mistakes.

Checks before you train

Cleaning, duplicate detection and analysis. Classes that differ only by case, such as Open and open, are flagged when a folder opens.

Measured

Numbers from runs, not from a brochure.

1.6 sto open 20,000 imagesServer start to a listed project. docs/bench_scale.py
0.17 sper SAM click, on a CPUThe image is encoded while you look at it, so a click only decodes.
0.044 sper SAM click, on a 4 GB laptop GPURTX 2050 with driver 529, which the installer gave PyTorch 2.7 with CUDA 11.8.
788automated testsIncluding real-browser tests of the editor. CI on Linux and Windows.

Get it

Install, open a folder, start drawing.

pip install easyannotate

easyannotate demo                # a sample project
easyannotate annotate ./photos   # your own folder
easyannotate tools install       # optional: AI tools
easyannotate app                 # the desktop window

Released: 0.4.0. Both packages are on PyPI: easyannotate, and easyannotate-tools, which easyannotate tools install fetches with the PyTorch build that suits your machine. Desktop apps for Windows, macOS and Linux are on the release page; they are unsigned, so Windows SmartScreen and macOS Gatekeeper ask once before the first run.