DeepSeek Harness Hub
← 返回列表

RYANFFY/deepseek-dafeiyu-pet

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

大肥鱼桌宠 🐋 · DeepSeek 桌面宠物 / 余额挂件Windows 独立桌面版

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/15 · 已提供中文文档

🐋 DeepSeek 大肥鱼桌宠 · Windows 独立桌面宠物:会散步、查天气,并盯着你的 DeepSeek 余额——余额 / 今日已用 / 峰谷时段 / 每轮消耗统计;拖拽吸附、左吸附翻面、Q弹音效、数字滚动、自定义形象、应用联动。DeepSeek Harness(DSH) 同款小鲸鱼余额挂件的桌宠版,MIT 开源

综合分
30.6
GitHub 分
30.6
用户评分
★ Stars
1
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add RYANFFY/deepseek-dafeiyu-pet
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

大肥鱼桌宠 🐋 · DeepSeek 桌面宠物 / 余额挂件(Windows 独立桌面版)

DeepSeek 桌宠 · DeepSeek 桌面宠物 · 大肥鱼 / 鲸鱼娘桌宠 · DeepSeek 余额挂件(独立桌面版,不依赖 DSH)·
DeepSeek Harness(DSH)小鲸鱼余额挂件同款能力:余额 / 今日已用 / 峰谷时段 / 每轮消耗统计 ·
Windows 双击即用 · 可拖拽吸附 / 左吸附翻面 / 数字滚动 / Q 弹音效

⬇️ 下载即用(Windows)

最新版本
下载量

👉 点这里下载最新版(Windows 安装版)

约 73MB 的中文安装包:双击一路「下一步」就行,中间那一步能自己选装在哪儿
(默认装在当前用户目录,不弹管理员提示),装完桌面和开始菜单就有它;
安装包本身可以直接删掉。(这个链接永远指向最新版,可以直接收藏)

- 首次运行 Windows 可能提示"未知发布者"(没做代码签名)→ 点「更多信息」→「仍要运行」即可
- 想看历史版本 / 更新说明:Releases 页面 | CHANGELOG
- 打包版的设置写在 %APPDATA%\大肥鱼桌宠\(不会往桌面丢文件)
- 用完想卸载:去「设置 → 应用」里点卸载;想连配置一起清掉,再删上面那个配置目录

DeepSeek V4 Pro 二创形象「鲸鱼娘 · 大肥鱼」的透明桌面宠物(Windows 独立桌面版)。

基于三视图素材(正面 / 侧面 / 背面),用 Python + PySide6 实现,无边框透明窗口;
在这套桌宠基础上并入了 DeepSeek Harness(DSH)小鲸鱼余额挂件的能力 ——
余额、今日已用、峰谷时段、每轮消耗统计,所以它既是桌宠,也是一个随桌面常驻的
DeepSeek 余额监控挂件。

功能

- 设置窗口:右键菜单第一条 →「打开设置…」,弹出的是一个正经的设置窗口 ——
左边 11 个分类(余额和用量 / 天气和城市 / 音乐和歌词 / 形象和外观 / 动作和互动 /
文案和语录 / 音效 / 应用提醒 / 性能和工具 / 通用 / 关于),右边是那一类的设置。
支持亮色 / 暗色 / 跟随系统(默认跟 Windows 深色模式走)

- 右键菜单就十条:查看余额 / 查看天气 / 看一眼在放什么 / 打开设置… /
显示隐藏 / 锁定位置 / 鼠标穿透 / 救急恢复 / 经典菜单… / 退出。
设置类的入口全在设置窗口里,菜单里不再重复;一条子菜单都没有,
所以不会再有"悬停半天展不开"的老毛病

- 三视图行走:左右走用侧面(自动镜像)、向上走用背面、向下走用正面

- 三种模式:自由散步 / 跟随鼠标 / 原地待着(右键菜单切换)。
「原地待着」时默认固定正面,不再转头看鼠标(自定义的三视图形象也能一直展示你选的那张);
拖动时的翻面逻辑照旧 —— 拖到哪边就朝哪边,松手回正面。
想让桌宠跟着鼠标转(鼠标在右往右转、在左往左转、贴身上就正对你,只转头不挪窝、
不会背过身)的话:模式菜单里的「原地待着时也跟着鼠标转」(默认关)

- 层级可选:置顶 / 置底(沉到所有窗口下面,但仍在壁纸和 Wallpaper Engine 这类桌面软件之上)/ 普通层

- 透明度可调:菜单里一条滑块,从 100% 到 20%(太透就看不见了,所以留了下限)

- 单实例:已经开着一只时,再点快捷方式或再跑一次源码都不会冒出第二只(会把它叫出来)

- 进程联动:打开 Steam / WeGame / 浏览器 / 播放器这些应用时,它会冒泡吐槽两句。
菜单「进程联动 → 扫描电脑应用并添加…」会打开一个带图标的可视列表(像「设置 → 应用」):
每个应用都显示自己的图标、顶部可搜索;●内置默认 的应用已经自带台词(不能重复添加,
但可以点「修改默认台词」改写,改完整组替换、可一键「恢复内置台词」),
✓已添加 是你自己加的应用,可以修改或删除

- 使用时长提醒:「设置 → 应用联动 → 使用时长提醒」里挑几个应用,设连续使用多少分钟
它就提示一句(还能设"之后每隔 N 分钟重复")。自带 Steam / WeGame / 英雄联盟 / 原神 /
抖音 / VS Code / ChatGPT 几个默认,都能改、能关、能删。没人在动键鼠的那段时间不算
(看电影、挂机不会被冤枉),换应用重新计时。列表里每条都带那个应用自己的图标
(跟「扫描电脑应用并添加…」那个窗口一样,一眼认得出是哪个)

- 免打扰 / 今日汇总(右键菜单里就有):
- 免打扰 N 分钟:这期间它一句话都不说(语录、使用时长提醒、定时提醒全停),
但提醒攒着,时间到了汇报一句「静完了,刚才攒了 3 条提醒,最近一条「…」」;
想提前结束就点「结束免打扰(剩余 X)」
- 今日汇总:点一下就报「今天余额用了多少 + 今天使用时长最长的应用」。
内置的「23:30 该睡了」也会顺带先说这一句(没配 API Key 就不提余额,只报应用时长)。
只统计你真的在用的时间 —— 键鼠静了 10 分钟以上(挂机、看电影)那段不算
- 这两条在「设置 → 性能和工具」里也都能点,还能改免打扰的默认时长
- 定时提醒:「设置 → 应用联动 → 定时提醒」—— *每天这个点 / 每周选几天 /
每隔 N 分钟三种,时间和台词都自己写(默认自带一条「23:30 该睡了」)

- 全局快捷键:在哪个程序里按都管用。默认 Ctrl+Alt+1 夸你一句、
Ctrl+Alt+2 安慰你一句、Ctrl+Alt+3 损你一句;按键和台词都能自己改
(点输入框直接按组合键),也能加新的、关掉、删掉。按下之后干什么可选:
说一句 / 看一眼余额 / 看一眼天气 / 看一眼在放什么(跟「快速双击」那四个动作一套)。
键被别的程序占用了会明确告诉你,不会按了没反应

- 互动:
- 左键按住:拖拽(会侧身朝向拖动方向,松手会说话)
- 单击:蹦跳 + 回嘴(互动台词)+ 顺手刷新余额。
蹦跳 / 音效 / 刷余额都是点下去就响应,只有那句台词会等双击判定窗口过了才冒 ——
这样想双击的人不会被先顶一句台词。判定窗口跟系统设的双击间隔走(最短 500 毫秒,
上限 800 毫秒):窗口内来第二下就算双击,把那句台词撤销
- 快速双击:弹什么自己挑 —— 一级菜单最上面那条 「快速双击(现在:…)」 点开四项:
看一眼余额(5 秒)(默认)/ 看一眼天气 / 看一眼在放什么 / 说一句我写的台词;
「看一眼余额」要配了 Key 才能选(config.json 里的 ds_api_key 或环境变量 DEEPSEEK_API_KEY,
其他余额来源同理),没配 Key 时这一项是灰的、双击也不会弹余额窗口,还是原来的"换姿势",
并轻轻提醒一次怎么配;「说一句我写的台词」双击冒的就是自己写的那几句(子菜单「改写这几句…」,
或「文案 → 台词内容…」里的「快速双击说的话」)。双击之后那几秒它不再自己冒闲话,
免得把刚弹出来的内容盖掉。放歌时双击看余额也是 5 秒,看完自动回到歌词
- 右键:完整菜单(托盘右键是同款菜单,鼠标穿透后可从托盘解除)

- 右键菜单一览(一级菜单):
查看余额/天气/在放什么 | 快速双击 | 模式 | 大小 | 形象 | 吸附 | 文案 | 天气 | 余额 | 音效 | 层级 | 透明度 | 进程联动 |
音乐联动 | 流畅度 | 百宝箱 | 显示/隐藏 | 回到屏幕内 | 锁定位置 | 鼠标穿透 | 开机自启 | 退出
- 吸附:拖拽吸附四边 / 左吸附时翻面
- 文案:显示峰谷时段 / 峰谷文案(默认 · 梁文峰谷 · !?强强?!)
- 文案 → 台词内容…(自己写 / 改写内置):一个窗口改所有台词,分七类
(日常 / 点击回嘴 / 心声 / 拖拽 / 快速双击说的话 / 放歌时点击 / 换歌时),一行一句、空行忽略,
放歌那两类可用 {song} 代表「《歌名》——歌手」,每类都能「恢复这一类默认」——
换了形象之后默认台词不搭的话,直接改这里就行;窗口顶部也能直接调「说多勤(语录频率)」;
另有四类「说多勤·安静 / 正常 / 话多 / 话痨」——切成那一档时它说的那句话,同样可以自己写
- 文案 → 语录频率:闲着时自己冒话的频率四档 —— 安静(约 30 秒)/ 正常(约 12~17 秒,默认)/
话多(约 7~8 秒)/ 话痨(约 4~6 秒);只管"自言自语",点它、拖它、换歌的反应不受影响,
放歌时也照旧不插嘴(把位置让给歌词)。触发类的话优先级最高 ——
打开应用 / 用久了 / 到点 / 按快捷键 / 双击 / 点它拖它 这些话在说的时候,
闲话不插嘴也不盖掉它;它们说完闲话再接着冒(反过来闲话正在说时会被当场让位)。
换歌那句、还有每 60 秒自动刷一次的余额泡泡同理 —— 都会等它说完再上
- 语录板块(设置 → 文案和语录):八块语录各配一个开关 —— 日常台词(闲置时)/
心声 / 点击回嘴 / 拖拽时 / 离开 · 返回时 / 放歌时点击 / 换歌时 / 语录频率切换时。
关掉的那块整块不再说话(台词还留着,「台词内容…」里会标〔已关闭〕),改完立刻生效。
快速双击不受影响:双击该做什么还做什么(看余额 / 天气 / 在放什么 / 说一句我写的)
- 什么时候不说话:「文案和语录」页上有两颗开关 —— 离开 / 返回提醒
(离开超过 30 分钟回来时会说一句,{away} 是离开了多久)和 全屏时静音
(打游戏 / 看视频时不显示气泡,提醒暂存,退出全屏且超过 3 分钟才汇总)
- 台词里能用变量:用久了那几类可以写 {app} / {minutes} / {hm}
(例如「{app} 已经玩了 {minutes} 分钟」);离开回来那类有 {away}
- 一级菜单最上面是「快速查看」独立区域:查看余额 / 查看天气 / 看一眼在放什么 ——
平时最常用的三个"看一眼"直接从一级菜单点,不用进子菜单
- 层级:置顶 / 置底(在壁纸之上)/ 普通层
- 透明度 / 音量:菜单里点「透明度…(现在 xx%)」「音效 → 音量…(现在 xx%)」,
会弹一个小窗口拖滑块,拖的时候立刻生效(音量窗口里还有「试听一声」)
—— 为什么不做成菜单里内嵌滑块:这台机器上 Qt 的弹出子菜单收不到鼠标消息,嵌进去根本拖不动
- 形象(二级菜单就四条):大肥鱼(三视图:正面/侧面/背面三张一套) /
小鲸鱼挂件(单张图)(点一下直接切,打勾的是现在用的)/ 我的形象库…
(三维 / 挂件两本分开:上传过的形象都在这儿,带名字、能预览,上传 / 换图 / 改名 / 删掉都在这个窗口里)/
全部恢复默认形象
- 进程联动:应用启动提醒 / 扫描本机应用并添加… / 清理自定义文字… /
使用时长提醒… / 定时提醒… / 全局快捷键…
- 音乐联动:放歌时看着(总开关)/ 显示歌词内容 / 立刻看一眼在放什么
- 流畅度:性能模式(动画优先,开菜单也不掉帧)/ 休闲模式(省资源,可掉一点帧)
—— 另外做了两处省事:按住鼠标拖动时不再动窗口 Z 序(每次置顶操作都会让合成器重排,
拖动时撞上就卡一下),歌词排版结果也做了缓存、过渡动画只重画气泡那一块
- 百宝箱 → 回收内存:点一下,它就把能碰到的后台程序占着的那部分内存先还给系统,
完事冒泡报个数(例:「收拾完啦:22 个程序腾出 2.6 GB,可用内存多出 251 MB」)。
默认不动你正在用的程序(免得游戏 / 文档被清出去、再点一下要重新加载),
想收得更狠就把子菜单里那条勾掉;不需要管理员、不弹 UAC(所以系统进程那些碰不到,
本来也不该碰),子菜单里还会留一行「上次:…」方便对照。说白了它是把内存从"进程占用"
挪进系统缓存,最适合开大游戏 / 虚拟机之前先清一把,平时内存不紧张时收不收差别不大
- 百宝箱里还有两条:免打扰(15 / 30 / 60 / 120 分钟)、
今日汇总(余额 + 今天用了多久)—— 快捷版右键菜单里也各有一条
- 余额:查看余额 / 设置 Key / 余额来源 / 添加或删除其他 API Key / 余额常显 / 每轮消耗统计

- 音乐联动(QQ音乐 / 网易云音乐):放歌时它会跟着唱 —— 头顶气泡显示当前这一句歌词,
下面淡一行下一句,顶上小字标「♪ 应用 · 歌名」。歌名 / 歌手 / 播放状态 / 播放进度都读
Windows 系统媒体会话(不用登录、不用 API Key),暂停、切歌都能立刻跟上
- 气泡右上角那颗 ⏸ / ▶ 能直接暂停 / 继续:不用切回播放器(走系统媒体会话,
QQ音乐、网易云都支持);暂停之后气泡先留 3 分钟,那会儿按钮变成 ▶,点一下就接着放;
鼠标划过去会变小手,点它不会让桌宠蹦跳、也不算"点了它一下"
(顶上一行写的就是真的应用名 + 歌名,按钮跟文字各占一边、不会互相压)
- 歌词联网找:先网易云、再 QQ音乐(两个接口都不用 Key),找过的歌缓存进 lyrics_cache.json,下次秒开
- 下一句永远显示(不管当前这句折成几行);信息缺失用固定占位:缺歌名「无题」、
缺歌手「未知歌手」、缺应用「未知应用」;放歌期间这块一直显示(没歌词就显示
「♪ 应用 ·《歌名》—— 歌手」),直到放完或切歌
- 长句不会显示不全:折行宽度 300px,太长的句子先缩字号(11 → 7 磅)、必要时多铺几行
(并把顶部「♪ 应用 · 歌名」那行让出来);换句时用 0.3 秒过渡动画(新句从下方滑入淡入、
旧句向上滑出淡出),不再"啪"一下
- 唱到哪、字就变到哪:当前这句里已经唱过的部分会变成 DeepSeek 蓝(多行歌词也一行行跟着变);
换句过渡 0.15 秒、过渡期间用专用 100 帧/秒重绘(休闲模式主时钟只有 25 帧),
而且只过渡歌词文字 —— 气泡本身的宽高是平滑变化的,不会"窗口先消失再弹出新的"
- 高亮贴合真人演唱:抓歌词时会多要一份逐字时间戳(网易云 yrc;也认带  的增强 LRC),
每个字按自己的真实时间变蓝,还在当前字里平滑推进;只有行级时间戳的歌退回匀速高亮
(数据限制,不是程序问题)
- 暂停 / 拖动进度条也能对上:暂停时播放器"不给歌名"不会被当成换歌(歌词不会从头开始)、
暂停期间进度停住;拖动进度条后按播放器报的进度重新对表
- 歌词不会"卡住":抓失败不清空已在显示的歌词,这首歌没歌词时每 15 秒自己重抓
(不用切歌);歌词缓存带版本号,旧缓存会在开歌时自动重抓一次
- 换播放器也不会错位:每首歌记"上次放到哪",暂停 → 放别的 → 切回来能接着走
(实测 A 歌 90 秒切走再切回仍是 90 秒)
- 网易云不报播放进度(实测:它的系统媒体会话里 position / 总时长恒为 0,QQ音乐正常)——
所以对它的歌只显示「♪ 网易云音乐 ·《歌名》—— 歌手」,不抓歌词、也不猜进度,
一直保持到切歌;判定看的是"播放器有没有给时间轴",换到正常报进度的播放器歌词就自动回来
(旧说明,下面的微调仍可用于其它"报了进度但对不上"的情况)——
所以网易云只能靠桌宠自己计时;菜单「音乐联动 → 这首歌对不上?微调」可以把整首歌的歌词
往前赶 / 往后压(0.5 秒、2 秒几档),只影响这一首歌并按歌记住;放歌时轮询也缩到 0.8 秒
- 网易云暂停不会再把歌词清零:它一暂停可能连整个媒体会话都收掉,以前会因此清空歌词/进度
(恢复播放就从头来)。现在会话消失不清空,接着走;消失超过 30 秒才当重新开始
- 菜单「音乐联动 → 这首歌对不上?微调 → 按播放器显示的时间对齐…」:
输入播放器上的进度(1:35 / 01:35.5 / 95 都认)就能立刻整首对齐 ——
网易云拖过进度条以后用它对一次是最准的
- 开「记菜单日志」后,每轮"播放器报的进度"都会记进 menu-debug.log([音乐] … position=…),
方便确认到底是播放器没给数据还是程序算错
- 放歌时点它:单击 → 冒一句「放歌ing:《歌名》——歌手」;快速双击 → 按上面「快速双击」里选的那样弹
(默认看 5 秒余额,同样要配好 Key;也可以设成天气 / 在放什么 / 自己写的台词),看完自动回到歌词
- 余额常显也不冲突:放歌时歌词优先,余额双击就能看;定时刷新冒出来的余额气泡不会打断歌词
- 菜单「音乐联动」:整体关掉 / 只报歌名不显示歌词 / 立刻看一眼在放什么
- 歌词对时:菜单「音乐联动 → 歌词对时」六档(文字提前 0.5 / 提前 0.2 / 刚好同步 /
延后 0.2 / 延后 0.5 / 延后 1.0 秒),默认"文字延后 0.2 秒" ——
歌词对不上主要是输出设备延迟(笔记本外放几乎没延迟,蓝牙耳机能差 0.3~1 秒),
觉得文字还在抢前头就往"延后"调,字幕慢半拍就往"提前"调
- 读不到系统媒体会话时(老系统、精简系统),自动退化成读播放器的窗口标题

- 台词系统:日常随机台词 + 互动回嘴 + 思维链心声(灰色斜体括号气泡,小概率冒出),全部取材自社区 DS 梗

- 细节:呼吸 / 摇摆 / 蹦跳动画、转向交叉淡化、加减速惯性、散步自动休息、说话冷却;移动时整个窗口(含上方气泡区)都留在屏幕内

- 动画优先 + 两档流畅度:默认「性能模式」,右键菜单打开期间桌宠照样 50 帧跑动画,不会像以前那样
打开菜单就降到约 5 帧;想要省点资源可以切「休闲模式」(25 帧,菜单打开时约 5 帧)——
两档都按同一个内部时钟换算动作,走的速度和气泡停留时间完全一样,只是画面帧数不同

- 菜单不会被“点不中”:靠屏幕右边打开二级菜单(子菜单往左弹、正好压在桌宠身上)时,
以前点选项会被桌宠截住。实测根因是系统没把鼠标移动消息送给弹出菜单(全发给了桌宠窗口),
Qt 收不到 hover 就永远不展开二级菜单。现在两重保险:菜单期间桌宠临时退到非置顶层(菜单天然压在它上面)
+一个悬停兜底——菜单开着时自己盯着光标位置,在带子菜单的项上停约 0.22 秒就替 Qt 把子菜单弹出来;
光标离开子菜单后要等 0.5 秒才收(斜着划过去不会误关),
万一 Qt 把子菜单自己关掉了、而光标还在它原来的范围内,会自动补弹回来。
桌宠收到的鼠标移动也会转发给菜单,让 Qt 的悬停/展开/收起按正常逻辑走
(注意:展开子菜单必须用 Qt 自己的 setActiveAction —— 自己 popup() 一个子菜单窗口,
Qt 不知道它是这一项的子菜单,点击就路由不过去,表现出来就是二级菜单“点不了”)
(踩过的坑:菜单期间不要给桌宠加鼠标穿透、也不要把它藏起来 —— 前者会让右键穿到桌面弹出
Windows 桌面菜单,后者会把菜单一起带崩)

- 不会再卡在“鼠标穿透”里回不来:解除穿透原来只靠 Qt 的 aboutToHide 信号,实测这个信号会漏
(菜单早关了、信号没来,桌宠就一直点不动)。现在菜单/对话框状态每 120ms 对一次账,
漏信号也能自己恢复。另外:不要在菜单打开期间隐藏桌宠 —— 试过,会把菜单一起带崩

- 托盘图标、窗口置顶、鼠标穿透、开机自启、配置记忆(config.json);穿透 / 置顶状态重启后自动恢复

天气(联网)

- 右键菜单「查看天气」→ 播报「汕头今天 26°,天气阴」
数据第一站是国内直连的中国天气网(toy1.weather.com.cn 搜城市代码 →
d1.weather.com.cn 取实况,不要 Key、实测 0.1~0.4 秒,回来的本来就是中文),
取不到时退到 open-meteo 兜底(国外地名靠它)
放歌时(气泡被歌词占着)这个天气气泡会停 5 秒,从天气查回来显示出来那一刻开始计时
- 「天气 → 设置默认城市(手动输入)」:直接填城市名(中文英文都行)写进 config.json 当默认城市,不联网
- 「天气 → 添加城市(联网搜索)」:输入城市名后查候选列表(先中国天气网、再 open-meteo),选中的写进 config.json
- 城市列表:添加过的城市都会记下来,菜单「天气」里直接列出来,选中的城市排最前面
(当前城市打勾),点一下就切过去;也能「从列表里删掉城市…」(至少留一个)
- 「天气 → 自动定位城市」:按 IP 联网定位(挂梯子会定位到节点所在地,菜单里也标了),英文城市名会自动换成中文(Singapore → 新加坡)
- 播报全中文:国内源回来的本来就是中文;兜底源按 WMO 天气代码查中文对照表,
实在认不出显示「未知天气」,不会把英文原样吐出来
- 带「区 / 县」的地名会去掉后缀再查一次(鹿城区 → 鹿城),两个字简称(温州 / 汕头)也能查到
- 天气请求走后台线程,不会卡住桌宠

设置类改动(城市 / 大小 / 形象 / 音效 / 音量等)会自动写回 config.json,不用等退出程序。

余额挂件(新增)

让桌宠顺便当「余额挂件」,功能对齐 MeteorNOX/DeepSeek-Balance-Whale-Widget(MIT)。

- 余额泡泡:鱼头顶四行「DeepSeek 余额 / ¥金额 / 今日已用 / 现在 高峰或空闲」,启动后自动冒一次
- 数字滚动:余额变化时金额从旧值缓出滚到新值
- 自动刷新:每 60 秒拉一次;余额有变化自动冒泡;菜单「余额 → 查看余额」可手动刷新
- 今日已用:小鲸鱼记账(余额差值本地记账,免平台令牌),跨天自动归零归档,账本 usage.json
- 只把像用量的余额下降记进去:一次掉得太多(60 秒 20 元以上)或赠送额度整块到期/被收回
这类平台侧变动,算「余额变动」不计入今日已用,桌宠会冒一句说明
(余额少了 ¥x,看着不像用掉的…,这次没算进今日已用)
- 账本按 Key 记账:换 Key(换账号)/ 换币种只重置基准,不会把两个账号的差额算成用量
- 对不上平台时能校准:右键 → 余额 → 校准今日已用…(按平台用量页),
把平台「用量信息」页今天那个消费金额填进去就对齐了(只改「今日已用」,之后余额再降照常累计;
每次校准都记在账本 calibrateLog 里)
- 峰谷时段:余额泡泡第四行显示「现在 高峰时段 / 空闲时段」,高峰橙红、空闲绿色,一眼看出现在贵不贵;
菜单「文案 → 显示峰谷时段」可关,「文案 → 峰谷文案」可切三档(默认 / 梁文峰谷 / !?强强?!);跨进新时段会主动冒泡提醒
- 规则:工作日 9:00–12:00 与 14:00–18:00 为高峰,其余(午休、晚上、周末全天)为空闲;周末全天谷价自 2026-08-23 起生效
- 和「每轮消耗统计」用的是同一套峰谷定价表
- 拖拽吸附:松手后按屏幕四分之一区域吸附左 / 右 / 上 / 下(角落可组合)
- 大小五档 + 无级调节:菜单「大小」里 迷你 / 特小 / 小 / 中 / 大 五档照旧
(精灵高度 102 / 142 / 187 / 237 / 306 px),下面还有一条 「无级调节…(现在 xx%)」 ——
点开拖滑块任意调(30% ~ 120%,100% 就是原图那么大),拖着的时候它当场变大变小、松手就记住,
而且是原地缩放(脚底和中心不动,不会满屏乱窜)。小档位精灵窄,但窗口宽度有个下限(168px),
所以余额气泡不会被挤成一列竖字
- 锁定位置:右键勾上 「锁定位置(拖不动·防误触)」 之后桌宠就钉在原地 ——
点它 / 双击它 / 右键菜单照旧(按压 Q 弹、回嘴、看余额都不受影响),就是拖不动,
适合“只想点一下,不想它被拖跑”的时候;再点一下去掉勾就解锁。
(它只管“拖不动”:想让桌宠连散步都停下来,用「模式 → 原地待着」。)
- 左吸附翻面:吸附到左边缘时整体水平翻转,右边缘翻回来
- 按压 Q 弹:按住时横向撑开、纵向压扁,底部坐标不变(不跑位)
- 每轮消耗统计:读会话日志里的真实 token 用量(默认 ~/.codex-deepseek/sessions/.jsonl),
一轮结束后按峰谷定价换算并冒泡,例如「上一轮 Codex 消耗 ¥0.0039(10.1k token)」
- 余额常显:菜单勾上后余额泡泡常驻;普通台词临时覆盖,说完自动回到余额
- 按键音效:一次点击响一声完整音效(不再检测松手)——把原来的「按压 + 松手」两段 wav 首尾拼成一条
(click-duck.wav 345ms / click-fx1.wav 211ms),所以点一下就听得到完整一段二连音;
快速连点就按点击间隔自然响;带音量滑块,可在菜单里关掉
- 音效走常开音频流:用 QAudioSink 常开输出、自己混音(没人点时输出静音),所以设备一直是醒的,
不会出现「刚点下去开头那一下被吞(ya1 听不见)」。多条点击可以重叠(连点不互相打断);
音量是按样本缩放实现的。取不到音频设备时自动退回 QSoundEffect(3 个实例轮转 + 静音预热 + 未就绪补播)
或系统 winsound,菜单里还有「试听音效」
- 换播放设备自动跟随:接上 QMediaDevices.audioOutputsChanged 信号 —— 插耳机 / 切蓝牙音箱时
立刻(缓 150ms 等设备就绪)把常开音频流重开到新设备上;另有 0.5 秒兜底轮询(有些设备不发信号),
新设备一时开不了会自动重试 3 次
- 可以加自己的音效:菜单「音效 → 添加我的音效…(自己挑 wav)」——
会自动转成单声道 / 44100Hz / 16 位(常开播放器只吃这种格式),立刻生效并试听一声;
自己加的音效排在「音效选择」里(和内置的用分隔线隔开),不要了用「删掉我加的音效…」删掉。
点击音最适合 0.15 ~ 0.60 秒(太短听不清、太长连点会叠成一团):太短会问一句,
太长会问「要不要帮你裁到 0.60 秒」;文件存 sounds/,路径记在 config.json
- 形象切换:菜单「形象」里在大肥鱼(三视图行走)和小鲸鱼挂件(挂件那张 cut-out)之间随时换

- 自定义形象(上传 + 我的形象库,两本分开):菜单「形象 → 我的形象库…」里的「上传新形象…」,
三维那本一次把正面 / 侧面 / 背面三张都挑齐(少一张不给保存,这是主人定的规矩),
起个名字就收录;挂件那本挑一张就行。
库里两本分开放(上面一行下拉切换),三维形象列表和预览默认显示正面那张,
底下并排的三张小图能一眼看出缺哪张;「用这个形象」整套换上,「换图… / 改名… / 从库里删掉」都在这个窗口里,
右边还有个小按钮「这套恢复默认」——只把这一本退回自带的(另一本和库里的条目都不动);
菜单里的「全部恢复默认形象」是两本一起退。恢复默认都不动库,上传过的还在
- ⚠ 原图别删、也别挪地方:桌宠记的是你那张原图在硬盘上的位置(不会复制一份),
删除 / 改名 / 挪文件夹 / 换盘都会让它找不到 —— 真找不到了菜单和形象库里都会标出来,
在库里点「换图…」重新指一张就行(只让缺的那张退回自带,另外两张照旧用你的)

- 多余额来源:除了 DeepSeek,还能添加别的 API Key(DeepSeek / OpenRouter 能查到余额;像 OpenAI / ChatGPT 这种官方没开放余额接口的,会直接告诉你“该服务不提供余额接口”,而不是报错)

- 每轮消耗统计:读会话日志里的真实 token 用量,按峰谷定价换算后冒泡。Agent 名称和日志目录都能自己设
(菜单「余额 → 每轮消耗统计 → 设置 Agent 名称 / 设置会话日志目录…」),不用 Codex 的人也能用;
日志解析兼容 Codex、Claude Code 等不同的 usage 结构

- 菜单分区:吸附(拖拽吸附四边 / 左吸附翻面)、文案(峰谷显示与三档文案)都拆成了独立菜单,不再塞在「余额」下面
- 气泡样式统一:随机台词气泡和余额气泡共用同一套圆角、留白、尾巴参数

另外:菜单和对话框打开期间,桌宠会站住不动并临时退到普通层(关闭后按你设定的层级还原),
菜单是独立的 Qt 标准弹出菜单 —— 所以既不会被桌宠压住一角,贴屏幕边缘往左弹的子菜单也不会一碰就全关。

余额用的 Key:优先 config.json 里的 ds_api_key(右键菜单「余额 → 设置 Key」),没填则读系统环境变量 DEEPSEEK_API_KEY。
峰谷定价表在 桌宠.py 顶部 BASE_PRICE / PRO_PRICE,DeepSeek 调价时改这里。
音效与挂件形象素材来自上面那个 MIT 项目,放在 assets/(mp3 为原始文件,wav 供播放)。

运行

需要 Python 3.11+

pip install -r requirements.txt
或
pip install PySide6

然后双击 启动桌宠.bat,或:

python 桌宠.py

打包成独立 exe(可分享给朋友)

pip install pyinstaller
pyinstaller --noconfirm --onefile --windowed --name 大肥鱼桌宠 --add-data "sprites;sprites" --add-data "assets;assets" --icon icon.ico 桌宠.py

产物在 dist/大肥鱼桌宠.exe,对方双击即用,无需安装 Python。
(杀毒软件可能对 PyInstaller 产物误报,加信任即可。)
注意:发布到 GitHub 的是下面那个中文安装包;绿色版只在本地留一份,不再上传。

打包成 Windows 安装包(中文安装向导,可自选安装位置)

仓库里带了 Inno Setup 6 的脚本 installer.iss:

"F:\Codex\tools\innosetup\ISCC.exe" "/DMyAppVersion=1.0.13" installer.issmarkdown
产物在 dist\大肥鱼桌宠-安装版-v1.0.13.exe:双击是中文向导,中间那一步能自己选安装位置
(默认装到当前用户目录,不弹 UAC),自动建桌面/开始菜单快捷方式,装完安装包本身就能删,
卸载走「设置 → 应用」。发版时用的脚本会把它的附件名固定成 dafeiyu-pet-setup.exe 再上传
(中文文件名传到 GitHub 会变乱码,所以上传前复制一份英文名的)。

一次性准备:winget install JRSoftware.InnoSetup,或者把 Inno Setup 解到 F:\Codex\tools\innosetup
(便携安装:innosetup-x.y.z.exe /PORTABLE=1 /DIR=F:\Codex\tools\innosetup),
简体中文语言文件放 F:\Codex\tools\innosetup-lang\ChineseSimplified.isl。

小提示:如果你自己打包后启动报 DLL load failed while importing QtCore,是因为
PyInstaller 把本机其它运行时里的 ICU(icuuc.dll / icudt.dll)也打进了包,和 Qt 期望的
系统 ICU 版本冲突;桌宠.spec 里已经加了过滤,直接用它打包就不会踩这个坑。

更换形象

方法一(推荐,不用改文件):右键菜单「形象 → 我的形象库… → 上传新形象…」,
三维那本正面 / 侧面 / 背面三张都挑齐(少一张保存是灰的),起个名字就收录;
挂件那本挑一张图就行。以后想换回来,直接去库里挑:
两本库(三维 / 挂件)在窗口最上面切换,三维形象默认显示正面那张,
点「用这个形象」就整套换上,不用再去硬盘里找文件。库里的形象还能「换图…」「改名…」「从库里删掉」。
切回自带的就点菜单里那两条「大肥鱼(三视图)/ 小鲸鱼挂件(单张)」,或「全部恢复默认形象」。
图片不用手动抠底色,程序会自动裁掉透明边、按当前大小缩放。

⚠ 上传的原图别删、也别挪地方:桌宠记的是那张图在硬盘上的路径(不会复制一份到程序目录)。
删除、改名、挪文件夹、换盘都会让它找不到 —— 到时候菜单里会标「文件找不到了」,启动时也会提醒你,
到「我的形象库…」里点「换图…」重新指一张(名字和整套用法都保住)即可。

方法二(做整套替换):把新的三视图(白底)放到程序目录:

1. 正面.png / 侧面.png / 背面.png(原图)
2. 运行 python preprocess.py —— 白底抠图 + 统一高度
3. 运行 python preprocess2.py —— 边缘去污 + 预乘 alpha 缩放出各尺寸精灵

文件说明

| 文件 | 说明 |
|------|------|
| 桌宠.py | 主程序(全部逻辑) |
| ui_console.py | 设置窗口(主题 / 图标 / 12 个分类页) |
| preprocess.py | 白底三视图抠图脚本 |
| preprocess2.py | 精灵边缘去污 + 多尺寸生成脚本 |
| sprites/ | 精灵图(正面/侧面/背面 各尺寸 + 图标) |
| assets/ | 音效(wav 播放 / mp3 原始)、小鲸鱼挂件形象、设置窗口的图标(assets/icons/,Lucide,ISC) |
| README.en.md | 英文说明 |
| CHANGELOG.md | 每个版本的更新记录 |
| 启动桌宠.bat | 启动脚本(自动选择 venv 或系统 Python) |
| requirements.txt | 依赖 |
| 桌宠.spec | PyInstaller 打包配置(含新依赖收集) |

运行时生成(已在 .gitignore 里,不会进仓库):config.json(你的设置和 API Key)、
usage.json(今日已用账本)、assets/click-.wav(由分段音效自动拼出来的点击音)。

贡献与致谢

- AI 对话 / 天气查询 / 系统监控 / PyInstaller 打包配置:由 Cpanoe 通过 PR#3 贡献(DeepSeek API 聊天、wttr.in 天气、CPU/内存/GPU 监控、桌宠.spec)。
- 合并时维护方修复:
- 线程安全:DeepSeek 回复由后台线程直接调用 Qt 界面改为经队列转发主线程(_say_queue)
- 配置保护:config.json 保持不入仓库(本地配置含 API Key,防止泄露)
- 本仓库的改造(RYANFFY/deepseek-dafeiyu-pet):在原桌宠基础上删掉 AI 对话 / 喂食 / 系统状态监控,
只留「移动 + 天气 + 外观」,再从 MeteorNOX/DeepSeek-Balance-Whale-Widget(MIT)
并入余额挂件那套能力(余额泡泡、今日已用记账、数字滚动、四边吸附、左吸附翻面、按压 Q 弹、按键音效),
并额外做了:峰谷时段显示、每轮消耗统计(Agent 名称 / 日志目录可配、兼容多种日志结构)、
常开音频流音效、自定义形象(三视图逐个可换)、层级与透明度、单实例、
进程联动与带图标的可视化应用扫描、菜单分区与气泡样式统一。
- 桌面宠物朝向修复由 B-A-A-GE 通过 PR#1 提交(未合并,当前为维护方修复版)。

台词梗来源

台词均取自 DeepSeek / 鲸鱼娘 / 大肥鱼社区梗(D指导去吃饭、吃白饭、梁文锋会议三连、"才不是大肥鱼"、思维链心声等),感谢社区整活。

协议

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群