v2.1.0 — Now a full Spoolman app
versionCode 104 · versionName 2.1.0 · Open testing track
SpoolPainter v2.1.0 reframes the app: it's now a full Spoolman client first, with NFC pairing as one of the things you can do. Save stands on its own. Read and Write are
independent steps you reach for when you need a tag.
What's new
Now a full Spoolman app
- Save commits your filament and spool data to Spoolman. No tag required. You can use SpoolPainter as a phone-friendly way to add and edit spools in your Spoolman
inventory, full stop. - Read loads a tag into the form. Tap Read, tap a tag, the form fills with whatever's on it (OpenSpool, Snapmaker, or Bambu if you've supplied a key).
- Write pairs a tag with the saved spool. For NDEF-writable tags, this writes the OpenSpool payload + appends the tag's UID to the spool record. For vendor chips
that can't be written, this is a UID-only "Map tag" link.
Save, Read, and Write are independent. Each has its own button. Each flips to a full-width Cancel while it's waiting for a tag — no silent locked screens.
State-aware Save labels tell you what will happen:
- Save to Spoolman — disabled, nothing to save
- Update — patching an existing spool
- Create spool — picking an existing filament + creating a fresh spool
- Create filament and spool — creating both from form data
State-aware Write hint tells you what's next: Tap a blank tag to pair this spool / Create a spool to map this tag (vendor) / etc.
Read vendor tags
Snapmaker tags decode out of the box. Tap Read on a Snapmaker tag and the form prefills with material, color, and temps.
Other vendor formats can be unlocked by pasting a tag key under Settings → Advanced (collapsed by default; the app does not bundle vendor keys).
After a successful vendor read, pairing runs through the Map tag flow — UID-only HTTP linking, no NDEF write attempt (vendor chips don't accept those).
Vendor decoding only runs on an explicit Read tap, never on passive ambient flicks. Phone-on-tag time stays fast for casual taps.
Radio weight picker (Remaining / Measured)
The bidirectional weight row is replaced by a Spoolman-parity radio:
- Remaining — type how much filament is left
- Measured — type a scale reading; the app computes filament left
Only the active method's input field renders; the other is hidden. No more silent keystroke loss when the form was missing an empty-spool weight.
Helpful supporting text under the active field:
- Spool on scale: N g (Remaining mode, when empty-spool is set)
- Filament left: N g (Measured mode, when empty-spool is set)
More fields editable on existing spools
Pick an existing spool from the dropdown and you can now edit:
- Color (PATCHes filament record)
- Density (filament)
- Filament weight (filament)
- Temperatures — nozzle and bed (filament)
- Per-spool price (spool, overrides filament default)
- Variant — already worked since v2.0.1
Material and Brand stay locked. Changing those means "wrong filament picked" — pick a different filament from the dropdown instead.
22-currency dropdown
Currency is now a 22-entry dropdown (was 3 segmented options): US Dollar, Euro, British Pound, Japanese Yen, Chinese Yuan, Indian Rupee, South Korean Won, Swiss Franc,
Canadian / Australian / New Zealand Dollar, Brazilian Real, Mexican Peso, Swedish Krona, Turkish Lira, Russian Ruble, South African Rand, Israeli Shekel, UAE Dirham,
Hong Kong Dollar, Singapore Dollar, plus the generic Money option.
Existing settings keep working — Dollar / Euro / Generic IDs are preserved.
License
SpoolPainter is now GPL-3.0. See LICENSE and NOTICE for the full text and third-party attribution (Snapmaker tag format support derives from
Snapmaker/u1-klipper, GPL-3.0).
UX polish
- NFC status overlay — the top-of-screen reading/writing pill is replaced by a centered radiating-waves indicator that fades in mid-screen when a tap is in flight.
- Snackbar lifted — confirmations sit 25% above the bottom inset with bigger, friendlier copy.
- Three Cards become one — main screen consolidates Spool / Filament form / More details into a single outer Card with subtler section dividers.
- Spool logo centered — the spool hole sits at screen center, not the bounding box.
- Picker placeholders — empty Spool dropdown reads "Spools in Spoolman"; empty Filament dropdown reads "Filaments in Spoolman".
- Vendor tag chip — when a vendor tag was successfully decoded, the "We can't read this tag" line drops. The prefilled form is the success cue.
Bug fixes
- No more silent keystroke loss when typing weight without an empty-spool default — the radio model removes the failure mode by construction.
- PairAnotherTagSheet vanish bug — during second-tag listening the sheet sometimes vanished with no Cancel surface. Fixed: the existing inline
[Read | Write] → Cancelrow takes over. - Stale-prefill guard — opening an aged form and saving without edits never overwrites Spoolman's fresher value (printer firmware decrements
remaining_weightin
the background). - Passive ambient taps of vendor chips no longer flip the form into vendor mode. Vendor mode reaches only via explicit Read.
Send feedback
There's a Send feedback link at the bottom of Settings opening a Google Form. Testing-track only — will be removed before any production push.
Carry-over
- All v2.0 OpenSpool flows (read, create-and-pair, two-tag, move-on-bind, side modes) unchanged.
- Same package id (
com.spoolpainter.app) — installs over v2.0.x in place. No data migration; data lives on tags + Spoolman. minSdk 29(Android 10+),targetSdk 36.
Coming next (v2.1.x)
- Re-pair flow for changing a spool's material / brand after pairing
- Archive a spool / filament from the app
- Additional vendor tag formats on the same opt-in key model
Install
Join the open testing track on Google Play
Or download app-release.apk from this release and sideload.
Thanks to @ProtoxiDe22 for the initial vendor tag read implementation (#3 merged
into v2.1) and to all v2.0 testers whose feedback drove the v2.1 polish round.
Full diff: v2.0.2...v2.1.0