dsh-doubaoimage-cgf
Verifieddsh-doubaoimage-cgf · v1.4.3 · MIT · Web UI
豆包 Seedream 生图插件:调用火山方舟图像生成 API,把图片保存到工作区并显示在会话中
Install
dsh plugin add dsh-doubaoimage-cgf Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Creators
Readme
dsh-doubaoimage-cgf
DeepSeek Harness 的豆包生图插件:调用火山方舟(Volcengine Ark)Seedream 图像生成 API,把生成的图片保存到会话工作区,并在会话里直接显示。
- 模型工具
doubao_image:提示词 → 图片,支持参考图(图生图 / 改图)、尺寸档位、模型切换、水印开关。 - 输入框工具栏里的入口:输入框工具行左侧(和附件、权限等控件同一行)多一个「豆包生图」按钮,点开是居中浮层,不占聊天布局;填提示词、选尺寸、点「生成」直接出图。
- 专属卡片:工具结果用宿主主题渲染成卡片,图片用宿主授权的 loader 渲染,并显示模型、尺寸、像素和保存路径。
- 可视化设置:「设置 → 插件 → 豆包生图」里可改 API Key、模型、尺寸、水印、保存目录、超时,不用手改 YAML。
- 原生图片块:工具结果里带有原生 image 内容块,
deepseek-flash这类支持图片输入的模型可以直接"看到"生成的图并继续修改。
界面与设置
- 入口在输入框工具行左侧(
conversation.input.left),浮层挂在宿主全屏浮层(shell.overlay)里,position: fixed居中,不改变聊天区与输入框布局;结果图限制在52vh高度内等比缩放,面板自身可滚动。 - 浮层里只有提示词、尺寸档位(1K/1.5K/2K)和「生成」;模型不在这里填,读取插件设置里的默认模型(标题栏会显示当前模型)。
- 面板的请求走本机路由
/api/doubao-image-v2/settings与/api/doubao-image-v2/generate,只接受回环地址的请求。 - 设置页注册在两个标准位置,渲染同一个表单:设置 → 插件 → 「豆包生图」标签页(
settings.plugins.tab),以及插件管理页 →dsh-doubaoimage-cgf→ 组件行doubao-image→ 配置(plugins.row.config,键dsh-doubaoimage-cgf#doubao-image)。 - 保存走
/api/doubao-image-v2/config,由 Host 的configEditor.edit()写回 profile 的cordis.patch.yml,插件随即重载;API Key 输入框留空表示不修改。
安装
单机开发时可以直接装目录(会以软链接方式挂进 profile):
# 在 Harness 会话里用 plugin_manager 安装本地目录:
# action: install_bundle
# target: <本目录的绝对路径>
安装后新会话即可使用;浏览器端如果是首次加载,刷新页面后卡片生效。
给他人使用
从 npm 安装(推荐)
包名:dsh-doubaoimage-cgf
- 打开 DSH,左侧栏 「插件」 → 添加插件;
- 填入
dsh-doubaoimage-cgf,安装并 启用; - 点输入框左侧的「生图」按钮——首次使用浮层里会直接出现 API Key 输入框,粘贴自己的 Key 点「保存 Key」即可;也可以到 设置 → 插件 → 豆包生图 里填。Key 在 火山方舟控制台 的「API Key 管理」创建;
- 确认账号已开通图片模型(默认
doubao-seedream-5-0-flash-260915),未开通时接口会返回ModelNotOpen并在面板里提示去开通。
离线 / 内网:用 tgz
pnpm pack 会生成 dsh-doubaoimage-cgf-<版本>.tgz。把 tgz 发给对方,在 插件 → 添加插件 里填 tgz 的绝对路径,其余步骤同上。
要点:
- 插件本身不含任何 Key,每个 profile 的 Key、模型、保存目录都是各自独立的;
- 安装时会从 npm 拉取依赖
@deepseek-ai/schemastery(已在package.json声明),离线环境需要先配好源; - API Key 保存在对方自己 profile 的
cordis.patch.yml里,不会随包分发; - 如果对方也要 Pro 画质,在设置里把模型换成
doubao-seedream-5-0-pro-260628(需其账号开通)。
配置 API Key
插件按以下顺序取 Key:
- 插件配置里的
apiKey(明文写在cordis.patch.yml的 config 中); ctx.credentials中与apiKeyEnv同名的凭据;- 与
apiKeyEnv同名的环境变量(默认ARK_API_KEY)。
推荐第 3 种。Windows PowerShell(当前用户,重启 Harness 后生效):
[Environment]::SetEnvironmentVariable('ARK_API_KEY', '<你的 API Key>', 'User')
设置后完全退出并重新打开 DeepSeek Harness(不是只关窗口),新会话里模型就能直接调用 doubao_image。
API Key 在火山方舟控制台的「API Key 管理」里创建;同时必须在「开通管理」里开通一个图片生成模型(默认 doubao-seedream-5-0-flash-260915)。未开通时接口会返回 ModelNotOpen,插件会把这句话原样带回并提示去开通。
验证
装好并设置 Key、开通模型后,在会话里说「用豆包画一只在窗台上晒太阳的橘猫」,模型会调用 doubao_image:
- 工具卡片显示生成的图(首次安装后刷新一次页面,让浏览器加载插件的前端半边);
- 图片保存在
<工作区>/doubao-images/doubao-<时间戳>-<随机>.png; - 失败时错误信息会说明是缺 Key、模型未开通、HTTP 状态码还是响应里没有图片。
配置项(cordis.patch.yml)
- id: doubao-image
name: dsh-doubaoimage-cgf
config:
apiKeyEnv: ARK_API_KEY
model: doubao-seedream-5-0-flash-260915
size: "2K"
watermark: false
saveDir: doubao-images
timeoutMs: 180000
| 键 | 默认值 | 说明 |
|---|---|---|
apiKey |
空 | 直接写在这里的 API Key;留空则走凭据/环境变量 |
apiKeyEnv |
ARK_API_KEY |
保存 Key 的环境变量名,也是凭据服务的键 |
baseUrl |
https://ark.cn-beijing.volces.com/api/v3 |
网关地址(国际站 BytePlus 换成对应域名) |
model |
doubao-seedream-5-0-flash-260915 |
默认模型(Seedream 5.0 Flash),可换成账号已开通的其他 Seedream 模型 |
size |
2K |
1K / 1.5K / 2K / 3K 或 宽x高;3K 是否可用取决于模型,Flash / Pro 上限 4,624,220 像素 |
watermark |
false |
是否加水印 |
saveDir |
doubao-images |
保存目录:相对会话工作区,或绝对路径(如 D:\pics\doubao) |
timeoutMs |
180000 |
单次请求超时 |
工具参数
| 参数 | 必填 | 说明 |
|---|---|---|
prompt |
是 | 画面描述 |
size |
否 | 覆盖默认尺寸(含 3K、宽x高) |
model |
否 | 覆盖默认模型 |
watermark |
否 | 覆盖默认水印设置 |
reference_image |
否 | 工作区内的本地图片路径或 http(s) 链接,用于图生图/改图 |
实现说明
- 请求:
POST {baseUrl}/images/generations,Authorization: Bearer <key>,response_format: "url"、sequential_image_generation: "disabled"。 - 响应:优先读
data[0].b64_json,否则下载data[0].url;用文件魔数确认 PNG/JPEG/WebP/GIF。 - 落盘:写入
<cwd>/<saveDir>/doubao-<时间戳>-<随机>.png,路径限制在工作区内。 - 展示:通过
ctx.attachments.saveImage生成持久附件引用,工具结果返回文本信封 + 原生 image 块;卡片注册tool.call.toolview的doubao_image键,并用宿主传给卡片的loadImage(会话授权 loader)渲染图片——tool.call.images子 slot 已被自带read_image卡片声明,其它卡片不能重复声明,renderSlot会抛not declared by this entry's children。 - 失败:缺少 Key、模型未开通、HTTP 非 2xx、响应无图片、超时都会给出可操作的错误信息。
已知限制
- 一次调用只生成一张图;组图(
sequential_image_generation多图)未实现。 - 参考图只支持本地工作区文件或公网 http(s) 链接。
- 图片会进入会话历史,长会话里会持续占用图片 token;可用宿主自带的图片卸载/压缩策略处理。
- 卡片文案目前为中文写死,未接入宿主 locale。
- 首次安装(或改客户端代码后)需要刷新一次页面,浏览器才会加载前端半边;服务端 HMR 有时能直接热更,但不保证。