HiAPI
博客

教程

如何通过 hiapi API 使用 grok-imagine 图生图:curl、Python 与一个可用的请求

2026年11月3日
如何通过 hiapi API 使用 grok-imagine 图生图:curl、Python 与一个可用的请求

grok-imagine/image-to-image 接收一张或多张参考图像以及一段文本提示词,返回一张编辑后的图像——可以给产品照片换风格、替换背景,或最多将三张参考图融合为一个输出。在 hiapi 上,它通过统一的任务 API 运行:创建任务、轮询(或接收回调)、下载结果。本指南将带你走一遍准确的请求结构,并提供可直接复制粘贴、开箱即用的 curl 和 Python 示例。

你将构建什么 + 前置条件

目标:提交一张参考图像和一段提示词,拿回一张编辑后图像的 URL,并下载它——先通过轮询进行交互式操作,再使用回调的生产版本。

你只需要一样东西:一个 hiapi API 密钥。从你的仪表盘获取——它看起来像 sk-...,并在每次调用时放入 Authorization: Bearer 请求头中。

你的参考图像必须是可公开访问的 URL(模型会在服务端获取它们),因此请先将它们托管在你的 CDN 或对象存储上。

最小可运行示例(curl)

创建任务:

curl -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer sk-<your-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "grok-imagine/image-to-image",
    "input": {
      "prompt": "Turn this product photo into a clean studio shot on a seamless white background with soft shadows",
      "image_urls": ["https://your-cdn.com/product.jpg"]
    }
  }'

有两个必填字段——prompt 和 image_urls——这就是一个完整请求。响应中会在 data.taskId 下包含任务 ID:

{
  "data": {
    "taskId": "<task-id>"
  }
}

轮询结果:

curl https://api.hiapi.ai/v1/tasks/<task-id> \
  -H "Authorization: Bearer sk-<your-key>"

任务运行期间,data.status 会报告进度。当它变为 success 时,图像 URL 位于 data.output[0].url。如果是 fail,data.error 中有错误码和消息。

一个重要细节:输出 URL 是带签名的且会过期(载荷中带有 expireAt)。任务成功后应立即下载文件——绝不要存储或热链原始输出 URL。

curl -o result.png "<data.output[0].url>"

Python 中的相同示例

import time
import requests

API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": "Bearer sk-<your-key>"}

payload = {
    "model": "grok-imagine/image-to-image",
    "input": {
        "prompt": (
            "Turn this product photo into a clean studio shot "
            "on a seamless white background with soft shadows"
        ),
        "image_urls": ["https://your-cdn.com/product.jpg"],
        "aspect_ratio": "auto",
        "resolution": "1k",
        "output_format": "png",
    },
}

# 1. Create the task
resp = requests.post(API, json=payload, headers=HEADERS, timeout=60)
resp.raise_for_status()
task_id = resp.json()["data"]["taskId"]
print("task:", task_id)

# 2. Poll until it reaches a terminal state
while True:
    task = requests.get(f"{API}/{task_id}", headers=HEADERS, timeout=30).json()["data"]
    if task["status"] == "success":
        image_url = task["output"][0]["url"]
        break
    if task["status"] == "fail":
        raise RuntimeError(f"task failed: {task.get('error')}")
    time.sleep(5)

# 3. Download immediately — output URLs expire
with open("result.png", "wb") as f:
    f.write(requests.get(image_url, timeout=120).content)
print("saved result.png")

完整的输入 schema

字段 必填 类型 说明
prompt ✅ string 要改什么 / 目标外观
image_urls ✅ URL 数组 1–3 张参考图像,必须可公开访问
aspect_ratio 可选 enum auto、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
resolution 可选 enum 1k 或 2k——小写
output_format 可选 enum jpeg、png 或 webp

该 schema 是严格的:任何它不认识的字段都会被以 400 拒绝。没有 size,没有 seed,没有 n——如果你正在移植使用像素尺寸的模型代码(例如 size: "1024x1024"),请在这里改用 aspect_ratio + resolution。每个任务返回一张图像;要获得变体,请提交多个任务。

多参考图:最多 3 张输入图像

image_urls 最多接受三张参考图,模型会将它们融合——例如一张产品图加一张背景板再加一张风格参考图。如果发送超过三张,API 会直接拒绝该请求:

invalid input: image_urls: maxItems: got 4, want 3

把最重要的图像(通常是主体)放在第一位,并在提示词中说明每张参考图分别贡献什么。

自动宽高比

aspect_ratio: "auto" 让模型从你的参考图像推导输出比例,而不是强制使用固定画幅——对于产品照片以及希望保留构图的编辑来说,这是合适的默认值。仅在目标场景有明确要求时才设置显式比例(例如用于故事版位的 9:16、用于主视觉横幅的 16:9)。

生产环境注意事项

用回调代替轮询

对于批处理或服务端工作负载,跳过轮询循环——在创建任务时注册回调,hiapi 会将最终结果 POST 到你的端点:

{
  "model": "grok-imagine/image-to-image",
  "input": {
    "prompt": "...",
    "image_urls": ["https://your-cdn.com/product.jpg"]
  },
  "callback": {
    "url": "https://your-server.com/hooks/hiapi",
    "when": "final"
  }
}

when 仅支持 "final"——当任务到达 success 或 fail 时你会收到一次调用,而不是中间进度事件。

经验法则:交互式工具用轮询(有用户在观看;5 秒的 sleep 循环没问题),流水线用回调(有数十个任务在运行;你不会想为每个任务配一个轮询器)。你的回调处理器仍应立即下载输出——它收到的 URL 和其他 URL 一样会过期。

幂等性与重试

任务 API 将“提交”与“结果”分离,这使得安全重试变得简单直接:

  • 在 create 返回的那一刻持久化 taskId。如果你的进程之后崩溃,通过轮询已存储的 ID 恢复——不要重新创建。
  • 仅在 create 调用失败且未返回 taskId 时重试(网络错误、5xx)。重新提交一个已经返回 ID 的请求会产生第二个单独计费的任务。
  • 将 status: "fail" 视为终态。修正输入(或路由到备用方案)并提交新任务;失败的任务不会重新启动。

常见错误

你看到的 含义 修复方法
401——permission_denied 密钥错误,或密钥无权访问此模型 在仪表盘中检查密钥
400 INVALID_REQUEST——missing required field "prompt" / "image_urls" 缺少必填输入 两个字段都是必填的
400 INVALID_REQUEST——additional properties '...' not allowed 未知字段(例如 size、seed、n) 严格 schema——仅使用上表中的字段
400 INVALID_REQUEST——image_urls: maxItems 参考图超过 3 张 裁剪到 3 张
404——task not found GET 时 taskId 错误或属于其他账户 检查存储的 ID
轮询时 status: "fail" 已接受但生成失败 读取 data.error,调整输入,重新提交

注意认证失败是 401,错误体中带有 "code": "permission_denied"——值得显式匹配它,因为它也涵盖密钥存在但无权访问此模型的情况。

下一步

常见问题

我可以传入多少张参考图像? image_urls 中最多 3 张。API 会硬性拒绝更多(maxItems: got N, want 3)。

我可以用像素设置输出尺寸吗? 不能。没有 size 字段——你用 aspect_ratio(14 个枚举值)控制形状,用 resolution(1k 或 2k,小写)控制清晰度。其他任何内容都会返回 400。

aspect_ratio: "auto" 做什么? 它让模型遵循参考图像的比例,而不是强制固定画幅——这是需要保留构图的编辑的常用选择。

结果 URL 有效期多长? 它们是带签名的 URL 且有有效期(输出载荷中的 expireAt)。任务成功后应尽快下载字节;不要热链它们。

我应该轮询还是使用回调? 交互式使用每约 5 秒轮询一次即可。对于批处理流水线,传入 callback: {"url": ..., "when": "final"} 并为每个任务处理一次 POST——"final" 是唯一支持的触发条件。

我能在一次调用中获得多个变体吗? 不能——没有 n 参数。每个变体提交一个任务;它们反正会并行运行。

与 grok-imagine-quality/image-to-image 有什么区别? 请求结构相同,保真度更高(成本也更高)的渲染档位。在标准档原型验证,再把保留项放到质量档重跑;在定价页比较单图成本。

立即开始构建持久 AI 产物

获取 API 密钥,通过一个基于任务(task)的 API 调用图像、视频和音频模型。

阅读 API 文档