Skip to content

Result manifest

Every segmentation result ZIP contains rtsegmentator_manifest.json at its root. Software that consumes RTsegmentator output should read this file instead of inferring meaning from file names. GET /api/v1/jobs/{id}/manifest returns the same document for a completed job.

The structure is published as a JSON Schema in schemas/result-manifest-1.0.schema.json (schema identifier rtsegmentator.result-manifest, version 1.0). Additions within major version 1 are backward compatible; a change that removes or redefines a field requires version 2.

Fields

Field Content
schema, schema_version rtsegmentator.result-manifest and 1.0.
generator {"name": "RTsegmentator", "version": "1.0.0"}
created_utc When the package was written.
job Job ID, creation time, batch ID and position, requested models and post-processing.
source_series SeriesInstanceUID, modality, slice count, rows, columns and the CBCT flag of the segmented series. Descriptions and dates are omitted.
input_roles For multi-sequence MRI jobs: the series used for each role and how it was selected.
models One entry per requested model (below).
files Every other member of the ZIP with its size in bytes and sha256.
notes Conversion and post-processing notes, for example labels a model predicts but the exporter omits.

Each models entry contains:

Field Content
name Portal task name.
outcome rtstruct (an RTSTRUCT was written), no_structures_found (the model ran and found nothing in this series), report (the task produces a document) or no_rtstruct.
rtstruct For rtstruct: the member path, SOPInstanceUID, the exact ROI names in RTSTRUCT order, the referenced Frame of Reference UIDs and the referenced SeriesInstanceUIDs.
structure_kind, catalog_structures The task's label contract from catalog/structures.json. For a fixed task, a catalog label missing from roi_names was not written: the model did not find it, or the exporter omitted it, in which case notes names it.
sidecars Files that share the <task>_RTSTRUCT.dcm. prefix: orientation evidence, lesion tables, provenance records and spatial maps.
license, code_license, weights_license, noncommercial, licensed, limitations, reference, description The catalog's descriptive text for the model, copied when present.
requested false for an RTSTRUCT whose task was not in the job's model list. Absent otherwise.

Example

{
  "schema": "rtsegmentator.result-manifest",
  "schema_version": "1.0",
  "generator": {"name": "RTsegmentator", "version": "1.0.0"},
  "created_utc": "2026-10-25T10:15:02Z",
  "job": {"id": "20261025-101203-...-1a2b3c4d", "created_utc": "2026-10-25T10:12:03Z",
          "batch_id": "batch-20261025-101203-...", "batch_index": 1, "batch_size": 1,
          "models": ["total", "lung_nodules"], "postprocess": []},
  "source_series": {"series_instance_uid": "1.2.826.0.1....", "modality": "CT",
                    "slices": 142, "rows": 512, "columns": 512, "cbct": false},
  "models": [
    {"name": "total", "structure_kind": "fixed", "catalog_structures": ["spleen", "kidney_right", "..."],
     "outcome": "rtstruct",
     "rtstruct": {"path": "total_RTSTRUCT.dcm", "sop_instance_uid": "2.25....",
                  "roi_names": ["spleen", "kidney_right", "liver", "..."], "roi_count": 61,
                  "frame_of_reference_uids": ["1.2.826.0.1...."],
                  "referenced_series_instance_uids": ["1.2.826.0.1...."]},
     "sidecars": ["total_RTSTRUCT.dcm.orientation.json"],
     "reference": "https://github.com/wasserth/TotalSegmentator"},
    {"name": "lung_nodules", "structure_kind": "fixed", "catalog_structures": ["lung", "lung_nodules"],
     "outcome": "no_structures_found"}
  ],
  "files": [
    {"path": "NO_STRUCTURES_FOUND.txt", "size": 112, "sha256": "..."},
    {"path": "total_RTSTRUCT.dcm", "size": 4183022, "sha256": "..."},
    {"path": "total_RTSTRUCT.dcm.orientation.json", "size": 1204, "sha256": "..."}
  ],
  "notes": []
}

Verifying a package

python rtseg_client.py verify result.zip

Verification fails for a missing manifest, a missing or altered file, an unlisted file, an unsafe member name or an unsupported schema version. RTpipeline runs the same check, and additionally refuses an RTSTRUCT that does not reference the course's planning CT series or whose ROI names differ from the manifest.

The manifest identifies DICOM series by UID. RTSTRUCT files themselves carry the patient identifiers of their source images, so treat result packages as medical data.