dicom-series-to-volume — Claude Code skill: DICOM to NIfTI
Turns one CT DICOM series folder into an HU NIfTI volume plus a JSON summary with the affine. Handy before feeding scans to a segmentation model.
npx skills add NVIDIA/skills --skill dicom-series-to-volume -a claude-codeWhat dicom-series-to-volume does
The skill reads a single DICOM series, sorts slices by ImagePositionPatient, applies RescaleSlope and RescaleIntercept, and builds an affine from the orientation and spacing tags. You get a .nii.gz file and a JSON summary with n_slices, series_instance_uid, output.shape, output.spacing, output.axcodes, output.affine, hu_range and conversion time.
Everything runs through one script, scripts/series_to_volume.py, declared in skill_manifest.yaml. The call is python scripts/series_to_volume.py PATH_TO_DICOM_DIR --output PATH_TO_OUT.nii.gz. If your host agent exposes run_script, use that instead. Keep outputs under a run directory you provide.
You need Python with the packages listed in runtime.side_effects.pip_packages, and NiBabel 5.4 or newer so extreme-oblique axes stay labeled consistently across reorientation. Multi-series input is rejected at preflight; multi-frame DICOM and compressed transfer syntaxes (JPEG, JPEG2000, RLE) are out of scope. There is no voxel reorientation — the affine comes from the headers, so a downstream gate such as expected_axcodes should assert orientation before the volume reaches a segmentation model. For clinical work use a vetted converter like dcm2niix.
What it helps with
- convert one CT DICOM series into an HU NIfTI volume
- get the affine and voxel spacing in machine-readable JSON
- sort slices by patient position before building the volume
- check conversion quality with the paired
dicom_volume_quality_v1verifier - catch unsupported input at preflight instead of mid-pipeline
Example prompts for the agent
- Convert this CT series folder to an HU NIfTI volume and show me the JSON summary
- Run
scripts/series_to_volume.pyonPATH_TO_DICOM_DIRwith output toruns/ct_volume.nii.gz - Verify the run with the paired
dicom_volume_quality_v1verifier
How to install dicom-series-to-volume
1Skills CLI (Vercel)
npx skills add NVIDIA/skills --skill dicom-series-to-volume -a claude-code2Manually: put the files in place
~/.claude/skills/dicom-series-to-volume/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/dicom-series-to-volume/
1Skills CLI (Vercel)
npx skills add NVIDIA/skills --skill dicom-series-to-volume -a codex2Manually: put the files in place
.agents/skills/dicom-series-to-volume/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add NVIDIA/skills --skill dicom-series-to-volume -a cursor2Manually: put the files in place
.cursor/skills/dicom-series-to-volume/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install NVIDIA/skills dicom-series-to-volume2Manually: put the files in place
.github/skills/dicom-series-to-volume/SKILL.md1Skills CLI (Vercel)
npx skills add NVIDIA/skills --skill dicom-series-to-volume -a gemini-cli2Platform CLI
gemini skills install https://github.com/NVIDIA/skills --path skills/dicom-series-to-volumeManually: put the files in place
.devin/skills/dicom-series-to-volume/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add NVIDIA/skills --skill dicom-series-to-volume -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about dicom-series-to-volume
How do I install dicom-series-to-volume in Claude?
Run npx skills add NVIDIA/skills --skill dicom-series-to-volume -a claude-code. The skill lands at ~/.claude/skills/dicom-series-to-volume/SKILL.md.
What does dicom-series-to-volume do?
It reads one CT DICOM series, sorts the slices, applies RescaleSlope and RescaleIntercept, and writes an HU volume as .nii.gz along with a JSON report on the affine.
Can I pass multi-frame DICOM or several series at once?
No. Multi-series input is rejected at preflight, and files with NumberOfFrames greater than 1 are not supported.
Source text
SKILL.md · Apache-2.0
---
name: dicom-series-to-volume
description: Used for converting one CT DICOM series folder to a HU NIfTI volume with affine evidence. Not for multi-frame DICOM or clinical use.
license: Apache-2.0
allowed-tools: Bash
metadata:
author: 'NVIDIA MedTech Team'
tags:
- MedTech
- DICOM
- NIfTI
---
# dicom_series_to_volume
## Purpose
- Used for converting one CT DICOM series folder to a HU NIfTI volume with affine evidence. Not for multi-frame DICOM or clinical use.
- Use the wrapper exactly as documented; do not replace the upstream entrypoint with a handwritten implementation.
- Manifest I/O: inputs are `dicom_dir`; outputs are `nifti_volume` and `result_json`.
## Instructions
- Read `skill_manifest.yaml` before changing arguments, side effects, or validation gates.
- Run `scripts/series_to_volume.py` through the documented command below; keep outputs under a caller-provided run directory.
- If a host agent exposes `run_script`, use `run_script("scripts/series_to_volume.py", args=[...])`; otherwise run the Bash/Python command shown below.
- Check the emitted JSON and the paired `dicom_volume_quality_v1` verifier before treating the run as evidence.
## Available Scripts
| Script | Purpose | Arguments |
|---|---|---|
| `scripts/series_to_volume.py` | Primary entrypoint declared by skill_manifest.yaml. | `PATH_TO_DICOM_DIR [--output OUT.nii.gz]` |
## Prerequisites
- Runtime requirements: Python packages listed in `runtime.side_effects.pip_packages`.
- NiBabel 5.4 or newer is required so extreme-oblique axes remain labeled consistently across reorientation.
- Run commands from the repository root unless an existing section below says otherwise.
## Limitations
- Single-series only; multi-series input is rejected at preflight.
- Multi-frame DICOM (NumberOfFrames > 1 per file) not supported.
- Compressed transfer syntaxes (JPEG / JPEG2000 / RLE) not supported.
- No voxel reorientation. The affine is derived from DICOM headers and represented in NIfTI/RAS coordinates; a downstream gate (e.g. expected_axcodes) is expected to assert orientation before this volume is fed to a segmentation model.
- Not for clinical deployment, autonomous diagnosis, regulatory submission, production inference (use a vetted converter such as dcm2niix for that).
## Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| Missing dependency or import error | Runtime package drift from `skill_manifest.yaml`. | Install the packages declared in the manifest or use the documented setup command. |
| Empty or schema-invalid output | Wrong input path, unsupported modality, or upstream failure. | Re-run with a known fixture and inspect the wrapper JSON plus stderr. |
| Validation gate failure | Output violated a declared engineering invariant. | Keep the failed evidence pack and use the gate message to repair inputs or wrapper code. |
Reads one DICOM series, sorts slices by `ImagePositionPatient`, applies
`RescaleSlope` and `RescaleIntercept`, builds an affine from orientation and
spacing tags, and writes a `.nii.gz` plus JSON summary.
```bash
python scripts/series_to_volume.py PATH_TO_DICOM_DIR --output PATH_TO_OUT.nii.gz
```
For a trusted run with the paired verifier:
```bash
python -m eval_engine.run_trusted skills/dicom-series-to-volume \
--fixture PATH_TO_DICOM_DIR \
--out runs/dicom_series_to_volume_trusted
```
Key output fields: `n_slices`, `series_instance_uid`, `output.path`,
`output.shape`, `output.spacing`, `output.axcodes`, `output.affine`,
`hu_range`, and `runtime.conversion_seconds`.
Scope limits: single-series CT only; no multi-frame DICOM, compressed transfer
syntax handling, RT structure sets, auto-reorientation, or clinical use.
© NVIDIA MedTech Team · Apache-2.0 · NVIDIA/skills