7 月 14 日,我想给 AstrBot 做个桌面用量显示。最近用了多少 Token、一天里什么时候消息最多、常用哪些模型,我经常想看;每次都得打开浏览器,进 Dashboard,再翻统计页,有点麻烦。
一张小卡片就够了,放在 Windows 桌面上,抬眼能看到最近的运行情况,不需要塞太多操作。后来我给它起名叫星律,Astralyn。
把 30 天的数据压进 448 × 250
窗口只有 448 × 250 像素,每 60 秒读取一次 AstrBot Dashboard API。近 30 天的数据放在同一张卡片上:
- 30 天总 Token,以及当天的 Token;
- 输入与输出 Token 的比例;
- 总调用次数、累计消息和持续观测时间;
- Token 与消息各自的 30 天热力图;
- 使用量最高的三个模型及占比。
卡片能随意拖动,也能置顶。右键菜单只留了立即刷新、修改连接、切换置顶和关闭,用起来不用惦记太多。
从 AstrBot 到桌面卡片
- 01AstrBot Dashboard API
- 0230 天聚合
- 03背景与色板分析
- 04Windows 桌面卡片
我不想让它看起来像监控面板
数据得准,但我也不想在桌面上摆一个灰色表格。我选了 Mumei 的图片做背景,把统计信息排在画面上,右上角还放了一句 “Always Keep Singing!”。
居中裁切很容易让数字挡住人物。处理脚本先用 isnet-anime 找主体,再用 Haar 人脸检测确认位置,把脸移到卡片预留的空白区。画面从整张原图连续裁出,没有把人物抠下来重新贴回去,边缘和光线也就能保持连贯。
脚本会从裁好的画面提取色板,再分别检查标题、Token、热力图、消息和模型区域的亮度,选择看得清的文字颜色。考虑到 Windows 缩放时会发糊,我还生成了 896 × 500 的 2x 资源,用 Lanczos 缩放,再做一点锐化。
连接、凭据和异常处理
连接 AstrBot 要用 Dashboard JWT 和自动续期密码,我不想把它们明文写进配置。这里用了 Windows DPAPI 加密,只能由当前 Windows 用户解密。保存配置时先写临时文件,再替换原文件,免得程序中断后只剩半截 JSON。
登录过期就尝试用保存的凭据重连;消息接口暂时失败,也不耽误 Token 更新。日志限制了大小并定期轮换,数字格式、30 天聚合、模型排序、高 DPI 背景和图像变换都补了测试。我希望它能一直放在桌面上,不用隔几天就去照看一次。
为什么叫“星律”
热力图让我想到了“星律”这个名字。原本一直往上加的数字,变成了有明暗、有间隔的格子;每天的消息像亮起来的星,模型调用又各有各的节奏。
把机器运行留下的噪声,整理成一段可以被看见的节律。
7 月 14 日 22:59,我把最终版本打包成 AstrBotUsage.exe,大约 62 MB。最初只是想少打开几次浏览器,做着做着,背景、排版、数据处理和安全存储都花了不少心思。
Astralyn 最初就是这样一张 AstrBot 桌面用量卡片。后来做网站时,我又想起了它的名字和这套视觉。
