dsh-character-emote-plugin
Manifest validCharacter Expression Sprite Plugin: Multi-character + Streaming Emotion Auto-Detection (LLM/stream keyword rules, auto-switches sprites even if the model forgets to call the tool) + Composite Emotions + Mood Baseline + Draggable Sprites / Scroll-Wheel Zoom + Sprite Switching Animations + Emotion Intensity Visualization + Extended Trigger Conditions + Emotion Modes (Auto/Manual/Pause) + Stepless Intensity Scaling Simulation + Sprite Preloading, with Styles Persisted to Host (Restored Across Restarts).
dsh-character-emote-plugin · 角色表情立绘插件
对话右侧固定浮层实时显示当前角色的表情立绘:模型回复时调用 set_expression 工具声明情绪,
Host 更新状态,Client 每 2 秒轮询切图;设置 → 角色立绘 小节一键切换角色、一键刷新。
v0.6.0 新功能(2026-08-17)
情绪模式:自动 / 手动 / 暂停
- 自动:模型调用
set_expression或流式判定直接切图(默认) - 手动:模型只记录「待定情绪」不切图;设置页显示待定卡片 + 情绪选择器,点「应用」或点选情绪才切图
- 暂停:完全冻结,任何情绪变化都不生效
- 设置 → 角色立绘 → 情绪模式 三个按钮切换
无档位强度缩放模拟
- 情绪只有基础图(如
joy.png)没有变体档时,请求高强度立绘不再「原地不动」—— Host 返回visualIntensity(0..1),浮层用 scale 放大模拟视觉强度;有变体图时照旧走档位图(向后兼容)
立绘预加载 + 轮询重构
- 切换角色后预加载该角色全部立绘,弱网切图不闪
- 轮询只建一次 interval(ref 比较),过渡动画不再被轮询打断
- 浮层仅图片本体可拖动/滚轮缩放,不挡下方 UI 交互
新路由
| 路由 | 说明 |
|---|---|
POST /character-emote/mode | body {mode: auto|manual|paused},切换情绪模式 |
POST /character-emote/apply | body {emotion, intensity?, secondary?},手动应用情绪(设置页用) |
v0.5.0 新功能
立绘切换动画
- 淡入淡出过渡:立绘切换时先淡出再淡入,避免生硬跳切
- 缩放动画:切换时立绘先缩小再放大,视觉更流畅
- 动画开关:可在设置页控制动画效果
情绪强度可视化
- 强度指示条:在立绘下方显示情绪强度等级
- 直观反馈:用户可直观看到当前情绪强度
- 支持多档:最大支持3档强度显示
扩展触发条件
- 标点符号触发:!→ 兴奋,?→ 困惑,...→ 悲伤
- 表情符号触发:😊→ 开心,😠→ 生气,😢→ 难过,😲→ 惊讶
- 语气词触发:哇/啊→ 惊讶,哎/唉→ 失望,嘿/嘻嘻→ 好笑
动态强度映射
- 心情影响强度:情绪强度根据当前心情动态调整
- 自然过渡:心情好时正面情绪增强,负面情绪减弱
- 平衡效果:心情差时正面情绪减弱,负面情绪增强
多角色:图放哪(核心)
支持多个角色,一个角色一个目录,目录名就是角色名:
dsh-character-emote/
characters/
高奈利亚/ ← 角色:高奈利亚(目录名 = 角色 id,中文也行)
joy.png
anger.png anger-1.png anger-2.png anger-3.png
...
角色B/ ← 再建一个目录就是新角色
...
命名规律(与角色无关,每个角色目录内部都一样):
| 文件 | 含义 |
|---|---|
joy.png | 情绪 joy 的基础档(intensity 0) |
anger-1.png / anger-2.png / anger-3.png | 情绪 anger 的强度递进档(intensity 1/2/3) |
支持 png/jpg/jpeg/webp/gif。没有任何立绘时插件是空态(不显示任何默认角色); 图放好后在设置页点「🔃 刷新角色」即识别,不用重启。
安装 / 打包
# 安装(<dsh> 请替换为你安装的 DSH CLI 调用方式;装完重启才生效)
<dsh> plugin --profile <profile> add <本插件目录>
# 打包归档(npm 标准 tarball,可分发)
pnpm pack --pack-destination <产物目录>
# 卸载
<dsh> plugin --profile <profile> remove dsh-character-emote-plugin
立绘素材自备:仓库不含任何立绘图片(
characters/下的图不进版本库)。 按上面的目录规则把自己的图放进去即可。
界面行为
- 右侧浮层:当前角色立绘固定对话右侧(
shell.overlay穿透层),圆角投影,角色 · 主情绪 + 副情绪标签贴图下;浮层pointer-events: none不挡点按,仅图片本体可拖动/滚轮缩放;模型报情绪后最多 2 秒切图(手动/暂停模式下按模式规则处理) - 设置 → 角色立绘:角色列表点选即切换;「🔃 刷新角色」重新扫描
characters/(丢图/加角色后点一下即可,无需重启);空态时显示提示 - 立绘样式可调(设置页):大小滑条(120–420px)、左/右位置、透明度(30–100%)、切换动画开关;localStorage 持久化,改完浮层即时跟随
情绪与心情(v0.3)
- 复合情绪:
set_expression支持secondary副情绪(如surprise主 +embarrassment副 = 又惊又羞),标签与工具结果都显示主 + 副 - 心情基线 mood:28 种情绪内置 valence(正负)/ arousal(唤醒度)轴,每次情绪调用按比例混入 mood,随时间指数衰减(半衰期 2 分钟);设置页显示心情圆点与数值
- 跳变缓冲:新情绪与当前心情方向相反且差距大时(如刚在生气立刻要开心),强度自动降一档,避免表情硬切
- 心情为内存态,重启归零
原理
- Host 半(
index.js):import.meta.url定位插件目录 →characters/*扫描角色表(空则回退emotes/,iddefault);webServer注册/character-emote/characters|character|refresh|state|file/<name>路由(basename + 白名单防路径穿越);tools.register注册set_expression工具,情绪枚举 = 全角色并集,execute 按当前角色校验; refresh 时重扫角色表并重注册工具(枚举跟着变) - Client 半(
client.js):slots注册shell.overlay浮层 +settings.section设置页,fetch('/character-emote/state')轮询,<img>走相对路径加载 - 状态为内存态(重启回默认角色 + neutral 情绪);如需跨重启记住角色,后续可在 Host 加
$DSH_HOME持久化
已知边界
- 角色/情绪切换后
set_expression工具枚举是刷新时的并集快照:刷新会重注册,但重注册后需下一次模型调用才看到新枚举 - 工具注册失败不影响图片路由(已 catch),但模型就不会主动报情绪了
- 多会话共用同一份当前角色/情绪(全局单例)
姊妹仓库
同族的其它 DSH 插件(各一个独立仓库):
- dsh-liya-skin —— 皮肤:壁纸(缩略图选择 + 透明度滑条)+ 星月皮肤层(星带 / 星轨 / 标题栏徽标),素材自备
- dsh-liya-ui —— UI 润色:统一加大圆角,radius 可在原生设置页调(4–48)
- dsh-liya-workspace —— 工作区档案速览:FILE-MAP 摘要 / memory·records·diary 统计 / 最近日记
- dsh-liya-archives —— 归档会话抽屉:侧边栏「已归档 (n)」入口,一键恢复 / 复制为新会话 / 移回侧边栏
- dsh-puzzle —— 莉娅拼图:滑块拼图小游戏,agent 可发话 / 换图 / 看进度
- dsh-chess-xq —— 天界象棋:中国象棋人机对战,可悔棋 / 存档 / 调难度
- dsh-dist-manager —— 插件分发目录(dist/)管理:自动归档旧版本 + WebUI 管理页
许可
双许可——文档与代码分开:
- 代码(
index.js、client.js与其它源文件):MIT —— 拿去用、改、再发,保留版权声明即可。 - 文档(本 README 的正文):CC BY 4.0 —— 可以自由使用、改编、连商用都行,但要署名(莉娅 / @feverZHONG)并注明来源。
两份许可的全文:LICENSE(MIT)/LICENSE-DOCS(CC BY 4.0)。
莉娅(@feverZHONG)· 宇宙美好记录官
Comments
Loading…
From the same category
by ccch1mneyyy
DSH 官方公众号收录的 TUI 补位插件:Claude Code 风,鲸鱼顶栏/实时状态/流式思考/双击 Esc 回滚/上下文进度+TPS。npm 一键装。 DSH official WeChat featured TUI plugin — Claude Code style: whale bar, live status, streaming thoughts, double-Esc rol
★ 4.3k
↓ 10.9k/wk
MIT
TypeScript
Oct 11, 2026
dsh plugin --profile terminal add @deepseek-harness-tui/dsh-tuiby strukto-ai
The World's First Virtual Terminal for AI Agents
★ 3.7k
↓ 355/wk
Apache-2.0
TypeScript
Oct 11, 2026
dsh plugin --profile agent add @struktoai/mirage-dshby bowenliang123
The best DeepSeek Harness plugin for context insight and management, with context dashboard / browser / sidebar and context command, for context statistics, composition, breakdown, evolution details,
★ 2k
↓ 34.4k/wk
Apache-2.0
TypeScript
Oct 11, 2026
dsh plugin --profile web add dsh-contextby huiliyi37
官方 DeepSeek Harness 的交互式终端 UI 插件:自研 ANSI 极简交互渲染、流式 Markdown/工具卡、16+ 主题、slash 命令与选择器、输入历史与本地偏好持久化、LSP 诊断、memory记忆,很丝滑的开发体验。
★ 287
↓ 462/wk
Apache-2.0
TypeScript
Sep 30, 2026
dsh plugin --profile terminal add @huiliyi37/dsh-tianshu-tuiby Hilbert-beinghappy
面向 DeepSeek Harness 的 Claude Code 风格终端界面,支持 Windows、macOS 与 Linux,兼容透明终端、VS Code 主题和自定义配色。
★ 197
↓ 108/wk
MIT
TypeScript
Oct 1, 2026
dsh plugin --profile web add seekttyby T-Auto
deepseek-harness Plugin Access and Implementation Standards / deepseek-harness交互生态插件规范与实施标准
★ 83
MIT
JavaScript
Oct 10, 2026