* feat: Update to use pnpm (#6031) [simulated squash-merge]
* feat: load DICOM SEG images via imageLoader
* feat: load DICOM SEG images via imageLoader
* PR review fixes
* Test fragment of compressed multiframes
* fix: Removed dependencies incorrectly
* Update frame as a targetted change to avoid stripping remaining params
* lock
* Update test to agree with the missing representation branch
* test(contour): contour color change coverage (#6042)
* test(contour): contour interactions delete segment (#6069)
---------
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
* chore(version): Update package versions to 3.13.0-beta.98 [skip ci]
* feat(testing): OHIF Test Agent Skills (#5993)
* chore(version): Update package versions to 3.13.0-beta.99 [skip ci]
* test(contour): Add the ContourSegmentToggleLock.spec.ts test file to test contour locking (#6072)
* chore(version): Update package versions to 3.13.0-beta.100 [skip ci]
* chore(testing): Flock lock for playwright tests; Pin node version for OHIF; add more workers (#6099)
* update Cypress apt deps for Ubuntu Noble (drop libgconf-2-4, libasound2→libasound2t64)
* chore(version): Update package versions to 3.13.0-beta.101 [skip ci]
* Debug fixes
* perf(seg): pass explicit frame decode concurrency (16) to SEG loader
Pass an explicit concurrency value (SEG_FRAME_DECODE_CONCURRENCY = 16) into
createFromDicomSegImageId rather than relying on the adapter default, so the
SEG frame fetch/decode parallelism is set at the call site and is ready to
become configurable.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs(behaviours): add behaviours section + multiframe Part 10 prefetch proposal
Start a "Behaviours" docs section for documenting how the system and UI behave
end-to-end (observed behaviours, design proposals, and failure modes), with an
index README and a Docusaurus category.
First entry is the proposal for loading a multiframe SEG as a single Part 10
instance: prefetch the whole instance (gated by loadMultiframeAsPart10RaceTimeMs),
parse it with dcmjs (handling multipart/related vs raw DICOM), and register the
per-frame compressed pixels into the Cornerstone3D core image cache (the single
uniform frame registry) so the per-frame load path is served locally while the
standard decode path is unchanged. Best-effort: falls back to per-frame fetches
on any failure.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Pre-cache the image data using a full part10 file for performance
* Add customizations to specify type of segmentation save
* Add clearcache of the cacheData
* Bump @cornerstonejs/* pins 5.1.3 -> 5.4.10 to match libs/@cornerstonejs base
libs/@cornerstonejs (fix/use-imageLoader-for-seg) is based on the released
cs3d 5.4.10 (merge-base with origin/main is the 5.4.10 version bump), so pin
OHIF to that release. The local branch changes still reach the app via the
cs3d:link symlinks; these pins keep the lockfile/npm fallback aligned.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Fix seg OOM
* fix: file meta garbage element, bogus NumberOfFrames, unguarded source-map-loader
- dicomWriter: drop the naturalized meta.TransferSyntaxUID assignment that
dcmjs wrote as a garbage (0000,0000) element into every saved file's meta
group (download / clipboard / local wadouri blob / local store); keep the
hex 00020010 assignment, which is required for string-form _meta fallbacks.
- registerNaturalizedDatasetForLocalWadouri: keep the computed frame count
local so single-frame IODs (SR, RTSTRUCT) no longer gain a bogus
NumberOfFrames element in their serialized form.
- rsbuild.config: resolve source-map-loader opportunistically (it is not a
project dependency; the rule only serves the gitignored cs3d-link
workflow) so fresh clones no longer crash at config load.
- Regression tests for both writer fixes (mutation-checked).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* PR review comment fixes
* Update versions
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: diattamo <mmddiatta@gmail.com>
Co-authored-by: ohif-bot <danny.ri.brown+ohif-bot@gmail.com>
Co-authored-by: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com>
* chore(tests): Update multiple screenshot test images for various specs
* feat(screenshot-reviewer): Add screenshot review tool and update package.json scripts
* fix(DICOMSRDisplayTool): Improve actor presence check in viewport
* chore(tests): Update multiple screenshot assets for various specs
* chore(tests): Integrate waitForPaintToSettle and waitForViewportsRendered in multiple specs for improved rendering stability
* chore(tests): Update screenshot assets for SEGHydration and SEGNoHydration specs
* test: update progressive loading screenshots
* jest 30 test fixes for compatibility with pnpm cs3d
* Use correct setDisplaySets instead of setDataId
* fix: Naming change for LegacyVolumeViewport3D
* Update to allow tolerance for contour tests
* update
* fix
* refactor: Replace instanceof checks with utility functions for viewport type validation
* fix: Update createSegmentationForViewport to handle undefined displaySetInstanceUID gracefully
* bun lock
* fix: Install cs3d with pnpm instead of bun
* Update node version for playwright
* Update to v5.0.0 of cs3d
* fix: Build dependency
* audit
* Change to a web await retry assert
* Fix timing related test failures
* fix: Freehand close
---------
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
* fix: Use newer ONNX version and load without errors
* Only changes to enable SAM again
* fix(seg hydration): auto-hydrate RT struct on second load with disableConfirmationPrompts (#5875)
* chore(version): Update package versions to 3.13.0-beta.34 [skip ci]
* fix(Threshold tool): Threshold tool no longer becomes deselected when the Dynamic option is selected (#5884)
fix(Threshold tool): Added 'ThresholdCircularBrushDynamic' to the toolNames array so the evaluator correctly recognizes it as an active state for the Threshold button when Dynamic mode is selected.
* chore(version): Update package versions to 3.13.0-beta.35 [skip ci]
* fix: Modalities in study list should select starts with as primary (#5886)
* chore(version): Update package versions to 3.13.0-beta.36 [skip ci]
* fix(security): Bump tar version to address CVE-2026-31802. (#5893)
* chore(version): Update package versions to 3.13.0-beta.37 [skip ci]
* fix(segmentation): Display "No description S:{series number} {modality}" for segmentations with no label. (#5874)
* Bump CS3D dependency to get the fallbackLabel field additions.
* chore(version): Update package versions to 3.13.0-beta.38 [skip ci]
* fix(window level): The window level value is not displayed by default on all the viewports when selecting common/custom layout and TMTV. (#5865)
* fix(window level): Set up listener for viewport availability such that the initial window level can be read and displayed.
* PR feedback.
* PR feedback.
---------
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
* chore(version): Update package versions to 3.13.0-beta.39 [skip ci]
* fix(security): Bump flattened version to address CVE-2026-32141. (#5897)
* chore(version): Update package versions to 3.13.0-beta.40 [skip ci]
* fix(sr-hydration): enable hydration and arrow navigation for 3D SR measurements (#5887)
Joe is away, so approving based on the code having the requested change, and otherwise looking good/passing tests.
* fix(sr-hydration): enable hydration and arrows navigation for 3D SR measurements
* test: add automated test for SR measurement navigation with arrows after hydration
* add cross-study warning in the 3D branch
* test: address reviewer feedback for the test
* fix: support 3D and 2D annotations for SR hydration
* test: improve navigation to first image
---------
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
* chore(version): Update package versions to 3.13.0-beta.41 [skip ci]
* feat: Add combined build (#5895)
* Add combined build
* Link script location update
* Security and validation fixes
* Allow specifying target path in PR description
* fix: Version match
* Fix build detection issue
* fix: Playwright deploy
* Separate out the branch merge guard
* Update docs and link info
* test: Update the layout change to wait for network idle
* Move audit late so the rest of the build can be worked on
* Add text with network check to ensure we see this change is updated
* Attempt to fix the mpr loading on ohif-downstream
* PR review comments
* Update docs
* Update to CS3D 4.20.0
* PR comments
* Add log on ohif-integration builds
* Update build test
* Removed unused space to kickoff build
* chore(version): Update package versions to 3.13.0-beta.42 [skip ci]
* fix(SR): Added support for spline and live wire SR items. (#5870)
* fix(SR): Added support for spline and live wire SR items.
* Apply suggestion from @greptile-apps[bot]
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* Add a script to checkout a worktree for test builds
* fix: Allow download for testing sr validator
* Remove script that wasn't intended to be included
* Bump CS3D version.
* PR comments - simplify code and use single codepath for download
* Allow both download and save buttons for SEG and RTSTRUCT
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
* chore(version): Update package versions to 3.13.0-beta.43 [skip ci]
* chore(tests): contour segment interactions e2e tests - rename and togglevisibility (#5891)
* chore(version): Update package versions to 3.13.0-beta.44 [skip ci]
* chore(refactor): use public appConfig getter instead of private _appConfig field (#5923)
* chore(version): Update package versions to 3.13.0-beta.45 [skip ci]
* refactor(tests): update viewport page object usage to async and update all effected tests (#5927)
* chore(version): Update package versions to 3.13.0-beta.46 [skip ci]
* fix: prevent black viewport when navigating series with client-created segmentation (#5919)
* chore(version): Update package versions to 3.13.0-beta.47 [skip ci]
* fix(measurement): Restore viewport interactivity when deleting in-progress Spline or Livewire measurement (#5905)
* chore(version): Update package versions to 3.13.0-beta.48 [skip ci]
* fix(segmentation): restrict overlay segmentation menu to same frame of reference as viewport background display set (#5900)
- Add FrameOfReferenceUID to SEG and RTSTRUCT displaySet in SOP Class Handlers so the FOR is available for filtering
- Sync optimisticOverlayDisplaySets when background display set changes so the overlay menu reflects the correct state after a background switch
- Add FOR matching guard to the hydrate segmentation synchronizer to prevent the hydration synchronizer from blindly mirroring segmentations from a source viewport to a target viewport if their primary Frames of Reference do not align.
- fix segmentation overlay order reversal on viewport re-render
* chore(version): Update package versions to 3.13.0-beta.49 [skip ci]
* fix(security): update dependencies to fix security vulnerabilities (#5936)
* chore(version): Update package versions to 3.13.0-beta.50 [skip ci]
* fix(security): Update yarn.lock that was missed in PR #5936. (#5940)
* chore(version): Update package versions to 3.13.0-beta.51 [skip ci]
* feat(component): Adds SmartScrollbar to ui-next - OHIF-2558 (#5924)
Co-authored-by: Joe Boccanfuso <joe.boccanfuso@radicalimaging.com>
* fix(defaultRouteInit): pass sorted display sets to hanging protocol for deterministic viewport order (#5933)
fix: pass sorted display sets to hanging protocol for deterministic viewport order
The `applyHangingProtocol` function already sorts display sets by modality
priority and series number into `sortedDisplaySets`, but the unsorted
`displaySets` array was being passed to `hangingProtocolService.run()`.
This caused non-deterministic viewport ordering across page loads because
`displaySetService.getActiveDisplaySets()` returns display sets in creation
order, which depends on asynchronous network responses.
Made-with: Cursor
* chore(version): Update package versions to 3.13.0-beta.52 [skip ci]
* revert: rename DisplaySet.frameOfReferenceUID back to FrameOfReferenceUID (#5943)
* chore(version): Update package versions to 3.13.0-beta.53 [skip ci]
* fix(cornerstone): read FrameOfReferenceUID from display set in viewport service (#5950)
* chore(version): Update package versions to 3.13.0-beta.54 [skip ci]
* fix: ignore auth in git (#5955)
* chore(version): Update package versions to 3.13.0-beta.55 [skip ci]
* ONNX latest version
* chore(version): Update package versions to 3.13.0-beta.56 [skip ci]
* bun lock
* fix high sev mathjs issue
* Revert onnx changes
* Update to recent CS3D version
* Undo unneeded change
* Add null check
* Undo unneeded change
---------
Co-authored-by: Ghadeer Albattarni <165973963+GhadeerAlbattarni@users.noreply.github.com>
Co-authored-by: ohif-bot <danny.ri.brown+ohif-bot@gmail.com>
Co-authored-by: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: diattamo <mmddiatta@gmail.com>
Co-authored-by: Pedro Köhler <pedrokohlerbh@gmail.com>
Co-authored-by: Dan Rukas <dan.rukas@gmail.com>
Co-authored-by: Joe Boccanfuso <joe.boccanfuso@radicalimaging.com>
Co-authored-by: Alireza <ar.sedghi@gmail.com>
- add segmentationExists check to getSopClassHandlerModule
- now firing SEGMENTATION_REMOVED and SEGMENTATION_REPRESENTATION_REMOVED events
- centralized segmentation removal in a listener
- when a segmentation is deleted (completely), remove it from all viewports it overlays
- when a segmentation is removed from a viewport, remove it as overlay from the viewport
---------
Co-authored-by: Joe Boccanfuso <joe.boccanfuso@radicalimaging.com>
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
* [WIP] Fix contour annotations RTSS saving
* fix: Export image sop image reference provider
* Fixes for download with filename
* Updates to fix metadata issues with CS3D
* Updates to save menu
* Fixing some additional re-save metadata
* Add support for saving with predecessor image sequence
* PR comment fixes
* fix: Load RTSS after save
* fix segmentation save
* fix load of mixed seg/rt studies
* Use frame module to get information on the frame shown
* Fix study browser to use instances.length when numImageFrames not present
* fix: Load of display set split from multiple non-FOR referenes
* Fix RT and SEG applying to wrong series because of using
referenced series sequence without checkout sop instances
* Fix save seg
* Update to released CS3D versions
* test: Add revokeObjectURL to test download blob
* Add hard dependency on mode-basic to fix build order issues
* fix: build
* Try to fix build segmentation
* PR comments
* PR comment update
* Opacity, fill and outline properties for active and inactive contours
are now consistent with those for label map segmentations.
The properties for inactive segmentations are applied to BOTH
inactive contours and label maps.
* Activate the selected segmentation for a type when the alpha, outline width, or fill/outline visibility is changed.
* fix(segmentation): Lock all rehydrated segmentation segments when panelSegmentation.disableEditing is true.
* PR feedback.
* PR feedback.
* Added tests for disableEditing and utilities for simulating drag operations.
* Update bun.lock file after merging master.
Co-authored-by: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com>
Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
Co-authored-by: Igor Octaviano <igoroctaviano@gmail.com>