[TOC]
项目简介
这是一个针对 小米 Watch S3(M2313W1) 表盘格式(ws3)的逆向分析与自研打包工具链项目,用来制作带 平滑扫秒 / AOD 息屏 / 四角圆角进度弧的自定义表盘。

- GitHub 仓库:https://github.com/thecoolboyhan/xiaomi-watch-s3-diy
- 设备参数:466×466 AMOLED,逻辑画布 464×464,圆心 (232, 232)
- 语言 / 许可:Python + Java(源代码 MIT)
三套成品表盘
RouletteS3(轮盘盘)
类 Google Pixel Watch 风格,平滑扫秒 + AOD + 四角圆角进度弧(最新 v74)。

MinimalS3(数字盘)
无指针数字盘:随时间变化的问候语 + 冒号 1Hz 闪烁 + 完美 AOD 过渡(最新 v5_fix)。下图为 日间 / 夜间 / AOD 三态。

daynight(昼夜盘)
随日出日落自动切换背景,是 MinimalS3 的昼夜增强版(对应 MinimalS3_v5_fix)。


特性
- 平滑扫秒:走固件亚秒插值,而不是 1Hz 跳秒
- AOD 息屏显示:双面盘,黑底灰阶
- 四角圆角进度弧:步数 / 卡路里 / 电量 / 温度
- 数字盘:24 帧问候语 + 冒号 1Hz 闪烁(兼容自动换背景)
- 点击热区跳转:天气 / 心率 / 步数 / 闹钟等(prop9)
- 自研 Java 打包器 Mi8WfBinTool:从
wfDef.json+ PNG 素材打包成可安装的.bin
法律与版权声明(务必先读)
本项目包含对小米官方表盘二进制的逆向工程分析,仅供个人学习与研究,请勿用于任何商业分发,由此产生的一切法律责任由使用者自行承担。
reference/下明确标注的第三方官方闭源表盘(谷歌轮盘·橙.bin、寻路者·黄.bin)已默认排除出本仓库(见.gitignore),其版权归原厂商所有,请勿分发。- 自研打包器
Mi8WfBinTool的逆向经验来源于开源项目 ooflet/Mi-Create(MIT),本项目仅用于个人自定义表盘制作。 - 源代码按 MIT License 开源;成品表盘
.bin及其内嵌美术素材为个人创作,不在 MIT 许可范围内(保留所有权利);小米官方固件 / 表盘及相关商标不在许可范围内。
环境要求
- macOS / Linux(类 Unix)
- JDK(已在 OpenJDK 25 编译验证;
javac/java在 PATH) - Python 3 + Pillow:
pip install -r requirements.txt(纯 PIL,无 numpy) - 表盘数字 / 文字素材生成脚本使用 macOS 系统字体(
/System/Library/Fonts/SFNS.ttf),Linux 需自行替换字体路径 - 一台 小米 Watch S3 真机 + 小米运动健康(Mi Fitness)App 用于装机验证——一切改动以真机反馈为唯一验收标准
目录结构
| |
快速开始(重新打包轮盘盘 v74)
| |
project/ 下的脚本均以仓库根为基准的相对路径运行(自动向上查找 tools/),从任意克隆位置都能执行。数字 / 昼夜盘的 gen_assets.py 需要一张 2048×2048 设计参考图(不入库),用环境变量 WF_REF_IMAGE 指向本地副本即可。
工具链
| 工具 | 作用 |
| — | — |
| Mi8WfBinTool(Java) | pack <dir> <out> ws3 / unpack <bin> <out> ws3,逐字段比对两个盘的金标准 |
| patch_header.py | 回补 byte[6]=1(扫秒开关)、0x16=1、styleCount=4 |
| gen_assets_*.py | 用 PIL 生成素材 PNG(轮盘环 / 数字字模 / 弧帧) |
| assemble_*.py | 合成 wfDef.json |
| preview*.py / build*.py | 静态预览与一键流水线 |
关键技术结论(想改格式必读)
完整格式参考见仓库 docs/FORMAT.md,定论速览:
- 平滑扫秒真配方:主元素列表最前两位
[0]/[1]放指针(ds=1811秒 /1011分,prop7Index12/13)+ 每个 dignum / imagelist 的 prop7Raw 通道字节(b6-7= 刷新毫秒,必须非零)。 - AOD 双面盘生死线:face record
u32@+0 = 0x80000000(仅 AOD 盘两面置位,1-face 盘保持 0)。 - dataSrc 合法表:见
reference/micreate_sources_official.json(Mi-Create 官方 76 条)。常见坑:381202/084102是旧打包器污染出的非法源,会导致整个 face 跳秒。 - 打包器已修 4 个 bug:
showCount覆盖 dataSrc 第三字节、styleCount硬编码 6、AOD face record 缺0x80000000、spacing覆写 imagelistb13。
复用边界
- 同款换肤 / 配色 / 换某张素材 → 直接改
project/ws3重打包,成本极低。 - Mi-Create 导出的新 bin 想改细节 →
unpack改wfDef再pack(注意:unpack 会剥掉 prop7Raw,重打包前务必用工程里的 wfDef 兜底)。 - 全新风格表盘 → 复用工具链 + 格式知识,但 wfDef 骨架需从头设计(有逆向结论,远快于从零)。
验证清单(出每版必做)
byte[6]=1、0x10=0x800、0x16=1、faceCount=2、styleCount=4- 两个 face record
u32@+0 = 0x80000000 - 指针签名
18110030/10110030各 1 次 - 4 个弧元素 x/y=(0,0) 且各 11 帧;体积 < 4MB
- 像素级:亮度 / alpha 阈值取点 → 算 web 角与半径 → 对照预期象限
参考与致谢
- ooflet/Mi-Create(MIT,逆向起点与
jump_codes来源) - 小米官方对照表盘(已 gitignore,仅本地用于字段比对)
许可证
源代码按 MIT 开源;成品表盘 .bin 与美术素材不在 MIT 范围内(保留所有权利);小米官方固件 / 表盘及商标归原厂商所有。商业分发请自行评估合规风险。