Discord

多模态

图像生成

一个端点同时支持文生图与图生图 — 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 API
fal/krea-2-medium-turboFal—
fal/cosmos3-super-text2imageFalNVIDIA 开源权重的 Cosmos 3 Super
wavespeed/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返回 PNG
gemini-3-pro-image-preview返回 JPEG;质量最高,成本也最高
gemini-3.1-flash-image-preview返回 JPEG
gemini-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 模型。