Skip to content

Which Package Do I Need?

These packages form a stack. Each one builds on the ones below it, and installing one installs all of the Python packages below it, so you only need to pick one:

%% pymm:align-groups (see pymm.js)
graph TB
  subgraph py [Python]
    gui(pymmcore-gui)
    nmm(napari-micromanager)
    ndv(ndv)
    napari(napari)
    widgets(pymmcore-widgets)
    plus(pymmcore-plus)
    useq(useq-schema)
    omew(ome-writers)
    pyqt(PyQt / PySide)
    pymmcore(pymmcore)
  end
  subgraph cpp ["C++"]
    qt(Qt)
    core(MMCore)
    adapters("device adapters<br/>(cameras, stages, ...)")
  end
  gui --> ndv
  gui --> widgets
  nmm --> widgets
  nmm --> napari
  widgets --> pyqt
  widgets --> plus
  plus --> useq
  plus --> omew
  plus --> pymmcore
  pyqt -.-> qt
  pymmcore -.-> core
  core --> adapters
  classDef app fill:#7c3aed,stroke:#7c3aed,color:#fff
  classDef wid fill:#db2777,stroke:#db2777,color:#fff
  classDef lib fill:#3279b2,stroke:#3279b2,color:#fff
  classDef mm fill:#0d9488,stroke:#0d9488,color:#fff
  classDef ext fill:#6b7280,stroke:#6b7280,color:#fff
  style py rx:10px,ry:10px
  style cpp rx:10px,ry:10px
  class gui,nmm app
  class widgets wid
  class plus,useq,omew lib
  class pymmcore,core,adapters mm
  class ndv,napari,pyqt,qt ext
  click gui "../../pymmcore-gui/"
  click nmm "../../napari-micromanager/"
  click widgets "../../pymmcore-widgets/widgets/"
  click plus "../../pymmcore-plus/"
  click useq "../../useq-schema/"
  click omew "https://pymmcore-plus.github.io/ome-writers/" _blank
  click ndv "https://pyapp-kit.github.io/ndv/" _blank
  click napari "https://napari.org" _blank
  click pymmcore "https://github.com/micro-manager/pymmcore" _blank
  click core "https://github.com/micro-manager/mmCoreAndDevices" _blank
  click adapters "../install/#installing-the-device-adapters"

An arrow means "uses": pymmcore-widgets uses pymmcore-plus, which uses pymmcore to talk to Micro-Manager's C++ core, which in turn talks to your hardware through the device adapters.

(If you've used Micro-Manager before, Coming from Micro-Manager maps what you know onto these packages.)

Applications

If you mainly want to work with your microscope through a GUI, start with one of the two apps. They're alternatives to each other, both built on the libraries below. Both can be scripted from Python while they're running, and pymmcore-gui can be extended with your own widgets, so they're worth a look even if you write code:

App What it is Start here
pymmcore-gui A desktop application (our replacement for Micro-Manager's Java GUI, still early) pymmcore-gui
napari-micromanager Microscope control from inside napari napari-micromanager

Libraries

If you want to write your own scripts or applications, pick the highest library you need (it includes the ones below it):

If you want to… Use Start here
Build your own Qt GUI for a microscope pymmcore-widgets Your first GUI
Script your microscope, or run multi-dimensional acquisitions pymmcore-plus First steps, then Your first acquisition
Describe experiments without any hardware useq-schema Describing experiments

(A multi-dimensional acquisition, or MDA, is a series of images across time points, stage positions, channels, z-planes, etc... It's what Micro-Manager's Multi-D Acquisition window does.)

Installing

The Micro-Manager device adapters (the drivers for your hardware) are not Python packages, so none of these install them for you. Installation covers the packages and the adapters, so whichever one you pick, start there.

What each package does

pymmcore-plus
Extends pymmcore, the Python bindings for Micro-Manager's C++ core. CMMCorePlus aims to be a drop-in replacement for CMMCore, adding an event system, an acquisition engine written in Python, and a number of convenience methods. It also provides the mmcore command line tool.
useq-schema
A schema for describing multi-dimensional acquisitions (MDASequence, MDAEvent). It tries to stay agnostic to the acquisition engine (though it was designed around what Micro-Manager can do).
ome-writers
Writes OME-Zarr and OME-TIFF files. pymmcore-plus uses it to save acquisitions, but it doesn't depend on Micro-Manager and can be used on its own.
pymmcore-widgets
Qt widgets for a CMMCorePlus: property browsers, device controls, configuration editors, MDA editors, image previews, etc...
pymmcore-gui
A desktop application built from all of the above (plus the ndv viewer). The goal is a pure-Python replacement for Micro-Manager's Java GUI. It's still early days, so expect some rough edges.
napari-micromanager
A napari plugin for controlling a microscope from the napari viewer. It's still maintained, but current development is focused on pymmcore-gui.