Skip to content

ndev-kit/ndev-workflows

Repository files navigation

ndev-workflows

License BSD-3 PyPI Python Version tests codecov napari hub npe2 Copier

Reproducible processing workflows with napari

A re-implementation of napari-workflows with backwards compatibility.


This [napari] plugin was generated with [copier] using the [napari-plugin-template] (2.0.1).

What is ndev-workflows?

ndev-workflows is the workflow backend for napari image processing pipelines. It's a drop-in replacement for napari-workflows by Robert Haase, with these key improvements:

  • Safe YAML loading — Uses yaml.safe_load() (no arbitrary code execution)
  • Backwards compatible — Automatically loads and migrates legacy napari-workflows files, and detects missing dependencies
  • Same API — Most code works without changes
  • Future-ready — Designed for upcoming npe2 workflow contributions (WIP), without relying on npe1, napari-time-slicer, and napari-tools-menu for interactivity

Installation

pip install ndev-workflows

If napari is not already installed, you can install ndev-workflows with napari and Qt via:

pip install "ndev-workflows[all]"

Quick Start

from ndev_workflows import Workflow, save_workflow, load_workflow
from skimage.filters import gaussian

# Create workflow
workflow = Workflow()
workflow.set("blurred", gaussian, "input_image", sigma=2.0)
workflow.set("input_image", my_image)

# Execute
result = workflow.get("blurred")

# Save
save_workflow("pipeline.yaml", workflow, name="My Pipeline")

# Load and reuse
loaded = load_workflow("pipeline.yaml")
loaded.set("input_image", new_image)
result = loaded.get("blurred")

YAML Format

Saved workflows use a safe, human-readable format:

name: Nucleus Segmentation
description: Gaussian blur and thresholding
modified: '2025-12-22'

inputs:
  - raw_image

outputs:
  - labels

tasks:
  blurred:
    function: skimage.filters.gaussian
    params:
      arg0: raw_image
      sigma: 2.0

  labels:
    function: skimage.measure.label
    params:
      arg0: blurred

Key features:

  • No !python/object tags (safe to share)
  • Functions imported by module path
  • Params use arg0, arg1, etc. for positional args and keyword names for kwargs

Legacy format: Old napari-workflows YAML files are automatically detected and migrated when loaded.


Important Notes

Function Dependencies

⚠️ Workflows don't bundle functions — they only store module paths. Recipients need the same packages installed.

If loading fails with WorkflowNotRunnableError, install the missing package:

pip install scikit-image  # for skimage functions
pip install napari-segment-blobs-and-things-with-membranes  # for that plugin

Lazy Loading

Inspect workflows without importing functions:

workflow = load_workflow("untrusted.yaml", lazy=True)
print(workflow.tasks)  # Safe - doesn't execute

Integration

Front-end plugins for interactive workflow building:

Works with processing plugins:


Contributing

git clone https://github.com/ndev-kit/ndev-workflows.git
cd ndev-workflows
uv venv
.venv\Scripts\activate
uv pip install -e . --group dev
pytest

License

Distributed under the terms of the [BSD-3] license, "ndev-workflows" is free and open source software Fork of napari-workflows by Robert Haase.


Issues

File an issue with your environment details, YAML file (if applicable), and error messages.

About

Dask backed workflows for napari and more

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages