Skip to content

MarvinSchwaibold/mri-grid-viewer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MRI Grid Viewer

A local-first interface for browsing MRI series on the web and iOS. It provides a responsive study grid, full-screen image viewing, search, filters, annotations, and saved frames.

The viewer runs entirely on-device. It has no accounts, analytics, backend, or runtime network dependency.

Warning

This is an interface prototype—not a medical device or diagnostic tool. The repository does not include a DICOM archive or raw patient dataset.

Screenshots

Series overview

MRI series grid with filters and search

Drawing annotations

MRI viewer with a freehand annotation

Target annotations

MRI viewer with target annotations

The screenshots were expressly selected and supplied by the repository owner. They are the only clinical imagery included here and are covered by a separate screenshot notice.

Features

  • Responsive MRI series grid
  • Anatomy and orientation filters
  • Search across names, tags, protocols, and metadata
  • Full-screen frame viewer with swipe, zoom, and scrub controls
  • Freehand drawing, target markers, comments, and local bookmarks
  • SwiftUI iOS wrapper using WKWebView
  • Offline, local-only runtime

Repository structure

viewer/             Web viewer source and empty sample manifest
ios-app/            SwiftUI wrapper with a bundled copy of the viewer
docs/screenshots/   Owner-approved documentation screenshots

Run the web viewer

Requirements: Python 3 and a modern browser.

python3 -m http.server 5177 --directory viewer

Open http://localhost:5177.

No study is bundled, so the default archive is empty. Run the search smoke test with:

node viewer/scripts/check_search.js

Run the iOS app

Requirements: Xcode 16 or newer and an iOS 17+ simulator or device.

  1. Open ios-app/MRIGridViewer.xcodeproj.
  2. Select the MRIGridViewer target.
  3. Choose your own development team and bundle identifier for device builds.
  4. Build and run.

After editing the web viewer, synchronize the iOS bundle:

python3 viewer/scripts/sync_web_bundle.py

Use a private local DICOM archive

Install the optional generator dependencies:

python3 -m pip install numpy pillow pydicom

Generate local assets from a directory outside the repository:

MRI_DICOM_SOURCE=/path/to/private/dicom python3 viewer/scripts/generate_assets.py

The generator writes to the ignored viewer/data/ directory. To load that output locally, change the manifest script in viewer/index.html from sample/manifest.js to data/manifest.js.

Never commit the generated directory. DICOM metadata removal alone does not guarantee anonymity: medical pixels can contain recognizable anatomy or burned-in identifiers. Review SECURITY.md before working with sensitive data.

Privacy safeguards

  • No DICOM files or machine-readable patient records are committed.
  • Private inputs and generated output directories are ignored.
  • Signing files, build products, and Xcode user data are ignored.
  • The three documentation screenshots are the only intentionally included clinical images.

Rights and usage

Copyright © 2026. All rights reserved.

The source is public for viewing and evaluation. Copying, modification, redistribution, deployment, commercial use, and derivative works require prior written permission. See LICENSE for the complete notice.

About

Local-first MRI series grid viewer with a SwiftUI iOS wrapper

Resources

License

Security policy

Stars

110 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors