dsh-columbina-pet
哥伦比娅桌宠:桌面与网页面板上都有 2D live 形象,四套形象、76 句中日英原声台词、天气播报、表情包时刻、闲暇碎碎念,右键菜单可调动图切换间隔、形象、语言与大小。另有夜间勿扰、音量与一键静音、可搜索的待机动作勾选、省电模式。本插件是 PC2005-cloud/dsh-pet(MIT)的 2D 专用分支,去掉了上游的 3D 形象切换;使用独立插件 ID,可与 dsh-pet 同时安装。
安装
dsh plugin --profile web add dsh-columbina-pet
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
<div align="center">
<img src="assets/logo.png" width="112" alt="dsh-columbina-pet" />
dsh-columbina-pet
哥伦比娅 2D live 桌宠 · DeepSeek Harness 插件
四套形象 · 76 句三语原声台词 · 天气播报 · 真实物理 · 表情包时刻

</div>
这是什么
把愚人众第三席「少女」哥伦比娅放进 DeepSeek Harness 的桌面:她会浮在窗口最上层,被拖动时有真实的物理摆动,会按时间与场景轻声说话,会用官方原声念出台词,也会播报今天的天气。
本仓库是 dsh-pet(MIT)的2D 专用分支:保留并深化了 2D live 形象、语音台词、菜单与物理,移除了尚未完善的上游 3D 形象切换,补上了天气播报与开源所需的文档、占位与版权说明。
英文简介:A 2D live desktop pet of Columbina for DeepSeek Harness — four sprite sets, 76 official voice lines in zh/ja/en with synced subtitles, weather reports, and real physics. 3D mode from upstream has been removed on purpose. See [NOTICE.md](NOTICE.md) for asset licensing.
预览
桌面模式 · 右键菜单
 · 
四套 2D live 形象 · 设置面板
 · 
更新公告
逐版本明细见 [CHANGELOG.md](./CHANGELOG.md);可下载的包见 Releases。每个版本都会在这里留一段,说明改了什么、要不要动设置。
1.2.1 · 2026-10-31
一版以「修碎碎念字幕」为主的补丁。不需要动任何设置,升级后请完整退出 DSH 再打开。
- 长句字幕不再提前消失:碎碎念字幕比声音先没了。根因不在文案,而在时长拿不到——宿主素材接口不返回
accept-ranges,Chromium 对不能 seek 的 Ogg 会把audio.duration报成Infinity,旧逻辑据此退回固定的 3600 ms。现在字幕跟着音频的实际播放进度走(timeupdate续命),读多久就显示多久,念完立刻收。 - 字幕不再被裁掉:碎碎念字幕挪进挂在
body的独立浮层(原先寄生在.dsh-pet-root里,祖先一旦有transform/overflow: hidden就会把长句整块切走)。 - 拖动宠物时字幕跟着走:显示期间用
requestAnimationFrame逐帧同步浮层位置,甩飞、落地、贴边都跟得上。 - 碎碎念节奏恢复正常:设过间隔却发现十几分钟才念一句——计时器被任务状态连带重置,已修。
- 桌面端也能检查素材了:桌面「语音包与素材」面板补齐,一键数语音包 / 动作 / 表情,缺语音包原地重下,不用翻日志。
- 网页右键菜单向桌面看齐:菜单项、顺序、文案统一;网页端新增「真实物理:开 / 关」,设置面板里的分区顺序也一致了。
- 天气播报文案统一:温度一律带
℃,中 / 日 / 英句式各自本地化。 - 长句不再被下一句掐断:
webAutoVoice()在触发前先看上一句还在不在播——热身 / 间隔 / 手势补播 / 天气接话这些自动来源都会让路(控制台打[dsh-pet] 碎碎念让路 来源=…),只有你手动点桌宠或点「原声台词」才是强制换句。热身那句也改成每个页面会话只排一次。 - 气泡不再出现乱码 / 豆腐块:碎碎念气泡曾整串显示成菱形问号。根因是宿主接收请求体时把非 UTF-8 字节直接按 UTF-8 解码(Windows 控制台的 curl / PowerShell 会把中文按 GBK 发出来),替换字符
�就一路写进了气泡。现在请求体先严格 UTF-8、失败再按 GB18030 重解;含�、锟斤拷这类双重转换痕迹的文本一律不写进气泡。 - 语音文件支持 Range:素材接口现在回
accept-ranges并支持206/416,音频可以按需取字节,audio.duration能拿到真值(以前不返回accept-ranges,Chromium 对不能 seek 的 Ogg 报Infinity)。字幕仍保留timeupdate兜底,客户端两个版本都稳。 - 本地接口不再对任何网页敞开:此前 24 条路由全无来源校验,任意网页都能跨站 POST
/broadcast往气泡里塞字、/whisper烧 token。现在写请求若带sec-fetch-site: cross-site且Origin是别的 http(s) 站,直接403 cross-site-blocked;同源页面、file://的桌面 Helper、本机脚本(curl / node / python)照常。 - 切回网页模式后桌面 Helper 会退出:以前
desktopModeEverActive一旦为真就永不复位,切回web后还留着 3 个空转进程(约 178 MB、无窗口)。现在没有桌面宠物就不再拉起 Helper,切回桌面时自动重启。 - 语音包标记跟着版本走:
~/.dsh/columbina-pet/voice-pack.json的version之前停在 1.1.5(只在迁移那一次写),每次启动会按当前版本刷新。 - 素材没动(沿用 1.1.11 的原始 webm,约 147 MB),本版只改代码。
1.2.0 · 2026-10-31
开发期编号是 1.1.12,因为功能面到了次版本,正式发布更名 1.2.0(内容与 1.1.12 完全一致)。
- 待机动作可选:右键「待机动作」切 精选 / 当前形象全部动作 / 自己选;「自己选…」打开设置面板里带搜索框的勾选列表,桌面与网页同一套。精选池从 2 段扩到官方 9 / 去眼罩 12 / 睁眼 12 / 闭眼 10 段。
- 待机不再一顿一顿:带「待机」的片段此前被拉成 20 秒循环(2.4 秒的官方片段 ≈0.12×,折合 3.6 fps),现在统一 0.6×。
- 省电模式真的会停:旧实现只暂停
loop的视频,而待机是 one-shot 播放,所以什么都没停;现在鼠标 30 秒不动就暂停所有在播视频,并拦住宿主推来的新动作。 - 夜间勿扰 / 音量与静音 / 素材自检与一键修复 / 网页面板同步:见下面「功能介绍」。
- 余额查询:默认模型挂在 API Key 版服务商、而本机是账号登录时,不再报「缺少凭证 DEEPSEEK_API_KEY」,自动改查账号余额。
- 素材没动:沿用 1.1.11 的原始 webm(约 147 MB),本版没有做有损压缩;
scripts/shrink-webm.mjs留作可选工具。 /healthz能分辨「磁盘换了没重启」:新增activatedBuildSha256(激活那一刻算的 sha256,留在内存)与needsRestart(内存 sha ≠ 磁盘 sha 时为true)。同一版本号重打包时,光看buildSha256永远等于新盘,只有这组字段能看出内存里跑的是旧代码。- 启动时自报身份:每次启动把「这次跑的是哪个版本、哪份代码」写进
~/.dsh/columbina-pet/activation.json(activatedAt/activatedVersion/diskVersion/buildSha256/activatedBuildSha256/needsRestart),同时往宿主日志打一行[dsh-pet] activated <版本> build <sha8>。磁盘上已经是新版本、内存里跑的还是旧的时,needsRestart为true并补一条 warn——以后不用先猜/healthz怎么访问。 - 升级后需完整退出 DSH 再打开;设置项都带默认值,不需要手动迁移。
1.1.11 · 2026-10-30
/healthz增加activatedVersion/buildSha256:换包没重启一眼可见。ensure-voice增加 120 s 总预算 + 20 s 停滞检测(DSH_COLUMBINA_VOICE_STALL_MS可调)。- npm 包去掉
src/:条目 607 → 465,tarball 148.56 → 148.11 MB。 - 路由路径解码容错:GBK 百分号编码不再整条路由 500。
1.1.10 · 2026-10-30
- 修复网页端「全不选」曾把
lines写成[0](只念第一句):宿主一次性迁移 + 写入prefsRev: 2。 - 只影响网页模式面板;桌面端一直正常。
特性
- 四套 2D live 形象:
official(官方表情包)、nochoker(去眼罩)、open(带眼罩·睁眼)、closed(带眼罩·闭眼)。右键菜单「2D live 形象」即时切换,每套自带待机 / 点击 / 拖拽 / 事件动作树(共 246 个 webm)。 - 三语原声台词:76 句哥伦比娅官方语音,按中 / 日 / 英整理为 94 段切片。配音语言与字幕语言分开设置;有声音必有字幕,一句长台词会按播放进度分段换字幕。
- 按场景碎碎念:问候、午夜、安慰、感谢、提问、玩耍、友人、睡前、认真、俏皮十组场景池,按时间与近期出镜率抽签,不连续重复;开局前 12–22 秒保持安静。
- 工作气泡优先:正在向用户汇报时,桌宠不会抢走气泡;它的话结束后自动把气泡还给工作状态。
- 天气播报(v10.4):菜单「天气 → 今天的天气」,先用气泡给出摘要(城市、天气、当前温度、今日温度区间),隔一拍再用原声台词接一句应景的话;断网时给一句兜底台词,不会卡死。
- 真实物理:拖拽甩出弧度、松手下落、落地回弹、窗口贴边停靠,参数全部可配。
- 菜单即设置:切换间隔、2D live 形象、语言(配音 / 字幕 / 菜单)、模型大小 0.5–3×、原声台词勾选、碎碎念开关,菜单本身也随语言切换。
- 时刻表情包:12 张心情图(好耶 / 抱抱 / 期待 / 出发 / 好吃 / 思考 / 睡觉 / 困了 / 贴贴 / 唱歌 / 谢幕 / 晚安),由台词标签与场景挑选。
- 音量与静音(1.2.0):右键「音量」五档 20–100 % 加一键静音,桌面与网页共用一套设置;改完立刻生效,不会掐断正在播的那一句。
- 夜间勿扰(1.2.0):设一个时段(默认 23:00–08:00),这段时间碎碎念自动闭嘴;手动点「原声台词」照常播。
- 素材自检与一键修复(1.2.0):设置面板「语音包与素材」点一下就数一遍语音切片 / 动作 / 表情,语音包缺了直接原地重下,不用再翻日志。
- 省电模式(1.2.0,默认关):闲着 30 秒把循环待机动图定格,鼠标一动立刻继续,长时间挂桌面更省 CPU。
- 待机动作可选(1.2.0):右键「待机动作」切精选 / 当前形象全部动作 / 自己选;「自己选」会打开设置面板里可搜索的勾选列表(去眼罩、带眼罩睁眼各 82 段,带眼罩闭眼 65 段,官方表情包 17 段),勾了哪几段就只轮播哪几段。
- 网页模式补平(1.2.0):网页端补齐夜间勿扰、省电模式与待机动作(设置面板里同样可搜索勾选),碎碎念时段、音量与静音和桌面共用一套设置。
- 天气城市名本地化(1.2.0):定位拿到的城市按字幕语言翻译,中文界面显示「广州」而不是「Guangzhou」;英文/日文界面保留本地拼写。
功能介绍
每一项都能从右键菜单或设置面板进去;下面写清「入口 / 怎么用 / 要注意什么」。
形象与动作(四套 2D live)
- 入口:右键「2D live 形象」。
official官方表情包、`noc
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:4,最后更新 2026-10-31