Commit Graph
42 Commits
Author SHA1 Message Date
sosnekandCursor b328511d02 Add SmartTAG Color 2.6 (type 1626) support
These tags look like 296x152 but the firmware only takes 152x296, so landscape BMPs get transposed. Tested on a real 2.6 color tag.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-31 00:07:03 -04:00
i12bp8 81adb463eb github plugin: trading-card redesign
- Trading-card layout: accent stripe with github.com/<login> link,
  square dithered avatar with frame, faux-bold display name,
  flexible bio that wraps cleanly (no mid-word cuts, no ellipsis),
  3-column stats panel (STARS / FOLLOWERS / REPOS).
- Bio falls back to a deterministic filler line when the user has
  none, so the slot never reads as a render bug.
- Tighter 7-px line height for the bio gets one extra line into
  the same band on 208x112.
- Drop heatmap + month axis (cleaner card; halves render time).
2026-04-28 13:48:30 +02:00
i12bp8 d2f92b67e8 github plugin: redesign for 208x112 tag
- Add month-initial axis under the heatmap
- Add current-streak counter in caption (accent-highlighted)
- Replace stats/bio fight with a single icon stat row (star, followers, repos)
- Fix bullet/middle-dot rendering bug (U+00B7 -> U+2022, in font table)
- Allow display name at scale 2 on wide tags only; safer truncation
- Robust avatar URL ?s= append (handles avatars without query string)
- Tighter geometry tuned for 208x112; still scales to 296x128
2026-04-28 13:20:03 +02:00
I12BP8 0eae6de165 Update README.md 2026-04-27 14:04:08 +02:00
I12BP8 567eb4b6fa Add files via upload 2026-04-27 14:01:52 +02:00
i12bp8 287481453e WiFi plugins: GitHub Profile + DiceBear identicon + tri-state canvas
Worker (cloud-plugins/):
- New plugin 'GitHub Profile': avatar dithered upper-left, display
  name + @handle (with accent star) + word-wrapped bio in the right
  column, followers/repos line, and a 53x7 contribution heatmap
  with an accent palette (red dots for everyday activity, black for
  the rare hottest days). Tuned for 208x112 ESLs and adapts to
  296x128 with a bigger avatar and roomier heatmap.
- Identicon plugin gains DiceBear style selector (pixel-art /
  bottts / lorelei / adventurer / micah / fun-emoji / shapes) on
  top of the original symmetric grid 'local' mode. Both are
  rendered through the new shared image_util pipeline.
- Crypto plugin redesigned: editorial layout with corner brackets,
  bold price headline, white-knockout delta badge with a real
  triangle glyph, currency symbol prefix using the canvas font's
  new euro / pound / yen glyphs, and a stippled accent fill under
  the sparkline.

Canvas:
- setPixel is now last-write-wins across planes, so drawing black
  on top of an accent-filled area produces a clean black pixel
  instead of the muddy plane-conflict the e-paper driver was
  showing previously. Every pixel is therefore exactly one of
  white / black / accent which is what plugin authors intuit.
- New whitePixel + drawTextWhite primitives for knockout text
  (e.g. white labels punched through a coloured badge).
- FONT_EXTRA shipped with the canvas for currency / arrow / shape
  / star / bracket glyphs. Plugins can now write '\u20AC1234' and
  have the euro symbol Just Work.

Image pipeline (new image_util.ts):
- One fetchImageGray() that sniffs PNG vs JPEG, decodes via
  upng-js / jpeg-js, composites alpha over white, and returns a
  tightly-packed grayscale buffer.
- One blitGrayDither() that nearest-neighbour scales the gray
  buffer to a destination rect and serpentine Floyd-Steinberg
  dithers it on the way in. Used by identicon and github.

FAP:
- WiFi BMP writer is now plane-aware: writes the same biPlanes=1,
  biBitCount=2, 3-entry palette layout the rest of the IR TX
  pipeline already understood for web-image-prep BMPs. Tri-colour
  tags now actually receive accent ink from cloud-rendered plugins.
- WiFi run scene un-forces accent: plugins are invoked with the
  tag's actual accent capability and the BMP is opened with the
  matching plane count.
- Run scene now calls bmp_abort on exit so an aborted transfer
  doesn't leak the ~10 KB pixel buffer.
- Plugin manifest cache capped at TT_WIFI_MAX_FAP_PLUGINS=8 (down
  from 16) and the UART RX stream buffer shrunk to 8 KB. Together
  these cut WiFi-flow heap pressure by ~23 KB and fix the OOM
  crashes that occasionally happened when opening WiFi Plugins.
- Broadcast scene auto-transmit fix: enter_callback now filters
  by the >> Transmit << row index, and the cursor defaults to
  row 0 instead of Transmit. Previously a stale OK key-release
  from the prior submenu would land on the Transmit row and
  blast the radio without any user action.
2026-04-27 12:49:12 +02:00
i12bp8 99bcc162b8 web-image-prep: chroma-contracted quantiser for newsprint illusion
Previous version pulled accent ink too aggressively (accentPull 0.85)
so anything red-leaning collapsed to solid red. Real photographic feel
from a 3-ink palette comes from W/B halftones simulating greys with
the chromatic ink only sparsely overlaid - the newsprint illusion.

Three knobs now make this work:
  - L_WEIGHT 3.5 (was 1.6): lightness completely dominates the metric
  - CHROMA_CAP: source a/b axes pre-scaled to the achievable accent
    chroma so the dither isn't asked for more colour than one ink can
    deliver. Excess chroma gets dropped via FS error diffusion through
    B+W neighbours.
  - accentPull 0.06 (was 0.85): only a tiebreaker bonus, used in the
    most strongly hue-aligned pixels.
2026-04-26 21:03:10 +02:00
i12bp8 ad9b6dd2fe web-image-prep: hue-aligned tri-colour quantiser + serpentine dither
The old quantiser pulled accent ink toward any chromatic pixel using a
flat chroma bonus, which smeared red across shadows and produced flat
red blobs without depth. Two fixes:

- Distance now weights L (lightness) ~1.6x more than chroma, so dark
  pixels go to black and light pixels to white before colour competes.
  That preserves the photograph's tonal structure.
- Accent attraction is the squared *signed projection* of the pixel's
  chroma onto the accent direction. Red ink only pulls red-leaning
  pixels (positive a*); blue/green never picks red. The squaring gives
  a smooth ramp, so faint reds get sparse red dither and saturated
  reds get dense red - matching how a real risograph layers a single
  chromatic ink under W/B halftones.

Also flipped Floyd-Steinberg to a serpentine scan with mirrored kernel
on reverse rows, killing the diagonal worm artefacts that gave smooth
gradients an obviously-dithered look.
2026-04-26 20:59:15 +02:00
I12BP8 c20fc112d1 Update README with new features information
Added details about NFC Tag Scan and WiFi Plugins features.
2026-04-26 20:52:23 +02:00
i12bp8 2739069f22 Add optional WiFi Plugins (ESP32-S2 bridge + Cloudflare Worker)
- Flipper FAP: WiFi Setup, Plugins picker, plugin-run scene wired into
  Targeted Payloads -> <tag> -> WiFi Plugins
- Framed UART link to the dev board with bulk-read RX path and 16 KB
  stream buffer to keep up with full plugin bursts
- ESP firmware: 900 KB UART<->HTTPS bridge, USB-Serial-JTAG console,
  cert-bundle TLS, 16 KB worker stack to host mbedTLS handshake
- Cloudflare Worker: Crypto, Weather, Identicon plugins out of the
  box; new plugins are a single TypeScript file, no Flipper reflash
- Shared protocol header + 1bpp BMP writer that matches web-image-prep
  palette/stride conventions
2026-04-26 20:50:16 +02:00
i12bp8 8fab06a807 README: add prominent link/badge to hosted Image Prep 2026-04-26 15:41:21 +02:00
i12bp8 d608afb43b Drop-folder image flow + web image preparer
- Add web-image-prep/: self-contained HTML5 image preparer with
  perceptual Oklab 3-colour quantisation, Floyd-Steinberg/Atkinson/
  Bayer dither, all supported tag profiles, BMPs that match the FAP
  reader exactly. Auto-deployed to GitHub Pages.
- Add 'Set Image' under Targeted Payloads. Lists every BMP in
  apps_data/tagtinker/dropped/, scrolls long names, marks foreign-
  resolution files with a '~' prefix.
- Stream-time nearest-neighbour rescaling so any BMP can target any
  tag at any page; image options screen is now Page-only.
- Remove Phone Sync menu and the Android companion app: replaced by
  the browser preparer + drop folder.
- Static, IR-friendly transmit screen ('Tinkering Tag', point hint,
  3-dot loader, 'Flipped ;)').
2026-04-26 15:40:27 +02:00
I12BP8 c74da35ca7 Merge pull request #34 from 7h30th3r0n3/main
Fix formatting for NFC tag decoding contributor mention
2026-04-26 14:13:34 +02:00
7h30th3r0n3 0627bb1720 Fix formatting for NFC tag decoding contributor mention 2026-04-26 14:09:48 +02:00
I12BP8 c1205988c9 Merge pull request #33 from 7h30th3r0n3/fix/contributing-guidelines
docs: update contributing guidelines
2026-04-26 13:50:27 +02:00
7h30th3r0n3 3d733cea6d docs: update contributing guidelines with NFC and merge policy 2026-04-26 13:46:25 +02:00
I12BP8 bf5b155b91 Merge pull request #31 from 7h30th3r0n3/feature/nfc-scan
feat: add NFC tag scanning to auto-fill ESL barcode
2026-04-26 13:35:36 +02:00
I12BP8 41f40c4621 Replace 'New Target' with 'Type Barcode' in menu 2026-04-26 13:34:18 +02:00
7h30th3r0n3 d76403376b docs: update README for v2.1 with NFC scan feature 2026-04-26 13:24:00 +02:00
7h30th3r0n3 9b3524b5f8 feat: add NFC tag scanning to auto-fill ESL barcode
Add "+ Scan NFC" option in the Targeted Payloads menu.
Scans Mifare Ultralight NDEF tags, decodes the encoded
ESL ID, and auto-creates the target — no manual barcode
entry needed. Cyan LED blinks during scan. Loops until
a tag is found or the user presses Back.

New files:
- nfc/tagtinker_nfc.c/.h — NDEF URI decoder module
- scenes/tagtinker_scene_nfc_scan.c — NFC scan scene

Version bumped to 2.1, NFC credit added to About screen.
2026-04-26 13:12:42 +02:00
i12bp8 506e1ad19e Fix barcode validation for non-standard SOLUM tags 2026-04-25 14:43:24 +02:00
I12BP8 678a2c6943 Massive IR transmission speed optimization: ~45s down to ~10s monochrome, ~20s color 2026-04-24 20:42:36 +02:00
I12BP8 955cb86fc1 Fix barcode checksum to include prefix letter
Pricer barcodes validate with (sum of all 17 chars) mod 10 == 0,
with the letter prefix contributing by its ASCII offset from '0'.
The old formula compared sum of the first 16 digits to the 17th,
rejecting valid codes like A4120365539013704.
2026-04-24 20:42:36 +02:00
I12BP8 934bc2e309 Fix demo image link in README.md 2026-04-24 20:42:36 +02:00
I12BP8 0a859fa35d Add demo image to README
Added demo image to README for better visualization.
2026-04-24 20:42:36 +02:00
I12BP8 531a58da9b Add files via upload 2026-04-24 20:42:36 +02:00
I12BP8 e1feae83c9 Configure release APK signing 2026-04-24 20:42:36 +02:00
I12BP8 eca87b1010 Update disclaimer to strictly prohibit illegal activities 2026-04-24 20:42:36 +02:00
I12BP8 34f028f44b Finalize V2.0 Stability: Fixed small tag timeout and IR jitter 2026-04-24 20:42:36 +02:00
I12BP8 12b0c04860 Update README with battery info and contribution details
Added information about battery removal effects and contact options for contributions.
2026-04-10 02:43:32 +08:00
i12bp8 4fedd2b59b Add README FAQ and align license headers 2026-04-07 20:19:59 +02:00
i12bp8 29f8c71722 Fix Android release build v1.3 2026-04-07 20:04:05 +02:00
i12bp8 09f593dcbb TagTinker V1.3 Android Companion, Extra Settings, ESL Type Detection, Bug Fixes 2026-04-07 19:58:34 +02:00
i12bp8 f3095f389f Add profile-aware transmit controls and image options 2026-04-07 00:18:41 +02:00
i12bp8 d2eb38d590 Refine startup warning UI 2026-04-06 21:20:14 +02:00
i12bp8 cc918e5723 Add startup warning and toggle 2026-04-06 20:55:46 +02:00
I12BP8 ff619cfe63 Add files via upload 2026-04-06 20:44:16 +02:00
I12BP8 da14064e96 Persist saved target tags 2026-04-06 15:54:35 +02:00
I12BP8 52066db59b Fix builds after repo rename 2026-04-06 15:47:22 +02:00
I12BP8 ba20e28be0 Update README.md 2026-04-06 12:59:25 +02:00
I12BP8 dd94edacf7 Revise README for clarity and improved formatting 2026-04-06 09:37:42 +02:00
i12bp8 d7b3fcc68c Initial release 2026-04-06 03:09:39 +02:00