Label scans where they already live.

Nitsor registers scans in your S3-compatible storage by location. The browser reads viewed slices from it through short-lived signed links, and in hosted deployments model jobs use temporary copies.

A real chest CT series as its files: 140 DICOM Part 10 files, 73.7 MB, every sixth slice drawn. Armato et al., "Data From LIDC-IDRI", TCIA, case LIDC-IDRI-0003, CC BY 3.0 (opens in a new tab), modified: windowed and stacked by Nitsor. Sources

Axial slice 192 of 512 of a real industrial CT volume of an airframe section, drawn from its raw 16-bit samples.

Bytes one view reads

1 572 864

of 268 435 456, which is 0.59 per cent

Each request is one slice, answered with 206 Partial Content.

  1. Range: bytes=99614720-100139007524 288 bytes
  2. Range: bytes=100663296-101187583524 288 bytes
  3. Range: bytes=101711872-102236159524 288 bytes

slice 0the whole objectslice 511

Real scan

Real industrial CT, Gruber et al., Fraunhofer EZRT, CC BY 4.0 (opens in a new tab), modified: slices windowed for display by Nitsor.

Read slices by byte range.

A VGStudio volume is read one slice at a time, each slice as its own byte range. This public scan's first view reads three of them, about 0.6 per cent of the file, and the reader below shows what each view requests. The editor goes on to read every slice.

Check your scan format.

DICOM Part 10 (uncompressed) and VGStudio .vgi/.vol open in the viewer and editor. The table separates viewing from registration.

Registration, viewing and editing by format
FormatWhat it isRegistrationViewing and editing
DICOM Part 10 (uncompressed)What medical scanners write, and many industrial ones.by reference, with geometry, slice-order and duplicate checksviewer and editor
VGStudio .vgi/.volVolume Graphics, common on industrial CT benches.by referenceviewer and editor
MRDRaw MR acquisition data.as raw acquisition datadoes not open
TIFF projection stacksCT projections before reconstruction.as raw acquisition datadoes not open
NSI legacy, NSI HRVOL, REK, FLT, CB, SBMIndustrial CT vendor formats.records the format name onlydoes not open
Any other fileAnything registration does not recognise.refused with a named codedoes not open

OpensRegistersNot supported

Know who can access each scan.

Check storage access, temporary processing and project permissions before connecting data.

A read refused

Object
scans/casting-0142/volume.vgi
Status
409
Code
STORAGE_OBJECT_CHANGED_DURING_READ
Next
retry once the writes finish

The code is the product's own.

What Nitsor holds
File locations, checksums, scan geometry, and the labels with their history. Validating, converting and model jobs make temporary copies while they run.
How Nitsor reaches the bucket
Owners and admins submit keys through the dashboard or a personal token; Nitsor encrypts them. Agents cannot add keys. A connection binds a bucket and prefix, starts read-only and unlocks masks, stored previews and model outputs when you grant write access. Uploads also need an owner or admin to enable Accept uploads after the storage checks pass.
A scan that changed gets caught
Registration records each file's content identity, and a read that finds it changed is refused with an error that says the scan was replaced after registration.
Named accounts, clear roles
Community signs in through your own OIDC identity provider. Team signs in with email and password, Google or Microsoft. Enterprise uses single sign-on through your SAML or OIDC identity provider. Project roles control who can read, contribute, operate workflows or administer access.
Give external reviewers read-only access
Give reviewers access to the relevant project without adding a per-person charge.
The handoff is a dataset version
Fixed members and digests, read by ID through the API.

The API

Contract
/api/v1/openapi.json
Capabilities
/api/v1/capabilities
Requests
list, read, cancel, per-item reports
Decisions
GET /api/v1/decisions

The contract and the capabilities are served without an account.

Use the same dataset in your pipeline.

Register scans and read dataset versions through the HTTP API, with an agent credential issued in the hosted app.

The Integrations page of a Nitsor team: a token named Annotation agent is created with two permissions, the token is shown once behind a black bar, and the list shows it active with its permissions and its expiry a year out.
What each frame shows
  1. Name the token and choose what it can do
  2. The token is shown once
  3. The new token is listed with its permissions
  4. Each token lists its status and expiry

Give each agent its own credential.

Agents and scripts call the HTTP API with an agent credential that an owner or admin issues with chosen scopes and an expiry of at most 365 days. The Python SDK and an MCP server for agents are on the way.

An agent credential

Issued by
an owner or admin
Scopes
chosen when it is issued
Expires
within 365 days
Token
shown once, stored as a hash
Project authority
operate at most: commits and merges, never grants access or deletes a project

Agent credentials are issued in the hosted app, on Team and Enterprise.

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.