dsh-image-import
Manifest validAdd DSH image format type
dsh-image-import
给 DeepSeek Harness 的输入框加更多图片格式:BMP / TIFF / TGA / PCX / Netpbm / ICO / AVIF / SVG / HEIC / JPEG 2000 / PSD 等,拖放、粘贴、点按钮选文件三条路都能用。
它解决的问题
Harness 的附件通道只认四种格式。浏览器侧的白名单在 dsh-client-ui-conversation 里是硬编码的:
function imageMediaType(value) {
if (value === 'image/png' || value === 'image/jpeg' || value === 'image/webp' || value === 'image/gif') return value
throw new UnsupportedImageMediaTypeError(value)
}
所以拖进一个 .tif 只会得到一条「不支持的图片格式」提示;而且浏览器端没有文件选择器,只能粘贴或拖放。
这个插件不改宿主代码,而是在它前面加一道闸:在 DOM 捕获阶段拦下白名单外的图片,自己解成像素、重编成 PNG/JPEG,再合成一次拖放事件交回原生通道。对 Harness 来说,收到的始终是它本来就认识的文件。
支持的格式
| 格式 | 解码方式 |
|---|---|
| TIFF(未压缩 / LZW / PackBits / Deflate,1–16 位,灰度 / 调色板 / RGB / RGBA,含 Predictor 2) | 插件自带解码器 |
| TGA(未压缩 / RLE,8/15/16/24/32 位,调色板与灰度) | 插件自带解码器 |
| PCX(8 位 1/3/4 平面、1 位多平面) | 插件自带解码器 |
| Netpbm(P1–P6,ASCII 与二进制) | 插件自带解码器 |
| BMP / ICO / AVIF / SVG / JPEG 2000 | 浏览器 createImageBitmap / <img> |
| HEIC / HEIF / PSD / RAW | 取决于当前浏览器是否内置解码器;解不了会明确提示 |
输出统一是 PNG;无 alpha 且体积超过 4 MB 时自动改用 JPEG(质量 0.92)。单边超过 4096 px 会等比缩小,避免撞上宿主的像素上限。
安装
从 GitHub 安装(推荐):
dsh plugin --profile <profile> add github:lindingkao/dsh-image-import
从本地目录安装(开发用):
dsh plugin --profile <profile> add /path/to/dsh-image-import
也可以在 Harness 的插件管理器里从本目录安装(install_bundle,目标指向本目录)。
插件只改了浏览器侧,所以装完后刷新页面生效。
用法
- 拖放:把图片直接拖进输入框。
- 粘贴:在支持粘贴文件的系统里
Ctrl+V。 - 点按钮:输入框左下角工具条里多出来的图片按钮,可以一次选多张。
转换完成后底部会提示「已转换 N 张图片为 PNG」。
原理与实现要点
- 捕获阶段拦截:
dsh-client-ui-attachment的 drop 监听器挂在document的冒泡阶段,插件挂在捕获阶段,一定是先手。 - 重派而非注入:
new DataTransfer()装入转码后的File,new DragEvent('drop', { dataTransfer })派给[data-composer-card]。不走内部 API,因为 composer 的addImages只注入到conversation.composer.bar这一层,子座位拿不到。 - 防自触发:重派的事件带
__dshImageImportRerouted标记,监听器看到就放行,不会二次转换。 - 零构建依赖:
client.js由tools/build.mjs把src/codec.js与src/bridge.js去掉模块语法后内联生成——Harness 的 web bundle 是普通脚本,不能出现import/export。
开发
npm run build # src/ → client.js
npm test # 解码器回归 + 桥接端到端
npm run fixtures # 用 Pillow 重新生成测试样本(需要 python + pillow)
test/codec.test.mjs 逐像素比对 Pillow 解出的 RGBA;test/bridge.test.mjs 用一套极简假 DOM 跑「拦截 → 转码 → 重派」的完整控制流,包括防死循环与混合批次透传。
已知限制
- 插件工作在浏览器里,所以能用哪些格式最终受浏览器解码能力约束;TIFF/TGA/PCX/Netpbm 由插件自己解,不依赖浏览器。
- 一次最多转换 8 张。
- 转换是有损的边界:输出是 PNG(无损)或 JPEG(有损)。若原图是 CMYK TIFF,颜色会按插件内的 RGB 近似处理。
许可
MIT
Comments
Loading…
Similar plugins
by chuling-lingling
再dsh里面可以使用图片api
★ 0
MIT
JavaScript
Sep 11, 2026
dsh plugin --profile web add dsh-plugin-use-imagesby uckkk
图片处理:读取尺寸/格式、缩放与格式转换(内置 ffmpeg)
★ 0
MIT
JavaScript
Aug 19, 2026
dsh plugin --profile web add dsh-imageby uckkk
摄影基础参考
★ 0
MIT
JavaScript
Aug 19, 2026
dsh plugin --profile web add dsh-photographyby uckkk
图表类型选择参考
★ 0
MIT
JavaScript
Aug 19, 2026
dsh plugin --profile web add dsh-data-visualizationby Pasumao
DSH 图片插件:图片选择卡 + 回复内嵌图片 + 盲模型收图。Image tools for DeepSeek Harness (dsh): image choice cards, inline reply images, blind-model image intake.
★ 0
MIT
JavaScript
Oct 19, 2026
dsh plugin --profile web add dsh-plugin-image-toolsby dong2007-png
DSH plugin: generate images via a New API relay (tools: generate_image, list_image_models)
★ 0
MIT
JavaScript
Oct 1, 2026
dsh plugin --profile web add dsh-imagegen