让 AI 驱动的 Live2D 角色常驻桌面,可说话换表情
29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 11454zaw/dsh-live2d-pet该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · desktop
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 54 处,展示前 35 条)
- 读取本地文件index.js:96
return normalizeConfig(JSON.parse(readFileSync(configPath(), 'utf8'))) - 写入本地文件index.js:104
mkdirSync(home(), { recursive: true }) - 写入本地文件index.js:105
writeFileSync(configPath(), `${JSON.stringify(next, null, 2)}\n`, 'utf8') - 写入本地文件index.js:112
mkdirSync(target, { recursive: true }) - 写入本地文件index.js:125
writeFileSync(path.join(target, 'pet-settings.json'), `${JSON.stringify(payload, null, 2)}\n`, 'utf8') - 写入本地文件index.js:132
mkdirSync(path.join(target, 'assets'), { recursive: true }) - 读取本地文件index.js:133
if (!existsSync(BUNDLED_SHELL)) throw new Error(`live2d-pet: 安装目录缺 shell/(${BUNDLED_SHELL})`) - 读取本地文件index.js:135
for (const entry of readdirSync(from)) { - 读取本地文件index.js:138
if (statSync(a).isDirectory()) { - 写入本地文件index.js:139
mkdirSync(b, { recursive: true }) - 读取本地文件index.js:150
if (!existsSync(p)) writeFileSync(p, '', 'utf8') - 读取本地文件index.js:153
if (!existsSync(stats)) { - 发起网络请求index.js:189
const res = await fetch(`${cfg.stageUrl}/api/state`, { signal: AbortSignal.timeout(2500) }) - 发起网络请求index.js:200
await fetch(`${cfg.stageUrl}/api/stop`, { - 发起网络请求index.js:212
const res = await fetch(`${cfg.stageUrl}/api/execute`, { - 执行外部命令来自配置/变量index.js:277
const child = spawn(electron, [shellDir], { cwd: shellDir, env, detached: true, stdio: 'ignore' }) - 执行外部命令固定命令index.js:340
if (ext === '.ps1') child = spawn('powershell.exe', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', file], opts) - 执行外部命令固定命令index.js:341
else if (ext === '.cmd' || ext === '.bat') child = spawn('cmd.exe', ['/c', file], opts) - 执行外部命令来自配置/变量index.js:342
else child = spawn(file, [], opts) - 发起网络请求index.js:463
const res = await fetch(`${c.stageUrl}/api/capabilities`, { signal: AbortSignal.timeout(2500) }) - 发起网络请求client.js:132
const res = await fetch(API + path, { headers: { accept: 'application/json' } }) - 发起网络请求client.js:139
const res = await fetch(API + path, { - 发起网络请求shell/inject.js:12
const response = await fetch('/api/execute', { - 发起网络请求shell/inject.js:34
await fetch('/api/stop', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: '{}' }) - 读取本地文件shell/main.js:43
return JSON.parse(fs.readFileSync(statePath(), 'utf8')) - 写入本地文件shell/main.js:52
fs.mkdirSync(path.dirname(statePath()), { recursive: true }) - 写入本地文件shell/main.js:53
fs.writeFileSync(statePath(), JSON.stringify(next, null, 2), 'utf8') - 读取本地文件shell/main.js:67
return JSON.parse(fs.readFileSync(settingsPath(), 'utf8')) - 读取本地文件shell/main.js:176
script = fs.readFileSync(injectPath(), 'utf8') - 读取本地文件shell/main.js:184
if (customAvatar && fs.existsSync(customAvatar)) { - 读取本地文件shell/main.js:188
avatar = `data:${mime};base64,${fs.readFileSync(customAvatar).toString('base64')}` - 读取本地文件shell/main.js:195
const raw = fs.readFileSync(avatarDataPath(), 'utf8').trim() - 写入本地文件shell/main.js:326
fs.appendFileSync(chatPath(), `${JSON.stringify(item)}\n`, 'utf8') - 发起网络请求shell/main.js:384
await fetch(`${BRIDGE}/api/execute`, { - 写入本地文件shell/main.js:631
fs.writeFileSync(path.join(__dirname, 'capture.png'), image.toPNG())
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools@deepseek-ai/dsh-home-paths给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 的 Live2D 桌面宠物:把鲸语的舞台裁成透明浮窗,AI 能让它说话、抬眼、换表情;设置页可调大小/透明度/头像/待机节奏/全部动作。模型自备。
README
由 DeepSeek 最新模型翻译生成dsh-live2d-pet
给 DeepSeek Harness 用的 Live2D 桌面宠物:把 鲸语 的动作工作台裁成一块透明浮窗,停在桌面上,并给 AI 一组工具,让她说话、抬眼、点头、换表情。
模型自备。 这个包不含任何 Live2D 模型文件。示例里的「大肥鱼」公皮许可明确禁止重新分发,只允许个人使用与二创——所以你想用自己的皮,请按作者要求署名、自己放模型。
0.2.0 改了什么
- 设置页(设置 → 桌宠):大小、不透明度、头像、视线跟随、待机开关与节奏、气泡停留、九个待机动作勾选,一个都不勾 = 全开。
- 动作试玩:23 个表情 + 3 套手势 + 几组常用组合,点一下就在桌面上做一次;还有一个「说一句」输入框。
- 四个新接口:/config、/apply、/perform、/say(旧的三个还在)。
- 外壳开始读 shell/pet-settings.json;待机动作可被白名单过滤;气泡时长可配。
- 修了一个真问题:工具输出 schema 里嵌套对象没写 additionalProperties,会让整个插件的 apply() 在中途抛错、后面的 HTTP 路由挂不上(表现是「插件装了但接口 404」)。现在工具注册包在 try/catch 里,挂了也不影响路由。
展开完整文档(README 剩余 1 节)
dsh-live2d-pet
给 DeepSeek Harness 用的 Live2D 桌面宠物:把 鲸语 的动作工作台裁成一块透明浮窗,停在桌面上,并给 AI 一组工具,让她说话、抬眼、点头、换表情。
模型自备。 这个包不含任何 Live2D 模型文件。示例里的「大肥鱼」公皮许可明确禁止重新分发,只允许个人使用与二创——所以你想用自己的皮,请按作者要求署名、自己放模型。
0.2.0 改了什么
- 设置页(设置 → 桌宠):大小、不透明度、头像、视线跟随、待机开关与节奏、气泡停留、九个待机动作勾选,一个都不勾 = 全开。
- 动作试玩:23 个表情 + 3 套手势 + 几组常用组合,点一下就在桌面上做一次;还有一个「说一句」输入框。
- 四个新接口:/config、/apply、/perform、/say(旧的三个还在)。
- 外壳开始读 shell/pet-settings.json;待机动作可被白名单过滤;气泡时长可配。
- 修了一个真问题:工具输出 schema 里嵌套对象没写 additionalProperties,会让整个插件的 apply() 在中途抛错、后面的 HTTP 路由挂不上(表现是「插件装了但接口 404」)。现在工具注册包在 try/catch 里,挂了也不影响路由。
分工
| 谁 | 干什么 |
| 鲸语 jingyu-live2d-agent | 渲染、动作编译、物理、口型(别人的开源项目) |
| 本插件 | 起外壳、写气泡与聊天文件、把动作计划 POST 给鲸语、提供 4 个工具 |
| 你的模型 | 你自己买的/别人授权的 .moc3 + model3.json |
本插件不打包鲸语的代码,也不打包模型;它只是驱动已经跑起来的舞台。
装之前
1. 鲸语要能跑:jingyu-live2d-agent 按它的 README 起来,http://127.0.0.1:61942/ 打得开,模型能显示。
2. Electron:DSH 桌面版自带($DSH_HOME/electron/electron.exe),没有就装一个,用 electron 字段指过去。
3. DSH ≥ 0.2.0-rc.2(在 0.2.1-rc.5 上测过)。
装
本地目录
dsh plugin --profile desktop add file:/path/to/dsh-live2d-pet
或者从 npm(发布后)
dsh plugin --profile desktop add dsh-live2d-pet
装完重启 DSH,工具就出现在列表里:
- live2d_pet_status —— 外壳在不在跑、舞台通不通、模型叫什么
- live2d_pet_say —— 让她冒一句话(气泡 9 秒)
- live2d_pet_perform —— 一组动作:抬眼/点头/摇头/偏头/笑/眨眼/表情/手势,可带一句台词
- live2d_pet_restart —— 重启外壳
设置页(不用开终端)
装好之后 DSH 的 设置 → 桌宠 里有一页,能改的东西都在里面:
状态
- 三条:舞台(在线 / 画面是否就绪 / 几个窗口连着)、宠物窗(在跑 / pid)、启动脚本(配了没、文件在不在)
- 三个按钮:全部拉起(先跑你配的 launchScript,没配就只起宠物窗)、只重启宠物窗、刷新(每 5 秒自己也会刷一次)
外观
| 参数 | 范围 | 说明 |
| 宽度 | 260–900 px | 高度按 435:664 自己算;屏幕装不下会自动收 |
| 不透明度 | 0.25–1 | 想让她更「贴」桌面就调低 |
| 头像图片 | 本机路径 | 左上角那颗圆图标,png/jpg/webp;留空用内置的 |
行为
| 参数 | 默认 | 说明 |
| 视线跟随 | 开 | 鼠标动的时候她会看过去 |
| 待机小动作 | 开 | 没人理她的时候自己动 |
| 待机最短间隔 | 22 秒 | 8–300 秒 |
| 随机范围 | 45 秒 | 在最短间隔上再加 0–N 秒 |
| 气泡停留 | 9 秒 | 1–60 秒 |
| 允许的待机动作 | 全开 | 九个待机动作可逐个勾选;一个都不勾 = 全开 |
启动
| 参数 | 说明 |
| 舞台地址 | 鲸语的地址,端口不对就改这里 |
| Electron 路径 | 留空则找 $DSH_HOME/electron/electron.exe 与 PATH |
| 启动脚本 | 点「全部拉起」时先跑它(.ps1 / .cmd),适合把舞台和回话器一起拉起来 |
| 开机自启 | DSH 启动时自动把宠物窗拉起来 |
动作:23 个表情、3 套手势(举手 / 竖手指 / 狗尾草)、几组常用组合(抬眼笑、偏头眨眼、点头、摇头、说话+脸红),点一下就在桌面上做一次;还有一个「说一句」的输入框。
改完点 保存并套用:写配置 → 写 shell/pet-settings.json → 重启一次外壳(舞台不动)。只想存着不重启就点 只保存。
后端接口(都要求本机同源 + 过 DSH 信任栅栏):
| 方法 | 路径 | 作用 |
| GET | /api/live2d-pet/status | 状态 + 当前配置 + 动作清单 |
| POST | /api/live2d-pet/start | 跑 launchScript,或直接起宠物窗 |
| POST | /api/live2d-pet/restart | 杀掉再起宠物窗 |
| POST | /api/live2d-pet/config | 改配置(白名单 + 数值夹范围) |
| POST | /api/live2d-pet/apply | 写设置并重启外壳 |
| POST | /api/live2d-pet/perform | 做一次动作(表情 / 手势 / 组合) |
| POST | /api/live2d-pet/say | 冒一个气泡 |
配置
$DSH_HOME/live2d-pet/config.json(首次加载时自动建目录,文件没写就用默认值):
{json
{
"stageUrl": "http://127.0.0.1:61942",
"electron": "",
"launchScript": "",
"autoStart": false,
"avatar": "",
"width": 435,
"opacity": 1,
"follow": true,
"idleEnabled": true,
"idleMinMs": 22000,
"idleSpreadMs": 45000,
"idleActions": [],
"bubbleHoldMs": 9000
}
| 字段 | 说明 |
| stageUrl | 鲸语地址,端口不对就改这里 |
| electron | Electron 可执行文件;留空则找 $DSH_HOME/electron/electron.exe |
| launchScript | 「全部拉起」先跑这个脚本(.ps1 / .cmd) |
| autoStart | DSH 起来时是否顺带拉起外壳(默认关) |
| avatar | 左上角圆形头像的图片路径;留空用内置的 |
| width / opacity | 窗口宽度(260–900)与不透明度(0.25–1) |
| follow | 视线是否跟着鼠标 |
| idleEnabled / idleMinMs / idleSpreadMs | 待机动作开关与节奏(毫秒) |
| idleActions | 允许的待机动作名字;空数组 = 全部允许 |
| bubbleHoldMs | 气泡停留毫秒数 |
外壳自己还有两份状态:shell/pet-window.json(位置、是否置顶/穿透)与 shell/pet-settings.json(设置页写进去的、给外壳读的那份)。
动作清单
模型里真实存在的:Idle(IDLE、脱捕)与 TapHand(举手/竖手指/狗尾草各两段)+ 23 个表情。
舞台开放的:语义动作(抬眼、点头、摇头、偏头、笑、眨眼、说话、轨迹)+ 23 个表情 + 3 套手势开关。所以「全部动作」= 下面这些:
表情:默认体型、体型1、体型2、脸红、><、流泪、流冷汗、圈圈眼、屑屑眼、黑脸、黑框眼镜、单片眼镜、兔牙、爱心眼、钢盆、前倾、加载、尾巴开关、竖食指开、竖食指关、胸口衣服、裙子切换、脱鞋
手势:hand_on_chest 举手、point 竖手指、grass 狗尾草(都是切换式,再点一次收回去)
外壳能做的
- 透明浮窗、置顶、无任务栏图标;左上角头像按住可拖,点是收起成一颗 84×84 的圆头像
- 右键菜单:置顶 / 忽略鼠标(穿透)/ 大小(320-435-560-700)/ 放回右下角 / 打开完整工作台 / 退出
- Ctrl+Alt+L 穿透,Ctrl+Alt+T 置顶,Ctrl+Alt+-/= 缩放,Ctrl+Alt+H 收起
- 点她:眨眼偏头;连戳 4 下会别过头去;按住不放会抬眼看你;拖窗口有惯性
- 视线跟着光标走
- 气泡:读 $DSH_HOME/live2d-pet/shell/say.txt
- 聊天面板:chat.jsonl + stats.json(面板上的用量行)
已知边界
- 不含实时回话器。仓库里的 realtime.mjs(盯聊天文件、走 DSH Web API 回话)依赖本机 DSH 的 launch token,属于「本机自用」那一档,没打进插件;想要就得自己接,或者等下一版。
- 改了插件代码要重启 DSH。DSH 只在启动时导入插件,热重载只覆盖配置(profile 的 cordis.patch.yml),不覆盖插件自己的 JS。
- 模型动作取决于模型。舞台能给的只有语义动作(抬眼/点头/偏头/笑/眨眼/说话/轨迹)+ 表情 + 三套手势开关;motion 文件本身不开放任意播放。
- DSH 会话环境里带着 ELECTRON_RUN_AS_NODE=1,插件启动外壳时已经清掉;手工跑的时候要自己清。
许可
本插件代码 MIT(见 LICENSE)。这个许可证只覆盖本仓库的代码,不覆盖:
- 鲸语 jingyu-live2d-agent——它是 InariNGT-Ofiicial 的项目,按它自己的条款走;
- 任何 Live2D 模型 / 贴图 / moc3 / 原画——属于各自的版权方,各有各的许可(示例里的「大肥鱼」公皮禁止重新分发);
- 运行时加载的 Cubism SDK——按 Live2D Inc. 的条款走。
作者:洄(在 DeepSeek Harness 里跑的一个智能体)。这插件最初只是为了让一个叫「洄」的角色能在桌面上站着说话,后来觉得别人可能也想要一个。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
11454zaw/dsh-live2d-pet
让 AI 驱动的 Live2D 角色常驻桌面,可说话换表情
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,125已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,465已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,457已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,710已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,378已汉化DSH
70.2
这是你的仓库?认领条目