A local-first, privacy-focused DICOM X-ray viewer that runs entirely in your browser. No server uploads, no cloud storage - your medical images stay on your device.
- Privacy-First: All processing happens locally. Files never leave your device.
- Offline Capable: Works without an internet connection (PWA)
- DICOM Support: Handles standard DICOM files including medical CDs
- Viewing Tools:
- Window/Level adjustment (brightness/contrast)
- Zoom and Pan
- Distance measurements (in mm when pixel spacing available)
- Image inversion
- PHI Protection: Patient information hidden by default
- Export: Save images as PNG without PHI
# Install dependencies
npm install
# Build and run (recommended)
npm run build && npm run preview
# Preview production build
npm run previewNote: Due to Vite's handling of Cornerstone.js WASM codecs, use
npm run preview(production build) for the best experience. The app runs at http://localhost:4173/
- Open the viewer in your browser (http://localhost:5173 in development)
- Load images by:
- Dragging and dropping DICOM files/folders
- Clicking "Open Files" or "Open Folder"
- Use tools from the toolbar:
W- Window/Level (adjust brightness/contrast by dragging)P- Pan (move the image)Z- ZoomM- Measure (draw distance lines)R- Reset viewI- Invert colorsF- Fit to window?- Help
- Insert the CD and open it in your file manager
- Copy the contents to a folder on your computer
- Use "Open Folder" in the viewer and select that folder
- Insert the CD
- Use "Open Folder" and navigate to the CD
- Select the DICOM folder (usually contains files without extensions)
- Transfer Syntaxes:
- Implicit VR Little Endian
- Explicit VR Little Endian
- JPEG Baseline/Lossless
- JPEG 2000
- JPEG-LS
- RLE Lossless
- React 18 + TypeScript
- Vite
- Cornerstone.js (medical imaging library)
- Tailwind CSS
- Zustand (state management)
- IndexedDB (local persistence)
- No network requests for image data
- No telemetry or analytics
- PHI (Protected Health Information) hidden by default
- Content Security Policy enforced
- Service worker caches app only, never image data
This project is licensed under the MIT License.