AMS-X
An open modular filament system, driven over MQTT.
Bambu’s own AMS holds 4 slots, 16 with the hub, and every slot is Bambu hardware. Past that, a material change means a person at the printer. Bambu doesn’t document the local protocol. Community notes cover part of it, and I confirmed the rest on my own A1 mini and P1S.
- Python
- FastAPI
- MQTT
- ESP32
- 3MF
- 01 retract server → printer
- 02 select server → spool module
- 03 feed spool module
- 04 sense sensor → server
- 05 resume server → printer
the printer already knows how to pause for a filament change. these are the steps something has to drive while it waits.
More slots is a hardware answer to a software problem.
A model with six materials doesn’t need a bigger changer. It needs something to sit at the printer and swap spools on cue. The machine already knows how to pause for a filament change and resume afterwards — what it doesn’t have is anyone to talk to.
AMS-X is that someone: a server that reads the sliced job, knows exactly which layer needs which material, and drives the printer’s own change routine rather than writing gcode for the hotend.
- stock
- 4 slots, 16 with the hub, all Bambu hardware. Past that, somebody swaps spools by hand.
- AMS-X
- n spools. Bolt on another module and the server drives the swap, one module per spool.
- server
- Python, FastAPI
- control
- MQTT over TLS, on the local network
- file transfer
- FTPS, on the local network
- dashboard
- Next.js: live printer state, job intake, and the swap prompt
- plan source
- the sliced .3mf, parsed server-side
- spool module
- an interface — human today
- next
- stepper, TMC2209 over ESP32
one swap, five states
Each step waits to be confirmed.
The server sends one message at a time and watches the machine’s own reports until the guard for that state holds. Nothing runs on a timer.
- retract
- select
- feed
- sense
- resume
Where it is
running
The protocol half. The server parses the sliced job, talks to the printer over its own MQTT channel, drives pause and resume, and confirms every step against the machine’s report before the next one. Bambu doesn’t document these commands. I confirmed each one against my A1 mini and P1S.
on the bench
The spool module. Four motors turning on a desk, with the drive and guide parts being printed now. The swap step is a human implementing the same interface until they go on — nothing above that line changes when they do. Loading works on the bench. Unloading doesn’t yet.
Written up
- One ESP32, eight spools, two legs per filament move
ESP32 firmware driving eight filament spools for a Bambu Lab printer over MQTT: two sensors per move, a shared TMC2209 step bus, and why unloading needs both.
- Driving a Bambu Lab printer over MQTT
What an A1 mini will actually let you do over its local MQTT broker, which parts are confirmed against hardware, and which are still a guess.