POC: bring viv-dicomweb-test work into SLIM and add basic bulk annotations support #381
POC: bring viv-dicomweb-test work into SLIM and add basic bulk annotations support #381igoroctaviano wants to merge 16 commits intomasterfrom
Conversation
|
|
Overall Grade |
Security Reliability Complexity Hygiene |
Code Review Summary
| Analyzer | Status | Updated (UTC) | Details |
|---|---|---|---|
| JavaScript | May 7, 2026 3:44p.m. | Review ↗ |
Important
AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.
|
@igoroctaviano it would be helpful to indicate somewhere (in the "info" panel perhaps?) whether given instance is using viv or not. I deployed the viewer with |
PR description outdated. Just use the viv route before /studies |
|



Summary
POC port of viv-dicomweb-test into SLIM: Viv + Deck.gl slide viewing on dedicated
/viv/...routes plus bulk simple annotations (polygons) wired through the same DICOMweb + DMV decode path as OpenLayers.What changed (vs
master)Verified against
feat/viv-loader↔masterin the Slim repo (18 files, ~4.3k insertions).Routing: New React Router paths that mirror existing case URLs but prefix
/viv:/viv/studies/:studyInstanceUID/*and the GCP Healthcare store variant.ParametrizedCaseViewerpassesisVivRouteand optionalvivSettingsfrom config when the pathname starts with/viv/.src/viv/module:dicomLoader.ts(DICOMweb tiling + DMV integration),VivSlideViewport.tsx,loadBulkAnnotationLayers.ts,vivDisplayDefaults.ts,README.md. Includes request abort/cancel handling and viewport work (incl. 8-bit SM tile positioning).UI integration:
CaseViewer.tsxswitches the slide viewport toVivSlideViewporton Viv routes, addsVivSettingsDrawerand an annotation rail wired toAnnotationGroupList, and adjusts study URLs so navigation stays under/viv/….Dependencies:
@deck.gl/*,@vivjs/layers,@vivjs/loaders,@luma.gl/*;dicomweb-clientraised to^0.11.2(plustypes/dicomweb-client). Overrides pin Deck versions;bun.lockupdated.Build:
craco.config.js— Babel transpilation fornode_modulesunder@deck.gl,@luma.gl,@math.gl,@probe.gl,@hms-dbmi/viv.DICOM web client hook:
DicomWebManager.applyToPrimaryDicomwebClientso Viv tiles can attach to the primary store’srequestHooks(same XHR pipeline asVolumeImageViewer).Config types:
AppConfig.d.ts— optionalvivSettings(selections,channelsVisible,contrastLimits,colors,initialViewState). There is nouseVivflag; Viv is strictly/viv/...URLs.ICC profiles:
iccProfilesPreference.tsand updates inSlideViewer.tsxso ICC enable/disable persists (fixes ICC behavior with the Viv path).Types:
types/dicom-microscopy-viewer/index.d.tsextended for DMV APIs the Viv loader uses.App.tsx: registers the Viv routes.Branch & local setup
feat/viv-loader.dicom-microscopy-viewercheckout with Viv-facing API changes until a matching release is published. From DMV (correct branch):bun link. From the Slim checkout:bun link dicom-microscopy-viewer, thenbun installif needed.bun unlink dicom-microscopy-viewerin Slim restores registry installs. Details:src/viv/README.md.How to test
Add this server URL:
https://proxy.imaging.datacommons.cancer.gov/current/viewer-only-no-downloads-see-tinyurl-dot-com-slash-3j3d9jyp/dicomWebOpen the Viv-prefixed study URL (same study/series as before,
/vivafter the origin):http://localhost:3000/viv/studies/2.25.106918873973188798943205935727506273925/series/1.3.6.1.4.1.5962.99.1.1088146757.1503397867.1637470719301.2.0(Optional) In
public/config/*.js, setvivSettingsfor channel/contrast/colors/initialViewStateon/viv/....Toggle annotation group visibility. Expect a long first pass while every polygon is built (~23 s in one run); after that, pan/zoom stays responsive and memory behaved better than earlier OpenLayers attempts for this POC.
Possible TODO's
src/viv/: split network/DICOMweb, decode (DMV), and Deck.gl layer build sodicomLoader/ viewport files do not become one mega-module; document slide space → Deck props for the next contributor.SlideViewer/VolumeImageViewer; avoid duplicated fetch/decode when DMV already exposes primitives.bun link, and note which DMV version this tracks./vivyet — prioritize or gate behind flags (see README limitations).vivSettingssnippet topublic/configexample docs (paths are/viv/..., not a boolean config switch).src/viv/README.mdlimitations withdicomLoader(8-/16-bit handling and mixed-bit-depth restriction per series).