Skip to main content

LabelMe V2

Image Annotation Tool with Advanced Features & Performance Optimizations

PyPI Python Version Code style: ruff License Tests

Enhanced fork of wkentaro/labelme with 45x faster loading & productivity features


🎯 What's New in This Fork

This enhanced version adds powerful polygon editing features, 45x faster image loading, and improved defaults to speed up your annotation workflow:

⚡ Breakthrough Performance: 45x Faster Loading

The biggest improvement in this fork - optimized TIFF/JPG/PNG loading for massive images:

Image Size Before After Speedup
6050×12300 TIFF (71MB) 10 seconds 220ms 45x faster ⚡
Large JPG/PNG 2-3 seconds 200-400ms 10x faster
Cached images N/A <200ms Instant navigation

How it works:

  • ✅ Skip slow PIL conversion - load directly with Qt
  • ✅ Skip JSON base64 decode - load from file when possible
  • ✅ Smart image caching (3-image LRU cache)
  • ✅ Automatic downsampling for huge images

Perfect for: Industrial inspection, PCB analysis, medical imaging, aerial photography


✨ New Features

1. Performance Optimizations ⚡

Smooth annotation even with massive images and many polygons.

  • Viewport Culling: 5-10x faster rendering with 100+ polygons
  • Adaptive Downsampling: 4x less memory for large images (16000×8000)
  • Optimized Loading: 45x faster for large TIFF files
  • Configurable thresholds and quality settings
  • Works automatically - no manual intervention

Example: Annotate 16000×8000 PCB images with 500 polygons smoothly on 4GB RAM.

2. Enhanced Zoom (Up to 5000%)

Maximum zoom increased from 1000% to 5000% (50x magnification) for tiny defect annotation.

  • Configurable maximum zoom level
  • Adjustable zoom increment for smooth control
  • Perfect for PCB defects, microscopy, surface inspection
  • Mouse wheel zooms centered on cursor position

Example: Annotate hairline cracks or solder bridges with pixel-level precision.

3. Multiple Point Addition (Ctrl+M)

Quickly refine polygon boundaries by adding multiple evenly-spaced points along edges.

  • Hover over any polygon edge in edit mode
  • Press Ctrl+M and enter number of points (1-100)
  • Points are automatically distributed evenly
  • Perfect for curved edges or complex boundaries

Example: Add 10 points to a curved car windshield edge in one action instead of clicking 10 times.

4. Polygon Merge (Ctrl+Shift+M)

Merge multiple polygons into one or batch-apply labels to disconnected objects.

  • Select 2+ polygons (hold Ctrl while clicking)
  • Press Ctrl+Shift+M to merge
  • Smart handling:
    • Connected/overlapping → Single merged polygon
    • Disconnected objects → Multiple polygons with same label
    • Mixed → Intelligent separation based on connectivity

Example: Annotate 20 cars by drawing rough boxes, select all, merge once - all labeled "car" instantly.

5. Dark Mode (View → Dark Mode)

Eye-friendly dark theme inspired by VS Code.

  • Toggle instantly via View menu
  • Persistent setting saved in config
  • Reduces eye strain during long sessions
  • Professional color scheme

6. Improved Default Settings

Better defaults for faster annotation workflow:

Setting Old Default New Default Why?
auto_save false true Never lose work
store_data true false Smaller JSON files
keep_prev_brightness_contrast false true Consistent visuals
dark_mode N/A true Eye comfort
canvas.fill_drawing true false See through shapes
canvas.num_backups 10 20 More undo history
max_zoom 1000% 5000% 5x more zoom

7. Better Keyboard Shortcuts

More intuitive shortcuts that don't conflict:

Action Old Shortcut New Shortcut
Create Polygon Ctrl+N Ctrl+Shift+C
Create Rectangle Ctrl+R Ctrl+Shift+X
Edit Polygon Ctrl+J Ctrl+Shift+V

📦 Installation

pip install labelmev2

From Source

# Clone this enhanced version
git clone https://github.com/jakhon37/LabelMeV2.git
cd LabelMeV2

# Install with pip
pip install -e .

# Or use uv (faster)
uv pip install -e .

🚀 Quick Start

# Launch labelme
labelme

# Enable dark mode (if not already on)
View → Dark Mode

# Try the new features:
# 1. Draw a polygon
# 2. Press Ctrl+Shift+V to enter edit mode
# 3. Hover over an edge and press Ctrl+M
# 4. Enter "5" to add 5 points
# 5. Adjust the points as needed

New Feature Quick Reference

Feature Shortcut Usage
High Zoom (5000%) Mouse wheel Scroll on image to zoom up to 50x magnification
Add Multiple Points Ctrl+M Edit mode → Hover edge → Ctrl+M → Enter count
Merge Polygons Ctrl+Shift+M Select multiple → Ctrl+Shift+M
Dark Mode View menu View → Dark Mode (toggles instantly)
Edit Mode Ctrl+Shift+V Enter polygon editing mode

📚 Documentation

  • New Features Guide: docs/NEW_FEATURES.md
  • Contributing: CONTRIBUTING.md
  • Original Documentation: See wkentaro/labelme for:
    • Basic usage and examples
    • Export formats (VOC, COCO)
    • AI-assisted annotation
    • Command-line tools
    • Video annotation
    • Classification/segmentation workflows

🎬 Examples

Polygon Refinement Workflow

1. Draw rough polygon around object
2. Ctrl+Shift+V (edit mode)
3. Hover over curved edge
4. Ctrl+M → Enter "8" → OK
5. Adjust 8 new points to match boundary perfectly

Batch Labeling Workflow

1. Draw boxes around 15 cars (quick rough boxes)
2. Ctrl+Click each box to select all
3. Ctrl+Shift+M (merge)
4. Result: 15 separate polygons all labeled "car"

🔧 Configuration

Enhanced defaults in ~/.labelmerc:

# New/modified defaults
auto_save: true
dark_mode: true
store_data: false
keep_prev_brightness_contrast: true

# Zoom settings
zoom_increment: 1.45  # 45% per step (ultra fast for quick navigation)
max_zoom: 5000        # 5000% = 50x magnification

# New features config
default_num_points_to_add: 1

shortcuts:
  add_multiple_points: Ctrl+M
  merge_polygons: Ctrl+Shift+M
  create_polygon: Ctrl+Shift+C
  create_rectangle: Ctrl+Shift+X
  edit_polygon: Ctrl+Shift+V

🤝 Contributing

Contributions welcome! See CONTRIBUTING.md for:

  • Development setup
  • Code style guidelines
  • Testing procedures
  • Feature implementation details

📄 License

GPL-3.0-only - Same as original wkentaro/labelme


🙏 Acknowledgments & Credits

This project is based on wkentaro/labelme

This enhanced version builds upon the excellent foundation of the original labelme, adding:

Performance Enhancements by Jakhongir Nodirov:

  • ⚡ 45x faster image loading for large TIFF/JPG/PNG files
  • 🖼️ Smart image caching with LRU eviction
  • 🎨 Viewport culling for smooth rendering with hundreds of polygons
  • 📊 Optimized memory usage for massive images

New Features:

  • 🔍 Enhanced zoom up to 5000% for tiny defect inspection
  • ➕ Multiple point addition (Ctrl+M) for quick polygon refinement
  • 🔗 Polygon merge (Ctrl+Shift+M) for batch labeling
  • 🌙 Dark mode for comfortable annotation sessions
  • ⚙️ Improved default settings for faster workflows

Maintained by: Jakhongir Nodirov (jakhon37@gmail.com)

For the complete original labelme documentation and features, please visit the official repository.


⭐ Support

If you find these enhancements useful:

Metadata

Release files for labelmev2 2.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for labelmev2 2.0.3
File Size Uploaded
labelmev2-2.0.3.tar.gz 11.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for labelmev2 2.0.3
File Interpreter ABI Platform
labelmev2-2.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 12.3 MB

Release files / labelmev2-2.0.3.tar.gz

Download URL labelmev2-2.0.3.tar.gz
Size 11.7 MB
Tags Source
SHA-256 checksum
How to use checksums
ad04bff0369560242727ae7cdb97adbc52af687f383aa0f8e9a9718fe6152603
BLAKE2b-256 checksum
How to use checksums
f71f4e1f393f8e419633cd77232a2cb91a16357aedeeb202b15415f19baf25d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.18

Release files / labelmev2-2.0.3-py3-none-any.whl

Download URL labelmev2-2.0.3-py3-none-any.whl
Size 512.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
24c594330da85a47d33004b2eeb2bbbb103d794eba52e949b06f060e75f01e1d
BLAKE2b-256 checksum
How to use checksums
1901372afca6a0b69a9420b810fb94701f144616b1f6ffc095871bcedda7a75c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.18

Release history Release notifications | RSS feed

This release

2.0.3 This release

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page