
Github-CJX/dsh-tool-imagegen
dsh-tool-imagegen
dsh-tool-imagegen is a community DeepSeek Harness plugin. Read the repository README before installing.
Install
npx -y @deepseek-ai/dsh plugin --profile web add @local/dsh-tool-imagegenRestart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/dsh-tool-imagegen)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from Github-CJX/dsh-tool-imagegen, cleaned of badges and images.
dsh-tool-imagegen
DeepSeek Harness Desktop 对话内联生图插件 — 模型在对话中自动调用 generate_image 工具,图片直接内联显示在对话框里,无需外部面板、无需手动切换。
对接任意 OpenAI 兼容的 /images/generations 接口(默认 gpt-image-2),当前模型是纯文本输入也能正常使用(含上传参考图 + 图生图)。
图生图说明:带参考图的「图生图」请求走标准 OpenAI 兼容
/images/edits(multipart form-data),文生图走/images/generations(JSON)。对接网关时需确认上游两个接口都支持——只实现generations的上游可以用文生图,但图生图会失败。
特性
- 纯对话触发 — 模型听到「帮我画 / 生图 / 生成插画」等请求时自动调用
generate_image,参数(prompt / size / n)由模型自己组织 - 对话内联显示 — 生成的图片以卡片形式直接出现在对话流中;悬停提供 全屏查看 / 修改 / 下载 / 本地打开 四个操作:
- 全屏查看:应用内大图查看(Esc / 点击背景关闭)
- 本地打开:走系统默认图片查看器,无需先下载再找文件
- 修改:一键把这张图作为参考图,输入需求即可连续修改(图生图)
- 网络自动重试 — 上游网络错误 / 超时 / 5xx 网关故障自动重试(指数退避,最多 3 次);4xx 与参数错误不重试(重试无意义),重试耗尽后错误信息注明已重试次数
- 双模型兼容 — 通过自定义
generated-image/uploaded-image内容块展示图片,模型侧永远看不到图片块(contentHasImage只匹配image块):- 纯文本输入模型:不会触发
UNSUPPORTED_CONTENT,生成后可以继续正常对话 - 图像输入模型:同样正常工作,无需任何配置
- 纯文本输入模型:不会触发
- 上传参考图(纯文本模型专用通道) — 对话框上传按钮(仅文本模型会话显示):选择文件后不立即提交,先出现「已选图片」标记,等你输入消息后图文一并发送;模型收到信封里的图片路径,可基于它图生图
- 一键修改 / 连续修改 — 任何一张生成图都能点「修改」直接变成待发送参考图,输入需求发送后生成新图;对新图再点「修改」即可无限连续改。对两类模型同一机制
- 模型直接图生图(无需手动上传) — 每次生成的图片会自动在工作目录保存一份,信封把「参考图路径」告知模型;用户说「把这张图改成…」时模型直接用该路径调用
generate_image(image=路径),无需点「修改」重新上传。路径仅用于工具参数,模型被明确禁止在回复中展示 - 存储清理卡片 — 设置 → 插件 → 可配置 →「生图存储」:显示上传文件与附件对象占用,一键清理不被任何会话引用的孤儿文件(含已删除会话的历史图片)
- 设置页可配置 — 设置 → 插件 → 可配置 中的「生图插件」卡片:接口地址、API 密钥、模型名、默认尺寸(官方尺寸下拉)、默认张数,以及 6 个可选参数(画质/格式/背景/风格/审核/水印),每项 = 勾选框 + 可输入下拉:勾选才使用,未勾选不发送上游、模型也不可见(默认全不勾)。参数优先级:模型显式传参 > 设置页默认 > 留空用上游默认
- 零配置迁移 — 复用旧插件
@dickpy/dsh-imagegen的dsh-imagegen设置命名空间,已存在的apiUrl/apiKey自动继承 - 安全设计 —
- API 密钥只在宿主侧保存(settings.yaml),绝不进入浏览器,设置页不回显
- 设置桥、附件桥、本地打开桥、存储桥均为 loopback 围栏,仅本机浏览器可访问
- 附件桥按「会话事件里是否存在引用该附件的
generated-image块」授权,与平台自身的附件授权模型一致;本地打开桥复用同一套授权
快速开始
# 1. 把插件目录放到 DSH 插件目录
cp -r dsh-tool-imagegen C:/Users/CJX/.dsh/plugins/
# 2. 在 desktop profile 挂载(见 docs/installation.md 的完整步骤)
# package.json 添加依赖 + bundles,然后:
cd C:/Users/CJX/.dsh/profiles/desktop
pnpm install
# 3. 重启 DSH,在对话里说「生成一个猫咪的图片」
完整安装步骤见 docs/installation.md,问题排查见 docs/troubleshooting.md。
工作原理
用户: "帮我画一只戴帽子的橘猫"
│
▼
模型 ──调用 generate_image──▶ 插件宿主侧 execute()
│ │ 读取设置(apiUrl / apiKey / model)
│ ▼
│ OpenAI 兼容 /images/generations
│ │ 返回 b64 图片
│ ▼
│ ctx.attachments.saveImage() 存入本机附件库
│ │
│ ▼
│ render() 产出 { type: 'generated-image', attachment, prompt, ... }
│ │
▼ ▼
模型只看到随附的文本信封 客户端 keyed toolview 卡片
("已生成 1 张图片…") │
▼
<img src="/api/dsh-tool-imagegen/attachment?session=…&id=…">
附件桥做会话引用检查后返回图片字节 → 内联显示
图生图 / 修改链路(参考图来源有两种,处理完全一致):
来源 A:上传按钮选文件 → 暂存 → 输入消息一起发送
来源 B:生成图点「修改」→ 直接暂存为参考图 → 输入需求发送
│
▼
宿主上传桥:字节存入附件库 + 上传工作目录,向会话投递一条用户消息
[uploaded-image 块(模型不可见)+ 文字信封(含本机路径)]
│
▼
模型读到信封 → 调用 generate_image 且 image=<路径>
│
▼
引擎走 multipart POST /images/edits(model / prompt / image 文件)
│
▼
新图以 generated-image 块内联显示 —— 对新图再点「修改」→ 无限连续改
三个关键设计:
…
