SpoolmanSync - Automatic Filament Tracking for Bambu Lab Printers (Beginner Friendly!)

Thanks for implementing the fix in v.1.51 so quickly. One other feature request, is it possible to display the device friendly name in the dashboard instead of the ID number? I have multiple printers and keeping track by serial number is not easy.

Filament weight is only deducted when the AMS switches trays mid-print or when the print completes, not every layer. The log entries you’re seeing are likely just Home Assistant reporting minor sensor updates on the tray (which SpoolmanSync monitors but doesn’t act on unless an actual tray switch or print end occurs).

Good catch, this actually used to work, but broke when we switched from HA’s REST API to the WebSocket API for entity discovery. The REST API returned the user-facing friendly_name, but the WebSocket device registry returns the integration-provided name separately from user renames. Fixed in v1.5.3, if you rename your printer in HA (Settings → Devices & services → [your printer device] → pencil icon → Name), SpoolmanSync will now show that friendly name on the dashboard instead of the serial number. No need to recreate automations — the rename is purely cosmetic.

Ok thanks for the information.
Nevertheless i put a report into Github because with a coloured object it seems to come the wrong data - see Github issue

Ok so I got a weird question for you, I have a 9 shelves that are connected to an ESP32, each shelve slot is made to connect to a box that are interchangeable, it's a filament drying system. your system is awesome and especialy yuor QR codes! I would love to be able to add manual "trays" that I could assign slots 1 thru 9 to track which filaments are in which shelve slot. is this possble?

This is my working portainer stack:

version: "3"
services:
  spoolmansync:
     image: docker.io/gibz104/spoolmansync:latest
     container_name: spoolmansync

     ports:
      - 3000:3000
     environment:
      TZ: Europe/Berlin
      PUID: 1026
      PGID: 100
     volumes:
      - /volume1/docker/spoolmansync:/data:rw
      #- app-data:/data

Be sure to set the rights on /volume1/docker/spoolmansync otherwise it will fail to connect!

I installed and using this. It is very good

  1. Make sure you use the local instance of home assistant when making QR codes.
  2. It would be very nice to create virtual ams to choose when putting filaments in a dryer for storage for example.

Is it possible to set up virtual printer, ams for storage in dry boxes and storage for complete QR code control. Thx

When I created the QR codes, I had to be logged into ha on the local level or the QR code would not work correctly.

Can you update to display a friendlier name for tray_id. Thank you

Hello,

I am new to this. I like to track my total filament in one spool (e.g., 4kg of Black PLA is noted in Spoolman as one roll when I actually have 4). I do this so that HA can show the total amount that I have for any given project without having to add a new spool constantly.

When a spool runs out, I often swap in a new roll to replace it and that often tells the sensor it is a different filament rather than continue decremeting from the spool I just had. To ameliorate this, I plan to load the filament into a second spot in the AMS, so that when one runs out, it continues with the other slot.

However, spoolman sync will not allow me the load the same roll in two slots. Is it possible to allow for that to occur?

No you will have to have 4 rolls for that. Thats also how you should do it because there are 4 different physical spools of filament

@gibz104 The latest update containing virtual printers is an excellent addition to the app, is there a plan in the near future to include automation to sync locations with spoolman?

Hey @Bpik — thanks, glad you’re liking virtual printers! Syncing them with Spoolman locations is a great idea and fits the feature well. Here’s roughly what I’m picturing, so we can make sure it matches what you had in mind:

  1. Write location on assignment (the main ask)
    When you assign a spool to a virtual printer (dryer, dry box, shelf), SpoolmanSync would also set that spool’s native Spoolman location field to the virtual printer’s name. So looking in Spoolman directly (or its mobile apps / report) shows the correct physical location, and you get Spoolman’s built-in location filtering/grouping for free. Unassigning clears it. I’d make this opt-in via a setting so it never stomps on locations for people who set them manually.

  2. Import existing Spoolman locations when creating a virtual printer
    Virtual printers are matched to Spoolman by name, so when creating one I’d show a pick-list of the location names already in use in your Spoolman. That way you reuse the exact existing name instead of retyping it and accidentally ending up with “Dry Box A” vs “DryBox A”. You’d still set the slot count in SpoolmanSync (Spoolman locations have no concept of slots), the import just seeds the name.

Open question I’d love your input on:
Should we ALSO update the location field when a spool is loaded in a real printer/AMS tray (e.g. set it to something like “X1C – AMS 1 Tray 3” while it’s actively printing)? It’s technically doable. The upside is Spoolman/its reports would then show which spools are currently in a printer vs. sitting on a shelf or in a dry box. The downside is that real trays change often (spools swapped in and out), so it’d write to Spoolman a lot more frequently. Since I don’t use Spoolman locations myself, I’m genuinely unsure — would you find that valuable, or would you rather locations only ever reflect storage (dry boxes/shelves)?

Let me know if that captures what you were after!

Thanks for the thorough response, yes I think ALSO updating the spool man locations when real AMS is Loaded is beneficial for completeness of tracking. I don’t believe the extra chatter of doing this would be significant at all.

Thanks Again @gibz104

Hi @Bpik, no problem! Location sync is live in v1.6.5. Flip on “Sync spool locations to Spoolman” in Settings (it covers both real printers and virtual ones, and shows your existing Spoolman locations when creating a virtual printer). Give it a try and let me know how it goes!

Hi @gibz104, I’ve been testing the last 36 hours or so and I can confirm that locations for real AMS are successfully creating upon first change. and manual assignment is syncing well.

One frustrating bug is what seems to be a very slow migration of newly created locations within spoolman appearing in the autofill within sync settings, and deleted locations disappearing from sync settings has worked for approx 50% of locations removed, but a fair few lingering. (Yes I could just create the exact names within sync but it feels like cheating for the purposes of testing)

a potential improvement I’ve noted would be; rather than simply removing location when a spool is removed from AMS, to actually assigning to a ‘holding pen’ location so that its still visible within the dashboard when we have forgotten to assign its new location at the time of movement rather than lingering with no location at all and disappearing from our brains until we next need that filament.(personally I have a toddler running around so as you can imagine i’m often catching up with the admin, hence why your app is so useful)

Outside of those two points it seems to be running smoothly so far!

Hi @hibz104, I’ve been trying to get this to work, but I can’t seem to get tray changes to work.

If I swap out an existing spool with another spool (that also registered but not in any AMS at the moment), I get these 2 messages in the log:

Tray Change 7/22/2026, 7:27:48 PM
Tray change detected: sensor.woonkamer_1ste_h2c_ams_3_tray_1 has filament but no matching spool
{
“trayId”: “sensor.woonkamer_1ste_h2c_ams_3_tray_1”, “printerReports”: { “name”: “Bambu PETG Translucent”, “material”: “PETG”, “tray_uuid”: “8D4823F4446B43B1BD6C855FD717D880” }, “action”: “manual_assignment_required”
}

Unassigned 7/22/2026, 7:27:20 PM
Auto-unassigned spool #35 from sensor.woonkamer_1ste_h2c_ams_3_tray_1 (tray empty)
{
“spoolId”: 35, “trayId”: “sensor.woonkamer_1ste_h2c_ams_3_tray_1”, “reason”: “tray_empty”
}

The dashboard then also shows a warning for that tray saying that the spool assigned to that slot might be wrong.

It seems that although the triggers are working fine, it it runs into a problem somewhere trying to identify the new spool. How does it match the spool and what can I check to see if it is stored in Spoolman correctly?

I’ve confirmed that the spool’s UID matches the “tray_uuid” from the log exactly. I’m kind of at a loss here.

Hi,
Sorry for my English, I am french… Your work is fantastic!!! I do have a question, though. I installed Spoolman on my server via Docker, and I set up SpoolmanSync and the Bambu Lab integration in Home Assistant. I can see the spool weight on my dashboard, but it doesn’t update when I print. Since my printer is a newer model and it wasn’t working, I have some doubts… I’m using an X2D without an AMS; is it compatible or not? Is there a solution?
Thanks for your help, and great job!

Have you added the Automations (configurations) from SpoolMan-Sync to Home Assistant ?

Yes, automations seems to be OK. But my printer is IDEX, so I’m wondering if SpoolmanSync is designed for that… I can see the spool changes in the logs, but nothing after that.