Skip to content

About

Always-on-top desktop overlay showing peak/off-peak pricing windows and countdowns across DeepSeek, GLM, Qwen and WorkBuddy. Pure-local: no API keys, no network.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

Repository files navigation

OffPeak Hours

一个轻量、置顶、跨平台的桌面悬浮窗(desktop overlay,不是浏览器插件、无宿主依赖),实时显示多家 LLM 服务商的峰谷时段和距离下次切换的秒级倒计时。 不读取任何 API Key、不发起网络请求、纯本地时间计算——就像某些客户端内置的"1 小时 32 分后进入低峰折扣"提示,但同时覆盖多家厂商,并回答它们回答不了的问题:现在跑任务,哪家最划算?

screenshot

内置规则

规则 高峰/白天 低峰/优惠 时区
DeepSeek 工作日 09:00–12:00、14:00–18:00 高峰原价(高峰:低谷=2:1,全系;WorkBuddy 内 DeepSeek 同段同关系,仅单位为积分) 其余时段 + 周末全天 低谷半价(0.5×) Asia/Shanghai
GLM 工作日 14:00–18:00(高峰 3 倍消耗,GLM Coding Plan 全系) 其余时段正常计费 Asia/Shanghai
Qwen 白天正常计费 22:00–08:00 夜间折扣(部分模型,仅限编程/智能体工具内交互式调用) Asia/Shanghai
WorkBuddy 正常计费 23:00–次日 08:00 Hy4 Preview 夜间免费(限时活动 2026-09-11 至 2026-10-31) Asia/Shanghai

各模型的具体倍率、覆盖范围与平台限制,鼠标悬停对应行即可查看。 GLM 各模型基础倍率不同(GLM-5.3 为 1×/3×,GLM-5.3-Flash 为 0.4×/1.2×),但峰谷倍率关系均为 3 倍。

特性

  • 无边框圆角悬浮窗,始终置顶,鼠标左键拖拽移动
  • 每次启动默认紧凑倒计时:中文显示 2小时 / 40分钟,英文显示 2h / 40m
  • 设置中可切换完整倒计时,固定显示 HH:MM:SS,不足一小时也保留零位(如 00:00:40)
  • 当前状态统一使用绿色(相对便宜)和橙色(相对贵);即将到来的状态用更淡的同色徽章显示
  • 单页设置按语言、模型开关、时段通知、倒计时和显示时区排列,二选一选项使用滑动开关
  • 系统托盘图标:左键显示/隐藏,右键菜单
  • 开机自启开关(Windows 写注册表,Linux 写 .desktop)
  • 配置文件热重载(改完保存即刻生效,无需重启)
  • 半透明、圆角、深色配色,不挡眼

安装与运行

需要 Python 3.10+。

# 克隆后
pip install -e .
offpeak-hours

# 或直接
python run.py

依赖只有 PySide6-Essentials 和 tzdata(后者在 Windows 上提供 IANA 时区库,保证时区计算正确)。

配置

首次运行会在以下位置生成 config.json:

  • Windows: %APPDATA%\offpeak-hours\config.json
  • Linux/macOS: ~/.config/offpeak-hours/config.json

(2026-10 项目由 peak-hour-widget 更名而来;旧目录下的 config.json 会在首次运行时自动迁移一次。)

右键悬浮窗 → "编辑配置…" 即可打开。示例:

{
  "enabled_rules": ["DeepSeek", "GLM", "Qwen", "WorkBuddy"],
  "opacity": 0.92,
  "always_on_top": true,
  "autostart": false,
  "position": null,
  "font_scale": 1.0
}

在 enabled_rules 里增删规则名即可启用/关闭某条。新增自定义规则请 fork 后编辑 offpeak_hours/builtin_rules.py——规则数据结构是纯 dataclass,跨夜窗口、工作日限制、限时活动(start_date / end_date)都已支持。

规则数据

规则是纯数据,不写在代码里:offpeak_hours/data/rules.json(schema 1)。 启动时只做 json.load 与字段校验,不执行任何代码;文件缺失或校验失败时回退到 内置兜底表,并把原因记在 rule_store.load_error()(界面提示后续接入)。

改规则 = 改 JSON。python tools/dump_rules_json.py 可从兜底表重新生成整份文件; tests/test_rule_store.py 里的漂移探针会在 JSON 与兜底表不一致时失败。

测试

规则引擎是纯函数(时间以参数注入),边界用例不依赖 GUI:

python tests/test_rules.py     # 无需 pytest
python -m pytest tests/        # 有 pytest 时

致谢

  • 时间引擎(跨时区、DST、下一次边界计算)改编自 bozdemir/claude-usage-widget(MIT)。
  • 各厂商规则数据来自官方定价页(见 offpeak_hours/builtin_rules.py 头部注释)。

About

Always-on-top desktop overlay showing peak/off-peak pricing windows and countdowns across DeepSeek, GLM, Qwen and WorkBuddy. Pure-local: no API keys, no network.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages