Repository navigation
Releases
IsiX DICOM Viewer 6.0.3
IsiX DICOM Viewer 6.0.3 adds linked length ratios, improves contour editing across slices and corrects image insertion into Word reports. It also changes how workflow-specific preference values are resolved. These notes cover the changes since 6.0.2.
Live ROI length ratios
- Ratio of Two Lengths is available from the ROI menu, viewer contextual menus and ROI Manager. The menu shortcut is Option-Command-/. The command divides the first selected Length ROI by the second. A pair can be on the same image or on different images of the current time point. Two selected lengths on the displayed image take priority. For a pair across slices, exactly two lengths must be selected and one must be on the displayed image. When selection order is unavailable, the viewer uses image and ROI list order.
- A valid pair uses finite, nonnegative measurements in the same unit, either physical length or pixels, and has a positive denominator. Measurements between slices use the physical distance between endpoints. The result is a dimensionless ratio displayed alongside the two lengths in a text ROI.
- The label is created as one undoable ROI operation. It is placed near a measurement on the displayed image when possible, or on the numerator's image. The label updates when a linked length or its display formatting changes. Deleting a source measurement removes its dependent labels when they lose their link.
- Measurement identifiers and the label's numerator and denominator links are saved in an existing placeholder field of the ROI archive and carried through copying and undo. A single measurement can participate in several ratios independently of ROI grouping. When copies share a measurement identifier, resolution prefers the measurement on the label's slice and then the nearest slice.
- ROI CSV export appends
Ratio,Numerator ROIandDenominator ROIcolumns. Ratios are written to four decimal places, with one-based references to the corresponding measurement rows in theROIcolumn when the measurements are part of the export. The existing columns retain their positions.
Contour editing and slice order
- With Join overlapping ROIs on adjacent images enabled, a newly drawn contour searches parallel slices nearest first across the series. It adopts the name of a qualifying overlapping contour at the nearest distance, including when outlines are separated by several slices. A match requires at least 10% overlap relative to the smaller contour's area. At equal slice distance, the greater overlap takes priority. The shared name is used for volume calculation, renaming, propagation and generation of intermediate contours. The preference tooltip describes the expanded search. The Objective-C
HorosROIObjectJoin.reachaccessor retains its historical value for legacy plugins. - Generate Missing ROIs distinguishes a named contour present on a single image, a range with contours on every intervening image, and a generation failure. The single-image message explains how to give contours of the same object a shared name in ROI Manager.
- Series reversal now reverses the saved ROI snapshots alongside the images, files and current ROIs for each time point. Saving then compares each slice against its own snapshot, so ROI deletions in descending stacks are retained when the series is reopened.
Database images and Word reports
- Image creation loads pixels and allocates the display representation before reading bitmap dimensions. Database selections can supply grayscale or color figures directly to a report before the images have been displayed. Unreadable images are handled before bitmap construction.
- Legacy
.docinsertion generates a temporary.docxcontaining the prepared figures. Word opens that document and the private report copy, then transfers the formatted figure paragraphs between their document ranges. This avoids separate image-file access prompts and preserves the figures' sizing without using the clipboard. - The Word workflow matches both documents by their resolved file paths, validates the returned document list and checks the number of inserted inline pictures before saving. When Word responds after a partial open or insertion failure, the workflow closes the temporary documents it identified. The prepared report replaces the original after successful insertion.
- DOCX insertion uses the validated list of open document paths to detect when Word is already editing the report. An invalid automation response is treated as a lookup failure.
Temporary preferences and workflow readers
- Temporary workflow overrides are stored in process memory and read through the typed preference catalog. AppKit bindings and key-value observers read the underlying
UserDefaultsvalues, preventing temporary workflow changes from updating bound controls on a background thread. - Changes to an effective typed value notify catalog consumers through
UserDefaults.didChangeNotification. Releasing an override returns reads to the launch, saved or registered value. The read path uses an atomic key-length mask to skip the locked lookup when a key cannot have an override. Releasing overlapping holds respects the lifetime of each operation, and an explicit user choice ends the holds for that preference. - Print annotation sizing, listener notices, the database refresh guard and WADO error presentation use typed preference reads. The source includes an interleaved probe for measuring typed-read overhead in the presence and absence of an override.
Localization, validation and packaging
- Localized resources include the ratio command, contour preference tooltip and missing-ROI messages. Branding checks recognize Horos and OsiriX as source names in the legacy plugin import UI.
- Focused regression cases cover ratio selection and live updates, archive links and CSV references, cross-slice contour matching, reversal of ROI snapshots, image loading before display, Word document targeting and temporary preference notifications.
- The standalone IsiXPluginKit export uses the Xcode target's standard package resolution. Release packaging verifies the application dependencies against the approved lockfile. The separate IsiXPluginKit SDK archive contains both architecture slices.
- Requires macOS 15 or later. The GitHub release provides separate Developer ID-signed, notarized application ZIPs for Apple Silicon (
arm64) and Intel (x86_64).
IsiX DICOM Viewer 6.0.2
IsiX DICOM Viewer 6.0.2 addresses database file identity, plugin discovery and recovery, report generation, DICOM export and printing, and temporary viewer settings. It also extends image and PDF drag-and-drop to viewer and reconstruction windows. These notes cover the changes since 6.0.1.
Database file identity and maintenance
- New database files are allocated above the highest number recorded in the index as well as the numbers present on disk. This prevents an import after a restart from reusing the number of a missing file whose database record still exists. The index maximum is read when the allocator scans the data directory.
- Single-frame DICOM loading compares the file's SOP Instance UID with the UID recorded for the image when both can be compared. A mismatch produces an empty frame with the record's annotations, preventing another study's image from appearing under that record. UID padding is normalized, with compatibility handling for absent identifiers, nonstandard identifiers and multiframe records.
- Database rebuilding examines file numbers shared by records with different instance identifiers. When the file identifies one of those records, unrelated records receive unused paths and are handled as missing images. The comparison accounts for multiple frames and multiple series stored in one file.
- The deletion queue checks which queued paths are still referenced by the index and spares those files. Batched lookups cover numbered database files, other filenames and externally linked paths, protecting the remaining records when several images share a file.
- ZIP import verification recognizes directory entries written with Windows FAT backslash separators. Archives that finish with an extraction warning are checked against the number of actual files expected from the archive.
Plugin discovery, import and recovery
- Plugins with the same normalized bundle name are selected deterministically across
.isixplugin,.horospluginand.osirixpluginbundles. Selection uses the declared version, including prerelease suffixes, followed by folder priority and bundle format. The comparison handles numeric version components, case and Unicode normalization. - Plugin Manager adds Import Plugins from Horos or OsiriX…. It rescans the legacy plugin folders, previews new or newer versions, explains skipped candidates and imports the selected additions after confirmation. Replacements use the plugin update recovery path, and import operations share a lock to coordinate concurrent application instances.
- Plugins previously installed inside the application bundle are migrated to the user's active or disabled plugin directory. Migration uses an exclusive move or a staged copy, handles existing destination names and records failures. Discovery recognizes duplicate copies left inside a read-only application after migration. Plugin Manager offers the user and system plugin directories as installation destinations.
- Crash markers now distinguish plugin loading from execution of a command or hook. A marker left during loading starts a protected session and offers the applicable restore, disable and continue actions. A marker left during command execution offers recovery with Continue as the default.
- Orderly application termination clears the active plugin marker, including when a plugin dialog remains open. Protected Mode explains when it was entered because plugin loading interrupted the previous launch.
Report generation and image insertion
- Pages lookup, document opening, template filling, image insertion and PDF conversion use one resolved Pages application. The current bundle identifier is preferred, with lookup support for the earlier identifier and the registered Pages document handler.
- Pages documents are identified by their resolved file paths and then addressed by document ID. This avoids selecting another open document with the same filename. Failed template filling closes the private copy that the operation opened.
- Images inserted into Pages reports are placed on dedicated figure pages after the report text. Figures preserve their aspect ratio inside a 340 × 255 point box, with centered placement, fixed margins and spacing. A4 and Letter pages accommodate two figure boxes per page.
- DOCX image insertion writes JPEG media, relationships, content types and inline drawing paragraphs directly into the document package. Figures are appended to the body before its final section properties, and the resulting XML is validated before the prepared copy replaces the report.
- When Word is running, DOCX insertion checks its open documents by file path and asks the user to close the report before replacing it. Legacy DOC insertion uses Word automation and identifies the private document by its file path.
- Report image errors distinguish Pages and Word failures, including Automation denial, timeouts, disconnected applications and an open Word report. Report preparation uses private copies, with replacement performed after successful insertion.
- Obsolete Pages conversion scripts are removed from the application resources. The report-template generator resolves Pages using the same application preference order.
DICOM export, shutters and printing
- Higher-bit-depth grayscale exports derived from MONOCHROME1 sources retain that photometric interpretation. Eight-bit screen captures use MONOCHROME2 and remove source presentation LUT attributes that would invert the captured image a second time.
- Exports with a different pixel matrix remove source display-shutter attributes and overlay groups whose coordinates belong to the original image. The export rules read the source presentation and dimensions before replacing its pixel module.
- Circular shutter centers and polygon vertices are interpreted in DICOM row-column order. Rendered images apply circular and polygonal masks together with the rectangular shutter. Background values for shuttered regions, rotated corners and enlarged canvases follow the displayed grayscale polarity.
- DICOM print jobs quote paths and printer values as individual shell arguments and write generated files as UTF-8. Printer configuration values are normalized to a single line. Missing AE Title, address or port produces an error before job preparation, and optional Configuration Information is supplied when populated.
- Print-job status reports the failing step and exit status through the application's captured output. The captured status remains available if appending to the print log fails.
- Print preparation applies cropping, font-size and scale-to-fit adjustments for the operation's lifetime. Viewer state is restored after page preparation.
Viewer interaction and study opening
- Dropping image files or PDFs from another application onto a 2D viewer or reconstruction window imports them as new series of the study shown by that window. This includes MPR, orthogonal MPR, PET-CT, curved reconstruction, volume and surface rendering, and endoscopy windows.
- Holding Option while dropping a picture onto a 2D viewer selects layer-ROI insertion. New-series drops require a writable local database and an unlocked local study. Conversion runs after the drag is acknowledged, and affected viewers refresh their series lists.
- Opening a study from a viewer, menu or plugin uses that study's series when the database window's thumbnails belong to another selected study.
- Restoring a workspace retrieves missing comparative studies on a background Activity thread. The database status line identifies the pending opening. Opening resumes when the work finishes, is cancelled or reaches its 30-second waiting limit, using the data available then.
- Workspace retrieval requests are deduplicated, existing retrievals are awaited, and results are matched to the requested study UID. A changed selection or database prevents a pending operation from opening an obsolete target. Retrieval can continue in Activity after the opening stops waiting.
- Command-Shift hides measurement labels becomes an explicit Viewers preference, disabled by default. When enabled, modifier changes synchronize label visibility across 2D, MPR, curved MPR, endoscopy and volume-rendering views. This allows system screenshots to include measurement labels with the default setting.
- Curved-MPR transverse zoom is calculated around the shared section center. The image-navigation strip uses neutral dark and light gray for unvisited and visited images. Volume rendering reuses the last Metal-rendered image during overlay-only frames, correcting redraws for scissors and measurement tools that do not perform another ray cast.
Temporary preferences and capture behavior
- Temporary operation settings use process-local values with coordinated lifetimes. Nested and overlapping operations release their own settings, and explicit user choices take effect while operations are active. Objective-C exception guards restore temporary state before propagating failures.
- This handling covers automatic tiling, workspace loading, settings propagation, thumbnail visibility and synchronization, patient and series navigation, reconstruction zoom synchronization, printing and SUV recalculation. Selecting the Database row retains the current search and date interval through an operation-local override. Saved viewer window-size preferences are restored when a temporary layout change causes the preferences pane to rewrite them.
- Comparative retrievals share a counted, process-local suspension of listener compression. Programmatic DICOM sends carry their requested transfer syntax and application-series policy on the send operation. Legacy study migration passes its copy policy directly to the import request.
- Listener-error suppression uses temporary state. A saved listener-error recovery value left by an earlier version is restored and removed once at launch.
- Orthogonal and endoscopy captures apply annotation settings t...
IsiX DICOM Viewer 6.0.1
IsiX DICOM Viewer 6.0.1 updates DICOM-Swift to 3.3.0, corrects series-list scrolling and PDF page backgrounds, and incorporates source-stamping and Swift compatibility-library handling into the App Store archive workflow. These notes cover the changes since 6.0.0.
DICOM-Swift and dependency provenance
- The application now resolves DICOM-Swift 3.3.0 at revision
cf9b5bf403dd6b002f827f51aa9d9e3266f41d31. The Xcode package requirement and resolved lockfile select the same exact release. - The application links the package's
DicomWebClient,DicomWebOIDCandDicomDataproducts. - Bundled provenance records now identify the selected public source tree and lockfile, together with the updated generated dictionary checksum. Runtime attribution, NOTICE, license pages and the public build documentation identify the same dependency revision.
Series thumbnails and floating panels
- Series lists constrain scrolling to their displayed orientation. Vertical strips keep their horizontal origin at the matrix bounds, and horizontal strips keep their vertical origin there. Scroll elasticity follows the same axis, preventing sideways movement of a vertical list and vertical movement of a horizontal list.
- Floating thumbnail panels account for the width occupied by legacy, always-visible scrollbars. The panel reserves the thumbnail width plus at least ten points, increasing the allowance to the scrollbar width plus two points when needed. This keeps the full thumbnail visible beside the scrollbar.
- Floating panels observe changes to the preferred scrollbar style and recalculate their layout when macOS switches between overlay and legacy scrollbars.
- Series-number badges move to the lower-left corner of each thumbnail, leaving the title lines at the top readable. The badge uses a five-point inset.
PDF page rendering
- PDF representations imported through the image-viewer path are composited over a white page background. Previously, areas where the PDF drew no content could become black, obscuring black text and other dark page content.
- The reusable ARGB drawing operation accepts an optional paper color. With a paper color, it fills the destination first and draws the image using normal alpha compositing. The PDF import path selects white when the source image contains an
NSPDFImageRep. - Ordinary raster images use the transparency-preserving copy path. Regression cases cover black ink, opaque white page areas and transparent raster pixels, including rendered Encapsulated PDF and structured-report pages.
App Store archives and source identification
- The Git metadata phase now locates the installed application through
TARGET_BUILD_DIR, withBUILT_PRODUCTS_DIRas the fallback. This handles archives where Xcode installs the application outside the ordinary build-products directory. - The metadata phase declares the processed application Info.plist as an input, so source stamping follows plist generation. Failed writes of
GitHashorGitStatefail the build. The resulting plist is made readable with mode0644. - The App Store export script records the source commit and working-tree state at startup, verifies them in both architecture archives, and checks them again inside the exported installer after distribution signing.
- Universal 2 archive merging accepts multi-architecture Swift compatibility libraries supplied by Xcode. It extracts the required arm64 and x86_64 slices into temporary files before combining them. This handles libraries such as
libswiftCompatibilitySpan.dylibwhen a toolchain copy also contains arm64e. - The merge preserves its input archives and retains strict architecture checks for application executables and other binaries. A compatibility library must contain the slice required by its input archive.
SDK export
- The SDK export uses the release package checkout and disables automatic package resolution. This keeps its secondary Xcode build on the reviewed dependency lockfile throughout packaging.
Repository documentation
- The README adds a direct App Store download link and a gallery with eight screenshots covering macOS, iPhone, iPad, Apple Watch, Apple TV and Apple Vision Pro.
- Each image has descriptive alternative text. The gallery identifies this repository as the macOS version and accompanies the existing architecture-specific GitHub downloads.
Regression coverage and compatibility
- Focused tests cover scrolling along each list orientation, disabled cross-axis elasticity, floating-panel width with overlay and legacy scrollbars, PDF compositing and raster transparency.
- Archive tests cover source stamping in ordinary and installed products, preservation of the other product's plist, merging multi-architecture compatibility libraries, rejection of a missing required slice, and architecture checks for application executables.
- Requires macOS 15 or later. The GitHub release provides separate Apple Silicon arm64 and Intel x86_64 application ZIPs, signed with Developer ID and notarized. The versioned IsiXPluginKit SDK contains both architectures.
- The GitHub edition supports IsiXPluginKit v1 and compatible
.horospluginand.osirixpluginbundles for the running architecture. The Mac App Store edition is Universal 2, uses App Sandbox and receives updates through the App Store, with external plugin loading disabled.
IsiX DICOM Viewer 6.0.0
IsiX DICOM Viewer 6.0.0 reorganizes the application around internal Swift modules, introduces IsiXPluginKit v1, and preserves compatibility with Horos and OsiriX plugins. This release also adds Modality Worklist, study migration and state management, image and ROI operations, T1 mapping and synthetic DWI export. These notes cover the changes since 5.4.0.
Application architecture
- Large parts of the browser, database, DICOM models and networking, 2D viewers, ROI handling, reconstruction and 3D controllers now use Swift implementations divided by responsibility. ViewerController, DCMView, DCMPix, BrowserController and the ROI classes retain the runtime interfaces required by their callers while delegating work to dedicated components.
- A local Swift package provides nineteen internal modules for logging, shared contracts, preferences, storage, database operations, DICOM files and datasets, DICOM networking, imaging, geometry, ROIs, segmentation, volume rendering, plugin admission, HTTP, Keychain access, mail, installation and crash reporting. Their products link statically into the application. Declared dependency boundaries keep these modules independent of application headers.
- Typed capability interfaces carry database reads, metadata, imports, maintenance, conversion and ROI storage across module boundaries. Process-level services, browser instances and viewer sessions have explicit ownership. Typed preferences centralize defaults, validation, snapshots and migration of existing settings.
- DCMTK, ITK and VTK operations use dedicated native adapters, including exception handling at the C++ boundary. Reusable geometry, pixel processing, image navigation and rendering rules reside in the internal modules.
Plugins and IsiXPluginKit
- The GitHub edition accepts
.isixplugin,.horospluginand.osirixpluginbundles. Compatible Horos and OsiriX binaries can keep their original bundles and extensions. The application suppliesHoros.frameworkand theHorosAPI,OsiriXAPI,OsiriX HeadersandHorosDCMaliases, together with the Objective-C classes, selectors, instance-variable symbols, constants and exported functions used by legacy plugins. - The compatibility surface includes the DCMObject, attribute, sequence, pixel-data, tag, character-set, calendar-date and transfer-syntax interfaces. Dataset construction, copying, editing, serialization, anonymization and document helpers bridge to the Swift implementation. PluginFilter retains the historical non-owning viewer reference.
- IsiXPluginKit v1 provides the public Swift interface for new plugins. It exposes viewer and image snapshots, geometry, pixel commits, derived series, ROIs, database queries and edits, imports, DICOM network operations, commands, events, input handlers, drawing overlays and XML-RPC extensions. Host operations check declared capabilities, viewer state and snapshot validity. Registrations and cancellable tasks have explicit cleanup.
- Plugin admission checks include format, API version, executable, architecture, deployment target and framework dependencies. Plugins Manager reports loading failures and the reason for rejection, including dyld details when available. A plugin must match the running application's architecture. Legacy OpenGL overlays require a port to appear in the Metal viewers.
- Plugin discovery uses the IsiX support folders. Startup migration can copy selected plugins from active and disabled Horos, Horos App and OsiriX folders, preserving their enabled state and existing destinations. An interrupted import resumes its saved selection. Protected Mode explains why plugin loading is disabled for that session.
- The separate SDK ZIP includes arm64 and x86_64 binaries, public Swift interfaces, API documentation, licenses and a legacy source-porting kit. The source repository also includes an example plugin. Its inventory, compatibility and conversion tools support migration to the v1 API. The SDK manifest records the source revision and binary checksums. The plugin template, with this SDK included, is at github.com/ThalesMMS/IsiXPluginTemplate.
Database, study migration and recovery
- File, archive, media, received DICOM, generated-image and plugin imports share a common ingest interface. Import presets control validation, indexing and notifications. A writer gate and per-database scheduling coordinate conversion, maintenance and publication of saved changes.
- DICOM indexing batches ordinary header reads, shares metadata reads across import triage, looks up studies by Study Instance UID and resolves images by SOP Instance UID and frame. Incomplete WADO multipart input has its complete parts recovered once before the remainder is retained in the error folder. Other admitted files can finish indexing.
- Index opening, model upgrade, rebuild and SQL repair coordinate with active writers and managed contexts. Rebuild preserves a verified recovery snapshot where possible and retains the former damaged index when a valid snapshot cannot be produced. Recovery notices identify preserved files and metadata that could not be reconstructed.
- Import Studies from Horos or OsiriX reads the source SQLite database in read-only mode, including its write-ahead log. Copy Files imports image files into the open writable local database. Copy Links indexes them at their existing locations. Migration carries over albums, smart-album rules and memberships, and fills missing study comments and numeric states by Study Instance UID.
- Startup support migration handles eligible Web Portal accounts, custom pages and Weasis customization, with conflict reporting and recorded declines. An empty Web Portal store created after deferring migration can be replaced after checking it for application rows. A system Weasis customization can supply the source when a user-specific copy is absent.
- Find Unindexed Files scans the active writable local database with progress and cancellation, then rechecks confirmed candidates before indexing them in place. Maintenance imports suppress incoming-routing and arrival actions. Failed ZIP extraction retains the archive and reports the failure.
- Shared-database viewers, reports, key images and annotation archives resolve against the database owning the study. Index refresh waits for affected viewers. Explicit study-open requests refresh the hidden browser outline when the study is missing from its current list.
Study states and document handling
- Study State > Edit States configures names, colors and actions. The default eight states include Printed, Distributed and Archived. Up to 32 entries are supported. New entries append to the list, and removal is restricted to the final entry above the five fixed states, preserving stored numeric positions.
- State actions can open images, convert a report to PDF or DICOM PDF, or save a report PDF to
EXPORT-REPORTS. Option plus a digit from 1 through 9 applies the corresponding state to selected studies. Smart albums and the Web Portal display configured labels. - Report archiving tied to Validated status runs when the study enters that state, avoiding repeated DICOM PDFs from repeated writes of the same status. Disc export removes temporary report PDFs after copying them.
- JPEG, PNG and TIFF files can be imported as DICOM Secondary Capture images, and PDFs as Encapsulated PDF objects, into a selected local study. The commands are available from the import menu, the study context menu and file drops. Generated series inherit the selected study's patient and study attributes.
- Generated image and PDF series receive unused numbers after the study's highest visible series number, including numbers in the thousands, while preserving reserved internal document numbers. Encapsulated PDF previews accept rendered pages with validated page bounds and dimensions, including objects with modality DOC.
Modality Worklist and DICOM networking
- Enabled DIMSE nodes can serve as Modality Worklist sources. The worklist window uses the Modality Worklist Information Model C-FIND with date, modality and scheduled station AE-title filters. Refresh can be manual or periodic. Queries run off the UI thread using the node's TLS and timeout settings.
- Results from multiple nodes are combined, duplicate scheduled steps are removed and rows are ordered by scheduled start time. Node failures are reported alongside successful results. Received-study matching uses Study Instance UID, then accession number with compatible patient identity, then Patient ID on the scheduled day.
- DIMSE query, store, listener and SCP database coordination use Swift components over DCMTK adapters. Typed node records, requests, queues and inventory rules connect DIMSE, DICOMweb, WADO, Bonjour and routing workflows.
- Query/Retrieve snapshots carry query-generation and delivery-order identifiers. Delayed partial results cannot replace a completed result or a newer search. This also covers Query all studies of this patient. Outline reloads are deferred while a study expands to retrieve its series.
- Progressive import and polling share the pending Retrieve & View state, preventing duplicate viewers for the same arriving series. Waiting retrieves can be reordered by dragging them in Activity. Activity descriptions include study and series information.
- Hanging protocols prepare PACS comparative searches, retrieval and import in cancellable background operations. Matching uses patient ID, issuer and corroborating demographics, rejects conflicting identity information and hands verified study identifiers back to the browser within the existing deadline.
- Automatic query and retrieve waits for first-use database setup. Idle DIMSE command timeouts close the association and log its technical details. DIMSE receive failures retain their error-reporting path.
- STOW-RS selects the common service path when QIDO-RS and WADO-RS paths ma...
IsiX DICOM Viewer 6.0.0-beta6
IsiX DICOM Viewer 6.0.0-beta6 adds synthetic diffusion-weighted image export, fixes delayed partial results in Query/Retrieve, and updates diagnostic logging, document previews, and distribution checks. These notes cover the changes since 6.0.0-beta5.
Synthetic DWI export
- File > Export > Export as Synthetic DWI computes a new diffusion-weighted series at a requested b-value from the diffusion data in the active 2D viewer. It supports a 4D series with one b-value per frame and a single stack containing multiple b-values at each spatial position. In the 4D case, the dialog displays the values read from the source headers and allows them to be corrected. The target b-value is remembered, with 1600 s/mm² as the initial value, and the proposed series name follows the target until edited. The command and dialog text are included in the shipped language catalogs.
- The calculation fits the logarithm of the positive, finite signals against b-value using least squares, corresponding to the mono-exponential model
S(b) = S0 × exp(−b × ADC). A voxel with fewer than two usable distinct b-values produces zero. Negative fitted ADC values are clamped to zero. The calculation requires grayscale images with matching dimensions within each slice group and at least two distinct acquisition b-values. The model assumes mono-exponential diffusion decay, with low-b perfusion and high-b kurtosis outside its scope. - The export uses the highest-b source image of each group as the header and geometry template. It stores the result as unsigned 16-bit pixels with a rescale slope selected for the signal range, writes the computed Diffusion b-value, updates a b-value embedded in the sequence name, and adds derived-image and derivation metadata. Vendor-private source b-value fields are removed from the derived file. The generated series is imported into the active database and opened in a viewer.
- Newly imported image and PDF series receive numbers after the study's highest existing visible series number, including numbers in the thousands. Allocation avoids existing numbers and the numbers reserved for IsiX's internal document series.
Query/Retrieve result ordering
- A delayed partial result can no longer overwrite a complete query result. This addresses searches where a node returns its first match after a delay and the remaining matches immediately afterward, leaving only the first study visible until the search is repeated. The same fix applies to Query all studies of this patient.
- Partial result snapshots carry a query generation and delivery order. The main thread accepts a snapshot only while its query is active and its delivery is newer than the last one shown. Displaying the complete list or starting a subsequent query invalidates earlier snapshots. Focused regression cases cover delayed delivery, out-of-order updates, multiple-node queries, and replies from an earlier search.
Diagnostic logging
- Network and remote-service log messages use shared formatting for external text, errors, exceptions, and URLs. Depending on the value, logs record a text length, error domain and code, exception name, or technical status. URL formatting removes user information, query strings, and fragments and represents a local file path by its length. Network URL origins and paths can still appear.
- This formatting is applied across DICOM send and retrieve, routing, the listener, DICOMweb, Bonjour, shared databases, XML-RPC, URL imports, and DICOM printing. DICOMweb log summaries include error categories, HTTP and DICOM status codes, recognized warning categories, and response-text lengths. Alerts and transfer reports receive detailed diagnostic text through separate fields.
- DCMTK request, response, and status-detail dataset dumps are controlled by the
DICOMDatasetDumppreference, which is off by default. Startup and connection setup configure DCMTK logging consistently. Enabling dataset dumps requests detailed DICOM diagnostic output, including the values contained in the exchanged datasets. - Regression checks exercise redaction and scan the network logging call sites for external text, paths, URL parameters, and error descriptions that should use the shared formatting.
PDF previews and viewer toolbar
- The preview pipeline accepts rendered pages from Encapsulated PDF Storage objects, including objects with modality
DOC. It validates page bounds and dimensions. Structured reports, segmentation objects, presentation states, and other non-renderable document objects continue through the document-icon path. - The default 2D viewer toolbar places movie export directly after the thick-slab control by removing the intervening flexible-space item.
Compatibility and validation tooling
- The legacy plugin porting tool checks that the selected macOS SDK contains Foundation before using it to classify other frameworks. Failed or incomplete SDK lookups produce an error and can be retried, including while Xcode or its command-line tools are being updated.
- Bundle checks distinguish Swift runtime libraries from compatibility libraries required by the deployment target, including the Span compatibility library used below macOS 26. Signing validation inspects Mach-O load commands, runtime search paths, architecture slices, and signed embedded dependencies.
- Test tooling centralizes link-probe diagnostics, including unresolved Objective-C classes and early process exits. Updated harnesses use the current DICOM classes, import UID lookup, viewer ownership, and shared-database interfaces. Fixture preparation supports
HOROS_PYTHON, local Python environments, and isolated output directories, and identifies missing external inputs. CPR runtime checks include display scaling. The harness updates also retire several obsolete standalone checks. - The bundled mail-client provenance record and its rendered attribution page have matching source sizes and SHA-256 values.
- Requires macOS 15 or later. Apple Silicon and Intel application builds are supplied in separate ZIP files. The IsiXPluginKit SDK is a separate download containing both architectures. The README points to the beta6 packages and the current stable downloads.
IsiX DICOM Viewer 6.0.0-beta5
IsiX DICOM Viewer 6.0.0-beta5 updates legacy plugin and database compatibility, adds configurable study states, and changes DICOM import, viewer interaction, and Settings. These notes cover the changes since 6.0.0-beta4.
Legacy plugins and DICOM interfaces
- The Swift DICOM implementation exposes the Objective-C class names and selectors used by Horos and OsiriX plugins. This includes
DCMObject, attribute, sequence and pixel data classes, tag dictionaries, character sets, calendar dates, and transfer and abstract syntax classes. The restored surface covers dataset construction and copying, tag lookup and editing, pixel handling, transfer syntax factories, serialization, anonymization, and selected DICOM document helpers. The app and its DCMTK adapters use the restored names. PluginFilterkeeps a non-owning viewer reference, matching the ownership contract of the legacy instance variable. The plugin ABI inventory and compatibility checks cover the restored interfaces. The GitHub build supports IsiXPluginKit v1 and compatible Horos and OsiriX plugins built for the running architecture.- Plugins Manager explains why plugins are blocked in Protected Mode and how to load them in a subsequent session. The notice wraps to fit localized text. Catalog update checks are available through the manual plugin update action.
Study migration, states, and indexing
- File > Import > Import Studies from Horos or OsiriX imports into the open writable local database. Choose Copy Files to copy the images into that database, or Copy Links to index files where they are. The importer reads the legacy SQLite store in read-only mode, including its write-ahead log when present. It carries over albums and smart album rules, adds album memberships, and fills missing study comments and numeric states by Study Instance UID.
- At startup, IsiX copies eligible Web Portal accounts and custom pages and Weasis customization from legacy support folders and reports conflicts. The migration honors previously recorded declines. Plugin migration has a separate consent prompt.
- Study State > Edit States configures names, colors, and actions. Actions can open images, convert a report to PDF or DICOM PDF, or save a report PDF to
EXPORT-REPORTS. Eight states are provided by default, including Printed, Distributed, and Archived. The list supports up to 32 entries. New states go at the end, and removal is limited to the last entry above the five fixed states, preserving numeric positions. Option plus a digit from 1 through 9 applies that state to selected studies. Smart album predicates and the Web Portal use the configured state labels. - The importer parses ordinary DICOM headers in batches and shares incoming metadata reads across deflate, enhanced image, and IVUS triage. Indexing fetches relevant studies by Study Instance UID and looks up image rows by SOP Instance UID and frame. Cloud report association can still resolve a report to a study already in the database.
- ZIP import reports extraction failures such as damaged archives, insufficient disk space, and unsupported compression or encryption. The archive is retained on extraction failure. Unindexed-file import presents its confirmation from the main run loop.
Query, retrieve, and network configuration
- Activity describes queued retrieves using study and series information. Drag a waiting retrieve to change its position in the queue. Instance-level retrieval rejections are logged when a higher-level request can still recover the retrieve.
- STOW-RS uses the common service path when a node's configured QIDO-RS and WADO-RS paths match. Otherwise, the store endpoint is
studiesunder the node's base address. The Send sheet displays the endpoint used for the request. - Configuration imports for preferences, DICOM nodes, and database server lists accept HTTPS and local file URLs. Built-in email delivery uses Mail, replacing the preference for direct SMTP delivery that depended on a Mail account file removed from macOS.
Viewer interaction and ROI transfer
- Series numbers are assigned within each study. The series list and menu use study colors to identify open series. The active 2D window uses a border in its study color. Missing thumbnails are decoded off the main thread, and the series list and menu reuse scaled thumbnails.
- Cine timers schedule the next wake from the frame interval. Slice synchronization reuses cached planes. When frame-of-reference matching is enabled, series with different known frames within one study can be locked at their current offset. When a 2D viewer changes plane, related post-processing windows retain the volume and time points they are displaying. Progress panels return keyboard focus to the viewer, and the active toolbar updates as windows change. Series loading sizes borrowed volume buffers from the image dimensions used by the decoder.
- Dragging to the one-slice position turns the slab off. Dragging back can restore the slab in the same gesture. Mouse settings let users configure whether the click that activates a viewer also acts on the image. Length measurements can use two clicks, and endpoint placement accounts for slab geometry. The preference migration restores missing default double-click gestures when the gesture and its action are both unassigned.
- ROI transfer uses DICOM patient coordinates when series share a frame of reference or have a registration. Brush masks can be resampled onto parallel target slices with different origins, in-plane spacing, or slice spacing. When the series cannot be related, the transfer uses image-by-image copying. Placement summaries report how many ROIs and images were affected and group the reasons for skipped placements.
MPR, CPR, and volume rendering
- Eligible Metal composite renders go directly to a presentation texture. The host builds the 16-bit VTK volume when the CPU mapper needs it. Capture and rendering paths that require the VTK image can read the rendered frame back.
- In-place voxel edits invalidate the affected MPR volume texture so the next reconstruction uses the edited data. MPR and CPR rendering use the backing scale of the visible pane. Reloading a series refreshes the gantry tilt indicator, and deleting an opacity curve selects a neighboring curve.
Settings and distribution
- Viewer preferences are grouped into Viewers, ROIs & Measurements, Mouse & Scrolling, Windows & Screens, and Exports. Search indexes localized pane and control labels. Return opens the first matching pane and highlights the matching control. The Settings window restores its saved position, the old lock control has been removed, and the app uses macOS language selection.
- The File menu controls the horizontal history panel for the next launch. Enabling deletion of the default database at every startup requires confirmation. The revised panes retire controls for legacy DICOM toolkit selection, Growl notifications, and several low-level listener, retrieve, and rendering overrides. The release updates the localized layouts and the preference-pane localization tool, and adds an icon for Mouse & Scrolling.
- The Swift source audit inventory has been refreshed for Objective-C bridges, collection usage, and source sizes.
- Requires macOS 15 or later. The GitHub prerelease provides separate Apple Silicon and Intel application ZIPs and a separate IsiXPluginKit SDK containing both architectures. The README links to these prerelease downloads and to the stable packages.
IsiX DICOM Viewer 6.0.0-beta4
IsiX DICOM Viewer 6.0.0-beta4 extends the migration of Horos-era support files, synchronizes pan across locked studies, and changes how the DICOM listener reports idle connections. These notes cover changes since 6.0.0-beta3.
Viewer synchronization
- With Propagate Settings and the cross-study Sync lock enabled, eligible parallel 2D views now follow each other's pan while preserving the alignment established when they were locked. Each viewer records its pan in image pixels at lock time. When a viewer inherits a study's lock, it also inherits that reference position.
- A pan or a zoom that shifts the image propagates the displacement from the locked position. The viewer converts the displacement through pixel spacing when both series provide it, so the images move the same distance in millimetres. If either spacing is unavailable, it uses the same displacement in image pixels. Same-study and registered-image alignment use image geometry. For unlocked, unregistered studies, zoom can propagate independently of pan.
Legacy support files and plugins
- The migration prompt can now offer a Weasis customization from
/Library/Application Support/Horos/Weasiswhen the user has no legacy Weasis customization in their home folder. The prompt identifies the system source, and the import copies it into the user's IsiX support folder. If both legacy copies exist, the user's copy takes precedence. An administrator can place a shared customization in/Library/Application Support/IsiX/Weasis. - A deferred Web Portal account migration can now replace an empty SQLite store created when the portal opened after the user chose Not Now. The importer checks for application rows across the store's tables, excluding SQLite and Core Data bookkeeping, and checks again before replacement. Populated or unreadable destination stores are protected from replacement. The importer copies the legacy account database and skips account migration when a custom Web Portal database path is configured.
- A pending startup plugin import now scans the Plugins and Plugins Disabled folders under Horos App, alongside Horos and OsiriX, in user and system Application Support. The added location is the folder used by earlier direct builds. The import preserves each bundle's active or disabled state and keeps existing destinations. The direct build supports
.horosplugin,.osirixplugin, and.isixpluginbundles for the running architecture. - Updated the localized support import prompt to identify items copied from a different source folder and describe the copy into IsiX.
Web Portal and DICOM print
- Web Sharing now wires the custom web pages checkbox in all shipped variants of the preference pane. The direct build displays
~/Library/Application Support/IsiX/WebServicesHTML/. The App Store build displays an abbreviated path inside its container and shows the full path in the tooltip. - New DICOM print logs and retained failed-job diagnostics are written to
~/Library/Logs/IsiXDicomPrint. Logs from earlier versions are available in~/Library/Logs/HorosDicomPrint.
DICOM listener
- The listener closes a DICOM association that exceeds the idle timeout while waiting for its next command. It logs the calling and called AE titles and the DIMSE condition without displaying a DICOM Listener Error. A timeout during DIMSE receive still follows the normal failure-reporting path.
Build and compatibility
- The Xcode metadata phase locates the built application through the build products directory and wrapper name. It uses
defaultsto writeGitHashandGitStateto the application Info.plist and sets the plist permissions to0644. Focused checks cover the source stamp, migration precedence and conflicts, localized preference-pane wiring, lock-relative pan, print logging, and the distinction between idle closure and a DIMSE receive timeout. - Requires macOS 15 or later. The GitHub prerelease provides separate application ZIPs for Apple Silicon (arm64) and Intel (x86_64). The IsiXPluginKit SDK is a separate download containing both architectures.
IsiX DICOM Viewer 6.0.0-beta3
IsiX DICOM Viewer 6.0.0-beta3 adds native Modality Worklist queries, imports images and PDFs into existing studies, and adds series, ROI, key-image and T1 mapping commands. It also changes how IsiX discovers legacy plugins and how it reports DICOM print failures.
Modality Worklist
- Mark enabled DIMSE nodes as Worklist sources in Settings > Locations. The Modality Worklist window queries those nodes with the Modality Worklist Information Model C-FIND. It supports today, the next seven days or any date, with optional modality and scheduled station AE title filters. The refresh interval can be set in Locations or left manual.
- Worklist queries run off the UI thread and use the node's TLS configuration and network timeouts. Results from multiple nodes are combined, repeated steps are deduplicated and rows are ordered by scheduled start time. A failed node is reported separately from the rows returned by other nodes.
- The window identifies received studies in the local database by Study Instance UID, then by Accession Number when patient IDs do not conflict, then by Patient ID on the scheduled day. The match is displayed in the worklist. The UI and the plugin network adapter share C-FIND identifier and response coding, including nested sequence keys and character sets.
Study import, database maintenance and key images
- Import JPEG, PNG and TIFF files as DICOM Secondary Capture images and PDFs as DICOM Encapsulated PDF documents in a selected local study. The command is available from File > Import, the database list's context menu and by dropping supported files on a study or series row. Images and PDFs go into separate new series with the selected study's patient and study attributes. The existing database ingest path indexes the generated objects.
- Find Unindexed Files scans the active writable local database's data folder for DICOM files missing from its index. The search shows progress and can be cancelled. After confirmation, it checks the candidates again and indexes eligible files in place. The import uses maintenance options, so these existing files do not trigger incoming routing or arrival notifications.
- Create Key Object Selection Document writes the current study's key-image references to an Of Interest DICOM Key Object Selection document using TID 2010. IsiX reads the written document back before indexing it in a new series. The document can then be sent with the study.
- Indexing an Of Interest Key Object Selection document marks the referenced images of the same study. Images that arrive after their document are marked when they are indexed.
Series and pixel operations
- Duplicate Series opens an independent viewer copy with the source pixels, ROIs, volumetric Length anchors and window settings. Reduce Series opens a copy using a chosen first slice, last slice and step. It preserves the retained slice positions and orientations and adjusts the interval for the step.
- Fill Spacing Gaps is available in the 2D Viewer menu and from the irregular-spacing warning. It fills gaps that are whole multiples of the slice interval with constant-value slices at the missing positions. The new viewer labels inserted slices as missing pixels. The original database series stays intact.
- Reorient All Images to Current Image uses the current image as the reference plane and resamples the series into a new viewer through ITK. Close Viewers of This Study closes the active study's 2D viewers and their associated 3D and 4D windows.
- Invert Pixel Values updates the pixels and windowing in memory. Normalize Series by ROI Mean scales the series by a user-supplied multiplier divided by the mean of the selected ROI. Revert Series reloads the original pixels for both operations.
- Fusion's Division mode makes a ratio image from compatible series using the image alignment applied by the arithmetic pipeline. A zero divisor or non-finite quotient produces a zero output pixel.
ROI export, interpolation and volume
- Export ROIs as CSV is available from the ROI menu and ROI Manager. It exports measurements and pixel statistics for the displayed time point and can write a separate file of ROI points in image coordinates and DICOM patient coordinates. An ROI shared across images is exported once.
- Create Points Between Two Points adds points at 1 mm intervals between two point ROIs in patient space, placing each point on the nearest image. The operation can be undone in one step.
- Generate Mask Series opens a binary mask for ROIs sharing the selected ROI's name. It reports voxel count and, when geometry permits, volume. It shows the result beside Compute Volume and explains the differences due to rasterized outlines and whole-slice counting at the ends.
- Viewer preferences explain how compact labels affect the statistics displayed on ROI labels.
T1 Fit Map
- The native T1 Fit Map filter produces a map in milliseconds in a new viewer. It uses DICOM inversion times for magnitude inversion recovery or flip angles at a common repetition time for variable flip angle acquisitions. Fits are computed per voxel and refined with Levenberg-Marquardt. The filter checks image dimensions and acquisition tags and distinguishes rejected or unconverged voxel fits.
- The native filter is registered when a loaded plugin does not already provide the same menu title. A synthetic DICOM phantom generator supplies both acquisition types for checking the numerical fit and its input tags.
Legacy plugins and DICOM print
- On startup, IsiX offers once to copy legacy
.horospluginand.osirixpluginbundles from Horos and OsiriX support folders into the corresponding active or disabled IsiX folders. Existing destinations with the same name are kept. An interrupted copy resumes from the saved selection without including bundles added after the prompt. - Plugin discovery uses the IsiX plugin folders. Plugins Manager places Install Plugin and Loading Details beside Uninstall. The compatibility inventory identifies legacy plugins whose functions now ship in the viewer. IsiXPluginKit v1 and the legacy plugin ABI remain supported.
- DICOM printing records the failed page and stage, including job preparation, layout, printer configuration, association or DIMSE job rejection. It reports the printer's DIMSE status when available and retains the failed job's configuration and output with the print log. Later pages continue when the printer accepted a page and only its cleanup or association release failed.
Fixes, localization and packaging
- Preset deletion sheets display already formatted messages for color tables, opacity tables and convolution filters. Percent signs in preset names are preserved as text.
- Retrieve & View now resolves the selected series' parent directly on the main actor when called on the main thread. This avoids a Swift 6.4 SILGen crash in Debug batch compilation and retains the worker-thread lookup.
- Added localized menu items, controls and diagnostics for the new worklist, database, viewer, ROI, plugin and print workflows. Focused checks cover the new data paths, including a local Worklist SCP, DICOM object round trips, numerical operations and print failure stages.
- Updated the SwiftNIO pin from 2.83.0 to 2.105.0 and synchronized its notices and source provenance. Distribution bundles include the Swift toolchain's Span compatibility runtime for systems below macOS 26. Packaging trims the embedded Swift runtime to the application's architecture, and the bundle audit accounts for that toolchain library.
- The Xcode build records the Git revision and working-tree state after generating the application Info.plist, so plist processing preserves the source identification.
- Requires macOS 15 or later. Apple Silicon and Intel have separate application ZIPs. The versioned IsiXPluginKit SDK contains both architectures. This prerelease uses the separate beta release assets.
IsiX DICOM Viewer 6.0.0-beta2
IsiX DICOM Viewer 6.0.0-beta2 restores compatibility with legacy Horos and OsiriX plugins alongside IsiXPluginKit v1. It also reorganizes how the application imports studies, manages its database, opens viewers and coordinates network operations. This is a prerelease on the 6.0 line.
Plugins and SDK
- The GitHub edition can install and load compatible
.horospluginand.osirixpluginbinaries under their original extensions. Plugins Manager discovers, lists, activates and deactivates them alongside.isixpluginbundles. Legacy plugins use their own loader and menu dispatch. - The application again provides
Horos.frameworkand theHorosAPI,OsiriXAPI,OsiriX HeadersandHorosDCMframework aliases. The host restores Objective-C classes and selectors, instance-variable symbols and linker interfaces used by legacy binaries, including the entry points used by plugin filters and AppKit resources. - A plugin must match the architecture of the running application and satisfy the loader's executable and macOS requirements. Plugins Manager reports incompatible architecture, format and loader errors, including the missing symbol or library when dyld supplies it. A legacy plugin must retain its original extension. Legacy plugins that draw OpenGL overlays need a port for their overlays to appear in the Metal viewers.
- IsiXPluginKit v1 remains the interface for new plugins. The versioned SDK ZIP contains an arm64 and x86_64 framework, public Swift module interfaces, the API documentation and licenses. The legacy porting kit includes IsiXLegacyBridge, source inventory and porting tools, and a manifest recording the source revision and file checksums. Rebuilding a compatible legacy binary is optional. A source port is useful when adopting the v1 API.
Application structure and preferences
- Added the internal
IsiXContractsmodule for typed database capabilities and values passed between modules, including study and series reads, metadata queries, ingest, maintenance, file conversion and ROI storage. The application implements these interfaces over its database and services. Internal module products link statically. ProcessGraphsupplies shared services. Browser windows and viewer sessions have their own graphs for state and lifetime management. Application startup, menu registration, notifications, thread activity and preference reactions move into separate components.- Typed preference keys, stores and snapshots centralize defaults, validation and migration of existing settings. Updated the preference panes for database and import behavior, networking and routing, hanging protocols, hotkeys, annotations, viewers, reconstruction, printing and the web portal.
Database, import and recovery
- Local file and archive imports, copied media, generated images and series, legacy plugin output and received DICOM objects use a common ingest interface. Import presets specify the applicable validation, indexing and notification rules. A database writer gate and per-database scheduling coordinate imports, conversion, maintenance and publication of saved changes.
- Split DICOM file indexing, DICOMDIR reading, media scanning, compression and decompression, report reconciliation, annotation SR handling and cleanup into separate components. Incoming file staging and import disposal distinguish successful imports from failed conversions. An incomplete WADO-RS multipart file goes to the error folder after the importer recovers its complete parts once, and the same scan can finish indexing the other files it admitted.
- Reworked index opening, model upgrade and rebuild. Rebuild takes a verified recovery snapshot where possible and retains a damaged former index for recovery when a valid snapshot cannot be made. Model upgrade keeps the existing index when the new store cannot be completed. SQL repair, store replacement and reopening coordinate with active writers and private contexts. Recovery notices explain where the previous index was saved and when album or index-only metadata could not be reconstructed.
- Browser source switching, album counts, study and patient-history lists, thumbnails, previews, toolbar state and selection each have a defined owner. Import, source copy, merge, deletion and viewer opening run through separate jobs. Shared-database operations resolve files, key images, annotations and reports against the database that owns the selected study. Shared index replacement waits for viewers of that database, so a viewer of an unrelated local database can stay open during a refresh.
DICOM networking and remote access
- DICOM node records, listener settings, send requests, query filters, automatic query and retrieve, routing selection and retrieve inventory use typed records and queues. App adapters connect these rules to DIMSE, DICOMweb, WADO and Bonjour. Shared-database request parsing and response construction have separate components for wire values and local database access.
- Saved automatic query and retrieve waits for first-use database setup. Query-window changes defer outline reloads while a study expands to fetch its series. Progressive imports and polling share the pending Retrieve & View state so a series opens one viewer when both paths see it arrive.
- Hanging protocols run PACS comparative search and retrieval as a cancellable activity off the browser thread. Matching corroborates patient identity with the issuing authority and demographics. The browser opens verified study identifiers on its own thread within the retrieval deadline.
- Web portal and XML-RPC handlers use the relevant database context and typed settings. Federated study resolution is limited to eligible databases. Objective-C entry points bridge Swift errors in request handlers, including pages and movie generation. First-use portal bindings handle an unavailable context and can recover when a live database becomes available.
Viewers, reconstruction and ROIs
- The 2D viewer separates series loading, presentation, window arrangement and synchronization from the controller. Decode operations keep their pixel buffers alive until in-flight work finishes and apply results through the viewer session.
IsiXImagingowns reusable viewport, window and level, preset, navigation, fusion, reference-line, annotation and series-list rules. - MPR, CPR, endoscopy, surface and volume rendering, and segmentation use the shared services and typed preferences. Camera and geometry handling were reorganized, including restoration of saved volume-rendering cameras. The rendering paths continue to use Metal.
IsiXROIholds brush, grouping, selection, propagation and measurement rules. The host separates editing, archive I/O, interchange, events and undo. ROI archives resolve against the database of the images being edited.- With the two-click Length tool, clicking an existing ROI label selects the ROI. This includes labels for volumetric Length measurements. Label contrast adjustment can mix at most one third white into the ROI's original color. The cap keeps palette colors distinct and can leave contrast below the target at some background opacities. Viewers preferences expose the same compact-label setting as the ROI menu and disable individual statistics controls while compact mode is active.
- Mounted-disc scans publish detection on the main thread so Sources bindings update the table there. Pixel objects retain only the identity of their parsed-file cache group, avoiding a stale reference when an ejected volume clears that cache while its images remain open.
Export and distribution
- Separate workflows now handle DICOM folder export, study lists and metadata, selected images and movies, DICOM printing and mail composition. Export rules handle selection, protected ZIP creation and publication of completed files. Report export removes temporary PDFs after copying them to disc media. A report configured for DICOM PDF archiving is archived when the study enters Validated status, so repeated writes of that status do not create another PDF.
- DCMTK and OpenSSL build from pinned upstream archives at the existing source revisions. The build verifies archive and license hashes, records provenance and reuses verified cached archives for offline builds. DICOM-Swift moves from 3.0.1 to 3.1.1, with matching package pins and attribution.
- Xcode includes the new module products, native build phases and legacy plugin link settings. Localized browser, import, export and menu resources were updated. Regression coverage includes the module and preference boundaries, ingest and recovery, networking, viewer behavior, plugin loading and ABI, and SDK packaging.
- Requires macOS 15 or later. The two application ZIPs contain separate arm64 and x86_64 builds. This prerelease is distributed separately from the stable update channel.
IsiX DICOM Viewer 5.4.0
5.4.0 corrects source-list drawing after mounted-volume scans, ROI label selection during Length placement, and excessive lightening of ROI label colors.
Source-list updates on the main thread
- A completed volume scan now publishes its
detectedstate inside the existing synchronous handoff to the main queue. Reading the Command-key state and publishing detection occur in the same handoff, before the source-selection decision. - The Sources table observes the source description through Cocoa bindings. Publishing detection on the main thread keeps the resulting KVO notifications, table updates and Core Animation transaction on that thread.
- This prevents a scan thread from committing a table-drawing transaction when it exits, which could invoke the main-actor table delegate on the worker thread and terminate the application while browsing a mounted disc or retaining it after copying.
ROI label selection and Length placement
- The two-click Length placement path now checks existing ROI labels before testing contour geometry and handles. A click on a label follows the existing ROI-selection path instead of starting a new Length measurement.
- Volumetric Length ROIs now delegate text-only hit testing to the base ROI implementation, using the label box produced by the existing text-layout code.
- Projected segment and endpoint hit testing continue through the volumetric implementation. The change does not alter patient-space distances or endpoint placement.
ROI label colors and contrast
- Automatic contrast adjustment now mixes an ROI's label color with white by at most one third. This keeps labels associated with their original ROI colors instead of allowing different labels to converge to white.
- Colors that already meet the contrast target are unchanged. Otherwise, the existing search finds the smallest adjustment that reaches the 4.5:1 target within the new limit.
- When the target cannot be reached within that limit, the label uses the capped color rather than falling back to white. The label background and text shadow continue to provide separation from the image. The cap prioritizes color distinction and does not guarantee a 4.5:1 ratio for every background-opacity setting.
Regression coverage
- Added an AppKit regression check using a bound
NSTableViewand a real worker thread. It reproduces drawing triggered by a background property write, compares it with a main-queue write, and checks that the production volume-scan method publishes detection inside its main-queue handoff. - Extended the Length interaction checks to cover clicks inside and outside ROI labels, including volumetric Length labels, without creating an unintended new measurement.
- Extended the color checks across all ten ROI palette colors, selected and unselected backgrounds, and several opacity levels. They check the lightening limit, unchanged colors when no adjustment is needed, minimal adjustment when the target is reachable, and separation between label colors.
Compatibility and downloads
- Requires macOS 15 or later. Apple Silicon and Intel applications are provided as separate GitHub downloads.
- The stable 5.x plugin interfaces are retained. The 6.0 migration and IsiXPluginKit interface remain on the beta release line.
- The Mac App Store edition is Universal 2 for Apple Silicon and Intel. It uses App Sandbox, disables external plugins and receives updates through the App Store.