DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

anneheartrecord /

dsh-desk-pet

Verified

Always-on-top DeepSeek Harness desktop pet. Default whale, four skins, four silent states.

★ 3 Stars1 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@3ee2d454

DSH Desk Pet

License Language dsh-plugin

盖在所有窗口之上的桌面宠物,跟着本地 DSH 的状态自己变表情。默认鲸鱼,四套皮肤。

不是网页里的挂件——是一个无边框透明的系统窗口。DSH 页面里那只是它的镜像。

English

安装

已有 DSH,一条命令:

dsh plugin --profile web add github:anneheartrecord/dsh-desk-pet#main

macOS 用系统自带的 /usr/bin/python3,不需要装任何依赖。

启动

dsh web

宠物会自己浮在桌面上。DSH 页面右下角还有一只同步的镜像。

不要 DSH、只开宠物:克隆后执行 ./bin/dsh-desk-pet。

已知限制

全屏 app。 Tk 自己只有布尔的「置顶」,跨不过 macOS 全屏应用独占的 Space。所以本插件绕过 Tk,用标准库 ctypes 直接调 AppKit(src/dsh_desk_pet/macwindow.py):把 NSWindow 提到辅助功能层级,并设成可加入所有 Space——和 Electron 桌宠同一套机制,只是不需要装任何依赖。调不通的机器会自动退回普通置顶,那时全屏会盖住它。

为什么有个浅色底板? 默认不透明是实测后的选择。macOS 自带的 Tk 8.5.9 上,-transparent 会把整个窗体合成为空——Tk 报告窗口已映射、可见、坐标正确、精灵在画布上,截图里却是一片空桌面。镂空更好看,但看不见的宠物不是宠物。你的 Tk 支持的话可以开回来:

./bin/dsh-desk-pet --transparent

使用

  • 拖:按住身体任意处。
  • 点一下:它会跳一下;在打盹的话会被叫醒。
  • 换肤:右键(或 Control+点击)出菜单,也可以按 1–4。换肤不改状态。
  • 关掉:Esc 或 q,或右键菜单里选退出。

状态

跟着本地 DSH 自动变,不用管。

状态 什么时候
空闲 没事干,会呼吸、偶尔眨眼
干活 DSH 正在跑
等你 卡在确认、授权、要你输入
报错 跑挂了
开心 刚跑完一轮,几秒后自己回到空闲
睡着 agent 没事干且你的鼠标也不动了才打盹;一有动静或者你戳它就醒

皮肤

圆点 id
蓝 whale(默认)
橙 threadcore
棕 nautilus
紫 jellyfish

关闭与卸载

  • 只关宠物:窗口上按 Esc。
  • 连 DSH 一起关:停掉 dsh web,插件拉起的宠物一起没。
  • 卸掉插件:
dsh plugin --profile web remove dsh-desk-pet

然后重新 dsh web。

开发

/usr/bin/python3 -m unittest discover -s tests -v   # 全套测试,无需窗口
DSH_PET_ART_CHECK=1 /usr/bin/python3 -m unittest discover -s tests   # 连素材一起验(多约 10 秒)
./bin/dsh-desk-pet --probe                          # 不开窗,打印自检
./bin/dsh-desk-pet --inventory                      # 每套皮肤每个状态有几帧
./bin/dsh-desk-pet --small --reset                  # 半尺寸,并忘掉已保存的位置

素材流水线

三个脚本,按顺序跑:

./scripts/generate_frames.py       # 用生图接口补齐缺的姿势(需要 ARTGEN__IMAGE_* 环境变量)
./scripts/build_frames.py          # 抠底、对齐、缩放,产出两套帧
./scripts/check_frames.py          # 逐像素体检
./scripts/contact_sheet.py         # 拼一张总览图,不开窗也能看效果

新素材的背景一律用品红 #FF00FF,装饰(ZZZ、星星)不能用品红或背景色。底色必须是画面里绝不出现的颜色:早期素材生在粉彩底上(水母是薄荷绿),和角色自身颜色太近,抠图阈值怎么调都会误伤——那批水母的眼睛就是这么被抠没的。品红离这四套角色都很远,键容差放到 0.24 也完全不伤画。

generate_frames 从不凭空重画角色:每次请求都是拿一张已有的图做 image-to-image。文生图跨次调用锁不住身份,问两次会得到两只不同的鲸、两种配色、两种尺寸,切状态时角色就当场变形。状态的第一帧参考本套皮肤的 idle 静止姿势,第二帧参考它自己的第一帧——两帧循环要的是同一个姿势差一瞬间,不是两个不同姿势。

build_frames 一份原图产出两套:assets/skins/ 下的透明 GIF 给桌面窗(macOS 的 Tk 8.5 只认 GIF,不认 PNG),assets/web/ 下的 RGBA PNG 给网页镜像。用 colorkey 而不是 chromakey——后者只比较色度、不看亮度,碰上水母那种低饱和底色会把角色的黑眼睛一起吃掉。抠完还会做一次洞填充:背景按定义就是「与画面边缘连通的透明区域」,四面被角色包住的透明区一律补回不透明。裁切框在相对坐标里按每套皮肤统一算(源图有 360/1024/1254 三种分辨率),并按身体底边对齐基线,所以换状态、换皮肤都不会跳。

check_frames 是唯一会看像素的测试。其余测试只能比较文件名——水母曾经带着一脸窟窿通过全部测试。

同一状态放两帧以上就会自动循环;idle 的第二帧当作闭眼帧,脚本会给它排一个长睁短闭的双眨节奏。

自定义皮肤

皮肤就是一个装帧的目录。只要 assets/skins/<id>/<状态>/*.gif 存在,它就会自动出现在右键菜单里,不用改代码。

—/ 5

No ratings yet

Verified DSH bundle

Commit 3ee2d4545c17

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout