pycromanager has several options for interacting with micro-manager which can be used independently or in combination. The high level APIs described in Acquisitions are usually the best place to start. They describe how to use the pycromanager Acquisition class to run standard multi-dimensional acquisitions (i.e. Z-stacks, multiple XY posisitons, etc.), customized ones with abitrary axes and hardware settings, or ones generated through the Micro-magellan GUI (a Micro-manager plugin for imaging large samples such as tissue sections, whole slides, multi-well plates, etc.). Acquisition’s support customization such as modifying image data on-the-fly, controlling acquisition in response to data, integrating non-micro-manger supported hardware, running high-speed acquisitions with hardware TTL triggering, and using customized visualization/data saving. The data acquired by Acquisition’s can be read into numpy or dask arrays using the Dataset, as described in Reading acquired data.

For less complicated experiments (e.g. just snapping images on a camera, moving a single piece of hardware), Controlling Micro-Manager core might be a good place to start.

Finally, for experiments that require Java-based micro-manager plugins or already work well with existing beanshell scripts, try Micro-manager Java APIs or Calling custom Java code.