前言¶
DSH 的核心理念是「一切皆插件」。在 attachments 服务入口 saveImages 中,若上传图片触发了原有准入限制(长边 >2000px、单图 >3.5MB 或像素 >4000 万),系统会直接拒绝。这导致用户上传手机原图时体验极差,经常因合规性被拦截。
本插件在入库前拦截这些超限图片,利用 sharp 进行自动降级,确保入库后图片恒满足准入限制,模型请求、vision-bridge 和历史导出均能拿到合规文件。
插件定位¶
- 名称:dsh-attachment-downscale
- 一句话:DSH 插件:图片附件超限自动降级(长边 ≤2000px / 单图 ≤3.5MB / 像素 ≤4000 万)
- 维护者:zoumutou
- 类别:工作流
- 许可证:MIT
核心功能¶
插件在 saveImages 入口对图片进行处理,具备以下能力:
- 超尺寸自动等比缩放:优先将长边缩放至 2000px 以内。
- 重编码压缩:若缩放后仍超限,对 jpeg/webp 格式进行降质处理(质量阶梯)。
- 格式兜底:若重编码失败,自动转为 webp 格式。
- 跳过动图:多帧动图(GIF/WebP)直接跳过,避免破坏动画效果。
- 错误容错:处理失败时,直通原准入逻辑(维持原拒绝行为),绝不吞掉错误。
- 结果合规:入库后图片恒满足准入限制。
安装与启用¶
插件依赖 @deepseek-ai/cordis 和 sharp。
本地开发构建:
npm run build
装入 web profile(热生效,无需重启):
dev_install_package /Users/zoumutou/coded/dsh-attachment-downscale web
生产环境安装:
dsh plugin --profile web add github:zoumutou/dsh-attachment-downscale
配置说明¶
插件支持通过 config 字段调整行为:
- insert:
- name: dsh-attachment-downscale
config:
enabled: true # 关闭后恢复原拒绝行为
quality: 82 # 重编码质量(jpeg/webp)
# 以下缺省值跟随 attachments 服务自身的准入限制:
# maxImageDimension: 2000
# maxImageBytes: 3670016
# maxImagePixels: 40000000
生态与市场¶
- 依赖环境:运行于 DSH 进程内,需确保环境包含
@deepseek-ai/cordis和sharp。 - 市场收录:npm 包需包含
dsh-plugin关键词,GitHub 仓库需打dsh-plugin话题标签,社区市场(dsh-suite 或独立市场)会自动收录,无需手动提 PR。 - 包发布:执行
npm pack可生成.tgz文件。
结尾¶
该插件通过在 saveImages 入口进行预处理,解决了严格准入规则与用户上传行为之间的冲突,保证了下游系统处理的图片始终合规。完整目录与源码可参考下方链接。