Manage NFC tags¶
Everything around the physical sticker: which kind to use, how to write one, how to bind it to a spool, what to do when a spool runs out, and how to safely re-use the tag for the next spool.
For the daemon side of tags (decoders, matching logic, byte layouts) see reference/nfc-tag-formats.md. This page is operator-facing.
Picking a tag type¶
| Tag type | Chip | Reader requirement | Writable by you? | Best for |
|---|---|---|---|---|
| TigerTag | NTAG213 (ISO 14443A) | Any PN532 / PN5180 / ACR1552U | No — vendor-written | Spools that ship with a TigerTag already |
| OpenPrintTag | NFC-V / ICODE SLIX2 (ISO 15693) | PN5180 / ACR1552U (NOT PN532) | Yes | Any spool you want to tag yourself |
For this fleet, the reference reader is the PN532, which means OpenPrintTag is unusable on a PN532-only printer. If you want to self-tag spools on a PN532 fleet, write a NTAG213 sticker with a TigerTag-compatible payload — see below.
Where to source blank stickers¶
- NTAG213 stickers — generic NFC supplier; sold as round cardboard-friendly stickers. Pick a size that fits on the spool side label without overhanging the rim.
- NFC-V (ICODE SLIX2) stickers — same suppliers, slightly more expensive; only useful if any printer in your fleet has a PN5180 or ACR1552U reader.
Binding a tag to a spool¶
Tag-first vs. spool-first¶
Two valid orderings:
- Spool-first (recommended): create the spool in Spoolman (inventory how-to), then write a tag carrying its identifier, then stick the tag.
- Tag-first (auto-create): tap a blank NFC-V on the reader with
auto_create = truein the daemon config; Spoolman creates a placeholder spool, you fill in details afterwards.
Spool-first is cleaner if you're processing a batch of new spools methodically. Tag-first is faster when you've already got the spool in your hand and don't want to context-switch to the Spoolman UI first.
Writing a TigerTag-compatible NTAG213¶
- Get the spool's filament
external_idfrom Spoolman (or pick one when you create the filament). - Use a tag writer that supports raw byte writes — recommended:
- NFC Tools on Android (free / paid pro version)
- NXP TagWriter on Android (free, NXP-official)
- libnfc / nfc-mfclassic from the command line
- Write the TigerTag-formatted payload — the byte layout the
Spoolman fork expects. The exact
layout lives in the fork's decoder source; if you don't have a
pre-built writer, the simplest path is to use the daemon's
auto_createpath on an NFC-V tag instead.
Daemon-side writing is a known gap
The klipper-nfc-daemon reads tags but doesn't write them today.
Writing happens out-of-band with the tools above. If batch tag
writing becomes routine for this fleet, a WRITE_TAG command
inside the daemon is the obvious follow-up project.
Writing an OpenPrintTag¶
- Create the spool in Spoolman.
- Use a PN5180 / ACR1552U-backed writer (NFC-V) — same options as TigerTag plus dedicated OpenPrintTag tooling if you have it.
- Write the OpenPrintTag-formatted payload with
instance_uuidset to a value you also paste into the spool'sextra.instance_uuidfield in Spoolman.
Or skip steps 2 and 3 with auto_create = true:
- Tap a blank NFC-V on a printer's reader.
- The daemon POSTs to Spoolman; Spoolman creates a spool with a
fresh
instance_uuidand writes it back into the tag's payload bookkeeping. - Open the new spool in Spoolman and fill in vendor / filament / colour / temps.
Sticking the tag¶
Practical tips that prevent future re-scan failures:
- Flat surface: the cardboard / plastic side label is best. Avoid the curved metal core (RF detuning).
- Away from the spool's own metal: NFC range collapses next to conductors.
- Operator-side: place where it's easy to bring the spool to the reader without rotating awkwardly.
- Mark spent stickers: when you archive a spool (see below), put a sharpie X through the old label the sticker was on if you're re-binding the same physical sticker to a new spool. Avoids confusion mid-shelf.
Re-using a tag from an archived spool¶
Empty spools get archived in Spoolman (not deleted — usage history is worth keeping). The physical NFC sticker, however, has no reason to be thrown away. Two paths:
Path 1 — peel and re-stick on a new spool¶
Best when the sticker is in good condition and the new spool is the same SKU as the old one.
- Verify the original spool is archived in Spoolman.
- Peel the sticker off the empty spool (or just bring the whole core over).
- On the new spool, you have two sub-options:
- If the same filament profile applies and a new spool entry
already exists: re-bind by updating the new spool's
extra.instance_uuid(OpenPrintTag) to match the tag's UUID, so a tap resolves to the new spool. - Same SKU, no new spool entry yet: create a new spool entry first, then re-bind.
- If the same filament profile applies and a new spool entry
already exists: re-bind by updating the new spool's
Path 2 — wipe and re-write¶
Best when the sticker is going onto a different SKU, or you want clean tooling state.
- For NTAG213 / TigerTag-formatted: re-write the tag with the
new spool's
external_idpayload using the same writer tooling from earlier in this page. - For NFC-V / OpenPrintTag: simpler — change the spool's
extra.instance_uuidin Spoolman to the existing tag UUID (no rewrite needed) or re-write with a fresh UUID and update Spoolman. Either works.
Path 3 — keep the same UUID, different filament¶
NFC-V tags' UUID is derived from hardware UID, so the tag's identity never changes. If you peel a tag off Spool A (archived) and stick it on Spool B, just update Spoolman:
- Old spool (A) — already archived; its
instance_uuidis harmless. - New spool (B) — set its
extra.instance_uuidto the same value that's currently on A. - Either clear A's
instance_uuidor rely on the fact that A is archived so the daemon's lookup prefers the non-archived B.
Don't leave two active spools with the same instance_uuid
If both A and B are non-archived with the same instance_uuid,
the daemon's behaviour depends on Spoolman's match ordering and
will likely surprise you. Always archive the old spool first,
then re-bind the new one.
When a tag stops working¶
| Symptom | Likely cause | Fix |
|---|---|---|
| Reader sees nothing | Sticker damaged / detuned by spool's metal core | Re-place on a flatter / non-metal area, or replace the sticker entirely |
| Reader sees the tag but Spoolman returns 404 | Spool archived, or external_id / instance_uuid mismatch |
Verify in Spoolman the spool is non-archived and the matching field is set |
| Two spools resolve to the same UID | Duplicate instance_uuid after re-use |
Archive the old, leave the new |
| Range is intermittent | Reader → tag distance too far, or RF noise | Tap closer / slower; verify with nfc-list |
See also¶
- Manage spool inventory in Spoolman
- Install klipper-nfc-daemon
- NFC tag formats reference
- Operator workflow — where this all lands in practice