Medical CT-Scan 3D Printing Web Application
Capstone project for BS in Computer Science, University of Maine
Web-app is now hosted using Vercel To access the web-app with no install follow the below link:
https://ana-to-print.vercel.app/
- Clone the repository
git clone
cd AnaToPrint- Install dependencies
npm install- Start development server
npm run dev- Open browser to http://localhost:5173
cd webapp
npx vitest run
npx vitest run --coverage# Install browsers (first time only)
npx playwright install --with-deps
# Run on all browsers
npm run test:e2e- Frontend: React + TypeScript
- Build Tool: Vite
- 3D Visualization: VTK.js
- DICOM Processing: ITK.WASM + jszip
- Testing: End-to-End Testing - Playwright + Unit & Component Testing - Vitest
docs/- Project documentation (proposal, SRS)webapp/- React frontend applicationtests/- End-to-end tests
- Upload medical CT scans (DICOM format)
- View 3D reconstructed models
- Segment anatomical structures (bone, skin, muscle)
- Export STL files for 3D printing
- Export G-code for printer-specific tissue characteristics
- All processing done locally (no server uploads)
- Israk Arafat
- Gregory Michaud
- Cooper Stepenkiw
- Bryan Sturdivant
- Ethan Wyman
University of Maine - Laboratory for Convergent Science
This capstone project is a client-side web application that takes a medical CT scan (in DICOM format) and turns it into files ready for 3D printing. Specifically, it can produce:
- Polygonal .stl model of anatomy (e.g., skull/bone) suitable for 3D printing or further processing
- .gcode file that, when printed, mimics the X-ray attenuation properties (density/opacity) of the original tissue
All processing happens in the user’s web browser on their own machine: no servers, no cloud, no uploads. This is to protect medical privacy and make the tool easy to run on any common desktop platform.
- Accept a DICOM file or folder of CT slices from the local machine
- Validate and parse into a 3D voxel volume with associated metadata (spacing, orientation, etc.)
- Choose between bone, skin, or muscle
- Apply appropriate Hounsfield Unit thresholds/presets to segment the chosen tissue
- Render an interactive 3D preview in the browser (rotate, zoom, inspect)
- Allow threshold tweaks/view adjustments before export
- Export a polygon mesh as .stl using a Marching Cubes–based surface extraction
- Export 3D-printer instructions as .gcode that encode geometry and tissue-mimicking properties
- Let the user pick the file name and local download location
- Run fully on the client (offline after initial load)
- Work across Chrome/Firefox/Safari and major OSes
- Include an automated test suite (e.g., Selenium/Playwright)
- Launch app in browser (no install, just static web assets)
- Upload CT scan (DICOM file or series)
- Choose tissue type: bone/skin/muscle
- Preview and adjust:
- See a 3D rendering of the segmented anatomy
- Adjust thresholds/modes until satisfied
- Export:
- Choose output format: .stl or .gcode
- App generates the file and triggers a browser download
- Use externally:
- .stl → slicer → standard 3D printer
- .gcode → printer or slicer, for density-mimicking prints