npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

react-visual-annotator

v1.2.3

Published

Powerful React image and video annotation tool for machine learning, computer vision, and AI training data creation. Features rotatable bounding boxes, polygons, keypoints, segmentation with TypeScript support and Material-UI components.

Readme

React Visual Annotator

npm version npm downloads TypeScript React License: MIT Bundle Size

A powerful React-based image and video annotation tool for machine learning, computer vision, and AI training data creation. Features rotatable bounding boxes with intuitive controls, perfect for creating datasets for YOLO, COCO, and other object detection models with TypeScript support and Material-UI components.

🚀 Live Demo

Try the React Visual Annotator instantly in your browser:

👉 CodeSandbox Live Demo

Key Features

  • 🔄 Bounding Box Rotation: NEW! Rotate bounding boxes with intuitive blue handles and 15° precision snapping
  • 🚀 Optimized Bundle: 24% smaller bundle size (1.3MB vs 1.7MB) with 38% smaller gzipped size
  • 📦 Smart Dependencies: Uses peer dependencies to avoid version conflicts and reduce duplication
  • 💡 TypeScript Support: Full TypeScript integration with comprehensive type definitions
  • ⚛️ React 19 Ready: Compatible with React 18+ and React 19 with proper JSX runtime support
  • 🎨 Professional Interface: Advanced annotation tools with Material-UI components
  • ⚡ Performance Optimized: Enhanced with lodash deep cloning and Terser minification
  • 🔒 Immutable State Handling: Robust circular reference prevention and error handling
  • 🛠️ Modern Build System: Vite-powered development and optimized production builds

Use Cases

  • Machine Learning Training Data: Create labeled datasets for object detection, image segmentation, and computer vision models
  • YOLO/COCO Dataset Creation: Generate annotations compatible with popular ML frameworks
  • Medical Imaging: Annotate medical scans, X-rays, and diagnostic images
  • Autonomous Vehicles: Label traffic signs, vehicles, pedestrians, and road features
  • Quality Control: Annotate defects and features in manufacturing and inspection
  • Research Projects: Academic and commercial computer vision research
  • Content Moderation: Label and categorize user-generated content

Features

  • Simple input/output format
  • Bounding Box, Point and Polygon Annotation with Rotation Support
  • Keypoint and Landmark Annotation
  • Image Segmentation Support
  • Zooming, Scaling, Panning
  • Multiple Images and Video Support
  • Cursor Crosshair
  • Rotatable Bounding Boxes with visual rotation handles and 15° snap increments

Screenshot of Annotator

Installation

Step 1: Install the package

npm i react-visual-annotator
# or
yarn add react-visual-annotator

Step 2: Install peer dependencies

npm i @mui/material @mui/icons-material @emotion/react @emotion/styled lodash moment
# or
yarn add @mui/material @mui/icons-material @emotion/react @emotion/styled lodash moment

Requirements

  • React 18.0.0 or higher (including React 19)
  • TypeScript 4.5+ (if using TypeScript)
  • Material-UI 5.0.0+ (peer dependency)
  • Emotion 11.0.0+ (peer dependency)

Usage

import React from "react";
import ReactImageAnnotate from "react-visual-annotator";

const App = () => (
  <ReactImageAnnotate
    labelImages
    regionClsList={["Alpha", "Beta", "Charlie", "Delta"]}
    regionTagList={["tag1", "tag2", "tag3"]}
    images={[
      {
        src: "https://placekitten.com/408/287",
        name: "Image 1",
        regions: []
      }
    ]}
  />
);

export default App;

To get the proper fonts, make sure to import the Inter UI or Roboto font, the following line added to a css file should suffice.

@import url("https://rsms.me/inter/inter.css");

🔄 Bounding Box Rotation Feature

The React Visual Annotator now supports rotating bounding boxes for more accurate annotations of rotated objects.

How to Use Rotation

  1. Create or select a bounding box - Draw a bounding box or click on an existing one
  2. Look for the blue rotation handle - A blue circular handle appears on the right side of selected boxes
  3. Drag to rotate - Click and drag the rotation handle to rotate the box
  4. 15° snapping - The rotation snaps to 15° increments for precise control
  5. Visual feedback - The box rotates in real-time with proper border rendering

Rotation Data Format

When using rotation, the bounding box data includes a rotation property:

const rotatedBox = {
  type: "box",
  id: "box1",
  x: 0.2,        // Normalized x coordinate (0-1)
  y: 0.3,        // Normalized y coordinate (0-1)
  w: 0.4,        // Normalized width (0-1)
  h: 0.2,        // Normalized height (0-1)
  rotation: 45,  // Rotation angle in degrees (0-360)
  color: "#ff0000",
  cls: "object"
};

Benefits of Rotation

  • Accurate annotations for objects that aren't axis-aligned
  • Better training data for machine learning models
  • Reduced annotation time - no need to approximate with larger axis-aligned boxes
  • Improved model accuracy with more precise bounding boxes

Props

All of the following properties can be defined on the Annotator...

| Prop | Type (* = required) | Description | Default | |----------------------------|---------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| | taskDescription | *string | Markdown description for what to do in the image. | | | allowedArea | { x: number, y: number, w: number, h: number } | Area that is available for annotation. | Entire image. | | regionTagList | Array<string> | Allowed "tags" (mutually inclusive classifications) for regions. | | | regionClsList | Array<string> | Allowed "classes" (mutually exclusive classifications) for regions. | | | regionTagSingleSelection | boolean | Allowed select only one tag for image. | | | regionAllowedActions | {remove?:boolean, lock?:boolean, visibility?: boolean | Allowed actions for region in regions list. | Everything. | | imageTagList | Array<string> | Allowed tags for entire image. | | | imageClsList | Array<string> | Allowed classes for entire image. | | | enabledTools | Array<string> | Tools allowed to be used. e.g. "select", "create-point", "create-box", "create-polygon" | Everything. | | showTags | boolean | Show tags and allow tags on regions. | true | | selectedImage | string | URL of initially selected image. | | | images | Array<Image> | Array of images to load into annotator | | | showPointDistances | boolean | Show distances between points. | false | | pointDistancePrecision | number | Precision on displayed points (e.g. 3 => 0.123) | | | onExit | MainLayoutState => any | Called when "Save" is called. | | | RegionEditLabel | Node | React Node overriding the form to update the region (see RegionLabel component) | | | allowComments | boolean | Show a textarea to add comments on each annotation. | false | | hidePrev | boolean | Hide Previous Image button from the header bar. | false | | hideNext | boolean | Hide Next Image button from the header bar. | false | | hideClone | boolean | Hide Clone button from the header bar. | false | | hideSettings | boolean | Hide Settings button from the header bar. | false | | hideFullScreen | boolean | Hide FullScreen/Window button from the header bar. | false | | hideSave | boolean | Hide Save button from the header bar. | false |

Developers

Development

This project uses Vite for development and building. To begin developing, run the following commands in the cloned repo:

  1. yarn install - Install all dependencies
  2. yarn start - Start the development server
  3. yarn build - Build for production

Note: React and React-DOM are configured as peer dependencies for the published package, but are installed as dev dependencies for development. This ensures proper version compatibility in your projects.

Development Environment Setup

  • Node.js: Ensure you have Node.js 16+ installed
  • Package Manager: Uses Yarn for dependency management
  • TypeScript: Full TypeScript support with strict type checking
  • React: Compatible with React 18+ and React 19

Building for Production

The build process creates optimized bundles in the dist/ folder:

  • ES modules for modern bundlers
  • TypeScript declarations
  • Optimized for tree-shaking

For development setup, see the instructions above.

Troubleshooting

Common Issues

Missing Peer Dependencies

If you get errors about missing modules, install all required peer dependencies:

npm install @mui/material @mui/icons-material @emotion/react @emotion/styled lodash moment

React/React-DOM Version Conflicts

If you encounter peer dependency warnings, ensure you have React 18+ installed:

npm install react@^18.0.0 react-dom@^18.0.0

Material-UI Version Conflicts

Ensure you're using Material-UI v5.0.0 or higher:

npm install @mui/material@^5.0.0 @mui/icons-material@^5.0.0

ImmutableError Issues

This version includes comprehensive fixes for immutable object handling. If you still encounter circular reference errors, please file an issue with your specific use case.

Monaco Editor Issues

The package now uses @monaco-editor/react instead of the deprecated react-monaco-editor. No action needed - the upgrade is automatic.

Alternative Search Terms

If you're looking for this package, you might have searched for:

  • React image annotation
  • React annotation tool
  • Image labeling React
  • Computer vision annotation
  • React bounding box
  • ML training data tool
  • Object detection annotation
  • React image tagger
  • YOLO annotation tool
  • COCO dataset creator

Performance Tips

  • The library automatically handles memory optimization through lodash deep cloning
  • Large annotation datasets are efficiently managed through the improved state system
  • Consider using React.memo for custom components when integrating with the annotator

Changelog

Version 1.2.3

🖼️ Screenshot & Live Demo Added

New Features / Documentation Updates

  • Added Annotator Screenshot to showcase the latest UI and rotation tools
  • Added Live Demo Link powered by CodeSandbox for instant testing
  • Improved README structure for better onboarding and faster evaluation

Version 1.2.0

🔄 Bounding Box Rotation Feature

  • NEW: Rotatable bounding boxes: Click and drag the blue rotation handle to rotate bounding boxes
  • 15° snap increments: Precise rotation control with automatic snapping
  • Visual rotation handles: Intuitive blue circular handle positioned on the right side of selected boxes
  • Proper border rendering: White dotted borders and all UI elements rotate correctly with the box
  • Full integration: Rotation works with history/undo, video annotations, and state persistence
  • Export compatibility: Rotation angle stored as rotation property in annotation data

🎯 Technical Improvements

  • Enhanced SVG rendering: Proper rotation transforms for both fill and stroke elements
  • Improved handle positioning: All transform handles (resize + rotation) position correctly for rotated boxes
  • Mathematical precision: Uses trigonometric calculations for accurate handle positioning
  • State management: Full integration with existing action/reducer system

Version 1.1.0

🚀 Bundle Size Optimization

  • 24% smaller bundle size: Reduced from 1.7MB to 1.3MB
  • 38% smaller gzipped: Reduced from 425kB to 265kB
  • Terser minification: Enhanced compression with console/debugger removal
  • Better tree-shaking: Improved dead code elimination

📦 Dependency Management

  • Peer dependencies: Moved large dependencies (@mui/material, @emotion, lodash, moment) to peer dependencies
  • Reduced conflicts: Users can now use their own versions of Material-UI and Emotion
  • Smaller installation: Core package is now significantly smaller

🔧 Technical Improvements

  • Enhanced Vite config: Optimized build configuration for libraries
  • TypeScript fixes: Resolved useReducer typing issues
  • Better compatibility: Improved integration with different React project setups

⚠️ Breaking Changes

  • Peer dependencies required: Users must now install peer dependencies manually
  • Installation process: Now requires two-step installation (see Installation section)

Version 1.0.0

🚀 Performance Improvements

  • Replaced JSON serialization with lodash cloneDeep: Improved performance and reliability for deep object cloning throughout the application
  • Enhanced memory management: Better handling of circular references in state management and history operations
  • Optimized immutable operations: Reduced performance overhead in history, regions, and state operations
  • Safe prop handling: Implemented comprehensive deep cloning for all immutable props passed to components

🔧 Technical Updates

  • React 19 compatibility: Full support for React 19 with backward compatibility to React 18+
  • Dependency management: Proper peer dependency setup for React ecosystem compatibility
  • FontAwesome fixes: Resolved React 19 compatibility issues with FontAwesome icons by adding className props
  • Monaco Editor upgrade: Updated from react-monaco-editor to @monaco-editor/react for better React 19 support
  • Development environment: Fixed Vite dependency resolution for React/React-DOM in development mode
  • Build optimization: Improved library build configuration for npm publishing

🐛 Bug Fixes

  • Fixed ImmutableError in multiple components: Resolved circular reference errors in:
    • RegionSelectAndTransformBoxes (region handling)
    • HistorySidebarBox (history operations)
    • ClassSelectionMenu and other sidebar components
  • Resolved Monaco Editor errors: Fixed editorWillMount is not a function compatibility issues
  • Fixed deeply nested object errors: Prevented immutable construction errors from seamless-immutable
  • Improved error handling: Added try-catch blocks and defensive programming patterns
  • Type safety improvements: Enhanced TypeScript type safety throughout the codebase

📦 Package & Publishing

  • NPM ready: Configured for npm publication with proper package.json setup
  • Module exports: Added modern ES module exports with proper TypeScript definitions
  • Peer dependencies: Correctly configured React and React-DOM as peer dependencies
  • Build artifacts: Optimized dist folder structure for library consumption

Icons

Consult these icon repositories: