为 DSH Web 界面添加一只悬浮动画宠物:51 个透明动画自动切换、可点击互动、可拖拽、可屏幕漫游,零 LLM 调用纯前端装饰。
$ dsh plugin --profile web add github:PC2005-cloud/dsh-pet在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
在 DeepSeek Harness 的 Web 界面里养一只会自己动的桌宠。它常驻在右下角,自己呼吸、随机做小动作、偶尔朝你东张西望或在屏幕里走走,你也可以点击或拖拽它到任意位置。
@deepseek-ai/cordis(插件框架)、@deepseek-ai/dsh-home-paths(解析 DSH 主目录)、@deepseek-ai/dsh-host-webserver(注册 /pet 路由)、@deepseek-ai/dsh-client-runtime(浏览器半侧运行容器)、React 18(由 DSH 外壳注入)/pet/{thumb|full}/<file> 路由提供 WebM 资源;浏览器半侧以 window.__ModuleLoader__.load({id,factory}) 形态注册到 shell.overlay 列表槽,挂载为浮动层(点击穿透、不挡界面操作)dsh-pet/lib/index.js,浏览器半侧 dsh-pet/lib/client.js,挂载声明 dsh-pet/cordis.patch.yml想让 DSH Web 界面更有人情味、又不愿被插件打断工作流的用户。宠物是纯装饰:没有天气、监控、Agent 状态感知这些业务功能,零 LLM 调用,不消耗模型额度,适合想要一点陪伴感又怕插件拖累体验的人。
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DeepSeek Harness | 0.1.0-rc.6+ | peerDependencies 声明 cordis、home-paths、host-webserver、client-runtime、client-ui-slots 均 ^0.1.0-rc.6 |
| Node 运行时 | 未声明 | 包未声明 engines;宿主半侧用 ESM 与 node:fs/node:url,需 Node ≥ 14 起支持 import.meta.url 的 LTS |
| 平台 | web | dsh.client.platform = "web";未做 desktop/terminal 适配 |
| 原生模块 | 无 | 纯 Node 标准库 + 浏览器标准 API |
dsh plugin --profile web add github:PC2005-cloud/dsh-pet
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
size | 数字(px) | 宠物显示高度。浏览器侧目前走代码默认值,调整需改源码;patch 中已声明但暂未下发到浏览器 | 260 |
position | 字符串 | 默认出现的角落:bottom-right 或 bottom-left。同上,浏览器侧未生效 | bottom-right |
fullRoot | 路径字符串 | 高清原始素材目录(1200×1200 母版)。需从 GitHub Releases 下载 assets-videos 后才能生效,否则 /pet/full/ 路由返回 404 | $DSH_HOME/pet-assets |
Q: 跑起来会消耗 LLM 或网络资源吗?
A: 不会。运行时零 LLM、零 API 请求;动画是浏览器本地播放的 WebM 文件,命中 1 小时浏览器缓存后不再下载。
Q: 需要额外配置吗?
A: 不需要。安装即用。如果想换角落、调高度或启用高清原始素材,要手动改 DSH_HOME 或源码默认值——当前浏览器侧配置管线尚未打通。
Q: 支持哪些平台?
A: 仅 DeepSeek Harness Web(dsh web)。包声明的运行平台是 web,没有为 desktop/terminal 端做适配。
Q: 如何卸载?
A: 执行 dsh plugin --profile web remove dsh-pet,重启 dsh web 即可恢复原状,插件不会留下任何持久数据。
Q: 想换成自己的角色怎么办?
A: 仓库自带"提示词 → 绿幕视频 → 透明动画"全流程管线(scripts/ 目录下 7 个 Python 脚本 + ffmpeg)。按 prompts/ 配方生成源视频,跑完 4 步处理链得到 thumb 资源,覆盖 dsh-pet/assets/thumb/ 即可替换。
Q: 调整 size / position 后没生效?
A: 这是已知限制。宿主半侧(cordis.patch.yml)声明的 size、position 暂时传不到浏览器,client 实际收到的是空对象,所以行为参数走代码默认值。该项浏览器侧配置化正在规划中。
Q: 浏览器控制台看到 [dsh-pet] roll=... 日志是 bug 吗?
A: 不是 bug。源码中标注为"测试用"的概率打印日志(lib/client.js:339),方便核对动画分布;正式版本可删除,作者保留未移除。
入门 — 安装一行命令、无需任何配置即可看到效果,无需阅读文档或调整参数。
size / position 配置项的浏览器侧下发未打通,patch 配置目前只影响宿主半侧,浏览器走代码默认值(lib/client.js:182-185、README.md:45-49)[dsh-pet] roll=... 调试日志,标注为"正式版可删除"但当前未移除(lib/client.js:338-339)assets-videos 解压到 $DSH_HOME/pet-assets/,否则 /pet/full/ 路由返回 404(DESIGN.md:25)HIT_BOX 矩形限定(lib/client.js:99),动画人物视觉宽度与命中宽度差异较大时可能影响点击手感一只住在 DeepSeek Harness Web 界面里的桌面宠物:待机呼吸、随机动作(含打瞌睡)、偶尔转向、屏幕漫游、点击反应、可拖拽。
这不是一个普通插件,而是完整的三件套项目:
① 提示词(配方) → ② 素材生成链(引擎) → ③ 插件(成品)
AI 生成动画的配方 源视频 → 透明动画的管线 运行在 DSH 里的宠物
任何人 clone 本仓库,都可以从零生成自己的桌面宠物——换角色、换动作、换风格,全流程可复现。
dsh plugin --profile web add dsh-pet
重启 dsh web,宠物出现在右下角。
用 AI 视频生成工具(如可灵、Runway、豆包等,本项目素材即由豆包生成),按 prompts/桌面宠物 10 秒动作提示词.md 的配方生成 51 个 10 秒绿幕视频:
生成结果放入 video/(51 个 mp4)。
源视频获取:为控制仓库体积,
video/源视频不入 git。需要复现素材链时,从 Releasesassets-videos下载 51 个 mp4(拼音文件名),放入video/即可。一键批量下载(需 gh CLI):mkdir -p video && cd video && gh release download assets-videos --repo PC2005-cloud/dsh-pet
cd scripts
python watermark_step01.py # 水印遮罩填充 → step01/
python chroma_step02.py # 绿幕抠像转透明(HSV 色相)→ step02/
python normalize_step03.py # 归一化 2160×1215 统一站立居中 → step03/
python encode_thumbs.py # 转码 640×360 播放变体 → step04/
依赖:Python 3 + ffmpeg + numpy + scipy(素材链脚本自动用工作区 .tools/ 下的 ffmpeg)。
# 把 step04 的播放变体同步进插件包
cp step04/*.webm dsh-pet/assets/thumb/
# 本地安装插件
dsh plugin --profile web add file:D:/path/to/dsh-pet
中间产物(step01-04)由脚本生成、不入仓库;
video/源视频和脚本是成果、入库维护。
├── prompts/ # ① 51 个动作的生成提示词(绿幕规范 + 按秒分解)
├── scripts/ # ② 素材生成链(7 个 Python 脚本)
├── video/ # ② 源视频(51 个绿幕 mp4 + 水印 mask)
├── tools/ # 开发工具:preview.html(素材链各阶段效果预览)
├── dsh-pet/ # ③ 插件(可独立 npm 发布)
│ ├── lib/index.js # host 半侧:/pet 视频路由
│ ├── lib/client.js # 浏览器半侧:动画链 + 双缓冲播放
│ └── assets/thumb/ # 640×360 播放动画(51 个,~36MB)
├── DESIGN.md # 设计与实现文档(含踩坑记录)
└── LICENSE # MIT
宠物实际运行在 DSH Web 界面中的样子:
全部 51 个动画(640×360,插件实际播放用的资源)——GIF 预览存放于仓库 dsh-pet/assets/preview/(raw 直链渲染,文件名采用拼音便于跨平台);完整透明视频见 dsh-pet/assets/thumb/:
待机 / 转向
移动
动作
点击回应
拖拽
注:动画为透明背景;GIF 预览中透明部分显示为页面底色,实际 webm 播放为透明。