Model proposals
A box or click becomes proposed masks across the scan. Each proposal records its model, and reviewers accept, correct or reject it. Team includes 250 scans run through a hosted model in each monthly billing period. Model runs are priced per completed scan/model result, never per person. These are launch prices. Paid checkout and usage charging are not active.
Dashed: a SAM 2.1 proposal from one box, run by Nitsor outside the product, on real industrial CT. Gruber et al., Fraunhofer EZRT, CC BY 4.0 (opens in a new tab), modified: windowed and cropped by Nitsor. Sources

What each frame shows
- Industrial CT, Fraunhofer Me 163 V5, axial slice 300.
- One box prompt, drawn by a person and recorded with the run.
- What the model sees: SAM 2.1 image-encoder features, first principal component (17% of variance), in its native 16 px blocks. A projection, not a layer.
- SAM 2.1 mask logits, -25 to +8. Logits are not probabilities.
- The proposal, dashed: logits above 0. The model's own score (predicted IoU) is 0.94.
- The published label for instance 138, in white, a person's annotation. IoU with the proposal 0.82, on the model's 1024 by 1024 grid.
SAM 2.1 run by Nitsor outside the product. Real industrial CT and its published label, Gruber et al., Fraunhofer EZRT, CC BY 4.0 (opens in a new tab), modified: windowed, cropped and outlined by Nitsor.
Mark one slice. Review the proposed masks.
Give SAM 2.1 (hiera large) a box or click on one slice. It proposes masks across up to 64 slices, kept separate from accepted labels until reviewed.
One proposal
- Model
- sam2.1-hiera-tiny, recorded run
- Prompt
- box on slice 300, annotator-3
- Window
- up to 64 slices
- Branch
- proposals/sam-2.1
- Calibrated
- no
- Status
- waiting for a person
Recorded on the model's own branch. The hosted model is SAM 2.1 hiera large.

SAM 2.1 proposals, dashed, on slices 300 to 363 from one box on slice 300, run by Nitsor outside the product; every seventh slice drawn. Real industrial CT, Gruber et al., Fraunhofer EZRT, CC BY 4.0 (opens in a new tab), modified: windowed, cropped and stacked by Nitsor.
Keep accepted and rejected proposals.
Accept a proposed mask and your decision joins its history. Reject it and the proposal remains visible, marked rejected.
Verdicts on job-0418
- Region 1
- accepted, annotator-3
- Region 2
- rejected, annotator-3
- Region 3
- rejected, annotator-3
- Commit
- 6b1d4e08, source sam-2.1
Rejected proposals stay in the record.

Dashed: SAM 2.1 from one box, run by Nitsor outside the product. White: four radiologists' published outlines. IoU with readers 1 to 4: 0.79, 0.80, 0.84, 0.84. Armato et al., "Data From LIDC-IDRI", TCIA, case LIDC-IDRI-0003, CC BY 3.0 (opens in a new tab), modified: windowed, cropped and outlined by Nitsor.
Check model output against expert decisions.
Each accepted, corrected or rejected proposal is linked to the model version that made it, so you can evaluate that version on your scans. When a scan's review is approved, every model label gets an outcome on record, and misses and wrong classes are counted, not hidden.
Outcome of each model label
- Kept as is
- unchanged when the review was approved
- Changed
- a person edited its shape
- Deleted
- discarded, removed after import, or never imported
- Wrong class
- a person gave it another class
- Missed
- a person drew a label the model did not propose
- Not scored
- the rules cannot measure it, and it is never counted as a pass
One outcome per model label, written when the scan's review is approved.

A detail of the Nitsor editor in a sample project: a proposal from our recorded SAM 2.1 run, waiting for a person to import or discard it, beside the published labels of a Fraunhofer V5 scan (Gruber et al., CC BY 4.0 (opens in a new tab), modified: loaded into the editor). No choice was made. The editor is the product's own (nitsor-app 4a10817da, on main), run against its local test backend with the published labels and our recorded run loaded as sample data.
Keep acceptance with your reviewers.
A proposal becomes a label when a person accepts it. The review decision is recorded separately from the model run that produced the proposal.
In the editor
- Row
- Instance 138, Proposed, slices 1 to 64
- Model
- sam-2.1@sam2.1-hiera-tiny, uncalibrated
- Choices
- Import or Discard
As the editor in the screenshot shows the proposal, from a recorded run on hiera-tiny. The hosted model is hiera large.
SAM 2.1 proposal

Published mask, as the correction

A lumbar spine MRI, SPIDER case 1_t2, one T2 sagittal slice. Dashed: SAM 2.1's proposal for one vertebra, from a run recorded by Nitsor with one box derived from the label. White: the published mask, a model's initial segmentation "reviewed and manually corrected" by a medical trainee supervised by experts (van der Graaf et al. 2024); here it stands in for a reviewer's correction. van der Graaf et al., Radboud University Medical Center, CC BY 4.0 (opens in a new tab), modified: windowed, cropped and outlined by Nitsor. Sources
A person corrects the proposal.
A reviewer can correct a proposal instead of accepting it, painting and erasing on the 3D mask across slices, with undo. The corrected label is saved under the reviewer's name, and the model's version stays in the record. A dataset version can pin the corrected labels for your next training run.
The correction
- Model's own score
- predicted IoU 0.85
- IoU with the correction
- 0.61
- Removed
- 5,784 px
- Added
- 1,397 px
- Review state
- corrected, not accepted
Measured on the model's input grid, from the recorded run. The published mask stands in for a reviewer's correction.
A model run in Executions
- Status
- for example queued, running, completed or capped
- Ended
- a short note on the outcome, with any recorded stop or cap reason
- GPU time
- the run's own GPU seconds, marked so far while it runs
- Model
- the model, its version and the branch its proposals went to
- Cap
- no new work starts once the run reaches its GPU-second limit
- Long run
- a run estimated at more than five minutes of GPU time waits for someone with operate access
Every model run is recorded and capped.
Every model run, job and task has its own record in Executions, which opens from the sidebar, the account home and each project. A run's record has a timeline. Each run shows its status and GPU time, in the app and through the API. GPU time is not a customer billing unit.
A hosted model, as Nitsor records it
- Name
- sam-2.1, hosted model
- Role
- contribute at most, never admin
- Image
- pinned by digest, so the same image runs every time
- Contract
- takes points or a box; reports its own score, uncalibrated
A model cannot review human work
- Asked by
- sam-2.1, hosted model
- Action
- accept a label annotator-3 drew
- Result
- deny
- Code
- workflow_
review_ machine_ judging_ person
The code is the product's own.
Models get a name and a role, like people.
A hosted model works under its own name, in a role that limits what it can do. An agent credential carries a role too, capped below admin. Every decision records who or what made it.
Agents work here too.
Agents and scripts call the HTTP API with a scoped, expiring agent credential from the hosted app. The Python SDK and an MCP server for agents are on the way.
Show us what you inspect.
Start with a public CT or MRI scan. See how a model suggestion becomes a reviewed label and a fixed training dataset.
