UniLLM 图片生成 MCP
用一套统一接口生成与编辑图片,屏蔽各家协议差异。本 Skill 背后是一个 MCP Server。
支持 8 家厂商:字节豆包 Seedream(火山方舟)、阿里通义万相(DashScope)、智谱 CogView、硅基流动 SiliconFlow、MiniMax,以及海外 OpenAI 与 Stability AI,另有任意自定义 OpenAI 兼容端点。
> <skill-directory> 指本 Skill 所在目录,而非用户项目目录。
> MCP Server 源码位于 <skill-directory>/server/。
🖼️ 核心:尺寸与宽高比
图片生成的第一道门槛是尺寸。 不同厂商支持的尺寸集不同:豆包用 1024x1024,通义万相用 1024*1024(星号分隔),Stability 用 aspect_ratio 而非像素。本 MCP 把这些差异全部归一化到你这边 —— 你只需按统一习惯传参,MCP 负责翻译成上游能懂的形式。
三层尺寸要素
| 要素 | 参数 | 取值 | 作用 |
|---|---|---|---|
| 像素尺寸 | size |
1024x1024、1280x720 等 |
决定清晰度与画幅 |
| 宽高比 | 由 size 推导 |
1:1 / 16:9 / 9:16 / 4:3 / 3:4 / 3:2 / 2:3 / 21:9 |
决定画幅形状 |
| 图片数量 | count |
1~10(各厂商上限不同) | 一次出几张(批量) |
| 输出格式 | format |
png / jpeg / webp |
决定体积与透明通道 |
> 关键理解:size 同时决定清晰度与画幅。1024x1024 是方形,1280x720 是 16:9 横屏,720x1280 是 9:16 竖屏。
宽高比速查
| 比例 | 典型尺寸 | 用途 |
|---|---|---|
1:1 |
1024x1024 | 头像、商品主图、社媒方图 |
16:9 |
1280x720 / 1512x648 | 横版海报、Banner、封面、视频封面 |
9:16 |
720x1280 | 竖版海报、手机壁纸、抖音/小红书 |
4:3 |
1152x864 | 传统横版、PPT 配图 |
3:4 |
864x1152 | 传统竖版、人像 |
3:2 |
1248x832 | 摄影比例 |
2:3 |
832x1248 | 竖版摄影 |
21:9 |
1512x648 | 超宽 Banner |
> 用 size 传任意厂商支持的像素即可;不在支持列表内的尺寸会被规范化到最接近的合法值并明确提示。
参数规范化:不会静默改
| 你填的 | 会发生什么 |
|---|---|
size: "1024*1024"(星号) |
自动转成 1024x1024,通义万相再转回星号 |
count: 99 |
超出上限 → 收敛到该厂商 maxImages,并提示 |
size: "999x999"(非列表尺寸) |
取最接近的合法尺寸,并提示 |
format: "gif" |
不支持 → 直接拒绝,列出合法值 |
size: "0x0" |
非法 → 直接拒绝,不浪费一次生成 |
⏱️ 核心:两条调用链路
图片生成有两种后端形态,本 MCP 自动识别:
同步直出(豆包 / 智谱 / SiliconFlow / MiniMax / OpenAI / Stability)
image_generate(...) # 一次调用,直接拿到图片文件
异步任务(通义万相)
image_generate(...) # 内部自动「建任务 → 轮询 → 下载」,你无感
> 与视频不同,图片生成很快(数秒到数十秒),因此本 MCP 统一封装成阻塞式,默认最长等 3 分钟(可调)。你不需要手动轮询。
工具一览
| 工具名 | 用途 | 阻塞 |
|---|---|---|
image_generate |
图片生成(文生图),自动落盘 | ⏳ 是 |
image_edit |
图片编辑(图生图 / 参考图改图) | ⏳ 是 |
image_list_providers |
列出厂商与能力矩阵(尺寸、比例、上限) | — |
image_list_models |
列出厂商模型与完整规格 | — |
image_provider_status |
检查密钥配置(返回掩码) | — |
> 工具在 Agent 中的实际名称形如 mcp__plugin_unillm-image_unillm-image__image_generate,调用时用短名即可。
厂商能力矩阵
| provider id | 厂商 | 接口形态 | 模型示例 | 尺寸上限 | 批量上限 | 图生图 | 国内直连 |
|---|---|---|---|---|---|---|---|
doubao |
字节豆包 Seedream | OpenAI 兼容 | doubao-seedream-3-0-t2i-250415 |
1512x648 | 4 | ✅ | ✅ |
qwen |
阿里通义万相 | DashScope 异步 | wanx2.1-t2i-turbo |
1280*720 | 4 | ✅ | ✅ |
zhipu |
智谱 CogView | OpenAI 兼容 | cogview-4-250304 |
1440x720 | 1 | — | ✅ |
siliconflow |
硅基流动 | OpenAI 兼容 | Kwai-Kolors/Kolors、FLUX.1-schnell |
1280x720 | 4 | ✅ | ✅ |
minimax |
MiniMax | 自有协议 | image-01 |
1344x768 | 9 | — | ✅ |
openai |
OpenAI | OpenAI 兼容 | gpt-image-1、dall-e-3 |
1792x1024 | 10 | ✅ | ⚠️ 需代理 |
stability |
Stability AI | 自有 multipart | core、sd3.5-large |
1536x1024 | 1 | ✅ | ⚠️ 需代理 |
custom |
自定义端点 | OpenAI 兼容 | 自填 | 自填 | 4 | — | ✅ |
接口形态说明:本 MCP 内置 4 种适配器 ——
openai-images(/images/generations + /images/edits)、
dashscope-async(建任务 + 轮询 /tasks/{id})、
minimax-images(/image_generation,注意 base_resp.status_code)、
stability-image(/v2beta/stable-image/generate/{engine},multipart)。
When to Use
- 需要文生图:给一句 prompt,产出图片文件。
- 需要图生图 / 改图:给参考图 + 指令,产出新图。
- 需要批量出图:一次生成多张,挑选最佳。
- 需要在多家厂商间切换或对比:同一套参数,换
provider即可。 - 上游是视频生成本 Skill 的图生视频:先生成首帧图片,再交给视频 MCP。
When NOT to Use
- 需要视频:请用视频生成 MCP(
unillm-video)。 - 需要 LLM 对话 / 视觉理解:请用多模态 MCP(
unillm-multimodal)或文本 MCP(unillm-text)。 - 需要修图但无参考图能力:部分厂商(智谱、MiniMax)不支持编辑,请换支持
editModels的厂商。
参数说明
image_generate
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
prompt |
string | ✅ | 图片描述,越具体越好 |
provider |
string | — | 厂商 id,缺省 doubao |
model |
string | — | 模型名,缺省用厂商默认 |
size |
string | — | 像素尺寸,如 1024x1024;支持 * 分隔 |
count |
number | — | 生成张数,超上限自动收敛 |
format |
string | — | png / jpeg / webp |
negativePrompt |
string | — | 负向提示词 |
seed |
number | — | 随机种子,固定可复现 |
baseUrl |
string | — | 覆盖基址(自定义端点必填) |
outputDir |
string | — | 落盘目录,缺省 ./unillm-images |
image_edit
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
prompt |
string | ✅ | 编辑指令,如「把背景换成雪天」 |
image |
string | ✅ | 参考图:本地路径、URL 或 base64 |
provider |
string | — | 厂商 id |
model |
string | — | 编辑模型名 |
size / count / format |
— | — | 同上 |
outputDir |
string | — | 落盘目录 |
密钥配置
各厂商密钥通过环境变量注入,本 MCP 不硬编码、不落盘、不回显:
| 环境变量 | 对应厂商 |
|---|---|
ARK_API_KEY |
字节豆包 / 火山方舟 |
DASHSCOPE_API_KEY |
阿里通义万相 |
ZHIPU_API_KEY |
智谱 CogView |
SILICONFLOW_API_KEY |
硅基流动 |
MINIMAX_API_KEY |
MiniMax |
OPENAI_API_KEY |
OpenAI |
STABILITY_API_KEY |
Stability AI |
CUSTOM_IMAGE_API_KEY |
自定义端点 |
> 用 image_provider_status() 可查看哪些厂商已配好密钥 —— 返回的是掩码(如 sk-***abcd),不会泄露明文。
调用示例
1. 方形主图(最常用)
image_generate(prompt="极简风咖啡杯产品图,白底,柔光", size="1024x1024")
2. 横版 Banner
image_generate(prompt="科技感数据可视化背景,深蓝渐变", size="1280x720")
3. 竖版海报(小红书 / 抖音)
image_generate(prompt="夏季新品奶茶海报,清新配色", size="720x1280")
4. 批量出图挑最佳
image_generate(prompt="国风水墨山水,留白", count=4)
5. 换厂商对比效果
image_generate(prompt="赛博朋克城市夜景", provider="siliconflow", model="black-forest-labs/FLUX.1-schnell")
image_generate(prompt="赛博朋克城市夜景", provider="zhipu") # 智谱 cogview-3-flash 免费
6. 图生图(改图)
image_edit(prompt="把白天改成黄昏,加暖色光晕", image="./unillm-images/doubao-t2i-xxx.png", provider="doubao")
7. 固定种子复现
image_generate(prompt="宇航员在月球上", seed=42)
8. 检查可用厂商
image_provider_status() # 看哪些密钥已配置
image_list_providers() # 看完整能力矩阵
选型建议
| 场景 | 推荐 |
|---|---|
| 快速验证链路 | zhipu + cogview-3-flash(免费) |
| 中文语义理解好 | zhipu / doubao(中文母语模型) |
| 画质优先 | doubao Seedream 4.0 / stability sd3.5-large |
| 开源模型灵活切换 | siliconflow(FLUX / Kolors / SD3.5) |
| 批量出图 | minimax(上限 9 张) |
| 图生图 / 改图 | doubao(seededit)/ qwen(wanx-imageedit)/ siliconflow(Qwen-Image-Edit) |
| 内网 / 私有部署 | custom + baseUrl 指向本地 SD WebUI / ComfyUI / OneAPI |
错误处理
| 情况 | 行为 |
|---|---|
| 未配置密钥 | 返回 MISSING_API_KEY,并提示应设哪个环境变量 |
| 模型不存在 | 返回 MODEL_NOT_FOUND,列出可用模型 |
| 尺寸/格式非法 | 在发请求前拒绝,列出合法值(不消耗额度) |
| 限流 429 | 指数退避重试,尊重 Retry-After |
| 服务端 5xx | 指数退避重试,最多 MAX_RETRIES 次 |
| 请求超时 | AbortController 主动中断,返回明确超时错误 |
| 异步任务失败 | 返回任务失败原因,不无限轮询 |
注意事项
- 图片落盘:生成结果默认保存到
./unillm-images/,返回文件路径(可选内联 base64,用UNILLM_IMAGE_INCLUDE_BASE64=true开启)。 - 通义万相是异步的:内部自动轮询,你无感,但耗时会比其他厂商长几秒。
- 智谱 cogview-3-flash 免费:适合压测与快速验证。
- 国内直连:豆包 / 通义 / 智谱 / SiliconFlow / MiniMax 均可直连;OpenAI 与 Stability 通常需代理,或把
baseUrl指向中转网关。 - 海外厂商默认不配置:需显式设置对应环境变量才会出现在可用列表。
可配置项
| 环境变量 | 默认 | 说明 |
|---|---|---|
UNILLM_IMAGE_TIMEOUT_MS |
180000 |
单次 HTTP 超时(毫秒) |
UNILLM_IMAGE_MAX_RETRIES |
2 |
失败重试次数 |
UNILLM_IMAGE_POLL_INTERVAL_MS |
3000 |
异步任务轮询间隔 |
UNILLM_IMAGE_POLL_TIMEOUT_MS |
180000 |
异步任务最长等待 |
UNILLM_IMAGE_OUTPUT_DIR |
unillm-images |
默认落盘目录 |
UNILLM_IMAGE_INCLUDE_BASE64 |
false |
是否在返回中内联 base64 |
安装与自检
cd <skill-directory>/server
npm install # 安装依赖
npm run build # 编译 TypeScript
node test-e2e.mjs # 端到端契约自检(46 项断言)
自检会启动一个本地假图片服务,让 Server 真实走完
「HTTP 请求 → 拿到图片 → 落盘 → 返回路径」全链路,
并覆盖 4 种接口形态、异步轮询、multipart 编辑、契约拒绝、参数规范化等场景。