cxchanger

[CxChanger]

Attribution / Credit: Initial translation courtesy of WheelsTheCat. Translated content includes the README, Klipper configuration comments/messages, BOM spreadsheet, file names. For a translated STEP file refer to his repository.

[CxChanger] is a multi-material / multi-color solution for FDM 3D printing. It achieves fast multi-material printing by switching between preheated hotends loaded with different filaments during the print. The goal is multi-material printing that is as low-cost, simple, and stable as possible. For high adaptability, hotend switching only requires XY-axis motion of the print head, and the switching mechanism is independent of the hotend itself — other hotends can be made compatible by modifying the hotend mounting parts. Print head

QQ20260404-193802


Core Features

Hardware and Software Requirements

Hardware

Software

System Overview

Components

Parts

Printed version

Installation and Configuration Guide

printer.cfg

You can keep using your existing printer.cfg as the base. Modify it following the format in my printer.cfg and the notes below, or use mine directly and change the pins to match your board.

  1. Include toolchange.cfg and calibration.cfg.
  2. Define the additional hotends following the extruder1 format. Wire the heater and thermistor pins according to your board. They share E0’s extruder motor; the others are virtual extruders.
  3. The probe uses a fixed micro switch. At print start, all hotends are parked in the dock with their nozzles plugged by the high-temperature silicone pads, and are only picked up once heated to the target temperature — this solves the initial oozing problem, and no nozzle wiping is needed. During leveling no hotend is attached, so the micro switch is the lowest point of the print head. Other leveling methods are not yet supported; it is recommended to use my probe-related configuration directly, including the bed mesh and leveling configuration (mainly the addition of releasing the grabbed hotend before leveling).
  4. Add the dock cooling fan configuration, and add all extruders to the extruder association of the dock cooling fan and the heatbreak cooling fan.
  5. Modify the print start G-code to automatically prime (extrude a line with) each hotend that will be used before printing.
  6. Modify the print end G-code to add the UNTOOL command so the hotend is automatically unloaded after printing, avoiding manual removal before the next print. Add commands to turn off all hotend heaters.

    toolchange.cfg

  7. Add toolchange.cfg. Once added successfully, T0, T1, T2 and UNTOOL commands will appear in the dashboard. (Do not click them before setting the coordinates — it will crash the head.) Clicking T0 picks up T0; after picking up T0, clicking T1 automatically unloads T0 and picks up T1; clicking UNTOOL unloads the current hotend.
  8. Mount the dock and adjust the dock coordinates: manually attach a hotend to the print head, move the print head to the far right of the X axis, then move it forward. Fix the first dock in the position where the hotend locking screw just passes through the dock’s large hole (this position is the coordinate of the first dock). Then remove the hotend, home all axes, re-attach the hotend to the print head, and slowly move the print head to the dock position you just found so the locking screw passes through the dock’s large hole. Note the coordinates and enter them as T0’s dock position in toolchange.cfg. Each dock occupies 30 mm of width, so the other dock coordinates form an arithmetic sequence; fine-tune each dock’s coordinates if there is any error. Dock coordinate diagram

  9. After setting the coordinates correctly, comment out the normal speed and uncomment the test speed, then run switching tests at slow speed (so you can hit emergency stop immediately if anything is misaligned).
  10. Once switching works at test speed, comment out the test speed and uncomment the normal speed (you can test and tune more suitable speeds for your own machine).

    calibration.cfg

  11. Download the toolchanger plugin
  12. Add calibration.cfg
  13. Home XYZ. After leveling completes, mount the calibrator, click T0 to pick up the first hotend, and move it until the nozzle tip is directly above the center of the calibrator at a distance of about 1 mm. Note the coordinates and enter them as the calibrator coordinates in calibration.cfg. You also need to define a safe position outside the dock area in the file, to avoid hitting the other hotends in the dock during calibration.
  14. Once the coordinates are set, run CALIBRATE_TOOL TOOL=_ to calibrate a specific hotend (T0 must be calibrated first), or CALIBRATE_ALL_TOOLS to calibrate all of them (set which hotends exist first). Offsets are stored automatically when calibration completes.

    orcaslicer

  15. In the printer G-code, modify the start G-code and the filament change G-code; configure additional extruders (according to your number of hotends); set the retraction amount for each extruder when switching filament (I use 2 mm).
    • Print start G-code (modify according to your number of hotends):
      PRINT_START BED=[first_layer_bed_temperature] INITIAL_TOOL=[initial_tool] T0_TEMP={nozzle_temperature_initial_layer[0]} T0_USED={is_extruder_used[0]} T1_TEMP={nozzle_temperature_initial_layer[1]} T1_USED={is_extruder_used[1]} T2_TEMP={nozzle_temperature_initial_layer[2]} T2_USED={is_extruder_used[2]} T3_TEMP={nozzle_temperature_initial_layer[3]} T3_USED={is_extruder_used[3]} T4_TEMP={nozzle_temperature_initial_layer[4]} T4_USED={is_extruder_used[4]}
      
    • Filament change G-code:
      M104 S{nozzle_temperature[next_extruder]} T{next_extruder}
      T{next_extruder}
      
  16. In the Process settings, enable the wipe tower (if your filament and settings are well tuned and the model does not involve fast tiny extrusions, you can move the model next to the dock, disable the wipe tower, and try printing without one) and enable Ooze automatic preheating (I use a softening temperature offset of -180 and a preheat time of 35 s; adjust for your hotend’s heating speed).

Notes