What changed, and why it matters
This commit simply adds support for a new hardware device called 'TZT' to the Krux project. It updates documentation, adds simulator images, and adds a new simulator command. There is no indication of any security issue being fixed or introduced.
No security action required. This is a benign feature addition for new hardware support.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit f54a8dc8933adae440fded9a71aa72e45c7e8373 is a feature addition for a new supported device ‘TZT’ (maixpy_tzt). Changes include documentation updates across multiple markdown files, new binary image assets for the simulator, a new pyproject.toml simulator command alias, additions to simulator device definitions (window size, font loading, screenshot rect), and a minor change to the krux shell script adding a ‘boot-terminal’ command variant. No cryptographic, firmware flashing, or input-handling logic changes with security implications are present.
Changed components
README.mddocs/getting-started/installing/from-pre-built-release.en.mddocs/getting-started/installing/from-source.en.mddocs/getting-started/installing/from-test-release.en.mddocs/getting-started/settings.en.mddocs/img/maixpy_tzt/load-mnemonic-seq-overview-314.pngdocs/img/maixpy_tzt/logo-314.en.pngdocs/index.en.mddocs/parts.en.mdkrux shell scriptpyproject.tomlsimulator/assets/maixpy_tzt.pngsimulator/assets/maixpy_tzt_mask.pngsimulator/kruxsim/devices.pysimulator/simulator.pyInspect captured patch +71 / −17
diff --git a/README.md b/README.md
index 5d63c75..a6879d3 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,7 @@
<p align="center">
<img src="docs/img/maixpy_yahboom/logo-312.en.png" alt="yahboom" style="width: 11%;">
+<img src="docs/img/maixpy_tzt/logo-314.en.png" alt="tzt" style="width: 11%;">
<img src="docs/img/maixpy_amigo/logo-300.en.png" alt="maixpy amigo" style="width: 16%;">
<img src="docs/img/maixpy_dock/logo-302.en.png" alt="maixpy dock" style="width: 15%;">
<img src="docs/img/maixpy_wonder_mv/logo-304.en.png" alt="wonder mv" style="width: 11%;">
@@ -161,6 +162,9 @@ poetry run poe simulator-cube
# Run simulator with the touch device wonderMV, then use mouse to navigate
poetry run poe simulator-wonder-mv
+
+# Run simulator with the touch device tzt, then use mouse to navigate
+poetry run poe simulator-tzt
```
Note: With emulated SD card it is possible to store settings, encrypted mnemonics, also drop and sign PSBTs. After some time running, the simulator may become slow. If that happens, just close and open again!
diff --git a/docs/getting-started/installing/from-pre-built-release.en.md b/docs/getting-started/installing/from-pre-built-release.en.md
index 0c4e573..80953d6 100644
--- a/docs/getting-started/installing/from-pre-built-release.en.md
+++ b/docs/getting-started/installing/from-pre-built-release.en.md
@@ -41,7 +41,7 @@ Connect the device to your computer via USB (for Maix Amigo, make sure you’re
./ktool -B goE -b 1500000 maixpy_DEVICE/kboot.kfpkg
```
-For `dock` or `wonder_mv` use the `-B dan` parameter:
+For `dock`, `wonder_mv` or `tzt` use the `-B dan` parameter:
```bash
./ktool -B dan -b 1500000 maixpy_dock/kboot.kfpkg
```
diff --git a/docs/getting-started/installing/from-source.en.md b/docs/getting-started/installing/from-source.en.md
index 8705732..b8c055c 100644
--- a/docs/getting-started/installing/from-source.en.md
+++ b/docs/getting-started/installing/from-source.en.md
@@ -65,7 +65,7 @@ unzip kboot.kfpkg -d ./kboot/
```
### Flash the firmware onto the device
-Connect the device to your computer via USB (for Maix Amigo, make sure you’re using bottom port), power it on, and run the following, replacing `DEVICE` with either `m5stickv`, `amigo`, `cube`, `dock`, `yahboom` or `wonder_mv`:
+Connect the device to your computer via USB (for Maix Amigo, make sure you’re using bottom port), power it on, and run the following, replacing `DEVICE` with either `m5stickv`, `amigo`, `cube`, `dock`, `yahboom`, `wonder_mv` or `tzt`:
```bash
# flash firmware to DEVICE
./krux flash maixpy_DEVICE
diff --git a/docs/getting-started/installing/from-test-release.en.md b/docs/getting-started/installing/from-test-release.en.md
index 6f78d2f..5397feb 100644
--- a/docs/getting-started/installing/from-test-release.en.md
+++ b/docs/getting-started/installing/from-test-release.en.md
@@ -124,3 +124,21 @@ To Flash WonderMV you need to pass the `-B dan` parameter.
```pwsh
.\ktool-win.exe -B dan -b 1500000 maixpy_wonder_mv\kboot.kfpkg
```
+
+#### TZT
+To Flash TZT you need to pass the `-B dan` parameter.
+
+##### Linux
+```bash
+./ktool-linux -B dan -b 1500000 maixpy_tzt/kboot.kfpkg
+```
+
+##### Mac
+```bash
+./ktool-mac -B dan -b 1500000 maixpy_tzt/kboot.kfpkg
+```
+
+##### Windows
+```pwsh
+.\ktool-win.exe -B dan -b 1500000 maixpy_tzt\kboot.kfpkg
+```
diff --git a/docs/getting-started/settings.en.md b/docs/getting-started/settings.en.md
index fecb412..121a8b8 100644
--- a/docs/getting-started/settings.en.md
+++ b/docs/getting-started/settings.en.md
@@ -119,7 +119,7 @@ Here you choose between `thermal/adafruit`, `cnc/file`, `cnc/grbl` or `none` (de
<div style="clear: both"></div>
-#### Touchscreen (Maix Amigo, Yahboom and WonderMV only)
+#### Touchscreen (Maix Amigo, Yahboom, WonderMV and TZT only)
<img src="../../img/maixpy_amigo/touchscreen-300.png" align="right" class="amigo">
If your device has touchscreen you can change the touch detection threshold. If it is being too sensitive or detecting false or ghost touches, you should increase the threshold value, making it less sensitive. The other way is also valid, reduce the threshold to make the screen more sensitive to touches.
diff --git a/docs/img/maixpy_tzt/load-mnemonic-seq-overview-314.png b/docs/img/maixpy_tzt/load-mnemonic-seq-overview-314.png
new file mode 100644
index 0000000..b7bc740
Binary files /dev/null and b/docs/img/maixpy_tzt/load-mnemonic-seq-overview-314.png differ
diff --git a/docs/img/maixpy_tzt/logo-314.en.png b/docs/img/maixpy_tzt/logo-314.en.png
new file mode 100644
index 0000000..0682b27
Binary files /dev/null and b/docs/img/maixpy_tzt/logo-314.en.png differ
diff --git a/docs/index.en.md b/docs/index.en.md
index a0e5a6e..ddb2009 100644
--- a/docs/index.en.md
+++ b/docs/index.en.md
@@ -5,6 +5,7 @@ hide:
---
# Krux
<img src="img/maixpy_yahboom/load-mnemonic-via-tinyseed-filled-312.png" style="width: 11%;">
+<img src="img/maixpy_tzt/load-mnemonic-seq-overview-314.png" style="width: 11%;">
<img src="img/maixpy_amigo/login-options-orange-300.png" style="width: 16%;">
<img src="img/maixpy_dock/tools-options-302.png" style="width: 15%;">
<img src="img/maixpy_wonder_mv/load-mnemonic-seq-mnemonic-304.png" style="width: 11%;">
@@ -13,7 +14,7 @@ hide:
Krux is an open-source firmware that transforms off-the-shelf Kendryte K210 devices, such as the Maix Amigo, M5StickV and [more](parts.md), into versatile bitcoin transaction signers. Beyond its core functionality, Krux is a flexible platform that can adapt to devices with different form factors, providing a suite of tools to assist with the creation and recovery of mnemonic backups, some of which include encryption options for enhanced security.
-Devices like the Maix Amigo, Yahboom or WonderMV come ready to use, with large touchscreens that make it easy and user-friendly to operate. These devices are ideal for those looking for a plug-and-play solution. On the other hand, Krux also supports development board kits, which are perfect for DIY enthusiasts who enjoy customizing and building their own hardware setups.
+Devices like the Maix Amigo, Yahboom, WonderMV or TZT come ready to use, with large touchscreens that make it easy and user-friendly to operate. These devices are ideal for those looking for a plug-and-play solution. On the other hand, Krux also supports development board kits, which are perfect for DIY enthusiasts who enjoy customizing and building their own hardware setups.
Interacting seamlessly with leading coordinator wallets through QR codes, SD cards, and even thermal printers, the user-friendly firmware offers unique features to support transactions and mnemonic backups in an offline environment.
diff --git a/docs/parts.en.md b/docs/parts.en.md
index 1b098d7..8dbef3c 100644
--- a/docs/parts.en.md
+++ b/docs/parts.en.md
@@ -2,17 +2,17 @@
### Compatible Devices (comparative table)
-| Device | [M5StickV](#m5stickv) | [Maix Amigo](#maix-amigo) | [Maix Dock](#maix-dock) | [Yahboom k210 module](#yahboom-k210-module) | [Maix Cube](#maix-cube) | [WonderMV](#wondermv) |
-| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
-| Price range | US$ 50-55 | US$ 50-85 | US$ 27-35 | US$ 45-61 | US$ 34-49 | US$ 58-86 |
-| Screen size / resolution | 1.14" / 135*240 | 3.5" / 320*480 | 2.4" / 240*320 | 2" / 240*320 | 1.3" / 240*240 | 2" / 240*320 |
-| Brightness control | :white_check_mark: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: |
-| Device size | 48\*24\*22mm | 104\*63\*17mm | 98\*59\*18mm | 57\*41\*17mm | 40\*40\*16mm | 59\*41\*17mm |
-| Touchscreen | :x: | Capacitive | :x: | Capacitive | :x: | Capacitive |
-| Camera | `OV7740` | `OV7740` rear<br>`GC0328` front | `GC0328` | `OV2640` <i style="font-size: 85%">(VER:1.0)</i> or<br>`GC2145` <i style="font-size: 85%">(VER:1.1)</i> | `OV7740` | `GC2145` |
-| Battery | 200mAh | 520mAh | :x: | :x: | 200mAh | :x: |
-| Requirements | None | None | [Rotary encoder](https://duckduckgo.com/?q=ky-040)<br> [3D printed case](https://github.com/selfcustody/DockEncoderCase)<br> Soldering<br>Assembly | None | None | None |
-| Warnings | [:material-numeric-1-circle:{ title="USB-C recognition" }](#pull-up-resistor-info) | [:material-numeric-2-circle:{ title="Maix Amigo screens" }](#amigo-info) | [:material-numeric-3-circle:{ title="Maix Dock and soldered pin" }](#dock-info) | Micro USB | 3-Way button | [:material-numeric-1-circle:{ title="USB-C recognition" }](#pull-up-resistor-info) [:material-numeric-4-circle:{ title="WonderMV and SD card" }](#wondermv-info) |
+| Device | [M5StickV](#m5stickv) | [Maix Amigo](#maix-amigo) | [Maix Dock](#maix-dock) | [Yahboom k210 module](#yahboom-k210-module) | [Maix Cube](#maix-cube) | [WonderMV](#wondermv) | [TZT](#tzt) |
+| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
+| Price range | US$ 50-55 | US$ 50-85 | US$ 27-35 | US$ 45-61 | US$ 34-49 | US$ 58-86 | US$ 48 |
+| Screen size / resolution | 1.14" / 135*240 | 3.5" / 320*480 | 2.4" / 240*320 | 2" / 240*320 | 1.3" / 240*240 | 2" / 240*320 | 2" / 240*320 |
+| Brightness control | :white_check_mark: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: | :x: |
+| Device size | 48\*24\*22mm | 104\*63\*17mm | 98\*59\*18mm | 57\*41\*17mm | 40\*40\*16mm | 59\*41\*17mm | 57\*41\*16mm |
+| Touchscreen | :x: | Capacitive | :x: | Capacitive | :x: | Capacitive | Capacitive |
+| Camera | `OV7740` | `OV7740` rear<br>`GC0328` front | `GC0328` | `OV2640` <i style="font-size: 85%">(VER:1.0)</i> or<br>`GC2145` <i style="font-size: 85%">(VER:1.1)</i> | `OV7740` | `GC2145` | `GC2145` or<br>`GC0328` |
+| Battery | 200mAh | 520mAh | :x: | :x: | 200mAh | :x: | :x: |
+| Requirements | None | None | [Rotary encoder](https://duckduckgo.com/?q=ky-040)<br> [3D printed case](https://github.com/selfcustody/DockEncoderCase)<br> Soldering<br>Assembly | None | None | None | None |
+| Warnings | [:material-numeric-1-circle:{ title="USB-C recognition" }](#pull-up-resistor-info) | [:material-numeric-2-circle:{ title="Maix Amigo screens" }](#amigo-info) | [:material-numeric-3-circle:{ title="Maix Dock and soldered pin" }](#dock-info) | Micro USB | 3-Way button | [:material-numeric-1-circle:{ title="USB-C recognition" }](#pull-up-resistor-info) [:material-numeric-4-circle:{ title="WonderMV and SD card" }](#wondermv-info) | None |
<i style="font-size: 85%">:material-numeric-1-circle:{id="pull-up-resistor-info"}:
----8<----
@@ -109,6 +109,18 @@ Supported by Krux since September 2024, this touchscreen device features a metal
<div style="clear: both"></div>
+
+### TZT
+<img src="../img/maixpy_tzt/logo-314.png" align="right" style="width: 16%;">
+
+Supported by Krux since October 2025, this touchscreen device comes in a premium milled aluminum housing and features five buttons. Available through the following distributors:
+
+- [AliExpress](https://www.aliexpress.com/w/wholesale-tzt-canmv-k210.html)
+
+<div style="clear: both"></div>
+
+
+
### Maix Dock
<img src="../img/maixpy_dock/logo-302.png" align="right" style="width: 16%;">
diff --git a/krux b/krux
index ad246f9..0cbb2fc 100755
--- a/krux
+++ b/krux
@@ -89,10 +89,12 @@ if [ "$1" == "build" ]; then
echo "Wrong or unsupported device name, use maixpy_devicename"
fi
fi
-elif [ "$1" == "flash" -o "$1" == "boot" -o "$1" == "erase" ]; then
+elif [ "$1" == "flash" -o "$1" == "boot" -o "$1" == "boot-terminal" -o "$1" == "erase" ]; then
if [ "$1" == "flash" ]; then
CMD_SUFFIX="kboot.kfpkg"
elif [ "$1" == "boot" ]; then
+ CMD_SUFFIX="-s firmware.bin"
+ elif [ "$1" == "boot-terminal" ]; then
CMD_SUFFIX="-s firmware.bin -t"
else
CMD_SUFFIX="-E"
diff --git a/pyproject.toml b/pyproject.toml
index bca3042..2f19c2e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -121,6 +121,7 @@ simulator-dock = "python simulator/simulator.py --device maixpy_dock"
simulator-yahboom = "python simulator/simulator.py --device maixpy_yahboom"
simulator-cube = "python simulator/simulator.py --device maixpy_cube"
simulator-wonder-mv = "python simulator/simulator.py --device maixpy_wonder_mv"
+simulator-tzt = "python simulator/simulator.py --device maixpy_tzt"
simulator-wonder-k = "python simulator/simulator.py --device maixpy_wonder_k"
# aliases
simulator.ref = "simulator-amigo"
diff --git a/simulator/assets/maixpy_tzt.png b/simulator/assets/maixpy_tzt.png
new file mode 100644
index 0000000..e1ef33e
Binary files /dev/null and b/simulator/assets/maixpy_tzt.png differ
diff --git a/simulator/assets/maixpy_tzt_mask.png b/simulator/assets/maixpy_tzt_mask.png
new file mode 100644
index 0000000..3831eea
Binary files /dev/null and b/simulator/assets/maixpy_tzt_mask.png differ
diff --git a/simulator/kruxsim/devices.py b/simulator/kruxsim/devices.py
index d6c49cc..31c2f6d 100644
--- a/simulator/kruxsim/devices.py
+++ b/simulator/kruxsim/devices.py
@@ -30,6 +30,7 @@ YAHBOOM = "maixpy_yahboom"
CUBE = "maixpy_cube"
WONDER_MV = "maixpy_wonder_mv"
WONDER_K = "maixpy_wonder_k"
+TZT = "maixpy_tzt"
WINDOW_SIZES = {
M5STICKV: (320, 640),
@@ -40,6 +41,7 @@ WINDOW_SIZES = {
CUBE: (484, 612),
WONDER_MV: (410, 590),
WONDER_K: (500, 650),
+ TZT: (410,580)
}
@@ -77,7 +79,7 @@ def load_font(device):
os.path.join("..", "firmware", "font", "FusionPixel-14.bdf"),
),
]
- elif device in (DOCK, YAHBOOM, WONDER_MV, WONDER_K):
+ elif device in (DOCK, YAHBOOM, WONDER_MV, TZT, WONDER_K):
fonts[device] = [
pg.freetype.Font(
os.path.join("..", "firmware", "font", "ter-u16n.bdf")
@@ -147,6 +149,13 @@ def screenshot_rect(device):
screen.get_rect().center[0] - 0,
screen.get_rect().center[1] + 10,
)
+ elif device == TZT:
+ rect.width -= 0
+ rect.height -= 57 #40
+ rect.center = (
+ screen.get_rect().center[0] - 0,
+ screen.get_rect().center[1] + 28, #36 #20
+ )
# TODO: fix after WONDER_K img is ready
# elif device == WONDER_K:
# rect.width -= 0
diff --git a/simulator/simulator.py b/simulator/simulator.py
index 398abfa..3b5ba25 100644
--- a/simulator/simulator.py
+++ b/simulator/simulator.py
@@ -165,9 +165,11 @@ DOCK_SIZE = (302, 516)
YAHBOOM_SIZE = (312, 440)
CUBE_SIZE = (400, 424)
WONDER_MV_SIZE = (304, 440)
+TZT_SIZE = (314, 442)
# Handle screenshots scale and alpha bg
# When exporting the mask from GIMP uncheck "Save info about transparent pixels color"
+# Use --no-screenshot-scale until fix mask size and devices.screenshot_rect()
device_screenshot_size = AMIGO_SIZE
mask_img = pg.image.load(
os.path.join("assets", "maixpy_amigo_mask.png")
@@ -197,6 +199,11 @@ elif (args.device == devices.WONDER_MV):
mask_img = pg.image.load(
os.path.join("assets", "maixpy_wonder_mv_mask.png")
).convert_alpha()
+elif (args.device == devices.TZT):
+ device_screenshot_size = TZT_SIZE
+ mask_img = pg.image.load(
+ os.path.join("assets", "maixpy_tzt_mask.png")
+ ).convert_alpha()
# TODO: WONDER_K IMG
# elif (args.device == devices.WONDER_K):
# device_screenshot_size = WONDER_K_SIZE
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.