diff --git a/bridge/src/quotaframe_bridge/targets.py b/bridge/src/quotaframe_bridge/targets.py
index e210f7a..0d606db 100644
--- a/bridge/src/quotaframe_bridge/targets.py
+++ b/bridge/src/quotaframe_bridge/targets.py
@@ -139,6 +139,12 @@ def ota_transfer_bytes(self) -> int:
release_stem="mindreset-read-pico",
image_chip_id=9,
ota_partition_bytes=4 * 1024 * 1024,
+ web_flash=WebFlashDefinition(
+ name="MindReset Read Pico",
+ description="684 × 1216 十六灰阶墨水屏 · 触屏与按键操作",
+ chip_family="ESP32-S3",
+ asset="assets/devices/mindreset_read_pico.png",
+ ),
),
)
diff --git a/bridge/tests/test_target_registry.py b/bridge/tests/test_target_registry.py
index 6a3e4fa..0af10e4 100644
--- a/bridge/tests/test_target_registry.py
+++ b/bridge/tests/test_target_registry.py
@@ -309,6 +309,7 @@ def test_new_web_targets_match_chip_families(self) -> None:
("waveshare_epaper_397", "ESP32-S3"),
("esp_mosaico", "ESP32-S31"),
("waveshare_rlcd_42", "ESP32-S3"),
+ ("mindreset_read_pico", "ESP32-S3"),
):
web = TARGETS_BY_ID[target_id].web_flash
self.assertIsNotNone(web)
diff --git a/bridge/tests/test_web_flasher.py b/bridge/tests/test_web_flasher.py
index 4fb098d..0e3d45d 100644
--- a/bridge/tests/test_web_flasher.py
+++ b/bridge/tests/test_web_flasher.py
@@ -161,6 +161,14 @@ def test_public_target_document_contains_only_browser_fields(self) -> None:
"image": "waveshare-esp32-s3-rlcd-42-full-v1.2.3.bin",
"manifest": "manifests/waveshare_rlcd_42.json",
},
+ {
+ "id": "mindreset_read_pico",
+ "name": "MindReset Read Pico",
+ "description": "684 × 1216 十六灰阶墨水屏 · 触屏与按键操作",
+ "asset": "assets/devices/mindreset_read_pico.png",
+ "image": "mindreset-read-pico-full-v1.2.3.bin",
+ "manifest": "manifests/mindreset_read_pico.json",
+ },
],
)
diff --git a/web/assets/devices/README.md b/web/assets/devices/README.md
index e024a34..25cdfa9 100644
--- a/web/assets/devices/README.md
+++ b/web/assets/devices/README.md
@@ -1,6 +1,6 @@
# Device photographs
-Official product imagery, downloaded on 2026-09-08, 2026-09-20 and 2026-10-01. These images identify the
+Official product imagery, downloaded on 2026-09-08, 2026-09-20, 2026-10-01 and 2026-10-06. These images identify the
supported hardware. Their screen contents are vendor demos, not QuotaFrame.
The page credits the respective official documentation next to the images.
@@ -20,8 +20,11 @@ The page credits the respective official documentation next to the images.
- `waveshare_rlcd_42.jpg`: Waveshare ESP32-S3-RLCD-4.2.
Source: https://docs.waveshare.com/ESP32-S3-RLCD-4.2
Image: https://docs.waveshare.com/assets/images/ESP32-S3-RLCD-4.2-DocHeader-fc9cf7209028a9fad948c565b694bd6b.webp
+- `mindreset_read_pico.png`: MindReset Read Pico.
+ Source: https://dot.mindreset.tech/docs/read_0
+ Image: https://os-cdn.mindreset.tech/dot/docs/%25E6%25A0%2587%25E5%2587%2586_1790742665415.png
Images retain the rights of their respective owners and are not covered by the
repository's source code license. No screen replacement or device alteration
has been applied. The M5StickS3, AMOLED 2.16 and RLCD 4.2 photos are cropped and encoded as JPEG.
-The ePaper 3.97 and ESP-Mosaico images retain their original encoding.
+The ePaper 3.97 and ESP-Mosaico images retain their original encoding. The Read Pico image is scaled down and kept as PNG.
diff --git a/web/assets/devices/mindreset_read_pico.png b/web/assets/devices/mindreset_read_pico.png
new file mode 100644
index 0000000..b2b70f7
Binary files /dev/null and b/web/assets/devices/mindreset_read_pico.png differ
diff --git a/web/src/app.js b/web/src/app.js
index 85d6758..7d70e60 100644
--- a/web/src/app.js
+++ b/web/src/app.js
@@ -565,6 +565,10 @@ export async function initialize({
get("chosen-device-image").src = item.asset;
get("flash-panel").hidden = false;
get("flash-title").focus({ preventScroll: true });
+ // Hiding the picker shortens the page, which leaves the panel above the viewport
+ // when the chosen card was in a lower row.
+ const summary = get("device-summary");
+ if (summary.getBoundingClientRect().top < 0) summary.scrollIntoView({ block: "start" });
document.querySelectorAll("[data-target-id]").forEach((other) => {
const selected = other === card;
other.classList.toggle("is-selected", selected);
diff --git a/web/src/components/HomePage.astro b/web/src/components/HomePage.astro
index 1c39d00..8374cbe 100644
--- a/web/src/components/HomePage.astro
+++ b/web/src/components/HomePage.astro
@@ -158,8 +158,9 @@ const assetRoot = locale === "en" ? "../" : "./";
M5Stack{t("、")}
{t("微雪官方文档")}{t("与")}
- {t("乐鑫官方文档")}{t(",屏幕内容为厂商演示。")}
+ >{t("、")}
+ {t("乐鑫官方文档")}{t("与")}
+ {t("MindReset 官方文档")}{t(",屏幕内容为厂商演示。")}
CHOOSE YOUR SCREEN
-
{t("五块小屏,各有所长。")}
+
{t("六块小屏,各有所长。")}
{t("显示内容相同,差别在屏幕与交互。")}
{t("左右滑动查看全部设备 →")}
@@ -455,25 +456,26 @@ const assetRoot = locale === "en" ? "../" : "./";
{t("微雪")}ePaper 3.97 |
{t("乐鑫")}ESP-Mosaico |
{t("微雪")}RLCD 4.2 |
+
MindResetRead Pico |
- | {t("屏幕")} | {t("480 × 480 圆角方形 AMOLED")} | 135 × 240 LCD | {t("800 × 480 四灰阶墨水屏")} | 480 × 480 AMOLED | {t("400 × 300 黑白反射式 LCD")} |
- | {t("用量页面")} | {t("总览 / Codex / Claude")} | {t("总览 / Codex / Claude")} | {t("主页同屏显示 Codex 与 Claude,另有趋势页")} | {t("总览 / Codex / Claude")} | {t("总览 / Codex / Claude,另有趋势页")} |
- | {t("翻页")} | {t("触控标签、左右滑动")} | {t("正面按键")} | {t("三向拨轮")} | {t("触控标签、左右滑动、AI 键")} | {t("KEY / BOOT 按键")} |
- | {t("时钟屏保")} | ✓{t("支持")} | —{t("不支持")} | ✓{t("支持")} | ✓{t("支持")}{t("断电后需电脑端重新校时")} | ✓{t("支持")} |
- | {t("屏保用量细条")} | ✓{t("支持")} | —{t("不支持")} | ✓{t("支持")} | ✓{t("支持")} | ✓{t("支持")} |
- | {t("自动旋转")} | ✓{t("支持")}{t("四向")} | —{t("不支持")} | ✓{t("支持")}{t("四向")} | ✓{t("支持")}{t("四向")} | —{t("不支持")} |
- | {t("摇动 / 翻转唤醒")} | ✓{t("支持")} | —{t("不支持")} | —{t("不支持")} | ✓{t("支持")} | —{t("不支持")} |
- | {t("屏上设置")} | ✓{t("支持")}{t("亮度、时钟超时")} | —{t("不支持")} | ✓{t("支持")}{t("刷新间隔、方向")} | ✓{t("支持")}{t("亮度、时钟超时")} | ✓{t("支持")}{t("自动轮播、告警、方向")} |
- | {t("托盘单击切换时钟")} | ✓{t("支持")} | —{t("不支持")} | ✓{t("支持")} | ✓{t("支持")} | ✓{t("支持")} |
- | {t("温湿度")} | —{t("不支持")} | —{t("不支持")} | ✓{t("支持")}{t("时钟页")} | —{t("不支持")} | ✓{t("支持")}{t("时钟页")} |
- | {t("用量趋势")} | —{t("不支持")} | —{t("不支持")} | ✓{t("支持")}{t("需 SD 卡")} | —{t("不支持")} | ✓{t("支持")}{t("需 SD 卡")} |
+ | {t("屏幕")} | {t("480 × 480 圆角方形 AMOLED")} | 135 × 240 LCD | {t("800 × 480 四灰阶墨水屏")} | 480 × 480 AMOLED | {t("400 × 300 黑白反射式 LCD")} | {t("684 × 1216 十六灰阶墨水屏")} |
+ | {t("用量页面")} | {t("总览 / Codex / Claude")} | {t("总览 / Codex / Claude")} | {t("主页同屏显示 Codex 与 Claude,另有趋势页")} | {t("总览 / Codex / Claude")} | {t("总览 / Codex / Claude,另有趋势页")} | {t("主页同屏显示 Codex、Claude 与趋势")} |
+ | {t("翻页")} | {t("触控标签、左右滑动")} | {t("正面按键")} | {t("三向拨轮")} | {t("触控标签、左右滑动、AI 键")} | {t("KEY / BOOT 按键")} | {t("触屏与三枚触摸键")} |
+ | {t("时钟屏保")} | ✓{t("支持")} | —{t("不支持")} | ✓{t("支持")} | ✓{t("支持")}{t("断电后需电脑端重新校时")} | ✓{t("支持")} | ✓{t("支持")} |
+ | {t("屏保用量细条")} | ✓{t("支持")} | —{t("不支持")} | ✓{t("支持")} | ✓{t("支持")} | ✓{t("支持")} | ✓{t("支持")} |
+ | {t("自动旋转")} | ✓{t("支持")}{t("四向")} | —{t("不支持")} | ✓{t("支持")}{t("四向")} | ✓{t("支持")}{t("四向")} | —{t("不支持")} | ✓{t("支持")}{t("四向")} |
+ | {t("摇动 / 翻转唤醒")} | ✓{t("支持")} | —{t("不支持")} | —{t("不支持")} | ✓{t("支持")} | —{t("不支持")} | ✓{t("支持")} |
+ | {t("屏上设置")} | ✓{t("支持")}{t("亮度、时钟超时")} | —{t("不支持")} | ✓{t("支持")}{t("刷新间隔、方向")} | ✓{t("支持")}{t("亮度、时钟超时")} | ✓{t("支持")}{t("自动轮播、告警、方向")} | ✓{t("支持")}{t("刷新间隔、时钟超时、方向")} |
+ | {t("托盘单击切换时钟")} | ✓{t("支持")} | —{t("不支持")} | ✓{t("支持")} | ✓{t("支持")} | ✓{t("支持")} | ✓{t("支持")} |
+ | {t("温湿度")} | —{t("不支持")} | —{t("不支持")} | ✓{t("支持")}{t("时钟页")} | —{t("不支持")} | ✓{t("支持")}{t("时钟页")} | —{t("不支持")} |
+ | {t("用量趋势")} | —{t("不支持")} | —{t("不支持")} | ✓{t("支持")}{t("需 SD 卡")} | —{t("不支持")} | ✓{t("支持")}{t("需 SD 卡")} | ✓{t("支持")}{t("需 SD 卡")} |
- {t("五块屏都支持:Codex / Claude 用量显示、电量显示、断连保留最后用量、在托盘图标上滚动翻页、电脑端 OTA 更新与网页安装。")}
+ {t("六块屏都支持:Codex / Claude 用量显示、电量显示、断连保留最后用量、在托盘图标上滚动翻页、电脑端 OTA 更新与网页安装。")}
diff --git a/web/src/i18n/en.js b/web/src/i18n/en.js
index 939e5a6..05d88e9 100644
--- a/web/src/i18n/en.js
+++ b/web/src/i18n/en.js
@@ -49,6 +49,7 @@ export default {
"微雪官方文档": "Waveshare documentation",
"与": " and",
"乐鑫官方文档": "Espressif documentation",
+ "MindReset 官方文档": "MindReset documentation",
",屏幕内容为厂商演示。": ". Screens show manufacturer demos.",
"重新加载": "Reload",
"已选择设备": "Selected device",
@@ -114,7 +115,7 @@ export default {
"上一页": "Previous page",
"下一页": "Next page",
"演示使用示例数据,无需连接设备。实际操作需配套 Bridge 与固件,并作用于所有已连接且支持相应功能的设备。": "The demo uses sample data; no device connection is required. Real controls require Bridge and firmware and affect all connected devices that support the corresponding feature.",
- "五块小屏,各有所长。": "Five displays. Find your fit.",
+ "六块小屏,各有所长。": "Six displays. Find your fit.",
"显示内容相同,差别在屏幕与交互。": "The same usage data, with different screens and controls.",
"左右滑动查看全部设备 →": "Swipe to compare all devices →",
"微雪": "Waveshare",
@@ -123,6 +124,10 @@ export default {
"480 × 480 圆角方形 AMOLED": "480 × 480 rounded-square AMOLED",
"800 × 480 四灰阶墨水屏": "800 × 480 four-level grayscale e-paper",
"400 × 300 黑白反射式 LCD": "400 × 300 black-and-white reflective LCD",
+ "684 × 1216 十六灰阶墨水屏": "684 × 1216 e-paper, 16 gray levels",
+ "主页同屏显示 Codex、Claude 与趋势": "Codex, Claude and trends together on the home page",
+ "触屏与三枚触摸键": "Touchscreen and three touch keys",
+ "刷新间隔、时钟超时、方向": "Refresh interval, clock timeout, orientation",
"用量页面": "Usage pages",
"总览 / Codex / Claude": "Overview / Codex / Claude",
"主页同屏显示 Codex 与 Claude,另有趋势页": "Codex and Claude together, plus a trends page",
@@ -150,7 +155,7 @@ export default {
"时钟页": "Clock page",
"用量趋势": "Usage trends",
"需 SD 卡": "SD card required",
- "五块屏都支持:Codex / Claude 用量显示、电量显示、断连保留最后用量、在托盘图标上滚动翻页、电脑端 OTA 更新与网页安装。": "All five support Codex / Claude usage, battery level, keeping the last usage when disconnected, scrolling the tray icon to change pages, desktop OTA updates, and browser installation.",
+ "六块屏都支持:Codex / Claude 用量显示、电量显示、断连保留最后用量、在托盘图标上滚动翻页、电脑端 OTA 更新与网页安装。": "All six support Codex / Claude usage, battery level, keeping the last usage when disconnected, scrolling the tray icon to change pages, desktop OTA updates, and browser installation.",
"凭证留在本机,": "Credentials stay local.",
"小屏只收摘要。": "Only a summary reaches your display.",
"QuotaFrame 不接管账号登录,只将本机整理的用量摘要发送到已配对的小屏。": "QuotaFrame does not manage account sign-in. It sends a locally prepared usage summary to your paired display.",
@@ -178,7 +183,6 @@ export default {
"源代码": "Source code",
"反馈问题": "Report an issue",
"感谢": "Thanks to",
- "与": "and",
"在开发设备上给予的支持。": "for their support with development devices.",
"微雪电子": "Waveshare",
"QuotaFrame 把 Codex 和 Claude 的用量带到独立桌面屏。了解支持的设备,在浏览器中安装固件,并连接电脑端。": "Bring Codex and Claude usage to a dedicated desk display with QuotaFrame. Explore supported devices, install firmware in your browser, and connect the desktop app.",
@@ -254,6 +258,7 @@ export default {
"800 × 480 四灰阶墨水屏 · 三向拨轮操作": "800 × 480 four-level grayscale e-paper · Three-way wheel",
"480 × 480 AMOLED · 触控与 AI 按键翻页": "480 × 480 AMOLED · Touch and AI button navigation",
"400 × 300 黑白反射式 LCD · KEY / BOOT 按键翻页": "400 × 300 black-and-white reflective LCD · KEY / BOOT button navigation",
+ "684 × 1216 十六灰阶墨水屏 · 触屏与按键操作": "684 × 1216 e-paper, 16 gray levels · touchscreen and key controls",
"当前为{current},点击切换到{next}": "Showing {current}. Click to view {next}.",
"、": ", "
};
diff --git a/web/src/styles.css b/web/src/styles.css
index 2cd181d..e16ff5f 100644
--- a/web/src/styles.css
+++ b/web/src/styles.css
@@ -316,7 +316,7 @@ nav .source-link {
}
.compare-table {
width: 100%;
- min-width: 900px;
+ min-width: 1040px;
table-layout: fixed;
border-collapse: collapse;
font-size: 13px;
@@ -1182,7 +1182,7 @@ progress::-webkit-progress-value {
margin-top: 10px;
}
.compare-table {
- min-width: 780px;
+ min-width: 920px;
}
.compare-table th,
.compare-table td {