Skip to content

Add Tool Selection Menu for Multi-Extruder Printers#7248

Draft
DXCanas wants to merge 2 commits into
Klipper3d:masterfrom
DXCanas:update-menu-multi-head-selection
Draft

Add Tool Selection Menu for Multi-Extruder Printers#7248
DXCanas wants to merge 2 commits into
Klipper3d:masterfrom
DXCanas:update-menu-multi-head-selection

Conversation

@DXCanas

@DXCanas DXCanas commented Apr 6, 2026

Copy link
Copy Markdown

Second in series of changes made while setting up an FFCP, starting with #7247

I was excited to see filament loading was in the display menu. But then disappointed to see it only worked for the right extruder (which doesn't even have a fan in stock config)

So I threw together these macros for the display, as many of the options assume a single extruder

AI Assisted Summary: Add Tool Selection Menu for Multi-Extruder Printers

This PR adds a top-level "Tool" menu to the default display menu system that allows users with multi-extruder printers to switch between T0 and T1 directly from the LCD display.

Problem Statement

Users with dual-extruder printers (e.g., FlashForge Creator Pro, Prusa MMU setups, IDEX systems) currently cannot change the active tool from the display menu by default. This creates a usability gap when performing common operations:

  • Filament operations (load/unload) always apply to the active extruder, but there's no display-based way to switch tools
  • Manual extrusion via the Move menu operates on the active extruder only
  • Temperature presets (Preheat PLA/ABS) apply M104 commands without T parameter, affecting only the active tool

Users must either use console commands (T0/T1) or remain connected to a host interface to switch tools, which can be impractical when working at the printer.

Solution

Added a conditional top-level menu between "SD Card" and "Control" that:

  • Appears only when extruder1 is defined in the configuration
  • Shows the currently active tool in the menu label ("Tool: T0" or "Tool: T1")
  • Provides submenu options to activate T0 or T1
  • Changes system-wide active extruder state for all subsequent menu operations

Target Audience

Multi-extruder printer users, including:

  • FlashForge Creator Pro (2016-2020 models) - Several thousand units in active use
  • Dual-extruder Cartesian printers - Various models with independent or IDEX toolheads
  • Multi-material systems - Prusa MMU and similar configurations

Estimated user base (this requires confirmation) is large.

Testing

Tested on FlashForge Creator Pro 2019 with LCD display:

  • Menu appears only when both extruder and extruder1 are defined
  • Tool switching commands execute correctly (T0/T1)
  • Active tool label updates dynamically after selection
  • Filament load/unload operations correctly target the selected extruder
  • No impact on single-extruder configurations (menu hidden via enable condition)

Implementation Details

  • Follows existing menu conditional patterns (similar to z_tilt, quad_gantry_level)
  • Parent menu uses enable: {'extruder1' in printer} condition
  • Child menu items inherit parent visibility (standard menu.py behavior)
  • No configuration changes required - automatically available when extruder1 is present

Add a top-level Tool menu that allows switching between T0 and T1
extruders directly from the display. The menu appears only when
multiple extruders are present (extruder1 defined).

This provides a system-wide tool selection interface, allowing
users to set the active extruder before performing menu operations
like filament loading, manual extrusion, or preset temperature control.

The menu dynamically displays the currently active tool (T0/T1)
in its label for quick reference.

Signed-off-by: David C. <code@davidc.xyz>
@DXCanas DXCanas force-pushed the update-menu-multi-head-selection branch from c862e05 to ddd1030 Compare April 6, 2026 22:26
So that it's directly above temperature.
Control doesn't have any single/dual extruder implications.
@github-actions

Copy link
Copy Markdown

Thank you for your contribution to Klipper. Unfortunately, a reviewer has not assigned themselves to this GitHub Pull Request. All Pull Requests are reviewed before merging, and a reviewer will need to volunteer. Further information is available at: https://www.klipper3d.org/CONTRIBUTING.html

There are some steps that you can take now:

  1. Perform a self-review of your Pull Request by following the steps at: https://www.klipper3d.org/CONTRIBUTING.html#what-to-expect-in-a-review
    If you have completed a self-review, be sure to state the results of that self-review explicitly in the Pull Request comments. A reviewer is more likely to participate if the bulk of a review has already been completed.
  2. Consider opening a topic on the Klipper Discourse server to discuss this work. The Discourse server is a good place to discuss development ideas and to engage users interested in testing. Reviewers are more likely to prioritize Pull Requests with an active community of users.
  3. Consider helping out reviewers by reviewing other Klipper Pull Requests. Taking the time to perform a careful and detailed review of others work is appreciated. Regular contributors are more likely to prioritize the contributions of other regular contributors.

Unfortunately, if a reviewer does not assign themselves to this GitHub Pull Request then it will be automatically closed. If this happens, then it is a good idea to move further discussion to the Klipper Discourse server. Reviewers can reach out on that forum to let you know if they are interested and when they are available.

Best regards,
~ Your friendly GitIssueBot

PS: I'm just an automated script, not a human being.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant