This plugin adds Prusa MMU2 support to OctoPrint. The active filament will be displayed in the navbar and you will be prompted to select which filament to use when slicing in "MMU2S Single" mode. Other settings are available to name each tool and set defaults. This plugin only works for a Prusa printer with an MMU2.
This plugin adds Prusa MMU2 support to OctoPrint. The active filament will be displayed in the navbar and you will be prompted to select which filament to use when slicing in “MMU2S Single” mode. Other settings are available to name each tool and set defaults. This plugin only works for a Prusa printer with an MMU2.
Configuration
- Set a timeout to auto-select an extruder
- Enable/disable extruders, name them and give them a color
- Show/hide navbar item (and simplify the display)
Known Bugs
- In rare instances, the “waiting for user input” event can come in directly after a tool change is sent, resulting in the navbar never updating. This will not impact printing but you will see “Awaiting user input” until the next tool change.
- If the Prusa printer prompts the user for a “new version”, the select filament modal may not display. You will still be able to select the filament directly on the printer.
- If settings are saved mid-print the navbar will forget the state of the MMU. This does not impact printing but is rather annoying. It’ll remember the next time the tool changes.
Implementation Notes
This plugin does some minimal gcode manipulation. This is how it detects tool events.
The command interactions are as follows:
- Before sent: (gcode_queuing_hook)
Tx
: When the GCODE would send aTx
(tool change) it first triggers the modal and then does not send the Tx command. Instead it sends a pause event to the printer. This results in Prusa not prompting for a tool change. If the timeout time is reached (_timeout_prompt
) then the plugin resends theTx
command to allow Prusa to prompt the user.M109
: When the GCODE would send anM109
(Wait for Hotend Temperature) and the user has selected a filament we send both theM109
andT#
(likeT2
), otherwise we just send theM109
.
- After sent: (gcode_sent_hook)
- When the plugin notices a
T#
command we set the tool internally so it can be used to display. This is to support multi-color printing. This trigger is also used to show unloading.
- When the plugin notices a
We listen to printer responses and do some substring matching. This is done to identify filament events and printer notifications so we can update the navbar: (gcode_received_hook)
paused for user
- Used to show that the printer needs attention (eithe error or waiting for tool selection at printer).MMU not responding
- Used to show that the printer needs attention because of an MMU failure.MMU - ENABLED
/MMU starts responding
- Used to show printer is “OK”.MMU can_load
- Used to show the filament loading message.OO succeeded
- Used to show what filament is loaded.
For all instances of where command manipulation happens see __init__.py
for Gcode Hooks
. Also
look at function _timeout_prompt
where we handle unpausing the printer after the timer and either
sending a Tx
or T#
if useDefaultFilament
and defaultFilament
settings are set.
Useful Link
Pictures


