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/uint16tofloat32Preserve conversion; - Binary Threshold on scalar
float32images; - 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 exactVIPP\environments\cpuandVIPP\environments\cuda13track 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
CompileExceptionrather 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:
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.