dsh-image-edge-cap:按最长边限制发往指定模型的图片尺寸

前言

在 DeepSeek Harness(DSH)里带图对话时,常见两类限制:一类是总像素预算(宽 × 高),另一类是单张图某一边不能超过固定像素。Anthropic Messages API 在「一次请求里超过 20 张图」时,若任一张图任一边超过 2000 px,会直接返回 400。DSH 自带的 requestImagePixelBudget 只压总像素,长条截图、竖版全页截图往往在像素预算内仍触边长上限;会话每轮会重发整段历史,一旦历史里图片超过 20 张且有一张超边,后续每一轮乃至 /compact 都可能卡死。

下面介绍社区插件 dsh-image-edge-cap(维护者 mrbeandev),在「模型推理」场景下,对你选定的 provider 或 model 发出的请求图片做最长边封顶,默认 2000 px,并自带 Settings → Image size 配置页。

这是什么

dsh-image-edge-cap 是 DSH 社区插件:对所选 provider / model 发往模型的图片,在保持宽高比的前提下缩小最长边(默认 2000 px)。只改模型请求里送出的副本,不改动本地附件存储与会话日志;未选中的 provider / model 请求与未装插件时一致。

DSH 社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;安装与运行方式遵循 DSH「一切皆插件」的用法,本文事实以仓库 README 为准。

支持的 DSH 与 Node 版本

安装前用 dsh --version 核对主机版本。

DSH 支持范围:0.2.0-rc.1 起至(不含)0.3.0。

DSH 版本 说明
0.2.0-rc.1、0.2.0-rc.2 README 标注已测试
0.2.1-alpha.1 集成测试通过,加载时可能有 untested 警告
上述区间内其他版本 未测试,加载时警告
低于 0.2.0-rc.1(0.1.x) 不支持:无 route-chosen 请求图目标
0.3.0 及更新(含预发布) 默认拒绝加载,可用 allowUntestedHarness: true 覆盖

Node.js: ^22.19.0 或 >=24.0.0。

插件无运行时依赖,不依赖其他社区插件。版本不匹配时启动会明确报错且不会半加载;此时 Settings 里会提示 host 插件未运行。

核心功能

最长边封顶,而非总像素

缩小时保持宽高比。例如 README 中的对比:390×2475 的竖版截图在 1.15 MP 像素预算下可能不变,但 Anthropic 多图规则仍判超 2000 px;设为最长边 2000 后会变为 315×2000,会话可继续。

按 provider / model 粒度生效

每个已注册的 model provider 可单独设模式:

模式 效果
Off(默认) 该 provider 不做任何改动
All models 该 provider 下全部 model 封顶
Selected models 勾选列表中的 model 才封顶,同 provider 未选中的 model 不变

Max edge 可调 16–16384 px,默认 2000;点 Apply 后从下一次请求起生效(含恢复会话、子 agent、重试),无需重启 DSH。

只动请求路径上的读图

机制概要(README):

  1. 监听 llm/stream,按 provider / model 匹配规则;不匹配则原样透传。
  2. 匹配时在 AsyncLocalStorage 中带入 cap,覆盖 adapter 读图过程。
  3. 包装 attachments 服务的 readImageRequest,在 cap 作用域内降低目标尺寸;实际缩放与缓存仍由 attachment store 完成,插件不含图像处理代码。
  4. 不会放大图片,也不会取消 DSH 已有的像素或字节预算;已从请求中 offload 的图片不处理。

进程日志中每张被 cap 的图会记一条,例如:dsh-image-edge-cap: capped a request image 390×2475 → 315×2000 (max edge 2000)。

安装与启用

Web profile 从 npm 安装:

dsh plugin --profile web add dsh-image-edge-cap

当前工作告一段落后再停掉正在跑的 DSH Web 进程,重新启动(例如 dsh web --no-open --port 3080),刷新页面。打开 Settings → Image size,为需要的 provider / model 选择模式并设置 Max edge。

从本地目录安装(目录需保持不动,profile 会链接到该路径):

dsh plugin --profile web add "/absolute/path/to/dsh-image-edge-cap"

卸载:

dsh plugin --profile web remove dsh-image-edge-cap

也可把某个 provider 设为 Off,其下一次请求即恢复为未封顶行为。

典型用法

路由 provider 同时提供 Claude 与 GPT: 对该 provider 选 Selected models,只勾选 Claude 系列 model,Max edge 设为 2000;其余 model 仍送原尺寸图片。

规则保存在 profile patch(cordis.patch.yml)里该插件条目下,也可手改:

- id: dsh-image-edge-cap
  name: dsh-image-edge-cap
  config:
    providers:
      my-router:
        mode: selected          # off | all | selected
        models: [cc/claude-a, cc/claude-b]
        maxImageEdge: 2000

配置项(插件条目 config)中,providers 下每个 provider 含 mode、models(selected 时)、maxImageEdge 等字段,与 Settings 页一致。

适用场景与注意

适合谁: 经常用 Claude / Anthropic 等多图 vision 接口、会话历史图片多、且素材里常有超长边截图(尤其竖版全页)的 DSH Web 用户;需要在「总像素预算」之外单独遵守「最长边 2000 px」类限制时。

兼容性说明(README): 插件可逆地包装 attachment store 的一个方法,并非 DSH 官方扩展 API;版本门控会在内部 API 变化时拒绝加载而非静默出错。在 DSH 0.2 上,经 readImageRequest 准备请求图的 adapter(含 pi-ai 与 native DeepSeek adapter)会受影响;设为 Off 的 provider 不受影响。

安全与信任: 插件以当前 DSH 进程的权限运行,会介入发往模型的图片数据路径。安装前应阅读 源码 与 MIT 许可证,并确认 DSH、Node 版本在支持范围内。

结尾

dsh-image-edge-cap 在选定 provider / model 上对请求图片做最长边限制(默认 2000 px),配合独立 Image size 设置页,用来缓解 Anthropic 多图边长限制与 DSH 总像素预算之间的缝隙,避免长会话因一张超长边截图整体失败。

  • 目录页:https://www.skillhub.cn/plugins/mrbeandev/dsh-image-edge-cap
  • GitHub:https://github.com/mrbeandev/dsh-image-edge-cap
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜