Releases: wkentaro/labelme
v6.1.0
LabelMe v6.1 adds SAM3 support, reworks the AI toolbar, and bumps test coverage to 125 e2e tests. If you call labelme internals from scripts, check the Migration guide below.
New features
- SAM3 AI-Box mode — new AI annotation option. In AI-Box mode, a single bounding box can produce multiple shapes. (#1917)
- Unified AI modes — the four old AI tools (
ai_polygon,ai_mask, etc.) are now two:AI Points → ShapeandAI Box → Shape, each with a polygon/mask toggle. A separator in the toolbar divides manual tools from AI tools. (#1915, #1916) - Download progress bar — AI model downloads now show progress and can be cancelled (#1948)
- Sibling image import — opening a single image file loads all images in the same directory into the file list (#1924)
- AI button hover hint — hovering the disabled AI widget highlights the AI toolbar buttons so new users can find them (#1961)
- Async canvas repainting — canvas calls
update()instead ofrepaint(), avoiding blocking redraws (#1869) - New translations — Greek (#1893), Ukrainian (#1892), Russian (#1891)
Fixes
- Double-undo on delete — deleting a shape used to require two undos to restore it; now one undo is enough (#1932)
- SAM3 disabled in AI-Points mode — SAM3 doesn't support point prompts, so it's now greyed out in the model selector with a warning (#1918)
- Tooltip mismatch — AI mode tooltips now match the renamed menu labels (#1928)
Also includes fixes shipped in v6.0.1 and v6.0.2:
- Unchecking "Save Automatically" had no effect since the v6.0.0 default change (#1953)
- README images on pypi.org were broken due to relative paths (#1954)
Migration guide
labelme.utils.lblsave deprecated
Use imgviz.io.lblsave instead. The old import still works (emits a DeprecationWarning) but will be removed in a future release. (#1911, #1959)
"Open Recent" removed
The recent-files submenu in the File menu is gone. Use the file list dock or the OS file dialog. (#1921)
Internal
- Type annotations on all functions, enforced by
ty check(#1920, #1922) - E2E test suite went from ~20 to 125 tests (#1930–#1939, #1960)
- Core algorithm rewrites:
boundedMoveShapes,storeShapes(now a deque), widget dialogs (#1941) osambumped to stable 0.4.0; cropped mask support (#1919)- New linters: flake8-annotations, typos, taplo, mdformat, yamlfix (#1927)
- CI split into
lint.yml+test.yml;setup-uvaligned to v6 (#1951, #1952)
Contributors
- @kancheng — Greek, Ukrainian, and Russian translations (#1891, #1892, #1893)
- @minewilliam — async canvas repainting and
boundedMoveVertexrefactor (#1868, #1869)
Full changelog: v6.0.0...v6.1.0
v6.0.2
Patch release fixing broken images on the PyPI project page.
Fixes
- Fix PyPI README images — Relative image paths in the README are now rewritten to absolute GitHub raw URLs at build time using
hatch-fancy-pypi-readme, so images render correctly on pypi.org. (#1954)
Full Changelog: v6.0.1...v6.0.2
v6.0.1
Patch release with a bug fix and CI automation.
Fixes
- Respect "Save Automatically" checkbox — Unchecking the checkbox in the UI had no effect since v6.0.0 changed the
auto_savedefault totrue. The redundant config check that short-circuited the checkbox state has been removed. (#1953)
Internal
- Add
publish.ymlworkflow to auto-publish to PyPI on tag push
Full Changelog: v6.0.0...v6.0.1
v6.0.0
LabelMe v6 changes two important defaults, adds support for large and multispectral TIFF images, and cleans up the CLI.
If you're upgrading from v5, read the Migration Guide below.
New Features
- Large and multispectral TIFF image support — float32 and multi-band TIFFs (e.g., satellite imagery) now load correctly and much faster (#1811, #1812)
- "Reset Layout" action — reset the window layout to default from the menu (#1864)
- Point shape click selection — point shapes are now properly clickable (#1860)
- Vertex hover priority — vertices are now prioritized over shape bodies in hover detection, making editing easier (#1867)
- Sparse config file —
~/.labelmercis now created with only user-changed settings instead of the full default config (#1796) - New translations — Polish (#1809), Thai (#1886), and Turkish (#1805)
Migration Guide
Auto-save is now ON by default
Files are saved automatically as you annotate. No data loss on accidental close.
- To disable:
labelme --no-auto-save - Or set
auto_save: falsein your config file - The old
--autosaveflag still works but will be removed in v7
Image data is no longer embedded in JSON by default
JSON files are now much smaller — they reference image paths instead of embedding base64 data.
- To embed image data:
labelme --with-image-data - Or set
with_image_data: truein your config file - The old
--nodataflag still works but will be removed in v7 - Existing config files using
store_dataare automatically migrated towith_image_data
Breaking Changes
CLI changes
- Positional argument renamed:
filename→path— now accepts image files, label files, or directories --outputsimplified: always expects a directory path (no longer accepts.jsonfile paths)- CLI flags standardized to hyphenated style:
--no-autosave→--no-auto-save--nosortlabels→--no-sort-labels--labelflags→--label-flags--validatelabel→--validate-label- Old forms are kept as hidden aliases and will be removed in v7
UI renames
- "Shape Labels" dock → "Annotation List" (#1828)
- "polygon" → "shape" in shortcuts and UI labels (#1822)
Removed
labelme_draw_json,labelme_draw_label_png,labelme_export_jsonCLI entry points — moved toexamples/as standalone scripts (e.g.,python examples/tutorial/draw_json.py)labelme_on_dockerCLI entry pointlabelme.utils.polygons_to_mask()andlabelme.utils.labelme_shapes_to_label()(deprecated since v4)
Fixes
- Fix crash on arrow keys when no shape is selected (#1457)
- Fix
ValueError: Shape not in listwhen previously selected shapes are missing (#1396) - Fix hang with
@symbol in file paths due to natsort (#1672, #1904) - Fix crash on unknown config keys — now warns and skips (#1887)
- Fix crash on malformed JSON in file dialog preview (#1900)
- Fix RGBA/transparent images in brightness/contrast dialog (#1872)
- Fix crosshair guide lines extending beyond image bounds (#1870)
- Fix pasted shapes not selected after cross-file paste (#1876)
- Fix rectangle right-to-left drawing in shape_to_mask (#1817)
- Fix out-of-bounds vertex crash in canvas (#1818)
- Fix RGBA PNG conversion in labelme2coco (#1830)
- Fix deprecated
np.boolusage (#1831) - Fix window position recovery when saved screen is no longer available (#1859)
- Fix out-of-bounds highlight for AI-generated masks (#1858)
- Fix mask incorrectly set on non-mask shapes (#1797)
- Show error dialog when image file fails to open (#1810)
- Force light mode — dark mode is not yet supported (#1808)
- Allow points on the edge of the pixmap (#1801)
Contributors
- @kancheng — Polish and Thai translations (#1809, #1886)
- @minewilliam — canvas edge fix and refactoring (#1782, #1801, #1802)
- @oguz-hanoglu — Turkish translations (#1805)
Full Changelog: v5.11.4...v6.0.0
v5.11.4
- fix: reset window state for users upgrading from older versions
- feat: add "Reset Layout" action to reset the window layout to default
Full Changelog: v5.11.3...v5.11.4
v5.11.3
v5.11.2
v5.11.1
v5.11.0
Features
- Support square drawing for "Create Rectangle" (#1748) @kancheng
- Use style "Fusion" for consistent appearance across platforms (#1751)
- Introduce SAM3 (smart) model for text-to-rectangle (#1762)
- Support "polygon" and "mask" in AI text-to-annotation (#1774)
- Add "Preferences..." menu for config file editing (#1781)
SAM3 AI text-to-annotation
FocuSee.Project.2026-01-19.7-29-43.PM.mp4
Preferences...
Bug Fixes
- Clear selectedShapes to avoid crash on loading new image (#1717)
- Import onnxruntime before PyQt5 (#1723)
- Use canCloseShape for double-click finalization (#1724)
- Fix typo in variable name in shape.py (#1733) @minewilliam
- Handle empty input in nms_bboxes (#1761)
- Load OsamSession lazily for AI-assisted shapes (#1775)
- Handle Windows-style paths in LabelFile (#1784)
- Replace np.cross with manual 2D cross product (#1785)
- Reflect file_search in config at start time (#1788)
UI Improvements
- Show model selection in AI Prompt widget (#1752)
- Disable "AI Prompt" widget when not in rectangle create mode (#1753)
- Add info button to AI-assisted annotation widget (#1764)
- Add tooltip for AI Text-to-Annotation info button (#1766)
- Disable AI-Assisted Annotation widget when not in AI modes (#1767)
- Add newline for Japanese translation of menu items (#1768)
- Allow label editing when non-edit mode only from label list (#1769)
Internationalization
- Add Traditional Chinese (zh_TW) (#1727) @kancheng
- Add French (fr_FR) (#1730) @kancheng
- Add Japanese (ja_JP) (#1732)
- Add Hungarian (hu_HU) (#1734) @kancheng
- Add German (de_DE) (#1735) @kancheng
- Add Persian (fa_IR) (#1737) @kancheng
- Add Korean (ko_KR) (#1738) @kancheng
- Add Spanish (es_ES) (#1739) @kancheng
- Add Portuguese (pt_BR) (#1749) @kancheng
- Add Dutch (nl_NL) (#1750) @kancheng
- Add Italian (it_IT) (#1776) @kancheng
- Add Vietnamese (vi_VN) (#1779) @kancheng
Build
- Drop Python 3.9 support (#1746)
- Migrate to ty for type checking (replacing mypy) (#1720)
- Use hatch dynamic versioning (#1771)
Dependencies
- Bump filelock from 3.17.0 to 3.20.3 (#1747)
- Bump urllib3 from 2.3.0 to 2.6.3 (#1756)
- Bump requests from 2.32.3 to 2.32.4 (#1757)
- Bump protobuf from 5.29.3 to 5.29.5 (#1758)
- Bump fonttools from 4.56.0 to 4.60.2 (#1759)
Refactoring
- Add OsamSession class for osam model and embedding caching (#1754, #1760)
- Extract and rename AiAssistedAnnotationWidget (#1763, #1765)
- Use importlib.metadata to get version (#1770)
- Reorganize tests into e2e and unit tests (#1786)
CI
- Check version of pylupdate5 before generating .ts files (#1731)
- Add Discord notification for merged PRs (#1755)
Contributors
Thanks to all contributors for this release! 🎉
Full Changelog: v5.10.1...v5.11.0