Repository navigation
Releases: ILYAGRISH/yolo-annotator
Release list
v2.1 — time events on video
Download & run (Windows)
- Download YOLO-Annotator-2.1-windows.zip below and unpack it.
- Install Python 3.12+ (3.13 recommended) with "Add python.exe to PATH".
- Double-click
setup_venv.batonce (creates.venv, installs pinned dependencies, ~150 MB). - Start with
run.bat.
For the AI features (YOLO pre-labelling, automatic tracking, SAM): run setup_ml_env.bat once — a separate .venv-ml with PyTorch + Ultralytics (CUDA 12.8 build if an NVIDIA GPU is found, ~3 GB; --cpu for the CPU build) — or point ML → ML Settings… at an existing conda / venv with Ultralytics. The annotator itself never imports PyTorch.
User guide (RU): About.md inside the archive.
What's new in v2.1 — time events on video
Besides objects on a frame, you can now mark what happens and when: "from frame 120 to frame 180 — lane change", "frame 300 — fall". Use it for action recognition, temporal action localization, finding moments in a video or counting events.
Marking events
- Press E on the first frame of the event and E again on its last frame. Ending on an earlier frame works too: the bounds are put in order.
- Shift+E cancels a started event.
- Event types are shared by all videos of the project and each has its own colour. Pick the type under the frame strip, or create one there with + New event type…. Video → Event Types… renames, recolours and deletes them. If no type exists yet, the first event asks for a name.
- Events about an object: select an annotation of a track (e.g.
car #12) before the first E, and the event is linked to that object.
Seeing and editing them
- Event strip under the frame strip:
- each event is a coloured bar with its name, and overlapping events go to separate rows;
- a started event is hatched up to the current frame;
- click selects an event, double click edits it, hovering shows type, frames, time, duration, track and note.
- Events tab:
- all events of the video (type, frames, time, track, note); the ones on the current frame are in bold;
- double click goes to an event;
- Start here / End here move a bound of the selected event to the current frame;
- Edit… changes type, first and last frame, object and note;
- Delete (or the Delete key in the list) removes the selected event.
- Video → Previous / Next Event jumps between event starts.
- Ctrl+Z undoes adding, editing and deleting while you stay on the frame. E / Shift+E can be reassigned in Project Settings → Hotkeys.
Export: Video Events
events.csv: one row per event — video, type, first / last frame, start / end / duration in seconds, track, note, split.activitynet.json: ActivityNet 1.3, with segments in seconds and subsets taken from the dataset split.event_types.txt: the type names.- With Copy videos and frames, the export also includes the source videos (
videos/) and their extracted frames (frames/<video>/).
Upgrading from 2.0: unpack into a new folder and run setup_venv.bat again. Projects (.annproj) are compatible: event types are added to project.json, and events are stored in events/<video>.json. For the AI features, keep using your existing ML environment (in ML → ML Settings… choose the python.exe of the old folder's .venv-ml\Scripts, or your conda env) or run setup_ml_env.bat in the new folder. Don't copy .venv-ml between folders.
v2.0 — video and object tracks
Download & run (Windows)
- Download YOLO-Annotator-2.0-windows.zip below and unpack it.
- Install Python 3.12+ (3.13 recommended) with "Add python.exe to PATH".
- Double-click
setup_venv.batonce (creates.venv, installs pinned dependencies, ~150 MB). - Start with
run.bat.
For the AI features (YOLO pre-labelling, automatic tracking, SAM): run setup_ml_env.bat once — a separate .venv-ml with PyTorch + Ultralytics (CUDA 12.8 build if an NVIDIA GPU is found, ~3 GB; --cpu for the CPU build) — or point ML → ML Settings… at an existing conda / venv with Ultralytics. The annotator itself never imports PyTorch.
User guide (RU): About.md inside the archive.
What's new in v2.0 — video and object tracks
Video as frames
- File → Import Video… (or drop a video file on the image list) extracts every N-th frame of a chosen time range as JPEG images (default ≈ 5 per second). The frames are ordinary project images, so every tool, SAM, pre-labelling and review work on them.
- A frame strip under the canvas shows which frames have annotations, the active track and its keyframes; click or drag it to go to a frame.
Tracks with interpolation
- T turns the selected annotation into a track. On a later frame, Shift+T adds a keyframe (a copy you drag onto the object).
- The frames in between are interpolated: boxes, OBBs, polygons and polylines (resampled when the point count differs), points and poses.
- Editing an in-between frame makes it a keyframe. Every edit, delete, undo and redo re-interpolates.
- Shift+A / Shift+D jump between keyframes. Video → Delete Active Track… removes a track from all frames.
- Track ids are shown on the canvas and in the Annotations panel (
#3, keyframe#3◆).
Automatic tracking with your YOLO model
- In ML → Pre-label Dataset…, choose a video (🎞) and tick Track objects (video). The model runs with a tracker (ByteTrack or BoT-SORT) over the frames in order.
- Every object becomes a project track and every detection a keyframe (🤖, reviewed with R / Shift+R as usual). Frames where the model missed the object are interpolated.
- Works with detect, segment, OBB and pose models, and with Outlines via SAM (a detector plus SAM gives tracks of polygons or masks).
- A new run replaces the unreviewed keyframes of the previous one. Accepted ones stay.
- Tip: for tracking, import every 1st–3rd frame. On sparse frames, fast objects get lost.
Export and split
- New export format MOTChallenge:
gt/gt.txt+seqinfo.ini+img1/per video. - Split Dataset can keep all frames of a video in one split, so near-identical frames don't leak between train and val.
Editing
- Select tool: drag the body of an annotation to move it as a whole: box, OBB, polygon, polyline, point or pose. Before, only corners and vertices could be dragged. The annotation stops at the image edge, and a click with a small jitter doesn't move anything.
Upgrading from 1.9: unpack into a new folder and run setup_venv.bat again. Projects (.annproj) are compatible. For the AI features, keep using your existing ML environment (in ML → ML Settings… choose the python.exe of the old folder's .venv-ml\Scripts, or your conda env) or run setup_ml_env.bat in the new folder. Don't copy .venv-ml between folders. Tracking needs the small lap package: a new .venv-ml gets it automatically, while in an existing environment Ultralytics installs it on the first tracking run (internet needed), or you can run pip install lap yourself.
v1.9 — Review of pre-labelled annotations
Download & run (Windows)
- Download YOLO-Annotator-1.9-windows.zip below and unpack it.
- Install Python 3.12+ (3.13 recommended) with "Add python.exe to PATH".
- Double-click
setup_venv.batonce (creates.venv, installs pinned dependencies, ~150 MB). - Start with
run.bat.
For the AI features (YOLO pre-labelling and SAM): run setup_ml_env.bat once — a separate .venv-ml with PyTorch + Ultralytics (CUDA 12.8 build if an NVIDIA GPU is found, ~3 GB; --cpu for the CPU build) — or point ML → ML Settings… at an existing conda / venv with Ultralytics. The annotator itself never imports PyTorch.
User guide (RU): About.md inside the archive.
What's new in v1.9
Review of pre-labelled annotations
A model makes mistakes, so every 🤖 annotation should be looked at — the app now remembers what has been reviewed and walks you through the rest.
- Unreviewed model annotations stand out: dashed outline, paler fill and 🤖 on the canvas, an orange row in the Annotations panel, 🤖N next to each image in the image list.
- New Review menu:
- R accepts the selected annotation and moves to the next unreviewed one — press R, R, R…, delete what's wrong;
- Shift+R accepts everything on the image and jumps to the next image to review;
- U goes there without accepting;
- "Mark selected as unreviewed" undoes a mistaken accept.
- Editing accepts too: move a box or fix a vertex and the annotation counts as reviewed (one Ctrl+Z restores both). Accepted ones show ✓🤖 and who accepted them (File → Your Name).
- Image filter 🤖 Unreviewed, QC rule Unreviewed (double-click jumps to it) and a 🤖 Review line in the statistics.
- Export → Skip unreviewed 🤖 annotations exports only what a person has checked (off by default).
- A new pre-labelling run (replace mode,
Ctrl+L) and Remove Model Annotations now keep accepted annotations, like manual ones. - Keys can be changed in Project Settings → Hotkeys. The status is stored in annotation meta — older projects open unchanged.
Quality
- Continuous integration: all test suites (~900 checks) now run on every push on Windows and Ubuntu with Python 3.12 and 3.13.
- Fix:
setup_venv.bataccepted Python 3.10 / 3.11, but the pinned NumPy 2.5 needs Python 3.12+ — installation on 3.10/3.11 failed. The installer now looks for 3.12+ and says so.
Upgrading from 1.8: unpack into a new folder and run setup_venv.bat again — projects (.annproj) are compatible. For pre-labelling and SAM, keep using your existing ML environment (in ML → ML Settings… choose the python.exe of the old folder's .venv-ml\Scripts, or your conda env) or run setup_ml_env.bat in the new folder — don't copy .venv-ml between folders.
v1.8 — SAM: label by clicking, outlines for boxes
Download & run (Windows)
- Download YOLO-Annotator-1.8-windows.zip below and unpack it.
- Install Python 3.12+ (3.13 recommended; 3.10 / 3.11 do not work — NumPy 2.5 needs 3.12) with "Add python.exe to PATH".
- Double-click
setup_venv.batonce (creates.venv, installs pinned dependencies, ~150 MB). - Start with
run.bat.
For the AI features (YOLO pre-labelling and SAM): run setup_ml_env.bat once — a separate .venv-ml with PyTorch + Ultralytics (CUDA 12.8 build if an NVIDIA GPU is found, ~3 GB; --cpu for the CPU build) — or point ML → ML Settings… at an existing conda / venv with Ultralytics. The annotator itself never imports PyTorch.
SAM weights: one file, e.g. sam2.1_b.pt (~155 MB, recommended) or sam2.1_t.pt (~75 MB, faster / CPU) from ultralytics/assets releases; choose it in ML → ML Settings… or on first use.
User guide (RU): About.md inside the archive.
What's new in v1.8
SAM — label by clicking
- New ✧ SAM tool (
I): click an object and Segment Anything outlines it. Right-click removes a wrongly included part, drag gives a box hint, Backspace undoes a click, Enter accepts into the current class (oneCtrl+Z). - The class type decides the result: polygon, brush mask, box, tight rotated OBB or point.
- The image is encoded once when opened — every click then takes ~20 ms on an RTX 5060 Ti. Works with SAM 2.1 / SAM 2 / SAM / MobileSAM weights; no new dependencies.
- SAM annotations count as manual ones (no 🤖) — you chose the object.
SAM outlines for boxes
- ML → Boxes → Outlines with SAM… turns existing boxes of a class — hand-drawn or from a detector — into polygons, brush masks or tight rotated boxes of another class: current image, all images or a split. One SAM pass per image for all its boxes; a second run skips boxes already outlined; boxes can be kept or deleted; the target class can be created right in the dialog.
- Pre-label Dataset → Outlines via SAM: a plain detector now fills polygon / mask / OBB classes with real outlines (also with
Ctrl+L). - "+ new class" in the mapping table offers every fitting type (a detector: bbox, polygon, mask, OBB).
Other
- The type of a class can be changed while it has no annotations (Schema editor); reassigning the annotations of a deleted class is limited to classes of the same type.
- Fix: the Delete key removed the selected annotation only with the Select tool — now with any tool.
Upgrading from 1.7.x: unpack into a new folder and run setup_venv.bat again — projects (.annproj) are compatible. For pre-labelling and SAM, keep using your existing ML environment (in ML → ML Settings… choose the python.exe of the old folder's .venv-ml\Scripts, or your conda env) or run setup_ml_env.bat in the new folder — don't copy .venv-ml between folders.
v1.7.1 — YOLO export fixes
Download & run (Windows)
- Download YOLO-Annotator-1.7.1-windows.zip below and unpack it.
- Install Python 3.12+ (3.13 recommended; 3.10 / 3.11 do not work — NumPy 2.5 needs 3.12) with "Add python.exe to PATH".
- Double-click
setup_venv.batonce (creates.venv, installs pinned dependencies, ~150 MB). - Start with
run.bat.
Optional pre-labelling with a YOLO model: run setup_ml_env.bat once (or point ML → ML Settings… at an existing conda / venv with Ultralytics) — see the v1.7 notes.
User guide (RU): About.md inside the archive.
What's fixed in v1.7.1
- YOLO OBB export on non-square images. Rotated boxes were rotated in normalised coordinates, so on a non-square image the exported corners did not match the box drawn on the canvas. They are now rotated in pixels, exactly as drawn. Also applies to the auto-saved
labels/. - YOLO class ids after deleting a class. Labels used the project class id while
data.yamllistsnamesin a row, so deleting a class in the middle of the schema shifted the names and produced ids ≥nc. All YOLO exports, multi-task export andlabels/now use indices 0…nc−1 in the order ofnames. - Docs: recipe for creating a new conda environment for pre-labelling.
If you trained on YOLO OBB exports of non-square images, or exported after deleting a class, please re-export your dataset.
Upgrading from 1.7: unpack into a new folder and run setup_venv.bat again — projects (.annproj) are compatible. For pre-labelling, either keep using your existing .venv-ml (in ML → ML Settings… choose the python.exe inside the old folder's .venv-ml\Scripts) or run setup_ml_env.bat in the new folder — don't copy .venv-ml between folders.
v1.7 — Pre-labelling with your YOLO model
Download & run (Windows)
- Download YOLO-Annotator-1.7-windows.zip below and unpack it.
- Install Python 3.12+ (3.13 recommended; 3.10 / 3.11 do not work — NumPy 2.5 needs 3.12) with "Add python.exe to PATH".
- Double-click
setup_venv.batonce (creates.venv, installs pinned dependencies, ~150 MB). - Start with
run.bat.
Optional — pre-labelling with a YOLO model: run setup_ml_env.bat once. It creates a separate .venv-ml with PyTorch + Ultralytics (CUDA 12.8 build if an NVIDIA GPU is found, ~3 GB; setup_ml_env.bat --cpu for the CPU build). Or point ML → ML Settings… at any existing conda / venv with Ultralytics. The annotator itself never imports PyTorch.
User guide (RU): About.md inside the archive.
What's new in v1.7
Pre-labelling with your YOLO model
- ML → Pre-label Dataset… (
Ctrl+Shift+L) runs any Ultralytics model — detect, segment, OBB, pose, classify — over all images or one split, with progress and Stop.Ctrl+Lpre-labels the current image; oneCtrl+Zundoes it. - The project class decides the geometry: a segmentation model can fill polygon or brush-mask classes, a detector fills box / OBB / point classes, a pose model fills keypoint skeletons.
- Class mapping by name, by hand in a searchable table, or create the selected / all missing classes with the right type (17-point pose models get the COCO skeleton; the empty default
objectclass of a new project is replaced, so class ids start at 0). - Images that already have annotations: skip, replace earlier model annotations (manual ones kept), or add.
- Model annotations are marked 🤖 0.87 (confidence) in the Annotations panel; ML → Remove Model Annotations… clears them on one image or everywhere.
- Multi-user projects: only the images assigned to you are touched.
- ~25 ms per image on an RTX 5060 Ti.
ML backend
- Models run in a separate process with its own Python environment — PyTorch never enters the annotator, and a crash or out-of-memory in a model cannot take the app down.
- ML Settings…: choose the interpreter, Check it (Python, PyTorch, Ultralytics, GPU), test-load a model. Status-bar indicator ML: off / ready / busy / error. Off by default — nothing starts until you use it.
Upgrading from 1.6: unpack into a new folder and run setup_venv.bat again — projects (.annproj) are compatible.
v1.6 — Shift-lines, pose editing, fixes
Download & run (Windows)
- Download YOLO-Annotator-1.6-windows.zip below and unpack it.
- Install Python 3.12+ (3.13 recommended; 3.10 / 3.11 do not work — NumPy 2.5 needs 3.12) with "Add python.exe to PATH".
- Double-click
setup_venv.batonce (creates.venv, installs pinned dependencies, ~150 MB). - Start with
run.bat.
User guide (RU): About.md inside the archive.
What's new in v1.6
Editing
- Shift+click straight lines in Brush and Semantic brush (Photoshop-style): a straight stroke from the end of the previous one, chainable, with a dashed guide while Shift is held.
- Pose keypoints can be dragged with the Select tool — the nearest keypoint is picked, its visibility is kept.
Fixes
- Crash when clicking a keypoint of a selected pose.
- Crash in the Class Schema Editor when deleting the last class; deleting or moving a class could also copy unsaved skeleton edges into its neighbour.
- Dragging a vertex or handle with Select erased the annotation's attributes and subclass.
- A pose could not be selected where two keypoints overlap (e.g. head and neck).
- The Annotations panel showed a meaningless "(0 pts)" for masks, boxes, OBBs, points and poses.
Upgrading from 1.5: unpack into a new folder and run setup_venv.bat again — projects (.annproj) are compatible.
v1.5 — Semantic & panoptic segmentation
Download & run (Windows)
- Download YOLO-Annotator-1.5-windows.zip below and unpack it.
- Install Python 3.10+ (3.13 recommended) with "Add python.exe to PATH".
- Double-click
setup_venv.batonce (creates.venv, installs pinned dependencies, ~150 MB). - Start with
run.bat.
User guide (RU): About.md inside the archive.
What's new in v1.5
Semantic segmentation mode
- New class type
semanticand the Semantic brush tool (S): the brush is the class — all strokes of a class merge into one region layer per image. - Each stroke is committed on mouse release and undone in one step; layers never overlap (overwrite / keep / erase modes).
- Layers render pixel-exact (holes and disconnected parts included) underneath instance annotations.
Panoptic segmentation
- Per-class Panoptic role (
auto/thing/stuff) in the Class Schema Editor. - New COCO Panoptic export:
panoptic_<split>.json+ RGB segment-id PNG per image; stuff below, things on top.
Export
- COCO Instances → "Masks as": polygons or RLE — pixel-exact masks with holes, pycocotools-compatible (no extra dependency).
- Every region of a brush mask is now exported (Semantic Masks, YOLO Segment, COCO, LabelMe).
Quality of life
- File → Open Recent — the last 10 projects.
- Brush size ring under the cursor for Brush and Semantic brush.
- Deploy folder / release archive with
setup_venv.batandrun.bat; dependency versions pinned. - Unused mask files are cleaned up automatically (two-stage, safe for multi-user projects).
Fixes
- Brush masks were missing from COCO Instances export.
- OBB rotation was ignored in COCO export.
- YOLO Detect with the Convert policy crashed on brush masks.
- The Annotations panel was emptied after editing the class schema.
requirements.txtwas missing NumPy and OpenCV.
License
The project is now released under GPL-3.0.
Что нового в v1.5 (кратко)
- Семантический режим: кисть = класс, все мазки класса сливаются в одну область; клавиша
S. - Panoptic-сегментация: роль класса thing/stuff, экспорт COCO Panoptic.
- COCO: маски полигонами или RLE — точно по пикселям, с дырками.
- Файл → Открыть недавние, круг размера кисти, готовый архив для установки.
- Исправлены ошибки экспорта COCO/YOLO Detect и пустая панель аннотаций после правки схемы.
- Лицензия GPL-3.0.
Установка: скачать архив ниже → setup_venv.bat → run.bat. Руководство — About.md в архиве.