Micro-Manager Device Adapters¶
Just like the underlying pymmcore library,
pymmcore-plus relies on the device adapters and C++ core provided by
mmCoreAndDevices.
(The Python packages themselves are covered on the
Installation page.)
Installing Micro-Manager device adapters¶
The device adapters can be installed in two ways:
-
Use the
mmcorecommand line toolpymmcore-plusprovides a quick way to install the latest compatible version of Micro-Manager:This will download the most recent nightly build of Micro-Manager that matches your version of
pymmcoreand, by default, place it in apymmcore-plus/mmfolder in the user's data directory:OS Path Windows C:\Users\UserName\AppData\Local\pymmcore-plus\pymmcore-plus\mmmacOS ~/Library/Application Support/pymmcore-plus/mmLinux ~/.local/share/pymmcore-plus/mmIf you would like to modify the location of the installation, or the release of Micro-Manager to install, you can use the
--destand--releaseflags respectively.For more information on the
installcommand, run:To explore all the
mmcorecommand line tool functionalities, runmmcore --help(or see the CLI reference). -
Download manually from micro-manager.org
Go to the Micro-Manager nightly builds page and download a build for your operating system whose device interface version matches your
pymmcore(see below). This is not necessarily the latest release.
Apple Silicon and Linux
Micro-Manager only publishes nightly builds for Windows and Intel macOS. On
Linux, and on macOS with an Apple Silicon (M1, M2, ...) processor,
mmcore install prints Unsupported platform/architecture for nightly build
and installs just the test adapters (DemoCamera, Utilities,
SequenceTester and NotificationTester) from
mm-test-adapters. That's
enough for the demo configuration used throughout these docs, but to
control real hardware you will need to build the adapters you need
(see Building device adapters below).
Critical
The device interface version MUST match between pymmcore and the
Micro-Manager device adapters. See below.
Showing the current installation¶
To see which Micro-Manager installations pymmcore-plus has found, and which one
it is using, run:
The output looks something like this (the active installation is marked with ➤):
Required pymmcore device interface version: 75
📁 ~/Library/Application Support/pymmcore-plus/mm
➤ Micro-Manager-75.20260226 (DIV 75) (active)
• Micro-Manager-74.20260129 (DIV 74) (incompatible)
From Python, you can use find_micromanager:
Setting the active installation¶
When you create a CMMCorePlus, pymmcore-plus
looks for device adapters in the following places, and uses the first one whose
device interface version matches pymmcore:
- The
MICROMANAGER_PATHenvironment variable (always used, if set). - A path previously selected with
mmcore use(see below). If it's no longer compatible, it is forgotten (with a warning). - The
mmcore installfolder in the user data directory (see the table above). If there are several compatible installations there, the last one in alphabetical order is used. - The
mm-test-adaptersPython package, if it is installed. - A
Micro-Manager*folder in the default Micro-Manager install location:C:\Program Files\on Windows,/Applications/on macOS, and/usr/local/lib/on Linux.
So if you already have Micro-Manager installed in the default location, and
mmcore list says that it is compatible, it will be found automatically (unless
one of the earlier locations also has a compatible installation). If
mmcore list says that it's incompatible, run mmcore install to get a
compatible set of adapters.
Using the Micro-Manager app too?
That's fine, but pymmcore-plus doesn't connect to a running Micro-Manager
(it loads the device adapters itself). Most devices can only be opened by one
program at a time, so close Micro-Manager before you load the same hardware
configuration in Python (and vice versa).
To override the device adapter search path for a single session (or script), set
the MICROMANAGER_PATH environment variable:
(For a single core object, you can also pass the folder directly:
CMMCorePlus(mm_path="/path/to/installation").)
If you want to permanently set the Micro-Manager installation path that
pymmcore-plus uses, you can use the mmcore use command:
... where <some path or pattern> is either a path to an existing directory
(containing Micro-Manager device adapters) or a pattern to match against
directories returned by find_micromanager.
Alternatively, you can use the
use_micromanager function, passing either
a path to an existing directory, or a pattern to match against directories
returned by find_micromanager:
Building device adapters¶
On Linux and Apple Silicon there are no pre-built Micro-Manager adapters beyond
the test devices, so you will need to build the C++ core and device adapters
yourself from
mmCoreAndDevices.
To do that, follow the build
instructions
in the micro-manager repo, then point pymmcore-plus at the folder with
mmcore use.
On macOS and Linux, mmcore build-dev can also clone the repository and build a
few adapters for you (DemoCamera, Utilities and SequenceTester by default,
or the names you pass it). Not all adapters will build this way, and you'll need
the build tools described in the instructions above. Run
mmcore build-dev --help for the options.
Understanding device interface versions¶
Micro-Manager's C++ layer (called MMCore) controls devices via adapters that are compiled into platform-specific shared libraries. These libraries are always compiled to work with a specific "device interface version" expected by the MMCore object itself. If you try to load a device adapter with a device interface version that does not match the version expected by the core, then you will get an error.
pymmcore is a library that wraps
the C++ code and makes it available to Python. It has a 5-number version string
that looks something like 12.5.1.75.0. The first three parts (here: 12.5.1)
represent the version of the MMCore library. The next number (here: 75) is
the device interface version that pymmcore expects. (The last number is a
pymmcore-specific build number). To query version information of your installed
libraries you can run:
Critical
You must use device adapter libraries that were compiled for the same device interface version as your version of pymmcore.
By default, when you run mmcore install, it will pick the latest compatible
version to install. However, you can also do this explicitly. For example,
with an older pymmcore that expects device interface version 74, you could
explicitly install the last compatible device adapters listed on the table
below with mmcore install as follows:
Here is a list of the latest device interface numbers, the date of the first nightly build where they were available, the last nightly build date to support that version, and the commit in mmCoreAndDevices that bumped the version.
| Version | Release Date | Last Release | Commit |
|---|---|---|---|
| 75 | 20260226 | 3c6312ac5 | |
| 74 | 20250815 | 20260225 | 7e9f2f214 |
| 73 | 20250318 | 20250814 | 55863b2d8 |
| 72 | 20250318 | 20250318 | b8de737b2 |
| 71 | 20221031 | 20250310 | 7ba63fb8f |
| 70 | 20210219 | 20221030 | 8687ddb51 |
| 69 | 20180712 | 1a9938168 | |
| 68 | 20171107 | 285a9fbb2 | |
| 67 | 20160609 | 2cafb3481 |
Older versions
| Version | Release Date | Commit |
|---|---|---|
| 66 | 20160608 | 6378720c9 |
| 65 | 20150528 | b98858d3b |
| 64 | 20150515 | 6fdcdc274 |
| 63 | 20150505 | ae4ced454 |
| 62 | 20150501 | 38cfde8ef |
| 61 | 20140801 | aac034a5c |
| 60 | 20140618 | cff69f1c2 |
| 59 | 20140515 | 1a3c3c884 |
| 58 | 20140514 | b3781c0a9 |
| 57 | 20140125 | 97beb0f6c |
| 56 | 20140120 | bbf1b852c |
| 55 | 20131221 | d9d939aed |
| 54 | 20131022 | 0058a1202 |
| 53 | 20121108 | 34329bb10 |
| 52 | 20120925 | feeeff5d0 |
| 51 | 20120117 | c62cd71df |
| 50 | 20120117 | 121dea472 |
| 49 | 20111026 | 0f999b4f7 |
| 48 | 20111010 | 5407292c4 |
| 47 | 20110916 | de02aa524 |
| 46 | 20110915 | f886a5a60 |
| 45 | 20110722 | 3de97a552 |
| 44 | 20110721 | adffbed3c |
| 43 | 20110721 | f1fa3260c |
| 42 | 20110720 | 70d420b79 |
| 41 | 20110626 | 6f1e9e3c7 |
| 40 | 20110526 | c9c4f901b |
| 39 | 20110411 | d6cf30e11 |
| 38 | 20110324 | 5fb856c6d |
| 39 | 20110322 | aca92c283 |
| 38 | 20101224 | 3327c6083 |
| 37 | 20101221 | 63e284ccf |
| 36 | 20100920 | 7b180c4ef |
| 35 | 20100823 | 41603ae0c |
| 34 | 20100202 | 5bd9a38d5 |
| 28 | 20080911 | ecdc3ffe9 |
| 27 | 20080806 | 644297085 |
| 26 | 20080604 | 99fd3cd80 |
| 16 | 20070412 | 38ebafde1 |
| 15 | 20070405 | 18ec4b48b |
| 14 | 20070227 | 3b69e7670 |