One DICOM series in. Read for real by the browser, then preflighted, cleared to leave, reconstructed, or catalogued.
Drop the .dcm files, or paste a dcmdump, a gdcmdump or a
pydicom print(ds). A real DICOM Part 10 reader runs here, free and offline: it reads
the file meta group and the dataset in implicit or explicit VR, groups the instances into series,
crosses the direction cosines in (0020,0037) to get the slice normal, projects every
(0020,0032) onto it, and tells you the spacing the positions actually show —
with the gaps, the duplicates and the orientation drift. It never reads a byte of pixel data.
Then pick a lane.
The CT example ships a saved model run for all four lanes, so you can see the whole thing — the preflight, the de-identification plan, the volume plan and the manifest design — without signing in and without spending a credit.
DICOM Desk reads headers. It is not a de-identifier, it never rewrites a file, and its confidentiality-profile action codes are a transcription of one published baseline rather than legal advice. Do not paste data you are not authorised to handle.
Preflight the series
Can this series be used as it stands.
Questions
Do my files or my patient's details leave the browser?
The files never do. Dropped .dcm files are read with FileReader in
your own tab, parsed there, and turned into a header dump; the pixel data is never even
decoded, because the reader stops at (7FE0,0010). Parsing, the series grouping,
the geometry, the identifier audit and all four exports are free, offline and need no account.
When you run an AI lane, what is sent is the header text in the box plus the facts the browser
measured — and the values of identifying tags are deliberately stripped out of
those facts. The model is told that PatientName is present, what its VR is and how
many characters it holds, never what it says.
Does it really parse DICOM, or just search the text for tags?
It parses it. A dropped file goes through a DICOM Part 10 reader written for this app:
128-byte preamble, DICM magic, the file meta group read as Explicit VR Little
Endian no matter what (0002,0010) then declares the dataset to be, then the
dataset in implicit VR, explicit VR little-endian or explicit VR big-endian. The
32-bit-length VRs get their two reserved bytes. Undefined lengths run to their delimiter.
Sequences are entered to a bounded depth, so a PersonName nested inside a content
sequence is still found. A file with no preamble is recognised as a raw dataset rather than
rejected, and a deflated dataset is reported as unreadable rather than silently returned
empty.
Why does it disagree with SliceThickness?
Because SliceThickness and SpacingBetweenSlices are claims about the
acquisition, and the positions in (0020,0032) are the measurement. The app takes
the two direction cosines in (0020,0037), crosses them to get the slice normal,
and projects every slice's position onto it. The differences between consecutive projections
are the spacing — and where they read 2.5, 2.5, 5.0, 2.5 there is a slice missing,
whatever the header field says. That is why a gap is reported as a gap rather than as a header
value you could have read yourself.
What are the four lanes?
Preflight asks whether the series can be used as it stands, across eight
areas: object type, transfer syntax, series separation, geometry, instance completeness,
intensity calibration, acquisition consistency and identifiers. De-identify
produces a tag-by-tag plan against the PS3.15 profile for the intent you picked, with the
residual risks and a pydicom script that writes to a separate directory and maps UIDs
consistently. Volume produces the reconstruction plan: what to sort on and
why not InstanceNumber, where every geometry number comes from, how the affine is
built, and what breaks if it is done naively. Manifest designs the research
dataset's columns, their units, the derived fields, the quality columns and the CSV header.
All four run over the same header, and each result offers the next lane as a button.
How is the AI pass kept honest?
The browser measures first and sends its facts into the run: the series grouping, every geometry number, the identifier inventory and every flag it raised. The model must return one reconciliation entry per critical and high flag, so a defect it ignored is displayed as unaccounted for rather than quietly dropped. Every tag, series and instance name it cites is checked against the header you pasted, and one that does not exist is shown, marked, rather than trusted. Every DICOM tag in the script it returns is checked the same way. On the de-identification lane, any identifying tag the browser found that the plan does not mention is listed as a hole in the plan.
Is this a de-identifier?
No, and deliberately not. DICOM Desk never rewrites a file. It reads headers, tells you what is in them, and produces a plan and a script for you to run and review yourself. The PS3.15 Annex E action codes it uses are a transcription of one published baseline profile — not legal advice, not a compliance certificate, and not a substitute for your study's own data-use agreement. Nothing here can find an identifier burned into the pixels, either; the app tells you when that risk is unresolved rather than pretending to have checked.
What does a run cost, and what if my balance is low?
A worst-case amount is reserved before you run and only what the run actually uses is charged. The estimate is checked against your balance before the button enables: signed out, it says signing in comes first; under the model's minimum, it names the exact shortfall; and a reply cut short by a low balance says so rather than presenting itself as complete. The whole browser side is free and needs no account at all.