* 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> |
||
|---|---|---|
| .. | ||
| .recipes | ||
| .webpack | ||
| assets | ||
| cypress | ||
| public | ||
| src | ||
| .all-contributorsrc | ||
| .browserslistrc | ||
| .dockerignore | ||
| .env | ||
| .env.example | ||
| .eslintignore | ||
| .gitignore | ||
| babel.config.js | ||
| CHANGELOG.md | ||
| cypress.config.ts | ||
| jest.config.js | ||
| jestBabelTransform.js | ||
| LICENSE | ||
| netlify.toml | ||
| package.json | ||
| pluginConfig.json | ||
| postcss.config.js | ||
| preinstall.js | ||
| README.md | ||
| tailwind.config.js | ||
| tailwind.css | ||
@ohif/app
@ohif/app is a zero-footprint medical image viewer provided by the Open Health Imaging Foundation (OHIF). It is a configurable and extensible progressive web application with out-of-the-box support for image archives which support DICOMweb.
ATTENTION: If you are looking for Version 1 (the Meteor Version) of this repository, it lives on the
v1.xbranch
Why?
Building a web based medical imaging viewer from scratch is time intensive, hard to get right, and expensive. Instead of re-inventing the wheel, you can use the OHIF Viewer as a rock solid platform to build on top of. The Viewer is a React Progressive Web Application that can be embedded in existing applications via it's packaged source (ohif-viewer) or hosted stand-alone. The Viewer exposes configuration and extensions to support workflow customization and advanced functionality at common integration points.
If you're interested in using the OHIF Viewer, but you're not sure it supports your use case check out our docs. Still not sure, or you would like to propose new features? Don't hesitate to create an issue or open a pull request.
Getting Started
This readme is specific to testing and developing locally. If you're more interested in production deployment strategies, you can check out our documentation on publishing.
Want to play around before you dig in? Check out our LIVE Demo
Setup
Requirements:
Steps:
- Fork this repository
- Clone your forked repository (your
origin)
git clone git@github.com:YOUR_GITHUB_USERNAME/Viewers.git
- Add
OHIF/Viewersas aremoterepository (theupstream)
git remote add upstream git@github.com:OHIF/Viewers.git
Developing Locally
In your cloned repository's root folder, run:
// Restore dependencies
yarn install --frozen-lockfile
// Stands up local server to host Viewer.
// Viewer connects to our public cloud PACS by default
yarn start
For more advanced local development scenarios, like using your own locally hosted PACS and test data, check out our Essential: Getting Started guide.
E2E Tests
Using Cypress to create End-to-End tests and check whether the application flow is performing correctly, ensuring that the integrated components are working as expected.
Why Cypress?
Cypress is a next generation front end testing tool built for the modern web. With Cypress is easy to set up, write, run and debug tests
It allow us to write different types of tests:
- End-to-End tests
- Integration tests
- Unit tets
All tests must be in ./cypress/integration folder.
Commands to run the tests:
// Open Cypress Dashboard that provides insight into what happened when your tests ran
yarn run cy
// Run all tests using Electron browser headless
yarn run cy:run
// Run all tests in CI mode
yarn run cy:run:ci
Contributing
Large portions of the Viewer's functionality are maintained in other repositories. To get a better understanding of the Viewer's architecture and "where things live", read our docs on the Viewer's architecture
It is notoriously difficult to setup multiple dependent repositories for end-to-end testing and development. That's why we recommend writing and running unit tests when adding and modifying features. This allows us to program in isolation without a complex setup, and has the added benefit of producing well-tested business logic.
- Clone this repository
- Navigate to the project directory, and
yarn install - To begin making changes,
yarn run dev - To commit changes, run
yarn run cm
When creating tests, place the test file "next to" the file you're testing. For example:
// File
index.js;
// Test for file
index.test.js;
As you add and modify code, jest will watch for uncommitted changes and run
your tests, reporting the results to your terminal. Make a pull request with
your changes to master, and a core team member will review your work. If you
have any questions, please don't hesitate to reach out via a GitHub issue.
Contributors
Thanks goes to these wonderful people (emoji key):
Erik Ziegler 💻 🚇 | Evren Ozkan 💻 | Gustavo André Lelis 💻 | Danny Brown 💻 🚇 | allcontributors[bot] 📖 | Esref Durna 💬 | diego0020 💻 |
David Wire 💻 | João Felipe de Medeiros Moreira ⚠️ |
This project follows the all-contributors specification. Contributions of any kind welcome!
License
MIT © OHIF