多模态
图像生成
一个端点同时支持文生图与图生图 —
POST /v1/images,与
OpenRouter 自己的 /api/v1/images
接口约定完全一致(已对照其真实 OpenAPI 规范确认过 — 他们那边也没有区分"生成"和"编辑"两个端点)。图生图同样发生在这一个端点上,
通过 input_references 传入,而不是走单独的 multipart 上传。
按图片计费,JSON 响应体内会带有真实的 usage 字段 —
包括 cost — 而不是只放在响应头里。这个成本已经包含了
我们的 2% 平台费 — 图像与视频生成的费率高于对话等其他模式;见
价格与账单。
import requests
resp = requests.post(
"https://videorouter.sh/api/v1/images",
headers={"Authorization": "Bearer llmr_sk_live_..."},
json={
"model": "gpt-image-1",
"prompt": "a red panda astronaut floating in space",
"aspect_ratio": "16:9",
"resolution": "2K",
},
).json()
print(resp["data"][0]["b64_json"][:50], resp["usage"]["cost"])
图生图:通过 input_references
传入一张或多张参考图(URL 或 base64 data URL,与图像输入
的两种形式一致),而不是上传文件:
import requests
resp = requests.post(
"https://videorouter.sh/api/v1/images",
headers={"Authorization": "Bearer llmr_sk_live_..."},
json={
"model": "gemini-2.5-flash-image",
"prompt": "make this scene look like a watercolor painting",
"input_references": [
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
],
},
).json()
下面支持哪些模型中列出的每个模型,加上
对话原生图像模型
(gemini-2.5-flash-image、
gemini-3-pro-image-preview、
gemini-3.1-flash-image-preview、
gemini-3.1-flash-lite-image)都能在这里调用 —
一个目录、一个端点,底层实际用哪种机制由模型自己决定。其他参数:
size(显式的
"WxH" 字符串在传入时会覆盖
resolution/aspect_ratio)、
quality、
output_format、
background,以及
output_compression(这几个都只对 OpenAI 模型生效 —
其他模型会忽略,与 OpenRouter 自己"不支持某项控制的供应商会忽略它"的行为一致)、
n 用于单次调用生成多张图片。
stream: true 不受支持 —
会返回 400,而不是被静默忽略。非正方形的 aspect_ratio 在
dall-e-2 上会被强制限制为正方形(它每个轴只有一个尺寸档位);
DeepInfra/SiliconFlow 的模型目前还不支持
resolution/aspect_ratio。
支持哪些模型
三家供应商、十二个模型,均为直连服务(该端点不支持跨供应商故障转移):
dall-e-3OpenAImodel:"auto" 的默认模型dall-e-2OpenAI—gpt-image-2OpenAI生成 + 编辑,按 token 计费gpt-image-2.5-flareOpenAIOpenAI 最新模型;默认更快,按 token 计费gpt-image-2.5-sunburstOpenAIOpenAI 最新模型;精度更高,速度更慢,按 token 计费imagen-4.0Google—imagen-4.0-fastGoogle—imagen-4.0-ultraGoogle—qwen-image-2.0Qwen—qwen-image-2.0-proQwen—qwen-image-3.0Qwen—qwen-image-3.0-proQwen输出分辨率越高价格越贵
size 与
quality 只会转发给 OpenAI 模型 —
Imagen 与 Qwen 不以相同方式接受这两个参数,会忽略或拒绝。
其他供应商
少数开源权重与独立模型,通过 Fal 或 WaveSpeedAI 直连提供服务:
fal/ideogram-4.0Fal按输出百万像素计费fal/ideogram-4.0-qualityFalIdeogram 的 QUALITY 渲染模式;按输出百万像素计费fal/flux-2-devFalFLUX.2 [dev];按输出百万像素计费fal/muse-imageFalMeta 的 Muse Image,通过 Fal 上的 Meta Model APIfal/krea-2-medium-turboFal—fal/cosmos3-super-text2imageFalNVIDIA 开源权重的 Cosmos 3 Superwavespeed/p-image-ideogram-highWaveSpeedAIPruna AI × Ideogram P-Image,"high" 思考级别
size/resolution/aspect_ratio
只对 fal/ideogram-4.0、
fal/ideogram-4.0-quality 和
fal/flux-2-dev 生效(并影响价格)— 其余四个模型无论请求什么都按固定尺寸计费(和生成)。
对话补全中的图像输出
还有第二种获取图片的方式:直接给
POST /v1/chat/completions 传入
modalities: ["image", "text"] —
与 OpenRouter 使用的是同一套接口约定。生成的图片会出现在 assistant 消息的
message.images[0].image_url.url
(一个 base64 data URL)中,与模型返回的文本一起出现。
from openai import OpenAI
client = OpenAI(base_url="https://videorouter.sh/api/v1", api_key="llmr_sk_live_...")
resp = client.chat.completions.create(
model="gemini-2.5-flash-image",
messages=[{"role": "user", "content": "Generate a beautiful sunset over mountains"}],
modalities=["image", "text"],
)
message = resp.choices[0].message
for image in (message.images or []):
image_url = image["image_url"]["url"] # base64 data URL
print(f"Generated image: {image_url[:50]}...")
这种方式同样支持已上传的图片 — 在同一个请求中把
image_url 内容项(见
图像理解)与
modalities: ["image", "text"] 结合起来,
就能通过同一个端点传入一张图片并取回编辑/重新演绎后的图片。
目前有四个模型,全部来自 Google:
gemini-2.5-flash-image返回 PNGgemini-3-pro-image-preview返回 JPEG;质量最高,成本也最高gemini-3.1-flash-image-preview返回 JPEGgemini-3.1-flash-lite-image四个模型中最便宜,返回 JPEG
这条路径不支持 model: "auto" —
必须显式传入模型。按响应自身
usage.completion_tokens_details
拆分出的用量计费:图像 token(在
gemini-3-pro-image-preview 上还包括推理 token)
的单 token 价格明显高于普通文本 token(这是供应商自己的定价,不是平台加价),所以成本会随图片大小/复杂度变化,
而不是像上面的 /v1/images 那样是固定的单次调用价格。
这条路径同样在供应商成本之上收取我们自己的 2% 平台费,与
/v1/images 一致 — 通过对话补全触发的图像生成,
计费费率与专用端点完全相同。一个含糊、模板化的提示词(例如"a tiny icon of a red circle")可能触发 Gemini 自身的
背诵安全过滤器,完全不返回图片 — 使用具体、原创的提示词可以避免这个问题。
Grok、DeepSeek 以及 Meta 的 muse-spark-1.1
目前还不支持这种方式 — 每一个都是直接实测过的,不是凭假设判断的:Grok 与 OpenAI 的
gpt-5.1/gpt-5.2
会直接拒绝 modalities 参数,DeepSeek 会静默忽略它
只返回文本,Muse Spark 自己的 API 则会把
"image" 当作无效的 modality 值拒绝
(它支持图像输入,不支持输出)。一旦这几个模型中的某一个 — 或其他供应商 — 有了真实、经过验证的图像输出路径,
我们会立刻把它加进来。
尚未支持
为一张已有图片生成多个无指令变体(不带编辑说明,只是"再来几张类似的")目前没有对应能力。通过
input_references 做基于蒙版的局部重绘 —
把编辑限制在图片的某一区域 — 也不支持,只支持整图编辑。
stream: true 会被直接拒绝(见上文)。
对话原生图像输出目前仅限于四个 Google 模型。