Not yet qualified on real hardware. Klipper-MMU has not run on a real MMU yet. Every device is a software candidate: it builds, boots and passes the simulators. Default images advertise
ACTUATION=0and do not move motors; the actuator build is an experimental opt-in. Check pins, polarities, currents and safe-off on your own bench before you flash it onto a printer you care about.
Klipper-MMU is the part of OpenAMS for multi-material units that have their own Klipper controller board, such as BoxTurtle, ERCF and Tradrack. The MMU's own microcontroller runs the load, the unload and the safety checks from its own sensors, and tells the Klipper host how each one went. In OpenAMS, the MMU then appears as an ordinary unit.
It is an optional add-on to upstream Klipper, not a fork. Switch it off in make menuconfig and Klipper builds exactly as before.
Filament feeding is a feedback problem: push until a switch trips, follow the buffer, stop when something jams. Happy Hare and AFC plan every MMU move on the host and hand it to Klipper's motion queue. Klipper's MCU times the step pulses, but only the host can change a move after a sensor reading, so every decision waits on the host, the USB or CAN link and the host's scheduler.
One number shows why that matters. During a load, the filament is counted as arrived at 70% buffer compression. On the OpenAMS buffer that leaves 4.5 mm before it is fully compressed and the feeder starts grinding filament: 22.5 ms at the full 200 mm/s. The MCU reads its sensors every millisecond and stops the motor itself, so it can load fast, slow to a crawl before the toolhead, and stop on the reading.
With Klipper-MMU, the host only asks for operations (PRELOAD, LOAD, UNLOAD, EJECT, CALIBRATE) and hears how they ended. The MCU owns the motor moves:
| On the MCU | What it gives you |
|---|---|
| Following and rewind | The buffer, switched or analog (DiffA/DiffB), changes the motor output on the MCU's own timeline. |
| Ramps and immediate stop | The firmware changes its own step target and stops its outputs on a local fault, without a host round trip. |
| Host lease | If the host is silent for 2 s, the lease expires and the MCU stops everything. |
| Latched faults | A fault stops the outputs and stays latched until you state what is physically in the path. Reconnecting never quietly restores motion. |
| One core for every MMU | One shared control core drives every device from board drivers and a device profile, instead of a copied controller per MMU. |
These are implemented and tested in software and in the simulator. Stop latency, timing and analog calibration have not been measured on real hardware yet. The long version cites Happy Hare's and AFC's own source.
Device profiles come from Happy Hare's and AFC's own configurations, traced and cited rather than guessed, and every pin, polarity and pull stays editable. A device on this list builds and passes the simulators; that is not a claim that it works on real hardware.
| Device | How it picks a lane | Lanes | Notes |
|---|---|---|---|
| BoxTurtle | one feeder per lane | 4 / 8 | powered rewind; switched or analog (DiffA/DiffB) buffer |
| NightOwl | one feeder per lane | 2 / 4 | passive rewind; also built for most other STM32 targets |
| EMU | one feeder per lane | 5 | each lane's LOAD switch doubles as the hub |
| KMS | one feeder per lane | 4 | virtual hub, with BAY and LOAD switches |
| QIDI Box | one feeder per lane | 4 | plain STEP/DIR gear (no TMC UART), tension-only buffer |
| Angry Beaver, 3MS, QuattroBox 1.0 / 1.1 / 2.0 | one feeder per lane | 4 | no per-lane BAY switch; gates are learned the Happy Hare way |
| ERCF 1.1 / 2.0 / 3.0, Tradrack | linear selector + grip servo | 9 / 8 / 8, 10 | ERCF encoder; Springy, Triple Decky, Thumper Blocks and Jack Rabbit options |
| 3D Chameleon, HTLF, MMX6 | rotary selector | 4, 4, 6 | per-gate gear direction |
| MMX, Low Rider, Pico MMU | servo selector | 4, 6, 4 | one servo angle per gate |
| BTT ViViD, Claymore | indexed selector | 4 | a switch per gate; ViViD takes the short way round, Claymore only goes forward |
Every device builds for the STM32H723 (the AFC Lite board). NightOwl and the generic Custom profile also build for F207, F405, F407, F429, F765, G431, G474, H743, H750, G0B0 and G0B1. Angry Beaver and ERCF 2.0/3.0 build for the G0B0/G0B1 on BTT's MMB board, which is what Happy Hare ships them on.
Klipper-MMU follows the extruder from a buffer, so every build needs two inputs wired to the MMU board's own pins. The firmware will not build or start without them.
BoxTurtle, NightOwl, KMS, ViViD, Claymore and QIDI Box (tension switch only) have a buffer of their own. EMU needs Happy Hare's switched-buffer option or a DiffA/DiffB sensor. The others need a sensored buffer fitted: 3D Chameleon, 3MS, Angry Beaver, ERCF 1.1, 2.0 and 3.0, HTLF, Low Rider, MMX, MMX6, Pico MMU, QuattroBox 1.0, 1.1 and 2.0, and Tradrack. The loose-filament buffers some of these kits ship have no sensor and do not count.
KLIPPER_MMU_DIAGNOSE names the switch, lane or driver at fault in plain words (checks and diagnostics).KLIPPER_MMU_* command.KLIPPER_MMU_DIAGNOSE reports.Until real hardware is qualified, the tests carry the weight. None of them needs hardware:
make check in klipper_mmu/ runs the portable set; the software checks page lists what it covers and the optional groups.