Grok Imagine 图片 API 入门:用 curl 和 Python 生成首张图

使用 Grok Imagine Image 2.0 的 xAI 直连接口,设置画质和分辨率,通过 curl、Python 保存响应与图片,并检查鉴权、格式及重试问题。

Grok Imagine 图片 API 入门:用 curl 和 Python 生成首张图

调用 Grok Imagine 图片 API,需要向 xAI 图片生成接口提交 prompt 和模型 ID,再保存返回的图片。 先只生成一张并显式指定配置,确认响应后再扩展批量任务或编辑流程。

本文使用 grok-imagine-image-2.0,依据 2026 年 9 月 8 日核对的官方生成文档。示例没有执行付费生成,不构成延迟、画质或费用实测。需要有对应权限的 xAI key、服务端运行环境和图片存储。核对时 Ofox 目录尚未收录 Grok Imagine,Ofox key 不能用于 xAI 直连。

用 curl 发起单张请求

通过现有密钥管理方式设置 XAI_API_KEY,在终端或后端执行。实际执行会产生 API 用量费用,不要把 key 写进公开的浏览器代码。

curl --fail-with-body --silent --show-error \
  --max-time 180 \
  https://api.x.ai/v1/images/generations \
  -H "Authorization: Bearer $XAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "grok-imagine-image-2.0",
    "prompt": "Studio photograph of a matte blue ceramic cup on a pale stone shelf, soft light from the left, no lettering",
    "n": 1,
    "aspect_ratio": "1:1",
    "resolution": "1k",
    "quality": "low",
    "response_format": "url"
  }' \
  -o grok-image-response.json

prompt 是示例创作要求,不是测试后选出的最佳提示词。180 秒超时是客户端设置,不是服务商速度承诺。先检查命令退出状态与保存的 JSON,确认不是错误对象,再下载图片。保留完整响应比直接把假定存在的 URL 传给下载器更便于定位问题。

用 Python 保存返回图片

先在项目环境中安装 requests。下面直接发送 HTTP 请求,选择 base64 响应,检查图片数据并保存原始字节。

import base64
import os
from pathlib import Path

import requests

payload = {
    "model": "grok-imagine-image-2.0",
    "prompt": (
        "Studio photograph of a matte blue ceramic cup on a pale "
        "stone shelf, soft light from the left, no lettering"
    ),
    "n": 1,
    "aspect_ratio": "1:1",
    "resolution": "1k",
    "quality": "low",
    "response_format": "b64_json",
}
response = requests.post(
    "https://api.x.ai/v1/images/generations",
    headers={"Authorization": f"Bearer {os.environ['XAI_API_KEY']}"},
    json=payload,
    timeout=(10, 180),
)
response.raise_for_status()
body = response.json()
images = body.get("data", [])
if not images or not images[0].get("b64_json"):
    raise RuntimeError("No base64 image returned; inspect response metadata")
image_bytes = base64.b64decode(images[0]["b64_json"], validate=True)
# Keep raw bytes until your image decoder identifies the returned format.
output = Path("grok-image-output.bin")
output.write_bytes(image_bytes)
print(f"Saved {len(image_bytes)} bytes to {output}")

.bin 扩展名是有意使用的:尚未解码就命名为 PNG 或 JPEG,会把未经确认的格式写成事实。业务中应通过图片解码器核对格式、尺寸,再选择正确扩展名与媒体类型。

接口也支持 URL 响应,但返回地址是临时的;需要长期保存的素材应及时存入自己的存储。见响应格式说明

批量生成前,固定哪些参数?

将目标宽高比、预算画质和输出数量写入任务规格,随后再扩展后台任务。每次生成至少记录:

字段用途
业务任务 ID关联用户操作
模型、服务商确认实际生成来源
请求配置解释批次差异
prompt 或模板版本重现创作要求
素材存储位置后续读取结果
人工验收结果区分生成完成与可用素材

生成与编辑应分开设计。编辑包含输入图,需采用对应请求结构并另算预算。不要给生成请求随意加一个 image 字段,就假定所有服务商都能识别。应查官方编辑文档

重试前先判断失败位置

连接失败、HTTP 错误、成功响应里出现意外内容,应走不同排查路径。鉴权失败时检查目标域名与 key 来源;参数校验失败时先缩小请求,再对照接口字段。

提交后网络超时,不代表服务端一定没有完成生成。没有确认结果前,不要自动重复付费请求。后台任务应保存响应元数据,并明确什么时候允许重新提交;日志不要记录 Authorization 头。

若结果与审核规则有关,先查看文档说明,调整请求使其符合服务规则。无限重试不能让不受支持的请求变得受支持。更一般的排查可参考图片生成失败指南,具体参数仍以当前调用的服务为准。

接进现有应用

将服务商特有的请求字段集中在适配层。业务侧描述提示词、参考素材和输出形状,再由适配层校验和转换。这样换服务商时,可以保留同一创作要求,不必在整套业务里散落模型专属字段。

可结合 FLUX 接入流程考虑适配边界。扩大用量前先看 Image 2.0 价格与预算;迁移旧别名时看 quality 型号迁移

常见问题

示例应该填哪个 Grok 模型?
xAI 直连示例使用 grok-imagine-image-2.0。换服务商时,应使用该服务商明确列出的 ID。
API key 能放在前端吗?
应保存在后端,通过带访问控制的业务接口调用。浏览器收到的代码中若包含 key,接收者就能读取。
为什么保存为二进制文件?
为了先保留原始字节,不猜图片格式。解码并检查后,再使用对应扩展名和 Content-Type。
本文示例是性能测试吗?
不是。它展示基于文档的请求及响应处理。延迟、画质和实际计费需要单独测量。