Skip to main content

A napari plugin for padbound

Project description

napari-padbound

License BSD-3 PyPI Python Version napari hub

A napari plugin for controlling image annotation workflows with MIDI controllers via padbound.

Use physical pads, knobs, faders, and buttons to navigate slices, select labels, adjust brush size, zoom, undo/redo, and more — with real-time LED feedback showing your current label colors on the controller.

Features

  • Auto-detection — Automatically finds and connects to any padbound-supported MIDI controller
  • Smart control mapping — Automatically assigns available hardware controls to napari functions based on controller capabilities
  • Slice navigation — Coarse and fine navigation through 3D+ data volumes via faders or knobs
  • Slice stepping — Increment/decrement slices one at a time via navigation buttons
  • Zoom control — Logarithmic zoom mapping (0.01x–10x) via knobs or faders
  • Brush size control — Logarithmic brush size adjustment (1–100px) for label painting
  • Label selection — Select labels by pressing pads; pad 1 is the eraser, remaining pads map to labels 1, 2, 3, ...
  • LED color feedback — Pads display actual label colors from the napari colormap, with the selected label pulsing (on RGB-capable controllers)
  • Dimension rolling — Cycle through dimension views (XY, YZ, XZ) via navigation buttons
  • Undo/redo — Transport buttons for edit history on the active Labels layer
  • Graceful degradation — Three feedback strategies (RGB color, binary toggle, none) adapt automatically to controller capabilities

Supported Controllers

Any controller with a padbound plugin works automatically. Currently supported:

Controller Best for Key controls
AKAI APC mini MK2 Full RGB feedback, many faders 64 RGB pads, 9 faders, 17 buttons
AKAI LPD8 MK2 Compact RGB + knobs 8 RGB pads, 8 knobs, 4 banks
AKAI MPD218 Velocity-sensitive pads 16 pads, 6 encoders, 3 banks
PreSonus ATOM RGB pads + encoders + buttons 16 RGB pads, 4 encoders, 20 buttons
Synido TempoPad P16 RGB pads + transport 16 RGB pads, 4 encoders, 6 buttons
Behringer X-Touch Mini Encoders with LED rings 16 pads, 8 encoders, 1 fader
Xjam Budget option, multi-bank 16 pads, 6 knobs, 3 banks

How Control Mapping Works

The plugin automatically discovers available controls and assigns them by priority:

Continuous controls (assigned in order: faders first, then knobs, then encoders):

  1. First control → Coarse slice (full range of the data volume)
  2. Second control → Fine slice (±64 slices around the coarse position)
  3. Third control → Brush size (logarithmic, 1–100px)
  4. Fourth control → Zoom (logarithmic, 0.01x–10x)

PadsLabel selection (pad 1 = eraser, pad 2+ = labels)

Navigation buttons → Up/Down = slice step, Left/Right = dimension roll

Transport buttons → Stop = undo, Play = redo

The widget displays the detected controller and its mapped controls so you can see what each physical control does.

Installation

pip install napari-padbound

For development:

git clone https://github.com/uermel/napari-padbound.git
cd napari-padbound
pip install -e ".[dev,testing]"

Usage

  1. Connect a supported MIDI controller via USB
  2. Open napari
  3. Go to Plugins > padbound to open the widget
  4. Load a 3D image and create a Labels layer
  5. Use your controller to navigate slices, select labels, and annotate

The widget shows the connected controller name and the mapping of physical controls to napari functions. If no controller is detected, the widget will indicate this.

Development

# Linting
ruff check src/
ruff format src/
black src/

# Run tests
pytest

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

Distributed under the terms of the BSD-3 license, napari-padbound is free and open source software.

Issues

If you encounter any problems, please file an issue along with a detailed description.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

napari_padbound-0.2.0.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

napari_padbound-0.2.0-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

Details for the file napari_padbound-0.2.0.tar.gz.

File metadata

  • Download URL: napari_padbound-0.2.0.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for napari_padbound-0.2.0.tar.gz
Algorithm Hash digest
SHA256 351b54fcb621948327398e8f0c2013d7832b8f27be4b3e1c5ab792bc01e5b974
MD5 7d04d0396d6c4ef5a5f2c2e392fd26df
BLAKE2b-256 af3535d1af3adffea2d6ec28201c315aa173b069123e77ff6f7438258db80865

See more details on using hashes here.

Provenance

The following attestation bundles were made for napari_padbound-0.2.0.tar.gz:

Publisher: release-please.yml on uermel/napari-padbound

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file napari_padbound-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for napari_padbound-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f75d2c4f13fa9d896d78216c18243cbc6e4ff8fadc11d1f9ef55ef07b9ce08b8
MD5 1fd75d94f1042fab314a188f5f78b43f
BLAKE2b-256 ed5bbd68355fba7100a556f750ae1a22693fce7b784943d01712aa8660207d65

See more details on using hashes here.

Provenance

The following attestation bundles were made for napari_padbound-0.2.0-py3-none-any.whl:

Publisher: release-please.yml on uermel/napari-padbound

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page