Skip to main content

Introduction

Cropwright takes you from raw images to a trained detector, without labeling one box at a time. Clusters and a vision-language model do the bulk labeling; you confirm at keyboard speed. Then export, train, compare and promote models in the same app, for any domain. It is the human-in-the-loop labeling frontend for OpenProcessor.

It is a pure frontend: no database of its own, no offline or mock mode. Every piece of data it shows — clusters, crops, classes, training runs — comes from a running OpenProcessor backend over one HTTP API prefix. Cropwright has nothing useful to display without that backend.

What it does​

Cropwright manages a high-volume labeling workflow over hundreds of thousands of image crops:

  • Cluster-based assisted labeling — crops the backend has grouped by visual similarity are triaged as a batch, not one at a time.
  • VLM-assisted suggestions — an optional vision-language model proposes a class per crop or cluster; a human confirms, corrects, or rejects.
  • A keyboard-first review queue — class letters, undo, discard and skip are single keystrokes, tuned for a labeling session that runs for hours.
  • Projects — isolated datasets and settings on one deployment, with combine, model sharing and a guarded delete.
  • Import and configuration — bring in labeled datasets, and edit the VLM prompt packs, region profiles, VLM endpoints and keyboard shortcuts in the app, with test-on-a-crop before you activate anything.
  • A full pipeline cockpit — ingest, cluster, review, manage classes, export a YOLO dataset, train, compare models, and promote — all from one app, in that order, in a loop.

Domain-agnostic by design​

Cropwright ships with no domain built in. What you're labeling — vehicles, manufacturing defects, aircraft tail numbers, or nothing with a sub-region at all — is defined entirely by the OpenProcessor backend's served region profile, plus, optionally, a small JSON config dropped in at deploy time. See Annotation profiles.

Requirements​

  • A reachable OpenProcessor backend (the data and model backend — a separate project).
  • Docker with Compose v2 (the supported deployment path), or Node 20+ for a source build.

There is no way to "try Cropwright" without a backend — there's no sample data or mock mode baked into the app itself. OpenProcessor's own sample-data tooling (make sample-coco, a small public COCO val2017 subset) is the fastest way to get something to label.

Where to go next​