Name pending – this is a working title for the project
pymmcore-gui is a Graphical User Interface application for controlling microscopes via the Micro-Manager core – completely in Python. It unifies the capabilities of several libraries in the pymmcore-plus ecosystem under one application. The goal is to provide a pure-Python replacement for the traditional Java-based Micro-Manager GUI (also known as MMStudio, and its plugins), leveraging modern Python tools for device control, image acquisition, and visualization.
pymmcore-gui
has evolved from an experimental prototype into a working application with:
Primary targets for improvement include:
We love knowing that you're out there! There are several ways to get in touch with the pymmcore-plus community:
🛠️ pymmcore-plus Ecosystempymmcore-gui
combines functionality from the following components into one cohesive desktop app:
CMMCorePlus
and the MDAEngine
). pymmcore-plus
provides the core programmatic interface, and may be used independently.pymmcore-gui
uses this to define and run rich imaging protocols (timelapses, z-stacks, channel series, well-plates, grids, etc.).pymmcore-gui
to display camera feeds and multi-dimensional datasets without relying on heavier/slower frameworks (i.e. it avoids the need for napari).By integrating these components, pymmcore-gui
offers a comprehensive microscope control interface similar in spirit to Micro-Manager’s MMStudio, but running entirely in Python (via Qt for the GUI) instead of Java, and facilitating Python devices and image-processing and analysis routines. The interface should be familiar to Micro-Manager users, but more flexible, modern, and user-extensible, benefiting from the Python ecosystem.
All of these components are designed to work together, but can also be used independently.
There are two primary ways to install and use pymmcore-gui:
# install this package (for now, just install from GitHub) pip install git+https://github.com/pymmcore-plus/pymmcore-gui # install micro-manager device adapters mmcore install # run the app mmgui
More info on the mmcore install
command here
Note
Since the GitHub version may change at any time, it is recommended to pin a specific <commit>
if you are adding this to your pyproject.toml dependencies.
# pyproject.toml [project] dependencies = [ "pymmcore-gui @ git+https://github.com/pymmcore-plus/pymmcore-gui@<commit>" ]
For those wanting a fully contained, double-clickable application, we provide pre-built bundles that include the Python runtime and all necessary dependencies. Just download and extract the archive, then run the application.
Tip
You will have to accept the scary "this app is going to destroy your computer!" message, until we start paying for a certificate.
Sorry!
Important
The bundled application does not include Micro-Manager device adapters, these must be installed separately. This may be done by:
Devices > Install Devices ...
menu in the GUIuv run --with pymmcore-plus mmcore install
from the command lineIf you installed the bundled app, simply double-click the application to launch it. You should see the main window appear, which includes menus and panels for device control, configuration, live view, etc. By default, if no configuration is loaded, the GUI will use Micro-Manager’s Demo devices (so you can try it even without real hardware). You can then load a different hardware configuration (from the "Devices" menu) or use the Hardware Config Wizard to connect to hardware.
Launching via Python (CLI)If you installed pymmcore-gui into a Python environment, you can launch the GUI from the command line using the mmgui
command:
You can also start the GUI from a Python session or script. This is useful if you want to script around the GUI or integrate it with other Python code. Simply import the library and call the create_mmgui()
function:
from pymmcore_gui import create_mmgui create_mmgui()
This will initialize the application and show the main GUI window.
Customizing Before Launch (Script)If you would like to further customize the GUI before starting the application, pass exec_app=False
to create_mmgui()
. This will return the main window, allowing you to modify it before starting the Qt event loop:
from pymmcore_gui import create_mmgui from pymmcore_gui._qt.QtWidgets import QApplication # (you do not need to create a QApplication instance) window = create_mmgui(exec_app=False) # customize the app or do other setup here # mmcore = window.mmcore # access the CMMCorePlus used by the GUI QApplication.instance().exec() # Start the Qt event loop
If you already have a CMMCorePlus
instance that you want the GUI to use, you can pass it to create_mmgui(mmcore=my_core)
. By default the GUI will first check if there is a global singleton (CMMCorePlus.instance()
), and if not, it will create a new instance.
This project builds upon several prior efforts in the Python microscopy community:
Lessons from these prototypes (and others at labs like LEB-EPFL) have influenced pymmcore-gui’s design.
By unifying ideas from these projects, pymmcore-gui aims to provide a single, officially supported application. Our design goal is a user experience familiar to Micro-Manager users (for example, one prototype mimicked the MMStudio layout), while taking advantage of Python’s flexibility and the growing ecosystem of scientific libraries.
Getting Started for DevelopersThe contributing guide covers development environment setup, and architectural patterns used in the project. Briefly:
git clone https://github.com/pymmcore-plus/pymmcore-gui.git cd pymmcore-gui uv sync uv run mmgui uv run pytest
We welcome contributions and feedback! Feel free to open issues for bug reports or feature requests, and join in the discussion.
This project and all pymmcore-plus ecosystem projects are provided under the BSD-3-Clause license.
Note
The bundled application currently includes PyQt6, which is licensed under the GNU General Public License v3.0. This means the bundled application is distributed as a combined work under the terms of the GNU General Public License v3.0. (If that is limiting for you, please reach out, we may be able to provide a PySide6-based version in the future)
It depends on the C++ MMCore and Devices which are licensed under either LGPL and BSD-3-Clause, depending on the device or module.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4