This is a stub repo for discussing a unified effort towards a GUI application for pymmcore-plus
& pymmcore-widgets
For developers
Dependencies are managed strictly using uv, and the
uv.lock
lockfile
is checked into source, to ensure a reproducible environment for all developers.
The lockfile also dictates the exact dependencies that will go into the bundled application.
To get started, make sure you have uv installed, then run
git clone https://github.com/pymmcore-plus/pymmcore-gui.git
cd pymmcore-gui
uv sync
That will create a virtual environment at .venv
in the root directory, and install
all dependencies. You can then run tests using
uv run pytest
At any time, you can run uv sync
to ensure that your current environment matches
the requirements specified in uv.lock
. The lockfile itself shouldn't be manually
edited, but if you need to modify the constraints of the dependencies, you should
do so in the normal way in pyproject.toml
, and then run uv lock
to update the
lockfile, then commit it and open a PR.
Goals
- Provide a napari-independent GUI for controlling micro-manager via pymmcore-plus (i.e. pure python micro-manager control). We'd like to have a primary application that we can point interested parties to (rather than having to describe all the related efforts and explain how to compose pymmcore-widgets directly).
- Avoid duplicate efforts. While independent related projects are excellent in that they allow rapid exploration and experimentation, we'd like to be able to share the results of these efforts. In some ways that is done via pymmcore-widgets, but all of the application level stuff (persistence of settings, complex layouts, coordination of data saving, viewing & processing) is explicitly not part of pymmcore widgets.
- Establish patterns for persistence and application state.
Non-Goals
- Working on a shared application is not meant to discourage independent experimentation and repositories. (One of the real strengths in doing this all in python is the ease of creating custom widgets and GUIs!). One possible pattern would be forks & branches off of a main central repository.
For now, this serves as place to store TODO issues and discussion items. Please open an issue if you are interested, (even just to say hi! 🙂)
An initial effort towards a pure python micro-manager gui based on the pymmcore-plus ecosystem was napari-micromanager. It uses napari as the primary viewer, and pymmcore-widgets for most of the UI related to micro-manager functionality. It still works and will continue to be maintained for the foreseable future, but we are also interested in exploring options that do not depend on napari.
One candidate to replace the viewing functionality provided by napari is ndv
, a slim multi-dimensional viewer with minimal dependencies. Two experimental efforts exist to build a micro-manager gui using ndv
micromanager-gui is a standalone application written by Federico Gasparoli (@fdrgsp), and currently lives in federico's personal org while we experiment with it.
pymmcore-plus-sandbox
is another experimental standalone GUI written by Gabe Selzer (@gselzer with input from @marktsuchida. One initial goal here is to create a main window that looks very similar to the java based MMStudio (which would make it familiar to existing users of the java ecosystem).
Willi Stepp (@wl-stepp) has been an active contributor to pymmcore-widgets and uses some of these widgets in his event-driven microscopy controllers.