Automatic filament metadata sync and spool tracking via Spoolman.
Setting this up for the first time? See the NFC Tags & Spoolman Setup Guide.
Filament Manager (/filament/) reconciles each channel across Official
tag data, User-set filament, the active Spoolman spool, and the raw RFID
tag:

Enable in the firmware-config web interface under
Settings > Snapmaker Components > Spoolman Integration, and enter the Spoolman
URL including scheme and port (e.g. http://192.168.1.100:7912). Set the same
toggle to Disabled to turn it off.
The Create tab of the Spoolman dialog makes a new spool for the detected tag and assigns it. It is enabled on any channel with no spool assigned whose tag reports a UID — on a channel that already has one, assign a spool instead. The form is seeded from the tag’s vendor, material, colour and other data when it carries them; a blank or third-party tag starts from the palette defaults and is filled in by hand, then linked to the new spool by its UID. The filament name and density follow the chosen material, subtype and colour until edited. The form uses the same palettes as User, with diameter, density, and temperatures under Advanced.

UID ownership is rechecked on submit: if the tag turns out to belong to a spool already, that spool is assigned instead of a duplicate being created.
The Assign tab, which the card’s Spoolman button opens on, lists each spool’s stored card UIDs. The spool already assigned to that extruder comes first, then those carrying the same filament as the detected tag — same vendor, material, variant, colour — under Suggested spools. Use it to store a spool’s second tag, or to link a blank tag to a spool that already exists. Hovering the card’s Spoolman badge lists the spool’s stored UIDs.

Community apps that support SpoolLink, so scanning a tag resolves its spool automatically when the filament is loaded:
| App | Author | Platform | Reads | SpoolLink support | Legacy Spools | Source | Support the author |
|---|---|---|---|---|---|---|---|
| SpoolLink (Android) | paxx12 | Android (releases; or build from source) | OpenSpool; any tag by UID (NTAG, Mifare Classic) | Reference implementation — links tags to spools by UID, pre-fills from OpenSpool tags | ✅ (see notes) | GitHub (GPL-3.0) | — |
| SpoolLink (iOS) | paxx12 | iOS (releases IPA — sideload via AltStore or similar; building from source requires a paid Apple Developer account for the NFC entitlement) | OpenSpool; any tag by UID (NTAG only — no Mifare Classic on iOS) | Reference implementation — links tags to spools by UID, pre-fills from OpenSpool tags | ✅ (see notes) | GitHub (GPL-3.0) | — |
| SpoolPainter | ni4223 | Android (Google Play) | OpenSpool; Bambu Lab, Snapmaker, QIDI, Anycubic, Elegoo, Creality (vendor decode + prefill; Bambu Lab and Creality need a per-brand key); any tag by UID for pairing | Links tags to spools; create-and-pair spools, multi-tag binding, vendor tag pairing | ✅ (see notes) | GitHub (GPL-3.0) | Snapmaker Referral Code: ni42 |
| SpoolKid | Marco | iOS (TestFlight beta; build from source) | OpenSpool, OpenTag3D, ELEGOO, Anycubic ACE; any other tag by UID (including Mifare Classic) | Links tag UIDs to spools, including UID-only linking for Mifare Classic and other tags it can’t otherwise read | – | GitHub (MIT) | |
| SpoolTagger | NiftyBits | Windows, Linux (desktop, ACR122U USB NFC reader; releases) | OpenSpool (NTAG); Mifare Classic by UID only | Links tags to spools (up to 2 tags per spool) | ✅ (see notes) | Codeberg (MIT) | |
| 3DMRP | MKloberg | Self-hosted (Windows; releases), phone via Chrome on Android | Any tag by UID (Web NFC scan-to-select; no content parsing) | Print-farm manager — links tags to spools, NFC scan-to-select; also AFC lane control and U1 touchscreen mirror | – (see notes) | GitHub (source) | |
| Spool Studio | GeorgHo | Android (v3.0.2 release) | OpenSpool; Bambu Lab (with user-provided key); legacy Spool Studio tags (for conversion); any tag by UID | Links tags to spools via NFC card UID; writes Paxx12-compatible OpenSpool tags and shows the printer-reported toolhead status | ✅ (see notes) | GitHub (MIT) |
Notes:
spool_id is linked to that spool automatically.spool_id
resolves its spool and offers to re-pair it.Community hardware readers push detected tags to the same
filament_detect/set webhook the printer’s built-in readers use. For a tag
to resolve a Spoolman spool by UID, the reader must report the UID for every
detected tag — even one it can’t otherwise read — the same way
OpenRFID falls back to a UID-only report
when a tag can’t be parsed:
| Project | Author | SpoolLink support | Source | Support the author |
|---|---|---|---|---|
| External - wasikuss: snapmaker-u1-remote-rfid-reader | wasikuss | Partial — only reports a tag when its payload validates as OpenSpool JSON; unreadable, blank, or vendor-format tags are never reported, so those spools can’t be resolved by UID | GitHub (MIT) | — |
| External - baze: snapmaker-u1-drybox-nfc-reader | baze | Full — reports the UID for every detected tag by default (“UID-only” mode); can optionally switch to a full-read mode that also sends OpenSpool metadata, but then skips tags that aren’t valid OpenSpool | GitLab (CC BY-NC 4.0) | — |
Hardware and setup details for both readers are in RFID Format & Reader Design.
SET_SPOOL_IDAssign a Spoolman spool to an extruder channel. Reads the channel’s RFID card UID, binds it to the spool (so a later scan resolves automatically), and applies the filament metadata to the channel:
SET_SPOOL_ID LANE=E0 SPOOL_ID=5
| Parameter | Default | Description |
|---|---|---|
LANE |
— | Lane name (e.g. E0); resolved through AFC-Lite when enabled, otherwise from the name itself |
CHANNEL |
— | Extruder channel index (0-3), used instead of LANE |
SPOOL_ID |
0 |
Spoolman spool ID; 0 clears the assignment and unlinks the channel’s card from Spoolman, so the next scan does not reassign it |
The macro is provided by the Spoolman integration itself, so it is available whenever Spoolman is enabled, with or without AFC-Lite.
Leftover pre-SpoolLink Spoolman macros. If Spoolman was previously
wired up by hand (e.g. a community spoolman_multi_tool-style Klipper
include with CHANGE_SPOOL and related macros) before switching to
SpoolLink, that file conflicts with the integration and can leave
Klipper failing to start with an error such as:
[Errno 2] No such file or directory: '/printer_data/config/variables.cfg'
Rename or remove the old include (e.g. add a .bak suffix) before
enabling Spoolman here. See
#567
for a reported case and workaround.
Basic for Snapmaker-branded filaments when not
set in Spoolman; empty for all other vendors.For the wire format, custom fields, and component flow see the
design notes. For AFC lane status that surfaces
spool_id see AFC-Lite.