Skip to content

VIPP 0.13.0a7

Status: published alpha

VIPP 0.13.0a7 extends the reviewed GPU path from isolated filtering and restoration operations into a visible segmentation-and-mask-cleanup corridor. It also makes GPU eligibility repairs and whole-pipeline timing results much easier to understand without silently changing the scientific workflow.

Published alpha — verify exact downloads

The immutable v0.13.0a7 tag, GitHub prerelease, PyPI package, seven GitHub assets, and numbered manual are public. The release verification below records their exact hashes and workflow evidence. The Windows installer is intentionally unsigned: download it only from the official release and verify its checksum before accepting Unknown publisher. Public-download SmartScreen and broader fresh-account field checks remain separate from the completed local operator pass.

Features added

A visible one-click route to an eligible dtype

Some GPU implementations require a finite float32 image while an otherwise eligible workflow supplies uint8 or uint16. VIPP can now show a subtle GPU tip on the affected node. Selecting that node explains the exact input blocker, the proposed dtype, and the memory trade-off.

Add conversion inserts an ordinary visible Convert Dtype node on the affected input. The edit is one undoable graph action and does not modify other branches that share the original source. The conversion uses the authored uint8/uint16 to float32, Preserve contract: it changes the storage dtype without rescaling pixel values. VIPP never inserts this conversion during calculation or changes it merely to win a benchmark.

The conversion itself has a reviewed CuPy implementation, so it can remain in the same device-resident segment as eligible downstream work rather than forcing an avoidable GPU-to-CPU-to-GPU round trip.

A connected GPU segmentation and cleanup path

The public Custom/Prefer-GPU catalogue now includes reviewed regions for:

  • Extract Channel on explicitly described channel axes;
  • Convert Dtype for exact uint8/uint16 to float32 Preserve conversion;
  • Binary Threshold on scalar float32 images;
  • Remove Small Objects on Boolean masks in resolved 2D/3D Face or Full connectivity; and
  • Fill Holes on Boolean masks when Maximum hole size = 0, meaning all enclosed holes are filled.

Integer-label cleanup and positive bounded hole sizes remain on CPU. Prefer GPU normally performs Extract Channel on the host when it is the first operation, then uploads only the selected channel. An explicit Custom GPU selection can instead keep extraction resident when the complete input is already on the device or retaining it is intentional.

The new Portable GPU Segmentation Bridge example connects channel extraction, the exact dtype conversion, Gaussian Blur, Binary Threshold, Remove Small Objects, Fill Holes, and 3D Connected Components. It remains portable: unsupported regions use visible CPU decisions. Its deterministic sample contains four retained objects, one removable 19-voxel speck, and one 31-voxel enclosed cavity so the cleanup steps can be inspected rather than trusted from badges alone.

Broader, explicit Richardson-Lucy backend agreement

Ordinary Richardson–Lucy (RL) and RL-TV now use versioned backend-agreement policies. For the admitted region, CPU and GPU results must have equal shape and float32 dtype, identical finite masks, finite non-negative clipped outputs, normalized root-mean-square error no greater than 0.005, and maximum absolute error no greater than 1e-6 + 0.005 × the CPU-reference peak.

These 0.5% limits test agreement with VIPP's CPU implementation. They are not an image-quality threshold and do not validate the PSF, chosen iteration count, recovered resolution, or biological interpretation.

The ordinary RL region now covers finite authored filter_epsilon values from 1e-12 through 1e-6 and 1 through 100 iterations. Lambda-zero RL-TV inherits that region. Positive-TV runs retain their narrower reviewed parameter points. VIPP never changes epsilon, iterations, or TV parameters to make a call GPU eligible.

The bundled 3D comparison now uses one visible float32 Preserve conversion before both restoration branches while retaining 25 iterations and the authored filter_epsilon=1e-12.

Optimizer results remain inspectable without a winner

Find fastest pipeline now keeps a scientifically successful comparison visible even when CPU and GPU are too close to recommend changing the current assignment. The grouped result view gives each workflow node one heading and one subrow per tested CPU, CuPy-family, or cuCIM implementation.

The compact view emphasizes total execution time, scientific agreement, and the outcome. Optional details expose resident compute time, data movement, First run cost, memory, and evidence provenance. An inconclusive speed result leaves the authored settings unchanged; it is not presented as a GPU eligibility failure and does not hide the completed measurements.

Bug fixes

  • The Windows installer makes CUDA one-click unavailable before environment creation or download when canonical Local App Data contains non-ASCII characters. It obtains that directory through SHGetKnownFolderPath(FOLDERID_LocalAppData) and accepts only the exact VIPP\environments\cpu and VIPP\environments\cuda13 track roots beneath it. Custom managed roots are not accepted. If the canonical directory is non-ASCII, CUDA one-click is unavailable and the UI offers CPU; the fixed CPU root remains Unicode-safe. Expert-selected existing environments remain a separate non-mutating route. An installer-owned CUDA copy already under an incompatible root is not updated or repaired in place, and setup does not claim that a second managed CUDA copy can coexist. Spaces remain supported.
  • When Python's effective Windows temporary directory contains a non-ASCII character, VIPP forces CUPY_CACHE_IN_MEMORY=1. This avoids the affected NVRTC temporary-source filename operation but disables CuPy's disk kernel cache for that process, so Doctor or the first GPU work can compile again in each new process. An RTX 5090 development observation was about 52 seconds cold versus 0.87 seconds for a same-process refresh; it is reference evidence, not a guarantee. The scientific kernels and results are unchanged.
  • A failed CuPy kernel compilation now preserves the real CompileException rather than being masked by a false 512-byte private-pool leak report caused by traceback-held probe arrays.
  • A valid finite decimal Binary Threshold value no longer appears to lose GPU eligibility merely because whole-pipeline timing cannot establish a safe performance winner.
  • A GPU conversion suggestion fails closed if its candidate disappeared, the input changed, or Custom explicitly selected CPU or another implementation.
  • A conversion inserted before a named tunnel is placed beside the affected subscriber without moving a distant source or unrelated downstream branch.
  • GPU guidance remains available in Prefer GPU after calculation when the current input still has the same reviewed dtype-only blocker.

Install or upgrade

The exact 0.13.0a7 release is public on GitHub and PyPI. Use only those official pages and verify downloaded bytes against the hashes below.

For a dedicated CPU environment:

python -m pip install --upgrade "napari[pyqt6]>=0.6" "napari-vipp==0.13.0a7"

For the separate native-Windows CUDA 13 environment:

python -m pip install --upgrade "napari[pyqt6]>=0.6" "napari-vipp[gpu-cuda13]==0.13.0a7"
vipp-compute-doctor --track cuda13 --refresh

The published Windows filenames are VIPP-Setup-0.13.0a7-Windows-x86_64-UNSIGNED.exe and SHA256SUMS-Windows-0.13.0a7.txt. Their public downloads were rehashed against the exact SHA-256 values below. The optional cuCIM route uses the matching a7 no-wheel bundle from the same release; do not reuse an a6 bundle or move another user's private wheel.

For this release, one-click setup uses only the exact per-track roots beneath the canonical Windows Local App Data directory. The managed CUDA path must be ASCII-only because CuPy 14.1.1 cannot reliably compile CUDA kernels from a Windows environment path containing non-ASCII characters. Spaces are supported. If canonical Local App Data is non-ASCII, CUDA one-click is unavailable before environment creation or download and the UI offers CPU. The fixed CPU root remains Unicode-safe. The installer never relocates, edits, or adopts an expert-selected existing environment.

If an older installer-owned CUDA copy is already under a non-ASCII root, do not start a fresh managed installation first. Setup may first complete and record recovery from an earlier interrupted transaction; after that separate recovery, the newly blocked selection performs no new mutation of the old copy and opens Windows Installed apps. Uninstall VIPP (GPU) only through its ownership-bound remover. Setup does not offer a custom managed replacement; if canonical Local App Data is non-ASCII, one-click CUDA remains unavailable and the UI offers CPU. The CUDA track has one Apps entry and shared shortcut names, so this release does not support side-by-side managed CUDA migration.

Preserve the original workflow, batch, output, and provenance files. Preserve the previous environment for ordinary updates and manually managed migrations; the installer-owned Unicode CUDA case above is the explicit exception because that managed copy must be removed first. Open a duplicate workflow, recalculate it on CPU, compare the results that matter, and only then re-enable Auto or Prefer GPU. Generated Python and saved batch runners remain tied to their creator version and should be regenerated and revalidated.

Workflow schema remains version 4. Batch configuration and manifest schema remain version 3. No migration invents a dtype conversion or changes an RL, threshold, or cleanup parameter.

Release verification

Final application source merged to main through pull request #23 at dc8a63912110a75ab1daad0e7f81c2b20e5001e6. The exact-main CI run passed on Windows, Linux, and macOS. The complete local suite passed 5,084 tests, with 5 documented skips, 2 documented expected failures, and no failures.

The clean-source native-Windows RTX 5090 full GPU admission profile passed all 23 executable evidence owners across 18 public implementations. The aggregate evidence SHA-256 is 3ad655f7d3e36055449bda3e8bb41c914e010fd7607ced26763e23045dcee7ae; the admission-manifest SHA-256 is 3b6081b0aec45f81227bd86d86bc0f2df1aa4fe6b28752aa4e96aaee3d8e0ce7. This is bounded reference-system evidence, not a claim for every compatible GPU.

The exact-source artifact set was finalized locally, published on the official GitHub prerelease, downloaded again, and rehashed. The PyPI wheel and source archive digests were independently checked against the same frozen bytes.

Published artifact SHA-256
napari_vipp-0.13.0a7-py3-none-any.whl bcffb0e45eeac75bd15ba969be337400a2db77d63ad7c024ecad2f904f4da01a
napari_vipp-0.13.0a7.tar.gz 09c15fa1520ae2da097bcde0bd67bf6d1d23bb37067b7af76e4bf9c94c73c9e3
napari-vipp-cucim-installer-0.13.0a7-windows.zip c09c697ebedd6f39574be316c76e58419a881971381f38cd617df7648b9faf21
VIPP-Setup-0.13.0a7-Windows-x86_64-UNSIGNED.exe b62c715152447c4b1f8db878996b776ef2bfb0cdc6656df72d3ec94e7818c12f
VIPP-Setup-0.13.0a7-Windows-x86_64-UNSIGNED-release.json bdcd0fa8c545d50a7ebbe3118d75bd1f0a31a0c01c0f52b8a4f0789fd7dcff16
VIPP-Setup-0.13.0a7-Windows-x86_64-UNSIGNED-THIRD-PARTY-NOTICES.txt 95ca668d0977be347ab39af820f97652ed3565ed7ea4218205bb3a716a847e2d
SHA256SUMS-Windows-0.13.0a7.txt 37f0f7c69b8fe270b6b485d54f08bf742b1006867b359e7e3db4843ed079a4d9

Archive and installer artifact gates also passed: Twine accepted the wheel and source archive; the wheel was deterministic; the no-wheel cuCIM ZIP reproduced byte-for-byte; isolated wheel and source-archive installations passed package, resource, entry-point, manifest, and headless checks; and unsigned installer finalization plus native NotSigned inspection passed.

A display-independent acceptance then exercised the production Windows installer engine and registration/removal services from the exact hash-locked a7 wheel, bound to the finalized unsigned EXE above. The CPU route completed a new install, packaged-workflow and segmentation checks, a repair, and an ownership-safe uninstall. The Automatic route selected CUDA 13 on the RTX 5090 system; Compute Doctor admitted 14 of 18 public regions, with only the four optional-cuCIM regions unavailable. The installed package completed the portable segmentation corridor, 3D RL and RL-TV, a non-ASCII effective-TEMP compiler regression, repair, and ownership-safe uninstall. Both routes removed their managed environments, registry entries, shortcuts, cached a7 setup, and transaction residue.

This is exact-artifact production-backend lifecycle evidence; by itself, it did not operate the frozen EXE's setup window. Separately, on 2026-08-15, the operator attested that the exact locally finalized EXE's visible setup and installed-UI checks passed, including visible shortcut launch, the GPU-tip Add conversion/Undo and post-calculation persistence checks, and grouped Find-fastest result readability.

That operator pass used the local finalized bytes. It was not a fresh-account or public-download test. SmartScreen from a public download, unusual account paths, cancellation, network rollback, and novice comprehension therefore remain not run.

Release item Verified status
Final application release commit Passed: dc8a63912110a75ab1daad0e7f81c2b20e5001e6 via PR #23
Annotated immutable v0.13.0a7 tag Passed: public tag peels to dc8a63912110a75ab1daad0e7f81c2b20e5001e6
Exact-source Windows/Linux/macOS CI Passed: run 31830397900
Complete local automated suite Passed: 5,084 tests; 5 skipped; 2 expected failures
Full RTX 5090 GPU admission Passed: 18 implementations; 23 evidence owners; aggregate hash above
Archive and installer artifact gates Passed: Twine, reproducibility, isolated installs, packaged-content checks, finalization, and native unsigned inspection
Exact-artifact CPU production-backend lifecycle Passed: new install, packaged scientific smoke, same-version repair, and ownership-safe uninstall
Exact-artifact CUDA production-backend lifecycle Passed: Automatic CUDA selection, Doctor, segmentation, RL/RL-TV, Unicode-TEMP regression, repair/re-smoke, and ownership-safe uninstall
Exact locally finalized EXE setup-window and installed-UI operator acceptance Passed: operator attested the visible checklist on 2026-08-15
Downloaded-installer execution, SmartScreen, and fresh-account field acceptance Not run; remains post-publication field evidence
Public GitHub alpha prerelease Passed: seven exact assets published and downloaded hashes matched
Public PyPI wheel and source archive Passed: workflow 31871324192; both public digests matched
Unsigned Windows installer, release manifest, notices, and checksum Passed: public GitHub assets rehashed exactly; Windows status remains NotSigned
Matching optional cuCIM no-wheel bundle Passed: public GitHub asset rehashed exactly and contains no wheel
Numbered 0.13.0a7 manual Passed: workflow 31871275481 and required URLs returned 200
Updated stable alias after PyPI verification Passed: workflow 31871941473; versions.json maps stable to 0.13.0a7 and required URLs returned 200

Fresh-account CPU/CUDA installation, a fresh account whose canonical Windows Known Folder contains non-ASCII characters, spaces and Unicode CPU paths, interrupted/network rollback, update from an older release, public-download SmartScreen behavior, RTX 40-series Windows, native Linux CUDA, and a timed novice path remain not run unless separately recorded after publication.

Historical 0.13.0a6 source, CI, installer, artifact hashes, and publication evidence remain unchanged in the 0.13.0a6 release verification.