dsh-pet
PC2005-cloud/dsh-petDSH Web UI 桌面宠物:25 个透明动画、屏幕漫游、点击反应与拖拽,附可复现的素材生成链。
聊天表情包:纯文本斗图、情绪主动发图、像 QQ/微信 一样发图、AI 自动学图、自定义表情包。
中文 · English 预览表情包 · 图库市场 · 反馈问题 · 交流反馈群
在 DSH 中打开 插件 → 添加插件,输入 dsh-meme 并安装。
也可以安装到指定 profile:
dsh plugin --profile web add dsh-meme需要 Node.js ≥ 22.13.0。旧包名 dsh-expression 已弃用,内部插件 ID 保留兼容。
想做什么 · 怎么操作 自己发表情 · 点输入框旁的 😊,选图发送;支持搜索、多选筛选和悬停预览 让 AI 发图 · 说「发个开心的表情」或「找一张猫猫比心」 收藏一张新图 · 上传图片,再说「把这张图入库」;自动识图需要支持图片输入的模型 收藏动图 · 上传 GIF 直接入库;自动识图时会按时间抽帧,让 AI 看清动作而不是只看第一帧 查看大图 · 点击聊天里的表情;滚轮缩放,双击复位,Esc 或点背景关闭
对话效果:你发一张,AI 接着回一张。
打开 设置 → 表情包:
默认扫描 ~/.dsh/meme-packs,设置保存在 ~/.dsh/dsh-expression.json,升级插件会保留。更多图库可在「发现」安装,也可导入别人分享的 ZIP。
「发送方式」只控制 AI 怎么发图,不影响前端把 [表情: 描述] 配成图片:自动(默认)按渠道来,Web 聊天写标记、IM 聊天发原生图片;纯文字只让 AI 用文字接梗,不发图片;图片要求 AI 每次挑好图都真的发出去。保存后下一条消息生效。
在市场里点「更新」时,宿主会用 pnpm 把 node_modules/dsh-meme 整个目录改名替换。Windows 上只要目录里还有打开的文件,rename 就会 `EPERM`,pnpm 只能报 exit 1;市场界面往往只留一行 exit 1,完整报错被截断,看起来像「没报错但失败了」。失败后目录可能只装了一半,再进市场会校验失败(例如提示 ENOENT ... cordis.patch.yml),插件列表里也找不到它。
0.1.59 起插件侧已修(issue #43):以前的版本在启动时会一直打开内置图库的 memes/dafeiyu-001/index.db(管理面板还有一条常驻可写连接),这个文件就在插件包目录里 → 更新时包目录被占住,pnpm 改名必然失败(ERR_PNPM_EPERM ... rename '..._tmp_...' -> '...dsh-meme')。现在图库索引只在启动时读一次进内存,上传/学图时临时打开、写完立刻关闭,内置图库激活时插件不再长期占用包内任何文件。这也解释了以前「有时成功有时失败」:激活的是 ~/.dsh/meme-packs 里的用户图库时不占包目录,激活内置图库时才会卡住更新。
在 0.1.59 之前更新失败的用户,仍按下面三步处理:
~/.dsh/profiles/;桌面版是 desktop,Web / CLI 常见 web):cd ~/.dsh/profiles/web
pnpm add dsh-meme@latest然后重新打开 DSH,在「设置 → 表情包」确认插件已启用。
~/.dsh(dsh-expression.json 等),更新或重装不会丢;仍不行可以先卸载再重装。升到 0.1.59 之后仍更新失败,说明占用来自插件之外(宿主进程、杀毒软件或其它程序):把 profile 目录、市场里的 exit 1 上下文和是否有 ERR_PNPM_EPERM 一并反馈给 DSH 插件市场;插件这边已确认不再占用包内文件,有一个回归测试专门模拟 pnpm 改名(test/update-lock.test.mjs)。
图库目录和预览图托管在 GitHub 上,国内直连 raw.githubusercontent.com / cdn.jsdelivr.net 经常超时,发现页于是显示「图库目录暂不可用(检查网络或稍后重试)」。插件默认走多镜像,通常无需配置:
ghfast.top、gh-proxy.com、ghproxy.net、cdn.jsdmirror.com、fastly.jsdelivr.net 等镜像,取最先成功的;封面和预览图逐个候选回退,并记住能用的镜像。~/.dsh/dsh-meme-catalog-cache.json,网络暂时不通时先用它显示,并提示「当前使用本地缓存」。拉不到时按顺序排查:
catalog.json 地址并保存,或切回 自动。也可以直接改 ~/.dsh/dsh-expression.json 的 "remoteDirUrl"(""/auto = 自动、official = 官方直连、mirror = 国内镜像、或自定义 URL),即时生效。自查镜像连通性(任一返回 200 即可):
curl -I https://ghfast.top/https://raw.githubusercontent.com/yyh-001/dsh-meme-packs/main/catalog.json
curl -o /dev/null -w '%{http_code}\n' https://cdn.jsdmirror.com/gh/yyh-001/dsh-meme-packs@main/catalog.json
curl -o /dev/null -w '%{http_code}\n' https://gh-proxy.com/https://raw.githubusercontent.com/yyh-001/dsh-meme-packs/main/catalog.json请使用插件导出的 ZIP。GitHub 的「Download ZIP」是仓库源码压缩包,不能替代图库分享包。导出完成后仍需在 GitHub 提交,审核通过才会收录。
工具 · 用法 send_meme · tag 按情绪随机抽图,query 按描述、关键词或文件名搜索;范围为所有启用的图库 learn_meme · 默认收录最近一张用户图片,也可指定 attachmentId 或 imageUrl
send_meme tag=happy
send_meme query="猫 比心"
learn_meme情绪桶:happy / angry / sad / shy / confused / daily。模型应把候选中的 [表情: 描述] 原样写进回复;前端只在聊天内容中配图。没有合适的候选时,换关键词或用文字回复。
动图读取:learn_meme 和上传弹窗的 AI 识图支持 GIF 动图——先把动图按时间轴均匀采样成几帧、拼成一张带帧序说明的胶片条再送模型,所以 caption 能描述「猫疯狂摇头」这类动作,而不是只看见第一帧。原图照旧入库,聊天里仍然会动。动图 WebP / APNG 目前只能读帧数、时长等元数据(仍按第一帧识别),提示词里会注明它是动图。解码是纯 JS 实现,不引入第三方依赖。
通过 dsh-im 接入 QQ / 微信 / 飞书 / 企业微信等 IM 时,表情包会以该聊天的原生图片消息发出:插件按会话来源识别 IM 渠道后,send_meme 的候选会额外带绝对路径,模型随后调用 dsh-im 的 dsh_im_return_file 把图交给渠道;IM 聊天不渲染 [表情: 描述],所以不会再写标记。这条投递规则随主动斗图提示词一起自动注入——不需要先跟模型说明「可以在 QQ/微信里发表情包」。Web 聊天保持原来的 [表情: 描述] 配图方式,两种会话可以同时存在。
自建图库目录或市场源见 远程图库规范。通过 dsh-companion 也可接入 QQ 发图。
插件 HTTP 接口仅支持本机回环地址(localhost / 127.0.0.1 / [::1]),通过局域网地址或自定义域名访问会被拒绝。
代码采用 MIT 许可;图库图片的来源与使用许可请分别查看各图库说明。