Skip to content

Commit 3df60e3

Browse files
committed
v2.33.0 — twin chips know which is which (tag index/count, asks for the missing chip), Snapmaker U1 camera on the stock firmware, favorites delete again, calmer catalogue
1 parent 75fd95f commit 3df60e3

9 files changed

Lines changed: 190 additions & 8 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,38 @@ Versions follow [Semantic Versioning](https://semver.org/).
55

66
---
77

8+
## v2.33.0 — 2026-10-03
9+
10+
### Added
11+
12+
- **Tag index / tag count (TigerTag protocol v2.2).** Chip byte +39 (page 0x0D, byte 3 — formerly padding) carries *chip i of n*: high nibble = index from 1, low nibble = count (`0x11` single, `0x12` / `0x22` twin, `0x00` unknown = every pre-v2.2 chip). Not covered by the TigerTag+ ECDSA signature (UID + pages 4-5), so it never invalidates a signed chip.
13+
- SDK `tigertag` 1.1.0 → ^1.2.0, forced offline in the main process (`process.env.TIGERTAG_OFFLINE = '1'` before the require): Studio only encodes/decodes bytes and has its own reference-data service, so no daily `api.tigertag.io` check and no OS-cache writes from the SDK's `TigerTagDB`.
14+
- **Burn**: the guided encode (`_cemStartBurn`) passes `tagCount` = chips in the sequence and `tagIndex` = rank (1..n) to `rfid:burn-one`, which patches them with the shared timestamp; `_cemMigrate` records `tag_index` / `tag_count` on the new docs.
15+
- **Re-writes keep the chip's byte**: `_keepChipTimestamp` → `_keepChipIdentity` overlays the chip's own bytes 32-35 (timestamp) **and 39** before the surgical page diff in `rfid:write-now` and `rfid:encode-cloud` — fromCloudDoc does not carry `tag_info`, so a factory twin used to lose its `0x12`/`0x22` on the first weight or colour sync. Without a readable chip, a full write falls back to the doc's `tag_index` / `tag_count` (`_tagInfoPatch`, nibble-clamped).
16+
- **Read / storage**: `_writeChipDoc` unpacks the SDK's `tag_info` into `tag_index` / `tag_count` on `users/{uid}/inventory/{UID}` on every scan (0 / 0 = unknown); `normalizeRow` exposes `tagIndex` / `tagCount` (null on chipless docs). No rules change (inventory is owner-write, no field whitelist).
17+
- **Pairing**: `_tagInfoAllowsTwin` rules out a twin the byte contradicts — a chip marked single, mismatched counts, the same rank twice — in both the 2-reader scan and `autoLinkTwinsByTimestamp` (two factory singles of one product burned within 2 s were otherwise paired); unknown values never block.
18+
- **UI**: spool card Details row *Chip i of n*; a *twin still missing* banner (`#twinMissingBanner`) when `tag_count` ≥ 2 and the partner was never scanned (it pairs on the shared timestamp once scanned); RFID tester shows *Tag i of n* (`parser.js` decodes offset 39).
19+
- **`.ttag`**: exported with the verbatim doc; `_ttagSanitizeRecord` keeps them when 0-15 and drops them on a chipless record or an out-of-range value; listed as on-chip optional fields in `docs/TTAG-FIELDS.md` and `playground/ttag-fields-editor`; added to `TTAG_ON_CHIP_FIELDS`. `CHIP_ONLY_FIELDS` now includes them, so a duplicated (chipless) spool never inherits *chip 1 of 2*.
20+
- Docs: `docs/firestore-schema.md`, MCP data guide, backend `README.md`. Verified on real chips (TigerPOD, 2 readers): burn single `0x11`, twin `0x12`/`0x22` with one timestamp, only pages 0x0C/0x0D changed, identity + signature pages intact; weight sync 1000→950→1000 g wrote only page 0x17 and kept byte +39 + timestamp.
21+
- **Snapmaker U1 camera on the stock firmware.** On connect Studio asks `server.webcams.list` (`camMode` on the conn): a declared webcam (Paxx) or an error keeps the WebRTC player (`/webcam/webrtc`); none (stock — nginx `/webcam/` answers 502) switches to refreshed stills: `camera.start_monitor` `{domain:"lan", interval:0}` every 10 s over the existing Moonraker socket (`snapWakeStockCamera`), and `/server/files/camera/monitor.jpg` (1920×1080, ~100 KB) fetched `no-store` into Blob URLs at ~1 fps, swapped only once downloaded, previous URL revoked. One loop per printer feeds every surface (side card, camera wall, printer card); it stops 12 s after the last feed leaves the screen, so the wake-ups stop and the camera idles. A `camera.start_monitor` error hides the camera block. Works outside the printer's LAN-only mode. Documented in `PROTOCOL.md` §11.4 — `printers/snapmaker/widget_camera.js`, `printers/snapmaker/index.js`, `inventory.js` (`#ppPersistentCam` rebuilt on IP **or** mode change, `snapCamSig`).
22+
23+
### Changed
24+
25+
- TigerScale photo is the V3 hardware render (README, scale card, empty state) — contributed in PR #34; the shipped copy is trimmed, resized to 512² and palettised (1.38 MB → 78 KB), full-res master archived in `assets-src/`.
26+
27+
### Fixed
28+
29+
- **Deleting favorites (bulk Delete) always failed with "permission denied"** since v2.12.0: the `products` rule read `request.resource.data` (attachment cap) in a single `allow write`, which errors on a delete. Split into `allow create, update` (cap kept) + `allow delete: if isOwner()` — backend `firestore.rules`, deployed server-side (effective for every version).
30+
- **Catalogue grid flickered twice on a ★/❤ toggle.** The optimistic render + the product snapshot(s) each rebuilt every card (60 photos re-inserted, chunks scrolled into view dropped). `_catViewSearch` now skips the rebuild when the result list, view mode, language and index are unchanged (`_catViewRenderedSig` / `_catViewRenderedIndex`) and patches only the cards whose product badge moved (`data-pb`, `_catViewPatchBadges`); the product card keeps its photo node across re-renders.
31+
- **Printer side card**: the body had become a second scroller (generic `.panel-body` overflow), so the Snapmaker camera — kept outside it to survive re-renders — stayed pinned while the rest scrolled. `.pp-scroll` is now the only scroller (camera + body, scrollbar hidden) — `40-printers.css`.
32+
- Security: `js-yaml` 4.3.1 → 4.3.2 (CVE-2026-84375 / GHSA-2883-xcg3-v3hh, YAML merge-key DoS), transitive via `electron-updater`.
33+
34+
### i18n
35+
36+
- Added `detTagIndex`, `detTagIndexVal`, `twinMissingHint` (11 locales).
37+
38+
---
39+
840
## v2.32.1 — 2026-09-29
941

1042
### Fixed

‎FEATURES.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Tiger Studio Manager — Feature Catalogue
22

3-
Tiger Studio Manager is the Electron desktop companion to the TigerTag ecosystem: a filament-inventory manager built around RFID/NFC-tagged spools ("TigerTag" chips), a fully-digital "TigerData" tier (and its catalogue-identified "TigerData+" rung), live 3D-printer integration across six brands, physical storage/rack management, a Firebase-backed social layer (friends, shareable wishlists, public profiles), and companion hardware (TD1S color sensor, TigerScale, TigerPOD dual-reader stand). This document catalogues every **shipped** feature, grouped by domain, current as of **v2.32.1**. Per-version release detail lives in `CHANGELOG.md`; forward-looking / in-progress work lives in `ROADMAP.md`.
3+
Tiger Studio Manager is the Electron desktop companion to the TigerTag ecosystem: a filament-inventory manager built around RFID/NFC-tagged spools ("TigerTag" chips), a fully-digital "TigerData" tier (and its catalogue-identified "TigerData+" rung), live 3D-printer integration across six brands, physical storage/rack management, a Firebase-backed social layer (friends, shareable wishlists, public profiles), and companion hardware (TD1S color sensor, TigerScale, TigerPOD dual-reader stand). This document catalogues every **shipped** feature, grouped by domain, current as of **v2.33.0**. Per-version release detail lives in `CHANGELOG.md`; forward-looking / in-progress work lives in `ROADMAP.md`.
44

55
---
66

@@ -214,6 +214,7 @@ Live integrations across six brands, each with real-time temperatures, per-slot
214214
- True fullscreen for a single camera via the Fullscreen API — fills the screen rather than the app window, and never recreates the card, so the live stream survives (v1.7.2 as a window-filling card, real fullscreen v2.25.0).
215215
- Shared MJPEG multiplexer (`cam_manager.js`) — one upstream connection serves every consumer (sidecard + cam wall) simultaneously, respecting single-client firmware limits (v1.7.2; FlashForge-specific precursor v1.7.1).
216216
- Creality single shared `RTCPeerConnection` across every surface that shows its camera (v1.8.2).
217+
- **Snapmaker U1 camera on the stock firmware** — no Paxx needed: the printer's own monitor is woken over Moonraker and shown as 1080p stills at ~1 fps on every surface (side card, camera wall, cards); Paxx keeps its WebRTC live video (v2.33.0).
217218

218219
## Sensors & devices
219220

@@ -232,6 +233,7 @@ Live integrations across six brands, each with real-time temperatures, per-slot
232233
- Physical-chip backup — TigerTag+ signature saved on first read, enabling later restore; "Backed up" badge (v1.10.28, badge v1.10.29).
233234
- Product ID surfaced from the chip with a link to the product catalogue page (v1.10.29).
234235
- Terminology unification: all user-facing "RFID" strings renamed to "NFC" (v2.5.0).
236+
- **Tag index / tag count** (TigerTag protocol v2.2) — every chip says which one of its object it is ("chip 1 of 2"): written by the guided encode (single `0x11`, twin `0x12`/`0x22`), kept intact through weight and colour syncs, stored on each spool on scan, shown on the spool card, carried in `.ttag`; a twin whose partner was never scanned gets a "scan the other chip" banner, and two chips that say they are singles are never paired as a twin (v2.33.0).
235237

236238
## "What's New" & release UX
237239

‎README.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ The **TigerTag SDK** is the low-level library that handles all NFC chip operatio
120120
- **Spools that keep themselves current** *(new in 2.16.0)* — when a brand corrects a temperature, a diameter or a colour name, the spools you own follow along on their own. Only a TigerTag+ can ever ask you for anything, and only when the change concerns something written on the chip itself
121121
- **Photos framed in the spool's colour** *(new in 2.30.0)* — every spool photo sits in a frame of its own colour, in the grid, the lists, the catalogue and the details, so you spot the red one at a glance
122122
- Custom product image for DIY & Cloud spools
123-
- Manufacturing date, twin-tag detection and manual repair
123+
- Manufacturing date, twin-tag detection and manual repair — chips written as a twin say so ("chip 1 of 2"), and the app asks for the second chip when only one has been scanned
124124
- Spool toolbox — scan color (TD1S), scan TD, link twin, remove from rack, delete
125125
- **One action row on every card** — the product card, the spool detail and the stack of identical spools all offer the same buttons, including a shopping button that opens the shop when the filament has a buy link (and takes you to where you'd add one when it hasn't)
126126
- **Multi-select** — tick several spools (or printers) and delete them together, with a hold-to-confirm
@@ -145,6 +145,8 @@ Every brand at a glance:
145145

146146
Each brand supports: filament edit per slot, printer discovery (mDNS + port-scan + Add by IP), camera widget. When a scan finds several machines, **tick the ones you want and add them all in one go**. A **FlashForge Creator 5 / 5 Pro** tells you whether it runs the official Cloud + LAN firmware and hands you the latest version for your model *(new in 2.30.0)*.
147147

148+
The **Snapmaker U1** shows its camera even on the original Snapmaker firmware (about one picture a second, enough to watch a print); with the Paxx extended firmware it is smooth live video *(new in 2.33.0)*.
149+
148150
The **printers table** shows, per printer: a live **print preview** (the model on the bed), the current job, and an **"Ends at"** column with the wall-clock finish time — plus per-printer **tags** and a search bar with **Brand / State / Tags** filters to manage a whole fleet.
149151

150152
Some brands also expose a **live control panel** (Snapmaker, Elegoo, Anycubic): home / jog the axes, set nozzle & bed targets, toggle the light, control the part-cooling fan, pick the print-speed mode, and load / unload filament per slot.

‎WORKLOG.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Worklog — v2.32.2 (in progress)
1+
# Worklog — v2.33.0 (released 2026-10-03)
22

33
## Added
44
- Tag index / tag count (TigerTag protocol v2.2, chip byte +39: high nibble = chip i, low nibble = n chips) — `main.js`, `preload.js`, `renderer/inventory.js`, `renderer/rfid_protocol/tigertag/parser.js`, `renderer/rfid_protocol/tigertag/index.js`, `package.json`, `package-lock.json`

‎data/release-notes/v2.33.0.md‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
Twin-chip spools now know they are twins, and the Snapmaker U1 camera works without custom firmware.
2+
3+
## Added
4+
5+
- Spools carrying two TigerTag chips now record which chip is which ("chip 1 of 2"). When only one of the two has been scanned, the spool card asks you to scan the other one.
6+
- New spools encoded from the app write this chip number automatically (single chip, or chip 1 and 2 of a twin), and updating a spool's weight or colour keeps it intact.
7+
- The chip number is included in `.ttag` exports and imports.
8+
- Snapmaker U1: the camera now works on the original Snapmaker firmware, without the Paxx extended firmware (about one image per second). With Paxx, the smooth live video is unchanged.
9+
10+
## Changed
11+
12+
- The TigerScale photo now shows the current V3 hardware.
13+
14+
## Fixed
15+
16+
- Fixed an issue where deleting favorites always failed with a permission error.
17+
- Fixed an issue where the catalogue grid flickered when adding or removing a favorite.
18+
- Fixed an issue where, on a Snapmaker printer card, the camera stayed fixed at the top instead of scrolling with the rest of the card.
19+
- Two chips of the same product written seconds apart are no longer paired as a twin when they say they are single chips.
20+
- Updated a component used by automatic updates to a version with a security fix.
21+
22+
---
23+
24+
📖 **[Full changelog](https://github.com/TigerTag-Project/TigerTag-Studio-Manager/blob/main/CHANGELOG.md)** · ⬇️ Grab the installer for your OS from the **Assets** below (macOS `.dmg`, Windows `Setup .exe` or `portable .exe`, Linux `.AppImage`).

0 commit comments

Comments
 (0)