A touchscreen station for filament spools.
Put a spool on it and it reads the NFC tag, weighs the spool and keeps Spoolman up to date.
Manual · USB installer · Releases · Changelog · Issues
Demo data.
If you run a few dozen spools, you eventually lose track of two things: which spool is which, and how much is left on it. Spoolman answers both, as long as someone keeps it current, and that someone is usually you, with a kitchen scale and a browser tab.
OpenTag Station moves that work to the shelf. Each spool carries an NFC tag in the OpenPrintTag format (the open spool-tag standard from Prusa; which tags that means). Set the spool on the station and it recognises the tag, finds the spool in your Spoolman server, weighs it, subtracts the empty reel and shows what is left. One tap saves that number back to Spoolman. If you also use FilaBridge with a printer it supports (tested with a Prusa XL), a second tap tells the printer which toolhead the spool is going into. Without FilaBridge the station works the same and simply has no printer screens.
flowchart LR
subgraph station[OpenTag Station]
direction TB
nfc[NFC reader]
scale[Load cell]
ui[Touchscreen and web page]
end
spool([Spool with tag]) --- station
station -- "weight, tag link" --> spoolman[(Spoolman)]
station -. "optional: toolhead assignment" .-> fb[FilaBridge] --> printer[Your printer]
Spoolman stays the record of what you own. The station keeps no inventory of its own.
- Identifies a spool. Place a tagged spool on the station and it shows which Spoolman spool it is.
- Writes tags. Pick a spool, or a filament to create a spool from, and the station writes a blank tag, checks it and links it to the spool.
- Weighs and saves. The result shows the weight, the empty spool and the filament left. Nothing changes in Spoolman until you press UPDATE SPOOLMAN. Automatic saving exists and is off by default.
- Clears tags for reuse. Erase a tag and remove its link in one step. The spool stays in Spoolman.
- Assigns a toolhead. Optional, and only with FilaBridge. Tell the printer which spool is in which toolhead, with a confirmation before it replaces a loaded spool or touches a printer that is printing. Without FilaBridge the station has no printer features and the Assign screens are hidden. The touchscreen shows up to five toolheads; the web page lists every toolhead FilaBridge reports (not yet tried with more than five).
Everything above works on the touchscreen. The station also serves a web page on your network for settings, inventory browsing and firmware updates.
All pictures are generated from demo data. The touchscreen picture is a rendering, not a photo.
If you came here because of OpenPrintTag, the open spool-tag format from Prusa, this is the part to read. "OpenPrintTag" and "SLIX2" are often used as if they meant the same thing. They are different layers of one tag:
| Layer | What it is | For this station |
|---|---|---|
| Data format | What is stored on the tag: material, colour, weights | OpenPrintTag |
| Radio standard | How the reader talks to the tag | ISO 15693, also called NFC-V |
| Chip | The part you actually buy | NXP ICODE SLIX2 |
A seller who lists "SLIX2" tags is selling the chip. OpenPrintTag is what the station writes onto it. In practice: buy blank ICODE SLIX2 stickers (ISO 15693), and the station does the rest.
Spools in the wild use several unrelated tag systems, and they are not interchangeable:
| Tag system | Chip | Where you meet it | This station |
|---|---|---|---|
| OpenPrintTag | ICODE SLIX2 (ISO 15693) | Prusament spools, and tags you write yourself | Reads and writes |
| Bambu Lab | MIFARE Classic | Bambu Lab AMS spools | Not yet, planned |
| Creality CFS | MIFARE Classic 1K | Creality spools | Not yet, planned |
| Anycubic ACE, QIDI Box | MIFARE Classic 1K | Spools for those systems | Not yet, planned |
| OpenSpool | NTAG | Community DIY tags | Not yet, planned |
| Plain NTAG213 / 215 / 216 stickers | NTAG | Phone-friendly stickers | Not yet, planned |
Chip details for other brands are as documented by SimplyPrint.
The reader board (ST25R3916B) is not limited to ISO 15693. Its chip and the ELECHOUSE library this project uses also support the ISO 14443 family that Bambu, Creality and NTAG tags belong to. The 1.0 firmware only looks for ISO 15693, so those spools do not show up on the station yet, and a pack of generic NTAG stickers will not work. Supporting them is on the roadmap. Other ISO 15693 tags that are not SLIX2 are read today, but cannot be written. Stickers sold for phones often arrive pre-formatted and are not blank. Which tags work has the buying checklist and a one-minute test for a new tag.
The station writes to two things you care about, your tags and your inventory, so it is conservative about both.
- Tag writes are verified. Every block is read back after it is written, and the whole tag is decoded again at the end. A write that is interrupted offers to finish the next time that tag is on the reader, or to be skipped if the tag is lost.
- No silent saves. Weights go to Spoolman when you press the button. The station also checks that the spool it is about to update is the one it identified, and that Spoolman's copy has not changed underneath it.
- Confirmations where it counts. Writing over another spool's tag, clearing a tag, replacing a toolhead's spool and factory reset all ask first.
- Updates can roll back. After a firmware update from the browser, the station watches itself for 30 seconds and returns to the previous firmware if something is wrong. Settings and calibration survive updates.
- Secrets stay put. Settings exports and the API never include Wi-Fi passwords or access tokens.
| Controller | WT32-SC01 Plus (ESP32-S3, 16 MB flash, 480 × 320 touchscreen) |
| Scale | NAU7802 breakout and one YZC-133 load cell, 5 kg (default) or 2 kg |
| NFC reader | ELECHOUSE NFC_ST25R3916B module, switched to I²C mode |
| Tags | Blank NXP ICODE SLIX2 stickers (ISO 15693 / NFC-V), for OpenPrintTag. NTAG and MIFARE tags are not detected yet (see the roadmap). See Which tags it works with. |
| Power | Regulated 5 V over USB |
| Enclosure | A three-part printed case, no supports, about 299 g of filament: OpenTag-Station on Printables (CC BY-NC-SA 4.0). Assembly is in the manual. |
There is exactly one supported controller and one supported reader, with fixed pins, so buy the parts named in the parts list rather than look-alikes. The STL files live on Printables, not in this repository.
The diagram shows electrical connections by board contact number. Read the wiring guide before you power anything.
| Needs | Version |
|---|---|
| Spoolman | 0.26 or 0.27 to save weights. 0.27+ also uses Spoolman's own tag list. |
| FilaBridge | 1.2.1 or 1.2.2, only for toolhead assignment |
| Printer | None needed. For toolhead assignment, a printer FilaBridge supports (tested with a Prusa XL) |
| Tag format | OpenPrintTag |
| Wi-Fi | 2.4 GHz. 5 GHz-only and WPA3-only networks are not supported. |
| Browser for install | Desktop Chrome or Edge, for the USB installer |
On any other Spoolman or FilaBridge version the station stays connected and reads, writes and clears tags, but the version-gated feature (saving weights, assigning toolheads) switches off and says why. Details are in Supported versions.
- Build it. Follow the parts list and the wiring guide, and print the case.
- Install the firmware. Connect the board with a USB data cable and open the USB installer (guide). A USB install erases all settings and the scale calibration.
- Join your Wi-Fi. The touchscreen shows an open setup network named
OpenTag-Setup-XXXX. Enter your Wi-Fi on the touchscreen, or join that network and openhttp://192.168.4.1/(guide). Afterwards the station is athttp://opentag-station.local/. - Prepare Spoolman. On Spoolman 0.27 or later there is nothing to do. On older versions, add two extra fields of type Text to the Spool entity, with the keys
opentag_instance_uuidandnfc_uid(how). Without them the station cannot link a tag to a spool. - Connect and calibrate. Enter the Spoolman address (and FilaBridge if you use it), then tare and calibrate the scale (guide).
- Write your first tag. Your first spool walks through writing a tag, saving a weight and assigning a toolhead.
Later updates are done from the station's web page (Settings → Update) with opentag-station-<version>-application.bin from the Releases page (guide).
| If you want to | Read |
|---|---|
| See what it does and what to buy | Overview |
| Use it day to day | Identify · Weigh · Write a tag · Clear a tag · Assign a toolhead |
| Pick tags | Which tags work |
| Fix a problem | Troubleshooting |
| Secure it | Access token and network safety |
| Script it | REST API · Configuration keys |
The manual's source is in documentation-site/. Notes for people working on the firmware are in docs/.
- The station speaks plain HTTP and is meant for a home network you trust. Do not expose it to the internet. Set an access token so only you can change it from a browser.
- Firmware files are not signed. Install only files from this repository's Releases page.
- Only blank SLIX2 tags can be written. A sticker that a phone app has already formatted is not blank, and the station will not erase it.
- 1.0 does not read Bambu Lab, Creality, Anycubic, QIDI or OpenSpool tags. They use a different tag family that the firmware does not poll for yet; see the roadmap.
- There is no built-in filament catalog. Filaments and spools come from your own Spoolman.
- The station is built around one board and one reader. Other hardware is out of scope.
1.0.0 is the first release. VERSION holds the version on main and the changelog lists what changed. Every version merged to main is published to the Releases page. Only stable versions, with no hyphen in the number, reach the USB installer. Versions such as 1.0.1-beta.1 are marked pre-release, are for testers, and are never offered by the installer. Bugs and follow-ups are tracked in the issues.
1.0 does one tag system well: OpenPrintTag on SLIX2. The goal after that is to support every kind of tag the reader hardware can read or write, so one station handles whatever spools you own.
| Tag family | Spools and tags | Plan |
|---|---|---|
| MIFARE Classic (ISO 14443A) | Bambu Lab, Creality CFS, Anycubic ACE, QIDI Box | Detected and named since 1.0.1-beta.5. Read first. Write where the format allows it. |
| NTAG (ISO 14443A) | OpenSpool, plain NTAG213 / 215 / 216 stickers | Detected and named since 1.0.1-beta.5. Read and write |
| Other ISO 15693 chips | Tags that are not SLIX2 | Write support. They are read today. |
| ISO 14443B, FeliCa | Nothing on spools that the project knows of | Added if a spool system adopts them |
New tag types will follow the rules OpenPrintTag already has: writes are verified, anything that overwrites a tag asks first, and the web API never exposes raw tag access. The order and dates are not set. Progress is tracked in the issues, and that is the place to say which system you want first.
python -m venv .venv
. .venv/bin/activate
python -m pip install --requirement requirements-dev.txt
pio test --environment native # host tests
pio run --environment wt32-sc01-plus # firmware
pio run --environment wt32-sc01-plus --target upload # flash over USBPlatformIO and all libraries are pinned. A firmware change needs a version bump (python tools/bump_version.py <new-version>), which CI checks, and a changelog entry written by hand. See Build from source, Testing and CI and Contributing changes. Please read the code of conduct before opening an issue or pull request.
Spoolman and FilaBridge on the server side; the OpenPrintTag specification for tag data; PlatformIO and the Arduino core for ESP32; LVGL and LovyanGFX for the display; ArduinoJson; and the ELECHOUSE ST25R3916 libraries for the NFC reader.
PolyForm Noncommercial License 1.0.0: free to use, change and share for noncommercial purposes. It is not an OSI-approved open-source license. The vendored ELECHOUSE NFC libraries keep their own licenses; see the third-party notices.
If the station is useful to you, a star helps other people find it.





