生图与生视频
这一篇说明 HRouter 各分组怎么生成图片和视频:用哪个分组、填哪个模型、调哪个接口。价格以 模型广场 为准,按张或按秒计费的模型在广场上会按分辨率列出单价。
操作前提:Key 属于支持生图的分组,模型在该分组的可用列表里,账户有可用余额。下文示例都从环境变量读取 Key:
export HROUTER_API_KEY="sk-xxxxx"
不想写代码,可以直接用顶部导航的 生图工作台 在网页里生图。
先选对分组
只有下表这些分组能生图、生视频。Key 属于其他分组时,生图请求会被拒绝,见文末 常见报错。
| 分组 | 生图模型 | 生视频模型 | 接口 |
|---|---|---|---|
| GPT 生图 | gpt-image-1、gpt-image-1.5、gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst |
不支持 | OpenAI Images:/v1/images/generations、/v1/images/edits |
| grok | grok-imagine-image、grok-imagine-image-quality、grok-imagine-image-2.0 |
grok-imagine-video、grok-imagine-video-1.5 |
生图同上;生视频:/v1/videos/generations |
| Gemini | gemini-3.1-flash-image、gemini-3.1-flash-image-preview |
不支持 | Gemini 原生:/v1beta/models/{模型}:generateContent |
创建 Key 时看不到的分组,说明当前账号不能使用。分组的选择方法见 选择 Key 分组。
GPT 生图分组
文生图
curl https://hrouter.net/v1/images/generations \
-H "Authorization: Bearer $HROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-image-2", "prompt": "一只橘猫坐在窗台上,午后阳光", "size": "1024x1024", "n": 1}'
图片在返回的 data[].b64_json 里(Base64 编码,解码后保存为 PNG)。size 决定计费档位(1K / 2K / 4K),尺寸越大单价越高。
用 OpenAI SDK 只需改 base_url:
import base64, os
from openai import OpenAI
client = OpenAI(api_key=os.environ["HROUTER_API_KEY"], base_url="https://hrouter.net/v1")
result = client.images.generate(model="gpt-image-2", prompt="一只橘猫坐在窗台上,午后阳光", size="1024x1024")
with open("cat.png", "wb") as f:
f.write(base64.b64decode(result.data[0].b64_json))
改图
上传原图和修改要求(multipart 表单):
curl https://hrouter.net/v1/images/edits \
-H "Authorization: Bearer $HROUTER_API_KEY" \
-F model=gpt-image-2 \
-F [email protected] \
-F prompt="把背景换成海边"
grok 分组
生图
curl https://hrouter.net/v1/images/generations \
-H "Authorization: Bearer $HROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "grok-imagine-image", "prompt": "雪山下的木屋,清晨", "n": 1}'
| 参数 | 说明 |
|---|---|
model |
grok-imagine-image(快速)、grok-imagine-image-quality(高质量)、grok-imagine-image-2.0 |
resolution |
可选,1k 或 2k |
aspect_ratio |
可选,例如 16:9、1:1、9:16 |
n |
一次生成的张数 |
返回的 data[].url 是临时链接,请尽快下载保存。改图用 /v1/images/edits,模型选 grok-imagine-image-quality 或 grok-imagine-image-2.0,在 image 里传原图链接,最多 3 张:
curl https://hrouter.net/v1/images/edits \
-H "Authorization: Bearer $HROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "grok-imagine-image-quality", "prompt": "改成水彩画风格", "image": {"url": "https://example.com/photo.jpg"}}'
生视频
视频是异步生成的:先提交任务拿到 request_id,再查询状态,完成后下载。
第 1 步:提交任务
curl https://hrouter.net/v1/videos/generations \
-H "Authorization: Bearer $HROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "grok-imagine-video-1.5", "prompt": "海浪拍打礁石,慢镜头", "duration": 8, "resolution": "720p"}'
返回 {"request_id": "..."}。
| 参数 | 说明 |
|---|---|
model |
grok-imagine-video-1.5(推荐)或 grok-imagine-video |
duration |
视频时长,1–15 秒,不填默认 8 秒 |
resolution |
480p 或 720p,不填默认 480p;暂不提供 1080p |
image |
可选,传一张图片链接做图生视频 |
第 2 步:查询状态
curl https://hrouter.net/v1/videos/generations/<request_id> \
-H "Authorization: Bearer $HROUTER_API_KEY"
status 为 pending 时隔 10 秒左右再查;变成 done 后,返回里会有 video.url。
第 3 步:下载视频
curl -L -o video.mp4 https://hrouter.net/v1/videos/generations/<request_id>/content \
-H "Authorization: Bearer $HROUTER_API_KEY"
用 Python 一次跑完:
import os, time, requests
base = "https://hrouter.net/v1"
headers = {"Authorization": f"Bearer {os.environ['HROUTER_API_KEY']}"}
task = requests.post(f"{base}/videos/generations", headers=headers, json={
"model": "grok-imagine-video-1.5", "prompt": "海浪拍打礁石,慢镜头", "duration": 8, "resolution": "720p",
}).json()
request_id = task["request_id"]
while True:
status = requests.get(f"{base}/videos/generations/{request_id}", headers=headers).json()
if status.get("status") == "done":
break
if status.get("status") in ("failed", "expired"):
raise SystemExit(status)
time.sleep(10)
video = requests.get(f"{base}/videos/generations/{request_id}/content", headers=headers)
open("video.mp4", "wb").write(video.content)
视频怎么计费:按秒计费,单价随分辨率不同,费用 = 每秒单价 × 时长。提交任务时不扣费,通过 HRouter 查询到 done 时才扣费;生成失败或过期不扣费。所以请用 HRouter 的地址查询状态,不要直接访问上游。
Gemini 分组
Gemini 分组同时提供对话模型 gemini-3.8-flash-low、-medium、-high、-tiered(对应不同思考强度)和生图模型 gemini-3.1-flash-image。生图按 token 计费:输入、文字输出和图片输出分别计价,一张 1K 图片的图片输出约 1,120 token。
Gemini 生图走 Gemini 原生协议,Key 放在 x-goog-api-key 请求头里:
curl "https://hrouter.net/v1beta/models/gemini-3.1-flash-image:generateContent" \
-H "x-goog-api-key: $HROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"contents": [{"parts": [{"text": "一只橘猫坐在窗台上,午后阳光"}]}], "generationConfig": {"responseModalities": ["TEXT", "IMAGE"]}}'
图片在 candidates[0].content.parts[].inlineData.data 里(Base64 编码)。
常见报错
| 报错 | 原因 | 处理 |
|---|---|---|
403 Image generation is not enabled for this group |
Key 所在分组不支持生图 | 换成上表里的分组新建 Key |
404 Images API is not supported for this platform |
分组的协议不支持 Images 接口(例如 Claude 分组) | 同上 |
404 model_not_found / is not available for this group |
模型不在该分组的可用列表里 | 核对模型名,见 model_not_found |
400 Resolution 1080p is not available |
该分辨率暂未开放 | 改用 480p 或 720p |
INSUFFICIENT_BALANCE |
余额不足 | 见 余额不足 |
扣费明细可以在 使用记录 里查看,生图显示张数和档位,生视频显示时长和分辨率。