收图去重、视觉打标,按含义挑图并拦截脏梗
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add JackZo400/dsh-sticker-library该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 21 处,展示前 20 条)
- 读取密钥环境变量index.js:37
apiKey: process.env.STICKER_VISION_KEY || process.env.OPENAI_API_KEY || '', - 执行外部命令来自配置/变量index.js:79
const out = execFileSync(bin, [...pre, file, prompt], { timeout: config.timeoutMs, maxBuffer: 1 << 20 }) - 读取本地文件index.js:87
const buf = readFileSync(file) - 发起网络请求index.js:105
const res = await fetch(`${String(baseUrl).replace(/ $/, '')}/chat/completions`, { - 读取本地文件index.js:249
.filter((p) => p && existsSync(p) && statSync(p).isFile()) - 读取本地文件index.js:249
.filter((p) => p && existsSync(p) && statSync(p).isFile()) - 读取本地文件index.js:340
if (shelf.dir === join(process.cwd(), '.stickers') && !existsSync(shelf.dir)) { - 写入本地文件src/shelf.js:90
mkdirSync(dir, { recursive: true }) - 读取本地文件src/shelf.js:100
const j = JSON.parse(readFileSync(indexFile, 'utf8')) - 写入本地文件src/shelf.js:114
writeFileSync(tmp, JSON.stringify(cache, null, 0)) - 写入本地文件src/shelf.js:115
renameSync(tmp, indexFile) - 读取本地文件src/shelf.js:134
readFileSync(blockedFile, 'utf8') - 写入本地文件src/shelf.js:150
appendFileSync(blockedFile, h + (why ? ' # ' + String(why).replace(/ +/g, ' ').slice(0, 80) : '') + '\n') - 写入本地文件src/shelf.js:232
writeFileSync(join(dir, name), buf) - 读取本地文件src/shelf.js:282
const buf = raw && raw.buf ? raw.buf : (filePath ? readFileSync(filePath) : null) - 写入本地文件src/shelf.js:312
writeFileSync(join(dir, name), buf) - 读取本地文件src/shelf.js:359
if (!existsSync(file)) { - 读取本地文件src/shelf.js:518
if (existsSync(src)) unlinkSync(src) - 删除本地文件src/shelf.js:518
if (existsSync(src)) unlinkSync(src) - 读取本地文件src/shelf.js:543
if (existsSync(from)) {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 收图去重
- 视觉打标
- 按含义挑图
dsh 插件:聊天表情包库——收图去重、视觉打标、按含义挑图,脏话与烂梗在入库那一刻拦掉 · 给 dsh 用的表情包库:去重、视觉打标、按含义挑图,不安全的图在入库时直接拒掉。
README
由 DeepSeek 最新模型翻译生成dsh-sticker-library
给 DeepSeek Harness(dsh)的聊天表情包库:收图去重、视觉模型自己打标、按含义挑图,附两条安全线。
它不是「把图片存进一个文件夹」——那种事 mkdir 就够了。它管的是让一个 Agent 真的会用表情包这件事里最容易做错的四步。
同类里更成熟的选择:yyh-001/dsh-meme 和 william-jin-cmu/dsh-stickers 都比这份成型得早,要装可以先看它们。
我们这份留着的理由:去重入库 + 视觉打标 + 两条安全线——脏和烂在入库那一刻就拦掉,不指望下游的模型每次都记得。
它是我们自己群里在用的那一套,顺手放出来。
为什么需要它
为什么要单独做一个。
1. 什么算表情包。
拿 summary === '[图片]' 之类的启发式去认,会把群友发的真人照片、截图、表情包混成一锅收进库。只认协议明确标出来的贴图(OneBot 的 emoji_id / sub_type=1 那类),其余一律不进。
2. 怎么算「懂」这张图。
固定标签表是最省事也最没用的做法:我们试过 40 个固定词,40 多张图被压成「可爱 / 卖萌 / 无语」三类,挑图基本等于随机。让视觉模型自己写三行——画的是什么 / 什么场合发 / 关键词——它才真的能挑。图上的字要求照抄,因为表情包一半的含义就在那行字里。
展开完整文档(README 剩余 1 节)
dsh-sticker-library
给 DeepSeek Harness(dsh)的聊天表情包库:收图去重、视觉模型自己打标、按含义挑图,附两条安全线。
它不是「把图片存进一个文件夹」——那种事 mkdir 就够了。它管的是让一个 Agent 真的会用表情包这件事里最容易做错的四步。
同类里更成熟的选择:yyh-001/dsh-meme 和 william-jin-cmu/dsh-stickers 都比这份成型得早,要装可以先看它们。
我们这份留着的理由:去重入库 + 视觉打标 + 两条安全线——脏和烂在入库那一刻就拦掉,不指望下游的模型每次都记得。
它是我们自己群里在用的那一套,顺手放出来。
为什么需要它
为什么要单独做一个。
1. 什么算表情包。
拿 summary === '[图片]' 之类的启发式去认,会把群友发的真人照片、截图、表情包混成一锅收进库。只认协议明确标出来的贴图(OneBot 的 emoji_id / sub_type=1 那类),其余一律不进。
2. 怎么算「懂」这张图。
固定标签表是最省事也最没用的做法:我们试过 40 个固定词,40 多张图被压成「可爱 / 卖萌 / 无语」三类,挑图基本等于随机。让视觉模型自己写三行——画的是什么 / 什么场合发 / 关键词——它才真的能挑。图上的字要求照抄,因为表情包一半的含义就在那行字里。
3. 删了必须真删干净。
只把索引里的条目删掉没有用:去重看的是内容哈希,同一张图再被发一次,会被原样收回来。所以删除一定是「删文件 + 内容哈希进黑名单」。
4. 两条安全线。
脏(脏话 / 性暗示 / 下流)和 烂(低质烂梗素材)。这两类在入库那一刻就拦掉,不指望下游的模型每次都记得别发——它会忘,而且它不懂那是什么意思。
安装
npm i dsh-sticker-library
或者直接 clone 到你的插件目录,然后在 bundle patch 里 insert(见 cordis.patch.yml)
cordis.patch.yml 里那份示例配置可以直接抄。
配置(打标那一路)
打标需要一个「看得见」的模型,两种接法,选一个:
A. HTTP(任何 OpenAI 兼容的 /chat/completions,要支持 image_url 的 data: base64)
config:
vision:
baseUrl: https://api.openai.com/v1
apiKey: '' # 建议用环境变量 STICKER_VISION_KEY model: gpt-4o-mini # DeepSeek 官方视觉模型 / qwen-vl 都行
B. 一条命令(本地跑视觉模型,或者复用你已有的脚本):
config:
describeCommand: 'node /path/to/describe.js' # 参数: ,结果打到 stdout
两个都不配也能用:库照收、清单照出,只是挑图的准头差一截(清单里没有「画的是什么」)。
提示:大图直接 base64 发过去很费 token。我们在生产里先把它压到长边 768 再发——那步用 Pillow 一行就能做,这里没有替你做,因为不想为了省几厘钱给你绑一个 Python 依赖。
用法(给 Agent 的工具)
| 工具 | 干什么 |
| sticker_catalog | 列清单:#3 · 一只橘猫趴在键盘上 · 别人发疯时围观 · 猫/围观/无语 |
| sticker_pick | 挑一张,返回本地路径。给编号(#12)或关键词(无语)都行 |
| sticker_save | 把本地图片收进库(通道把贴图下载好之后喂进来) |
| sticker_tag | 给还没打标的打标(收完新图调一次) |
| sticker_forget | 删一张:真删文件 + 哈希进黑名单 |
sticker_pick 挑不到时会明说挑不到,不会硬塞一张不相干的——这个细节比看起来重要:一个「随便给你一张」的挑图器,用两次就没人敢让它发图了。
用法(给别的插件用的服务)
const shelf = ctx.stickerShelf
shelf.catalog(40) // 清单文本
shelf.resolve('无语') // { id, file, path, desc, ... } | null
shelf.saveFiles(paths, { nick, uid }) // 协议无关的入库口
shelf.stats()
核心逻辑(src/shelf.js)不依赖 dsh,也不依赖任何 IM 协议,可以单独用:
import { createShelf } from 'dsh-sticker-library/shelf'
const shelf = createShelf({
dir: './stickers',
describe: async (file, prompt) => myVisionModel(file, prompt), // 必填:给视觉模型看
})
await shelf.saveFiles(['./a.png', './b.gif'], { nick: '阿猫' }) await shelf.tagPending(10)
console.log(shelf.catalog(20))
console.log(shelf.resolve('无语'))
测试
node test/selftest.mjs
不联网、不调模型、不依赖任何私人目录:视觉模型和下载都是假的,测的是解析和安全线(去重、黑名单、大小闸、烂梗拦截、成人图三条路全堵死、协议无关入库口……)。84 项。
已知局限(不做什么)
- 不做发送。挑出来给你路径,怎么发是你的事——发出去的那一刻要过谁的审核,也该由你决定。
- 不替你决定「什么算脏」。提示词里的那两条线是可以改的(prompt 配置),改完记得 TAG_VER 一起升,否则老图不会重标。
- 不做分布式/并发写。一个目录一个架子。
License
MIT
→ Full English README: README.en.md预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
JackZo400/dsh-sticker-library
收图去重、视觉打标,按含义挑图并拦截脏梗
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,332已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,153已汉化DSH
71.8
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,244已汉化DSH
71.6
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 92,046已汉化DSH
71.1
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,480已汉化DSH
71