Metadata-Version: 2.4
Name: napari-vipp
Version: 0.15.0a5
Summary: Visual image processing made approachable
Author: Rensu P. Theart
License-Expression: BSD-3-Clause
Project-URL: Homepage, https://github.com/rensutheart/napari-vipp
Project-URL: Documentation, https://rensutheart.github.io/vipp-mkdocs/
Project-URL: Repository, https://github.com/rensutheart/napari-vipp
Project-URL: Issues, https://github.com/rensutheart/napari-vipp/issues
Project-URL: Discussions, https://github.com/rensutheart/napari-vipp/discussions
Keywords: bioimage analysis,fluorescence microscopy,image processing,napari,node graph,visual programming
Classifier: Development Status :: 3 - Alpha
Classifier: Framework :: napari
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Classifier: Topic :: Scientific/Engineering :: Image Processing
Classifier: Topic :: Scientific/Engineering :: Visualization
Requires-Python: <3.14,>=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: NOTICE
Requires-Dist: czifile<2027,>=2026.8.16
Requires-Dist: dask[array]>=2025.2
Requires-Dist: fast-simplification<0.3,>=0.2.0
Requires-Dist: fsspec>=2024.2
Requires-Dist: imageio>=2.31
Requires-Dist: imagecodecs<2027,>=2026.8.16
Requires-Dist: liffile<2027,>=2026.7.14
Requires-Dist: matplotlib<4,>=3.7
Requires-Dist: nd2[legacy]<0.12,>=0.11.1
Requires-Dist: oiffile<2027,>=2026.2.8
Requires-Dist: oirfile<2027,>=2026.7.28
Requires-Dist: numpy>=1.24
Requires-Dist: ome-types>=0.6
Requires-Dist: ome-zarr>=0.17
Requires-Dist: packaging>=23
Requires-Dist: pillow>=10
Requires-Dist: psutil>=5.9
Requires-Dist: psygnal<0.16,>=0.14
Requires-Dist: qtpy>=2.4
Requires-Dist: scikit-image>=0.21
Requires-Dist: scipy>=1.10
Requires-Dist: tifffile>=2023.8
Requires-Dist: zarr>=3.0
Provides-Extra: app
Requires-Dist: napari[pyqt6]>=0.6; extra == "app"
Provides-Extra: gpu-cuda12
Requires-Dist: numpy==2.5.1; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: scipy==1.18.0; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: scikit-image==0.26.0; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: cupy-cuda12x[ctk]==14.1.1; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: cuda-pathfinder==1.6.0; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: cuda-toolkit==12.9.2.0; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: nvidia-cublas-cu12==12.9.2.10; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: nvidia-cuda-nvrtc-cu12==12.9.86; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: nvidia-cuda-runtime-cu12==12.9.79; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: nvidia-cufft-cu12==11.4.1.4; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: nvidia-curand-cu12==10.3.10.19; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: nvidia-cusolver-cu12==11.7.5.82; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: nvidia-cusparse-cu12==12.5.10.65; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Requires-Dist: nvidia-nvjitlink-cu12==12.9.86; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda12"
Provides-Extra: gpu-cuda13
Requires-Dist: numpy==2.5.1; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: scipy==1.18.0; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: scikit-image==0.26.0; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: cupy-cuda13x[ctk]==14.1.1; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: cuda-pathfinder==1.6.0; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: cuda-toolkit==13.2.2; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: nvidia-cublas==13.4.1.3; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: nvidia-cuda-nvrtc==13.2.86; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: nvidia-cuda-runtime==13.2.86; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: nvidia-cufft==12.2.0.57; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: nvidia-curand==10.4.2.66; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: nvidia-cusolver==12.2.0.11; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: nvidia-cusparse==12.7.10.12; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Requires-Dist: nvidia-nvjitlink==13.2.86; (python_version == "3.12" and (platform_system == "Windows" or platform_system == "Linux")) and extra == "gpu-cuda13"
Provides-Extra: czi
Requires-Dist: bioio>=3.4; extra == "czi"
Requires-Dist: bioio-czi; extra == "czi"
Requires-Dist: czifile[all]>=2026.6.12; python_version >= "3.12" and extra == "czi"
Provides-Extra: dev
Requires-Dist: build>=1.2; extra == "dev"
Requires-Dist: napari[pyqt6]>=0.6; extra == "dev"
Requires-Dist: npe2>=0.8; extra == "dev"
Requires-Dist: numpy==2.5.1; extra == "dev"
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: pytest-qt>=4.4; extra == "dev"
Requires-Dist: ruff>=0.12; extra == "dev"
Requires-Dist: scikit-image==0.26.0; extra == "dev"
Requires-Dist: scipy==1.18.0; extra == "dev"
Provides-Extra: installer-build
Requires-Dist: altgraph==0.17.5; extra == "installer-build"
Requires-Dist: build==1.5.0; extra == "installer-build"
Requires-Dist: pefile==2024.8.26; extra == "installer-build"
Requires-Dist: pyinstaller==6.21.0; extra == "installer-build"
Requires-Dist: pyinstaller-hooks-contrib==2026.6; extra == "installer-build"
Requires-Dist: PyQt6==6.10.2; extra == "installer-build"
Requires-Dist: PyQt6-Qt6==6.10.2; extra == "installer-build"
Requires-Dist: PyQt6-sip==13.11.1; extra == "installer-build"
Requires-Dist: pywin32-ctypes==0.2.3; extra == "installer-build"
Requires-Dist: setuptools==82.0.1; extra == "installer-build"
Requires-Dist: wheel==0.47.0; extra == "installer-build"
Provides-Extra: bioformats
Requires-Dist: bioio>=3.4; extra == "bioformats"
Requires-Dist: bioio-bioformats; extra == "bioformats"
Requires-Dist: bioio-czi; extra == "bioformats"
Requires-Dist: bioio-lif; extra == "bioformats"
Provides-Extra: microscope
Requires-Dist: bioio>=3.4; extra == "microscope"
Requires-Dist: bioio-bioformats; extra == "microscope"
Requires-Dist: bioio-czi; extra == "microscope"
Requires-Dist: bioio-lif; extra == "microscope"
Requires-Dist: czifile[all]>=2026.6.12; python_version >= "3.12" and extra == "microscope"
Requires-Dist: liffile[all]>=2026.4.11; python_version >= "3.12" and extra == "microscope"
Requires-Dist: nd2>=0.11; extra == "microscope"
Requires-Dist: oiffile[all]>=2026.2.8; python_version >= "3.11" and extra == "microscope"
Requires-Dist: oirfile[all]>=2026.4.25; python_version >= "3.12" and extra == "microscope"
Provides-Extra: nd2
Requires-Dist: nd2>=0.11; extra == "nd2"
Dynamic: license-file

<p align="center">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/rensutheart/napari-vipp/main/docs/assets/branding/vipp-logo-dark.svg">
    <img src="https://raw.githubusercontent.com/rensutheart/napari-vipp/main/docs/assets/branding/vipp-logo.svg" alt="VIPP" width="420">
  </picture>
</p>

# VIPP — Visual Image Processing Platform

**Design inspectable bioimage workflows with visual feedback at every stage.**

Visual image processing made approachable through **visual workflows for
reproducible bioimage analysis**.

[![CI](https://github.com/rensutheart/napari-vipp/actions/workflows/ci.yml/badge.svg)](https://github.com/rensutheart/napari-vipp/actions/workflows/ci.yml)
[![PyPI](https://img.shields.io/pypi/v/napari-vipp.svg)](https://pypi.org/project/napari-vipp/)
[![Python](https://img.shields.io/pypi/pyversions/napari-vipp.svg)](https://pypi.org/project/napari-vipp/)
[![License](https://img.shields.io/pypi/l/napari-vipp.svg)](LICENSE)

VIPP is an open-source, napari-native platform for building bioimage analyses
as visual graphs. Connect image, mask, label and table nodes, inspect parameters
and intermediate results, compare processing routes on the same input, and then
move from representative samples to collection-wide execution.

Build and run workflows from the available nodes without writing Python. Save
them as versioned JSON, export them as Python, and retain the source, axes,
calibration, parameters, outputs and implementation provenance needed to
understand how results were produced.

> **Alpha software:** workflows and parameters may still change. Validate every
> analysis on representative data before scientific interpretation or
> publication.

![VIPP workspace with a calculated 3D deconvolution workflow](https://raw.githubusercontent.com/rensutheart/napari-vipp/main/docs/assets/user-guide/vipp-3d-deconvolution-workspace.png)

*A calculated 3D deconvolution workflow with the node catalogue, thumbnail
previews and selected-node inspector visible together.*

## Why VIPP

- **See each transformation.** Inspect images, histograms, tables, metadata and
  parameters while designing the workflow.
- **Iterate locally.** Recalculate one stage without repeatedly running every
  later step.
- **Compare approaches.** Apply different processing routes to the same input
  and inspect the consequences side by side.
- **Check before scaling.** Test representative samples before running the
  workflow across an image collection.
- **Keep the analysis record.** Save the graph, export Python, define batch
  outputs and preserve execution provenance.
- **Accelerate selected operations.** Dedicated GPU implementations are
  available for supported filtering, restoration, segmentation and measurement
  operations.

## Install

For this version, use the
[`v0.15.0a5` release page](https://github.com/rensutheart/napari-vipp/releases/tag/v0.15.0a5).

| Platform | Recommended route |
| --- | --- |
| Windows 64-bit | Download `VIPP-Setup-0.15.0a5-Windows-x86_64-UNSIGNED.exe` from the release page. The setup application creates and manages a dedicated VIPP environment. A supported 64-bit Python is a separate prerequisite. |
| macOS Apple Silicon | Download `VIPP-0.15.0a5-macOS-arm64-UNSIGNED.pkg`. The package is self-contained and CPU-only. |
| macOS Intel | Download `VIPP-0.15.0a5-macOS-x86_64-UNSIGNED.pkg`. The package is self-contained and CPU-only. |
| Linux or an existing Python environment | Use the manual installation below. CPU execution is supported. |

The desktop installers are unsigned alpha builds. Download them only from the
official release, verify the matching SHA-256 file, and follow the
[Quick Start](https://rensutheart.github.io/vipp-mkdocs/stable/getting-started/installation/) for the exact platform instructions.

For a manual installation, use a dedicated CPython 3.12 or 3.13 environment.
On Windows or Linux:

```bash
python -m pip install "napari[pyqt6]>=0.6" "napari-vipp==0.15.0a5"
vipp
```

On macOS, replace `"napari[pyqt6]>=0.6"` with `"napari[pyside6]>=0.6"`.
The macOS route is CPU-only.

Inside an existing napari session, open:

```text
Plugins > VIPP Workflow (napari-vipp)
```

## Try A Bundled Workflow

No external data is needed for the first run:

1. Launch VIPP, open the gear menu, and select **Open example…**.
2. Open **Red-Channel Label Cleanup**.
3. Select the nodes from left to right. Inspect their parameters, previews,
   histograms, metadata and outputs.
4. Change a parameter and compare the affected stages. Use **Calculate** where
   a computationally intensive node requires an explicit run.
5. Pin an output into napari for full-resolution inspection, then save the
   workflow as JSON.

Next, open **Deterministic Batch & Provenance** for a self-contained example of
collection processing and reproducibility artifacts. See the
[example workflow index](https://rensutheart.github.io/vipp-mkdocs/stable/reference/example-workflows/) for more starting points.

## Analysis Coverage

| Goal | Available building blocks |
| --- | --- |
| Prepare images | Intensity transforms, background correction, filtering, denoising, channel handling, axis operations, masks and volume regions of interest. |
| Segment structures | Global and local thresholds, edges, watershed, binary morphology, label cleanup and connected-component operations. |
| Quantify results | Object and intensity measurements, calibrated 3D mesh morphology, skeleton and network analysis, colocalisation, object association and table composition. |
| Restore images | Measured or generated point-spread functions, Richardson–Lucy and RL–TV deconvolution in 2D and 3D. |
| Reuse analyses | Workflow JSON, generated Python, explicit batch outputs, collection manifests and execution provenance. |

VIPP reads OME-TIFF, ImageJ TIFF, TIFF, local OME-Zarr 0.4/0.5,
NPY/NPZ and common 2D image formats. Optional readers add formats including ND2
and CZI. The [I/O guide](https://rensutheart.github.io/vipp-mkdocs/stable/reference/import-export/) documents the complete matrix,
metadata behavior and limitations.

Most graph operations currently materialize their inputs in memory. Plan cache,
preview and output choices deliberately for large z-stacks and OME-Zarr data.
See [Cache and memory](https://rensutheart.github.io/vipp-mkdocs/stable/reference/cache-memory/).

## GPU Acceleration (Optional)

VIPP is fully usable on CPU on Windows, Linux and macOS. Selected
computationally intensive operations offer dedicated GPU acceleration on
qualified NVIDIA systems. VIPP records the implementation that ran, and a GPU
request that cannot be honored falls back visibly to CPU.

The current public GPU route uses native 64-bit Windows, CPython 3.12, CUDA 13
and an NVIDIA GPU with compute capability 7.5 or newer. Performance depends on
the operation, data and hardware. See the [GPU Guide](https://rensutheart.github.io/vipp-mkdocs/stable/how-to/choose-compute/) for
installation, supported operation families, qualification and benchmarking.

## Reproducibility And Scientific Traceability

VIPP keeps workflow structure, parameters and intermediate decisions visible
during interactive design. Saved and batch-run workflows can retain source
identity, semantic axes, physical calibration, selected outputs and the actual
CPU or GPU implementation used.

This record supports reproducibility, but it does not establish biological
validity automatically. Users remain responsible for checking assumptions,
parameter choices and results on suitable controls and representative data.
Read the [scientific integrity boundaries](https://rensutheart.github.io/vipp-mkdocs/stable/developer/architecture/#non-negotiable-scientific-contracts)
and [scientific behavior requirements](CONTRIBUTING.md#scientific-behavior-requirements).

## Documentation

The [VIPP manual](https://rensutheart.github.io/vipp-mkdocs/stable/) is the single
home for user instructions. Select a version in the manual to match your installation.

- [Quick Start](https://rensutheart.github.io/vipp-mkdocs/stable/getting-started/installation/) — installers, manual setup and the first workflow
- [User Guide](https://rensutheart.github.io/vipp-mkdocs/stable/how-to/) — graph authoring, inspection, batch processing and export
- [Example workflows](https://rensutheart.github.io/vipp-mkdocs/stable/reference/example-workflows/) — bundled starting points by analysis task
- [Image import and export](https://rensutheart.github.io/vipp-mkdocs/stable/reference/import-export/) — formats, metadata and collection inputs
- [GPU Guide](https://rensutheart.github.io/vipp-mkdocs/stable/how-to/choose-compute/) — acceleration, qualification and benchmarking
- [Measurement workflows](https://rensutheart.github.io/vipp-mkdocs/stable/workflows/object-measurements-tables/) — quantitative analysis patterns
- [Architecture](https://rensutheart.github.io/vipp-mkdocs/stable/developer/architecture/) — execution and scientific-integrity contracts
- [Troubleshooting](https://rensutheart.github.io/vipp-mkdocs/stable/troubleshooting/) — common problems and support

## Development And Support

Implementation context stays with the code: [contributing](CONTRIBUTING.md),
[architecture](docs/architecture.md), [planning and roadmap](docs/planning.md),
[repository documentation](docs/README.md), and [changelog](CHANGELOG.md).
See [documentation ownership](docs/documentation.md) before editing a guide.

```powershell
python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"
python -m npe2 validate src/napari_vipp/napari.yaml
python -m ruff check .
python -m pytest
```

Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request. Ask usage
questions in [GitHub Discussions](https://github.com/rensutheart/napari-vipp/discussions),
use [SUPPORT.md](SUPPORT.md) for help, report vulnerabilities privately through
[SECURITY.md](SECURITY.md), and follow the [Code of Conduct](CODE_OF_CONDUCT.md).

## Citation And License

If VIPP contributes to your work, acknowledge `napari-vipp` and link to this
repository. Citation metadata is available in [CITATION.cff](CITATION.cff). A
DOI or manuscript citation will be added when available.

napari-vipp is distributed under the BSD 3-Clause License. See
[LICENSE](LICENSE) for the full terms.
