教程
如何使用 grok-imagine-quality 文生图 API:curl、Python 与一次可运行的请求
摘要
- 这是什么:在 hiapi 上使用 grok-imagine-quality/text-to-image API 的可运行方案——通过
POST /v1/tasks创建任务,轮询GET /v1/tasks/<taskId>(或使用回调),从output[0].url下载图像。 - schema 严格且精简:
prompt(必填)、aspect_ratio(13 种比例,默认1:1)、resolution(1k|2k,小写,默认1k)、output_format(jpeg|png|webp,默认jpeg)。其他任何字段都会以 400 拒绝。 - “Quality” 是档位,不是调节项。不存在
quality或rich_detail参数——更丰富的细节、材质和光照正是这个模型变体默认提供的。如果需要廉价的批量草稿,同一端点上有其标准档位的姊妹模型grok-imagine/text-to-image。 - 输出 URL 带有
expireAt截止时间——请及时下载或持久化存储。
你要构建什么,以及需要准备什么
目标:向 grok-imagine-quality/text-to-image 发送文本提示词,并取回一张可作主视觉的成品图像文件——先用 curl,再写成可放入任务队列的小型 Python 脚本。
你只需要一样东西:hiapi API 密钥。从你的 hiapi 控制台 获取并导出:
export HIAPI_API_KEY="sk-..."
每个请求都使用标准 bearer 头进行认证:Authorization: Bearer sk-<key>。
最小可运行请求(curl)
hiapi 上的图像生成仅支持异步。你不需要等待一个长时间 HTTP 调用;而是创建一个任务,完成后获取结果。
第 1 步——创建任务:
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-quality/text-to-image",
"input": {
"prompt": "哑光黑色意式浓缩咖啡机放在板岩台面上的产品主视觉,戏剧性定向光,浅景深,高端商业质感",
"aspect_ratio": "16:9",
"resolution": "2k",
"output_format": "png"
}
}'
模型在后台工作时,你会立即得到一个 taskId:
{
"code": 200,
"message": "success",
"data": { "taskId": "tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR" }
}
第 2 步——轮询直到进入终止状态:
curl https://api.hiapi.ai/v1/tasks/tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR \
-H "Authorization: Bearer $HIAPI_API_KEY"
任务会经历 queued → handling → archiving,最终到达 success 或 fail。只有 success 会携带输出:
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR",
"model": "grok-imagine-quality/text-to-image",
"status": "success",
"created": 1783130400,
"completed": 1783130460,
"output": [
{
"url": "https://cdn.hiapi.ai/tasks/.../image.png",
"type": "image",
"expireAt": 1783735260
}
]
}
}
第 3 步——在 expireAt 之前下载:
curl -o hero.png "https://cdn.hiapi.ai/tasks/.../image.png"
Python 中的相同流程
一个完整的脚本——创建、轮询、保存。复制、设置 HIAPI_API_KEY、运行。
import os
import time
import requests
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"}
payload = {
"model": "grok-imagine-quality/text-to-image",
"input": {
"prompt": (
"哑光黑色意式浓缩咖啡机放在板岩台面上的产品主视觉,"
"戏剧性定向光,浅景深,高端商业质感"
),
"aspect_ratio": "16:9",
"resolution": "2k", # 小写!"2K" 会以 400 被拒绝
"output_format": "png",
},
}
resp = requests.post(BASE, headers=HEADERS, json=payload, timeout=60)
resp.raise_for_status() # 这里的 4xx = 请求本身被拒绝
task_id = resp.json()["data"]["taskId"]
print("任务已创建:", task_id)
while True:
task = requests.get(f"{BASE}/{task_id}", headers=HEADERS, timeout=30).json()["data"]
status = task["status"]
if status == "success":
image = task["output"][0]
with open("hero.png", "wb") as f:
f.write(requests.get(image["url"], timeout=120).content)
print("已保存 hero.png")
break
if status == "fail":
err = task["error"]
raise RuntimeError(f"任务失败: {err['code']} {err['message']}")
time.sleep(5) # queued / handling / archiving —— 继续轮询
2k 档位的生成通常在一两分钟内完成;5 秒的轮询间隔足够。
实际存在的参数
输入 schema 是严格的——未知字段会以 400 INVALID_REQUEST: additional properties not allowed 失败,而不是被静默忽略。这是好消息:拼写错误不会溜进生产环境。完整接口范围:
| 字段 | 必填 | 取值 | 默认值 |
|---|---|---|---|
input.prompt |
是 | 自由文本 | — |
input.aspect_ratio |
否 | 2:1, 20:9, 19.5:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:19.5, 9:20, 1:2 |
1:1 |
input.resolution |
否 | 1k, 2k(仅小写) |
1k |
input.output_format |
否 | jpeg, png, webp |
jpeg |
在基于它构建之前,有三件事值得了解:
- 名称中的“quality”是档位,不是参数。你可能会看到这个模型被描述为具有更丰富的细节、材质和光照——那是模型变体本身。没有可切换的
rich_detail、quality或style字段。 1k和2k按不同档位计费。常见模式:在1k下反复迭代提示词,然后用胜出的提示词在2k下重新运行以生成最终素材。当前每张图像的价格见 hiapi 定价页。- 没有
n、没有seed、没有negative_prompt。一个任务生成一张图像。如需变体,并行提交多个任务——它们相互独立且并发排队。
生产注意事项:回调、幂等性和错误
在生产环境中优先使用回调而不是轮询。在请求体顶层(不是 input 内)传入 callback,当任务到达终止状态时 hiapi 会调用你的服务:
{
"model": "grok-imagine-quality/text-to-image",
"input": { "prompt": "..." },
"callback": {
"url": "https://your-service.example.com/hiapi/callback",
"when": "final"
}
}
使用 when: "final" 时,success 和 fail 都会收到通知,因此请在你这边按 taskId 去重。保留低频轮询作为回调可能丢失时的兜底——任务详情端点始终是事实来源。
使用 Idempotency-Key 让重试安全。任务创建接受 Idempotency-Key 头(最多 255 字节)。使用相同 key 重试绝不会创建重复任务——重放会返回原始 taskId:
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Idempotency-Key: order-42-hero-image" \
-H "Content-Type: application/json" \
-d '{"model": "grok-imagine-quality/text-to-image", "input": {"prompt": "..."}}'
区分处理三种失败形态:
- 认证失败——HTTP
401及{"error": {"code": "permission_denied", "type": "hiapi_error", ...}}。检查密钥以及它是否有权使用此模型;不要盲目重试。 - 无效输入——HTTP
400及"error_code": "INVALID_REQUEST",消息会指出具体字段(例如resolution: value must be one of '1k', '2k')。修正 payload;用相同请求体重试会以同样方式失败。 - 任务级失败——创建调用成功,但任务以
status: "fail"和data.error对象结束。重新提交前检查error.code。
留意 expireAt。输出 URL 是临时的。任务成功后立即下载文件,或在创建时传入 storage: "persistent" 以长期保留输出。
相关页面
- grok-imagine-quality/text-to-image 模型页——试验场和按档位定价
- 文档中的完整参数参考
- 创建任务 API 参考——headers、幂等性、回调
- 如何使用 grok-imagine-quality 图生图——同一档位,编辑现有图像
- 所有图像、视频和音乐模型
常见问题
grok-imagine-quality 和 grok-imagine/text-to-image 有什么区别?
同一端点、同一请求结构、不同档位。quality 档位面向主视觉和商业素材,具有更丰富的细节和光照,按 1k/2k 分辨率档位定价;标准版 grok-imagine/text-to-image 是用于批量和构思的更快、更便宜选项。
为什么 "resolution": "2K" 返回 400?
枚举区分大小写且为小写:1k 或 2k。大写值会以 INVALID_REQUEST 被拒绝。
可以设置 1920x1080 这样的精确像素尺寸吗?
不能。你通过 aspect_ratio(13 个选项,从 2:1 超宽到 9:20 超高)控制形状,通过 1k/2k 档位控制清晰度。此模型没有自由形式的 size 字段。
可以在一个请求中生成多张图像吗?
不能——没有 n 参数。请并行提交多个任务;每个任务返回自己的 taskId,并并发处理。
grok-imagine-quality 支持图生图吗?
支持,使用单独的模型 id:grok-imagine-quality/image-to-image。其 schema 见 图生图方案——它与文生图不同。
结果 URL 的有效期是多久?
每个 output[] 条目都有 expireAt Unix 时间戳。在该截止时间前下载,或在创建任务时使用 storage: "persistent"(或稍后提升输出)以保留它。
已排队但未完成的任务是什么样子?
GET /v1/tasks/<taskId> 返回的 status 为 queued、handling 或 archiving,尚无 output。只有 success 包含可下载输出;fail 则包含 data.error。