back to projects

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
one swap, end to end five states, each confirmed
  1. 01 retract server → printer
  2. 02 select server → spool module
  3. 03 feed spool module
  4. 04 sense sensor → server
  5. 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.

  1. retract
  2. select
  3. feed
  4. sense
  5. 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