A lightweight bounding box annotation tool for image datasets with YOLO/COCO/Pascal VOC export
Project description
A lightweight bounding box annotation tool for image datasets. Built with React/TypeScript frontend and FastAPI backend. Export to YOLO, COCO, Pascal VOC, and more.
Features
- 🖼️ Multi-format support — PNG, JPEG, WebP, BMP
- 📁 Project management — Organize annotations by project
- 🏷️ Custom labels — Define your own class labels
- 🎨 Adaptive box colors — Auto contrast, label-based, or custom color modes
- ⌨️ Keyboard shortcuts — Fast annotation workflow
- 📤 Multiple export formats — YOLO, COCO, Pascal VOC, CreateML, CSV
- 🔄 Train/Val/Test split — Automatic dataset splitting for YOLO export
Installation
pip install bbannotate
Requirements
- Python 3.12+
- Node.js (only for frontend development)
Quick Start
# Start the annotation server
bbannotate start
# Opens http://127.0.0.1:8000 in your browser.
# By default the server runs detached, so you can close the terminal.
# Closing that browser session stops the detached server automatically.
Runtime Modes
- Default (
bbannotate start): Starts server in detached mode and links lifecycle to the opened browser session. - Development (
bbannotate start --reload): Runs in foreground with auto-reload. - No Browser (
bbannotate start --no-browser): Starts server without opening browser automatically.
CLI Options
bbannotate start [OPTIONS]
Options:
-h, --host TEXT Host to bind the server to [default: 127.0.0.1]
-p, --port INTEGER Port to bind the server to [default: 8000]
--no-browser Don't open browser automatically
-r, --reload Enable auto-reload for development
-d, --data-dir PATH Directory for storing data [default: ./data]
--projects-dir PATH Directory for storing projects [default: ./projects]
--help Show help and exit
Other Commands
bbannotate info # Show installation info
bbannotate status # Show runtime status (backend/frontend processes + ports)
bbannotate build-frontend # Build frontend assets (development)
Keyboard Shortcuts
| Key | Action |
|---|---|
D |
Draw mode |
S |
Select mode |
Space |
Pan mode |
← → |
Navigate images |
1-9 |
Select label by index |
Del / Backspace |
Delete annotation |
⌘Z / Ctrl+Z |
Undo last annotation |
Esc |
Deselect / Cancel |
Enter |
Mark image done |
Export Formats
| Format | Description |
|---|---|
| YOLO | ZIP with train/val/test split, data.yaml, normalized coordinates |
| COCO | COCO JSON format with categories, images, and annotations |
| Pascal VOC | XML files per image with absolute coordinates |
| CreateML | Apple CreateML JSON format |
| CSV | Simple CSV with image, label, and bbox columns |
Configuration
Environment Variables
| Variable | Description |
|---|---|
BBANNOTATE_DATA_DIR |
Override default data directory |
BBANNOTATE_PROJECTS_DIR |
Override default projects directory |
BBANNOTATE_UPLOAD_RATE_LIMIT |
Upload rate limit (default: 1000/minute) |
Development
Setup
git clone https://github.com/sebastianydemadsen/bbannotate.git
cd bbannotate
make install # Install with dev dependencies
make frontend-install # Install frontend dependencies
Development Commands
| Command | Description |
|---|---|
make run |
Start full application (backend + frontend) |
make backend-dev |
Start backend only with auto-reload |
make frontend-dev |
Start frontend dev server |
make stop |
Stop all servers |
make test |
Run tests |
make test-cov |
Run tests with coverage report |
make type-check |
Run pyright type checking |
make format |
Format code with ruff |
make check-all |
Run all checks (lint, type, test) |
make build |
Build package for distribution |
make clean |
Remove build artifacts |
Project Structure
src/ # Python package (FastAPI backend)
api/ # API routes
models/ # Pydantic models
services/ # Business logic
cli.py # CLI entry point
frontend/ # React/TypeScript frontend
src/
components/ # UI components
hooks/ # React hooks
tests/ # Python test suite
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
bbannotate-1.0.7-py3-none-any.whl
(434.3 kB
view details)
File details
Details for the file bbannotate-1.0.7-py3-none-any.whl.
File metadata
- Download URL: bbannotate-1.0.7-py3-none-any.whl
- Upload date:
- Size: 434.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
843f45842ffb871c36a0f4a253373d118b22f9f3ff5db1720ca883e6c126791b
|
|
| MD5 |
f8c181e0648b1e11fc34b292b6087310
|
|
| BLAKE2b-256 |
a913798222c5edc531d9f6e27e5e5e813ba5b67cef3af629cf1ad12b2a5aee8d
|