HiAPI
博客

使用指南

通过 hiapi API 使用 grok-imagine/image-to-image 生成电商产品图

2026年11月3日
通过 hiapi API 使用 grok-imagine/image-to-image 生成电商产品图

电商商品目录的成败全在于一致性。一个有 40 个 SKU 的卖家不需要 40 次不同的拍摄——他们需要一个好看的背景,以及一种能快速把每件商品放进去的方法。这正是参考图驱动图像编辑的真实用例,也正是 hiapi API 上的 grok-imagine/image-to-image 所擅长的:给它一个场景和一张产品图,它会把两者合成为一张干净、符合品牌调性的图像——无需手动蒙版,也无需单独的抠图步骤。

本指南涵盖该模型真实且经过测试的请求 schema(不是营销文案)、你实际会被计费的定价、一个用于将整个商品目录套用同一背景的批处理脚本,以及一个实用技巧:在所有都要求不同裁剪比例的各家电商平台之间控制输出宽高比。

该模型实际做什么

grok-imagine/image-to-image 接收一段文本提示词和少量参考图,把它们融合成一张新的图像。对于产品摄影而言,这意味着:

  • 背景统一 —— 把每张 SKU 照片都放到同一个风格化场景前(一张桌子、一个货架、一块影棚背景布),无需重新拍摄任何东西。
  • 场景合成 —— 将产品抠图与环境参考图结合,使光线和构图相匹配。
  • 参考图之间的风格迁移 —— 把一张图的调色或道具带入另一张图,同时保持产品本身不被编辑。

所有这些都在一次任务调用中完成,按每张输出图像计费,外加你每发送一张参考图的小额费用。

真实的 schema(对照线上 API 验证,而非定价页面)

我们直接用 grok-imagine/image-to-image 探测了 POST /v1/tasks,该模型的输入 schema 恰好接受两个字段:

{
  "model": "grok-imagine/image-to-image",
  "input": {
    "prompt": "string, required",
    "image_urls": ["array of public image URLs, required, max 3"]
  }
}

仅此而已——没有 resolution,没有 aspect_ratio,也没有 strength 参数。payload 中的其他任何内容都会被严格的 schema 拒绝。

有一处需要更正的错误值得指出:hiapi 定价页面目前声称该模型支持“最多 6 张”参考图。我们在同一请求中分别发送 6 个和 7 个图像 URL 进行了直接测试,两者都被拒绝:

{"error_code":"INVALID_REQUEST","message":"invalid input: image_urls: maxItems: got 6, want 3"}
{"error_code":"INVALID_REQUEST","message":"invalid input: image_urls: maxItems: got 7, want 3"}

截至本文撰写时,实际执行的限制是每次调用 3 张图像,而不是 6 张。如果你要围绕该模型构建流水线,请按 3 张来规划,并把任何与此不符的营销文案视为过时内容——在发布依赖该限制的自动化之前,务必先通过一次实时的 POST /v1/tasks 调用进行确认,因为这些限制会随着平台演进而变化。

自动宽高比:输出比例跟随你的第一张参考图

该模型没有 aspect_ratio 输入字段,那么输出的形状从何而来?我们做了一次受控测试来找出答案:相同的提示词、相同的两张参考图,只交换 image_urls 的顺序。

在这次渲染中,产品照片(背包)被列在 image_urls 的第一位,后面跟着背景场景。输出返回为 1248×832——一个与产品照片自身比例相符的 3:2 横向图像。

相同的提示词、相同的两张图像——但这次背景场景被列在第一位。输出返回为 1024×1024,一个与场景参考图自身宽高比相符、而非与产品相符的方形裁剪。

规则是:grok-imagine/image-to-image 的输出宽高比继承自 image_urls 中排在最前面的那个 URL。它并不会从你的提示词中读取构图提示(“产品照”还是“宽场景”)——它纯粹是位置性的。一旦你知道这一点,它就是一个真正有用的杠杆:要针对某个特定电商平台偏好的裁剪,只需重新排列参考图数组。对 Instagram 风格的方形商品列表,把方形参考图放在最前面;对宽横幅位,把横向参考图放在最前面。

定价(对照线上价目表核对)

模型 调用类型 价格
grok-imagine/text-to-image 文本 → 图像 $0.03 / 图像
grok-imagine/image-to-image 参考图驱动编辑(本指南) $0.03 / 图像 + 每张参考图 $0.003
grok-imagine-quality/text-to-image 文本 → 图像,高级档 $0.07 / 图像(1K)
grok-imagine-quality/image-to-image 参考图驱动编辑,高级档 $0.08 / 图像(1K),$0.10 / 图像(2K),+ 每张参考图 $0.015

本指南中使用的 grok-imagine/image-to-image 基础档不随分辨率变化,为统一费率——你不会像在 -quality 档那样支付 2K/4K 附加费。对于将数十个 SKU 合成到同一场景上的商品目录更新,每张图像 $0.036(一张产品照片加一张场景参考图)就是你应据以做预算的数字。在大批量运行前务必重新查看 /en/pricing,因为费率可能会变化。

如果你需要每张图更锐利的细节,并能接受约 3 倍的价格上涨,grok-imagine-quality 档是相同工作流程的更高保真版本。对于完全没有参考照片的纯文本到图像产品效果图,请参阅基础档文本到图像演练。

批处理脚本:一个场景,一整套目录

下面是一个极简的 Python 循环,它接收一张可复用的背景场景,将其与文件夹中的每张产品照片合成,把每张作为独立任务提交,并轮询直到完成。它使用上文确认的 schema,并把产品图放在第一位,这样每个输出都会继承产品照片自身的宽高比——如果你想要场景的比例,就交换顺序。

import os
import time
import requests

API_BASE = "https://api.hiapi.ai/v1"
TOKEN = os.environ["HIAPI_API_KEY"]
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}

SCENE_URL = "https://static.hiapi.ai/blog/grok-imagine-image-to-image-ecommerce/scene-base.jpg"
PROMPT = (
    "Composite the product from the first reference photo naturally into the "
    "second reference's studio scene, matching its lighting and shadow direction. "
    "Keep the product's shape, color, and texture unchanged."
)


def submit(product_url: str) -> str:
    payload = {
        "model": "grok-imagine/image-to-image",
        "input": {
            "prompt": PROMPT,
            "image_urls": [product_url, SCENE_URL],  # product first -> output follows its ratio
        },
    }
    resp = requests.post(f"{API_BASE}/tasks", headers=HEADERS, json=payload, timeout=30)
    resp.raise_for_status()
    return resp.json()["data"]["taskId"]


def wait_for_result(task_id: str, timeout_s: int = 300) -> str:
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        resp = requests.get(f"{API_BASE}/tasks/{task_id}", headers=HEADERS, timeout=30)
        resp.raise_for_status()
        task = resp.json()["data"]
        if task["status"] == "success":
            return task["output"][0]["url"]
        if task["status"] == "fail":
            raise RuntimeError(f"task {task_id} failed: {task.get('error')}")
        time.sleep(5)
    raise TimeoutError(f"task {task_id} did not finish in {timeout_s}s")


if __name__ == "__main__":
    product_urls = [
        "https://your-storage.example.com/catalog/dripper-raw.jpg",
        "https://your-storage.example.com/catalog/sneaker-raw.jpg",
        "https://your-storage.example.com/catalog/backpack-raw.jpg",
    ]
    for url in product_urls:
        task_id = submit(url)
        output_url = wait_for_result(task_id)
        print(f"{url} -> {output_url}")

对于生产流水线,在任务上注册一个 callback.url,而不是在循环中轮询——完整的回调 payload 结构请参见 hiapi 模型目录。将 taskId 与你的产品 SKU 一起存储,以便失败的任务可以重试,而无需重新提交整个批次。

真实产品照片示例

这两张都使用同一张背景场景参考图生成,仅在调用之间更换了产品照片——光线、桌面和背景植物在整个“目录”中保持一致,这正是可复用场景工作流程的全部意义所在。

常见问题

一次调用中可以使用超过 3 张参考图吗? 不能。线上 schema 对 image_urls 强制 maxItems: 3——这是通过直接 API 测试确认的,无论其他地方营销文案怎么说。请围绕最多 3 张参考图来设计提示词(通常为:产品 + 场景,或产品 + 场景 + 风格参考)。

如何控制输出的宽高比? 该模型没有 aspect_ratio 参数。输出继承 image_urls 中第一位那张图像的宽高比——重新排列你的参考图以针对你需要的比例。

它支持无参考图的纯文本生成吗? 不支持——image_urls 是必填字段。对于纯文本产品效果图,请改用 grok-imagine/text-to-image,价格为 $0.03/图像。

该模型有更高保真版本吗? 有,grok-imagine-quality/image-to-image 以 $0.08/图像(1K)或 $0.10/图像(2K),外加每张参考图 $0.015 的价格运行相同的参考图驱动工作流程,以提供更锐利的细节。

立即尝试

从你的 hiapi 仪表盘获取一个 API 密钥,准备好一张背景场景,先对少量 SKU 运行你的第一批任务,再决定是否全面更换整个商品目录——按每张图像 $0.036 计算,在 10 个产品上测试该工作流程的成本不到一美元。

立即开始构建持久 AI 产物

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

阅读 API 文档