Skip to content

Overview

github-actions[bot] edited this page Oct 7, 2026 · 9 revisions

Labello

Labello icon

Labello is a browser-based image annotation system for bounding boxes and skeletons. It combines a Rust/egui WebAssembly client with an Axum API and stores images, annotations, reviews, and audit history on the filesystem.

Documentation · GitHub Wiki · Contributing · Issues

What it does

  • Annotate boxes and keypoints with autosave, undo/redo, personal shortcuts shared across datasets, prepared image queues, and account-scoped browser draft recovery.
  • Review each object and the full image. Reviewers can correct geometry or add missing objects in separate Objects and Overview queues. Review eligibility is enforced per object and image, with a recorded dataset-wide fallback.
  • Browse datasets without claiming work, inspect overlays, and return completed workflows to review with an audited reason.
  • Manage classes, workflows, instructions, roles, images, and assignment balance. Copy an existing dataset's schema when creating another dataset.
  • Import explicit YOLO/COCO ground-truth profiles into new datasets. Export complete detection or pose datasets with original images and documented round-trip guarantees.
  • Convert imported boxes into skeletons through guided migration, with recorded exclusions and linked boxes for newly discovered objects.
  • Track task completion, contributor activity, scores, streaks, and leaderboards for one dataset or all accessible datasets. Download annotation snapshots and retain replayable event history.

Run locally

Install Rustup, then run these commands from the checkout. The repository pins Rust 1.98.0, its components, and the WASM target.

rustup show
cargo install --locked trunk --version 0.21.14
cargo run --locked -p labello-server

The first server start creates labello.server.toml and listens on 127.0.0.1:8080. In another terminal:

cd apps/labello-wasm
trunk serve --locked --address 127.0.0.1 --port 8081

Open http://127.0.0.1:8081 and choose Continue as local admin. Create a dataset, configure its classes and workflows, add images, and start annotating. Local admin login is for loopback development only.

See getting started for the first dataset, login, connection setup, and troubleshooting. For a hosted installation, use the configuration, deployment, and operations guides. The API does not serve the browser build.

Documentation

Task Guide
Label and review images Annotation and review
Configure datasets and inspect results Dataset administration
Convert existing ground truth Import, guided migration, export
Understand work allocation and scores Assignment, scoring
Run and recover a server Configuration, operations, persistence
Change the implementation Architecture, API, verification

The documentation index covers the full suite. Current pages are the source for GitHub Wiki. Plans, feature drafts, the target product specification, and historical records are retained in docs/archive and excluded from wiki publication.

Development

The workspace separates domain policy, filesystem storage, client transport, HTTP handlers, shared UI, and executable apps. The standalone native inspector supports UI development; Chromium is required to verify browser behavior.

Run changed-path verification from the repository root:

./scripts/verify.sh changed origin/main

It selects documentation checks or the locked Rust baseline, plus the release browser build when applicable. Contributing describes the review workflow and verification defines additional checks. Build the browser distribution with trunk build --release --locked from apps/labello-wasm.

Overlapping bounding boxes of the same class are hidden within each image using an administrator-configurable IoU threshold, default 0.9. Their records remain in the dataset. See configuration for winner selection, migration behavior, and export preservation.

Current limitations

Labello is under active development. These boundaries matter when choosing it:

  • Browser startup requires WebAssembly SIMD support. Working previews also require createImageBitmap and OffscreenCanvas support.
  • Browser drafts are best-effort recovery. Offline annotation and conflict resolution are unavailable; there is no supported native desktop client.
  • Independent multi-annotator labeling is unavailable.
  • Prelabels support the documented static detection/pose ONNX tensor contract, including compatible exports without Ultralytics metadata, with model inspection, named outputs and explicit class mappings. Server inference tries CUDA/WebGPU when native providers are installed, with CPU fallback. Server generation requires Linux and an operator-managed model directory. Dataset-managed preparation covers boxes and poses; external prediction import is unavailable. Annotators cannot select or generate their own prelabels.
  • Tutorials render text only. Review has no swipe controls. Pen events have focused Chromium/WebKit coverage. After pen detection, fingers navigate without annotating; two-finger navigation can overlap pen editing. Browser detection begins at the first pen event, not hardware connection. However, iPadOS Safari/Firefox and physical stylus devices still need device validation. Named screen-reader/browser combinations have no verified support claim.
  • Import creates new datasets and accepts only the documented ground-truth profiles. It does not merge datasets, import segmentation or predictions, or fetch archives or remote sources.
  • Dataset configuration and keybindings use TOML. Schema version 3 is current; version 2 is the only supported legacy version.
  • Snapshots omit images, authentication, keybindings, and private job state. They have no native restore operation. Back up the complete data root.
  • One server process must own each data root. Assignment balance compares enabled tasks, with no separate class-level aggregation. Large-scale imports require capacity validation, and retained import cleanup is not scheduled.

See all current limitations for operational, browser, compatibility, and recovery details.

Clone this wiki locally