Skip to content

Add BitSquiggle visualization to every master-fingerprint display - #957

Open
schnuartz-ai wants to merge 3 commits into
SeedSigner:devfrom
schnuartz-ai:feature/bitsquiggle-fingerprint
Open

Add BitSquiggle visualization to every master-fingerprint display#957
schnuartz-ai wants to merge 3 commits into
SeedSigner:devfrom
schnuartz-ai:feature/bitsquiggle-fingerprint

Conversation

@schnuartz-ai

@schnuartz-ai schnuartz-ai commented Jul 23, 2026

Copy link
Copy Markdown

Summary

  • Adds a compact BitSquiggle32 visualization next to every place SeedSigner shows a BIP-32 master fingerprint, so it can be compared by eye against the same fingerprint shown in a companion wallet app (or another SeedSigner screen) instead of matching 8 hex characters one by one.
  • The BitSquiggle32 core (a reversible 32-bit mixer + connection-graph renderer, pure Python/no new dependencies) is vendored unmodified into src/seedsigner/helpers/bitsquiggle32.py, under its original "Grug 2-Clause License" (permissive, see the upstream repo). A small adapter in src/seedsigner/helpers/bitsquiggle.py renders it to a pixel-exact, nearest-neighbor-scaled PIL image, sized to fit whatever space is actually free on each screen.

Screens covered

  1. SeedFinalizeScreen ("Finalize Seed") — inline next to the fingerprint, group re-centered as a unit
  2. SeedOptionsScreen (per-seed menu) — appended after the top-nav title
  3. SeedExportXpubDetailsScreen ("Xpub Details") — inline next to the left-aligned fingerprint row
  4. ToolsAddressExplorerAddressTypeScreen ("Address Explorer") — inline next to the left-aligned fingerprint row
  5. ToolsCalcFinalWordDoneScreen (12th/24th word tool) — centered group, same layout as Create online build instructions (without needing a 2nd Pi) #1
  6. MultisigWalletDescriptorScreen ("Descriptor Loaded") — one squiggle per cosigner, shown as a row below the existing hex text; falls back to text-only if there isn't at least one native-size row of vertical room (e.g. 5+ cosigners wrapping the hex text to 3 lines)
  7. SeedReviewPassphraseScreen ("Verify Passphrase") — replaces the {before} >> {after} hex text with two squiggles and a >> separator, since there wasn't room for both the long combined hex string and squiggles side by side

Screenshots

Rendered via the repo's own screenshot-generator hardware mocks (ScreenshotRenderer). Included in this branch under docs/pr-screenshots/bitsquiggle/ for review — illustrative only, not part of the app, fine to drop before merge.

1. Finalize Seed
SeedFinalizeScreen

2. Seed Options (per-seed menu)
SeedOptionsScreen

3. Xpub Details
SeedExportXpubDetailsScreen

4. Address Explorer
ToolsAddressExplorerAddressTypeScreen

5. 12th/24th Word tool
ToolsCalcFinalWordDoneScreen

6. Multisig Descriptor Loaded (one squiggle per cosigner)
MultisigWalletDescriptorScreen

7. Verify Passphrase (before >> after)
SeedReviewPassphraseScreen

Test plan

  • pytest tests/test_flows_seed.py tests/test_flows_tools.py tests/test_seed.py — 33/33 pass, unchanged
  • Each screen manually rendered via the screenshot-generator mocks and reviewed independently against its own screenshot for placement/sizing issues; two centering issues and one real overlap bug (multisig row's size floor could overlap the button list when the cosigner list wraps to 3 lines) were found this way and fixed
  • Manually stress-tested the longest translated "fingerprint" labels currently in seedsigner-translations (German, Russian) on the original finalize-screen placement to confirm the layout doesn't clip
  • Not yet tested on real hardware (only via the screenshot-generator's mocked renderer)

🤖 Generated with Claude Code

Renders a compact BitSquiggle32 pattern (github.com/maggo83/BitSquiggles)
next to the master fingerprint on SeedFinalizeScreen, so it can be
compared by eye against the same fingerprint shown in a companion
wallet app instead of matching hex characters one by one. The core
32-bit mixer/renderer is vendored unmodified (pure Python, no new
dependencies); a small PIL adapter renders it to a pixel-exact,
nearest-neighbor-scaled image sized to whatever space is free around
the fingerprint line, then the icon/text/squiggle group is re-centered
as a unit.
@newtonick

Copy link
Copy Markdown
Collaborator

@schnuartz-ai can you post an actual screenshot to help the review process?

Adds the same compact BitSquiggle32 glyph (already on the seed finalize
screen) to the six other places SeedSigner shows a master fingerprint:

- SeedOptionsScreen: appended after the top-nav title
- SeedExportXpubDetailsScreen: inline next to the fingerprint row
- ToolsAddressExplorerAddressTypeScreen: inline next to the fingerprint row
- ToolsCalcFinalWordDoneScreen: centered group, same layout as the finalize screen
- MultisigWalletDescriptorScreen: one squiggle per cosigner, shown as a row
  below the existing hex text (falls back to text-only if there isn't at
  least one native-size row of vertical room, e.g. with 5+ cosigners
  wrapping the hex text to 3 lines)
- SeedReviewPassphraseScreen: replaces the "{before} >> {after}" hex text
  with two squiggles and a ">>" separator, since there wasn't room for
  both the long combined hex string and squiggles side by side

Each screen was rendered via the repo's screenshot-generator mocks and
checked by an independent review pass against its own screenshot; two
placement issues (vertical centering on the wrong sub-element) and one
real overlap bug (the multisig row's minimum-size floor could push into
the button list when the cosigner list wraps to 3 lines) were found and
fixed this way.
Illustrative screenshots for pull request review only, generated via
the screenshot-generator's hardware mocks. Not part of the app itself;
fine to drop before merge if maintainers prefer.
@schnuartz-ai schnuartz-ai changed the title Add BitSquiggle visualization to the seed finalize screen Add BitSquiggle visualization to every master-fingerprint display Jul 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants