使用指南
用于电商产品图片的 flux-2/image-to-image:hiapi API 指南
多参考图编辑、经实测验证的宽高比行为,以及一个可直接批量处理产品目录的 Python 脚本
如果你手头已有还不错的商品照片——即便是背景不对、裁切不当的杂乱照片——flux-2/image-to-image 也能在不重拍的情况下把它们变成可直接上架的电商图片。它是一个编辑模型,不是文生图模型:输入 1 到 8 张参考图加一条指令,它就会返回一张新图,在更换周围一切元素——背景、光线、构图,甚至商品所处的场景——的同时,精确保留商品的形状、颜色、材质与比例。
我们通过 hiapi 的 /v1/tasks API 端到端跑通了两个常见的电商任务——棚拍背景替换与生活方式场景合成——并在写下这些内容之前,对照 hiapi 的定价页核验了输入 schema、宽高比行为以及真实的单图价格。
- flux-2/image-to-image 单次调用最多接受 8 张参考图,因此背景替换(1 张图)和场景合成(2 张及以上)使用的是完全相同的端点。
aspect_ratio: "auto"确实会跟随输入图自身的宽高比——一张竖版 9:16 的运动鞋照片会保持 9:16,除非你覆盖它。像"1:1"这样的显式值则会强制该形状,无论你输入的是什么。- 定价按分辨率分档:1K 为 $0.035/张,2K 为 $0.05/张——一口价,不按百万像素计费。
- 这是真正的编辑,而非重绘:商品本身的 logo、缝线与材质纹理在背景/场景变化后依然保留。
- 一个批处理脚本(见下文)就足以用同一条背景清理提示词跑完整个产品目录。
flux-2/image-to-image 实际做了什么
在底层,它是 hiapi 统一任务接口上的单个模型——你不是在“背景移除”工具和“合成”工具之间做选择,而是写一条指令,并为该任务提供正确的参考图:
curl -s https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-2/image-to-image",
"input": {
"prompt": "Remove the background and place the product on a seamless white studio background with a soft contact shadow. Keep the product'"'"'s shape, color and proportions unchanged.",
"image_urls": ["https://your-cdn.example.com/raw-product-photo.jpg"],
"aspect_ratio": "auto",
"resolution": "1K"
}
}'
必填字段为 prompt(字符串)、image_urls(数组,最多 8 张)、aspect_ratio(auto、1:1、4:3、3:4、16:9、9:16、3:2 或 2:3)以及 resolution(1K 或 2K)。响应会返回一个 taskId——轮询 GET /v1/tasks/{taskId} 直到 status 为 success,然后立即从 output[0].url 下载图片(该链接会过期,所以不要把它当作永久存储)。
背景替换只需要一张参考图。若要把商品合成进生活方式场景,请传两张:商品图在前,目标场景在后,并在提示词中描述哪个物体放在哪里。
“auto”宽高比实际做了什么
这是在你围绕它搭建流水线之前值得先测试的部分,因为很容易想当然地认为模型总是输出固定方形或某个固定默认形状。事实并非如此。

这是一张竖版运动鞋照片,以 aspect_ratio: "auto" 运行——输出为 720×1280,与输入参考图精确的 9:16 匹配,未被裁切或加边成其他形状。auto 意味着“跟随输入”,而不是“选一个默认值”。

相同的源图、相同的提示词——唯一的变化是显式设置了 aspect_ratio: "1:1"。输出为精确的 1024×1024 方形,模型重新构图以适配,而不是简单裁切。如果你的产品目录需要为列表页提供一致的方形网格,就强制该比例;如果你希望每张图保留其原生构图,就保持 auto。
两个场景合成示例
背景替换是简单情形。对电商内容更有用的技巧,是把干净的商品图合成进生活方式场景——适用于主图、社交帖子或“搭配展示”的次级照片,无需真实拍摄。

这里输入了两张参考图:一张耳机的纯商品照,以及一个单独的阳光橡木桌场景。提示词指明了要放置哪个物体以及放在哪里(“自然地靠在植物旁”),并要求模型匹配场景既有的光线方向并投下可信的阴影——正是这个细节让合成图显得真实,而非粘贴上去的。

相同的目标场景,不同的商品,同样使用 aspect_ratio: "auto"(它继承了场景参考图的方形构图)。滤杯的形状与陶瓷材质从其自身参考照中原样保留——只有周围环境发生了变化。
批量处理产品目录
按 $0.035/张(1K 分辨率)计——比为一个商品重新置景重拍还便宜——用 flux-2/image-to-image 跑完整个产品目录很容易说通。如果你只想先低成本测试提示词,那么在规模化使用完整模型之前,更轻量的 flux-2-klein-4b/image-to-image 档位值得一看;两者的当前价格都在 hiapi 的定价页上。
一旦为某个商品调好提示词,在整个目录上运行它就只是对同一请求的循环。这个示例遍历一组原始商品照,对每张运行相同的背景清理指令,并打印出结果托管 URL:
import os
import time
import requests
API_BASE = "https://api.hiapi.ai/v1/tasks"
TOKEN = os.environ["HIAPI_API_KEY"]
HEADERS = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json",
}
BACKGROUND_PROMPT = (
"Remove the existing background and place the product on a seamless pure white "
"studio background with a soft, realistic contact shadow and even diffused catalog "
"lighting. Keep the product's exact shape, color, material and proportions unchanged."
)
def edit_product_image(prompt, image_urls, aspect_ratio="auto", resolution="1K"):
payload = {
"model": "flux-2/image-to-image",
"input": {
"prompt": prompt,
"image_urls": image_urls,
"aspect_ratio": aspect_ratio,
"resolution": resolution,
},
}
resp = requests.post(API_BASE, headers=HEADERS, json=payload, timeout=60)
resp.raise_for_status()
task_id = resp.json()["data"]["taskId"]
while True:
time.sleep(3)
status = requests.get(f"{API_BASE}/{task_id}", headers=HEADERS, timeout=30).json()
state = status["data"]["status"]
if state == "success":
return status["data"]["output"][0]["url"]
if state == "fail":
raise RuntimeError(f"task {task_id} failed: {status}")
CATALOG = [
{"sku": "SNK-001", "image_url": "https://cdn.example.com/raw/snk-001.jpg"},
{"sku": "HDP-014", "image_url": "https://cdn.example.com/raw/hdp-014.jpg"},
{"sku": "DRP-022", "image_url": "https://cdn.example.com/raw/drp-022.jpg"},
]
for item in CATALOG:
out_url = edit_product_image(BACKGROUND_PROMPT, [item["image_url"]])
print(item["sku"], "->", out_url)
每个 output[0].url 都是限时链接——请在循环中下载并重新托管它(你自己的存储桶、CDN,或任何支撑你店铺后端的服务),而不是保存原始链接。关于任务/轮询/下载循环的完整走查(含错误处理),见 如何通过 hiapi API 使用 flux-2/image-to-image。
常见问题
flux-2/image-to-image 会改变商品本身,还是只改背景? 提示得当时,它应只改变你告诉它要改的内容——背景、场景、光线——同时保持商品在参考图中的形状、颜色和材质不变。并非每次尝试都完美;发布前请将输出与源图核对,尤其是包装上的小字或 logo。
单次调用最多能用几张参考图? 最多 8 张。背景替换只需 1 张。场景合成通常需要 2 张(商品 + 目标场景)——当你希望模型在一组照片中匹配某个特定的已有角色、道具或品牌元素时,更多参考图才有用。
应该用 1K 还是 2K 分辨率? 1K($0.035/张)足以满足大多数产品目录和网页列表用途——上面的耳机和滤杯合成图都是在 1K 下生成的。主视觉横幅或之后会被裁切、放大的任何内容,则选用 2K($0.05/张)。
flux-2/image-to-image 和 Klein 档位有什么区别? Klein(9b 和 4b)以部分编辑保真度换取更低价格——适合在把完整模型跑遍目录之前低成本测试提示词。当前价格见上方的价格表。
我可以强制指定输出尺寸而不让模型决定吗?
可以——把 aspect_ratio 设为显式值(1:1、4:3、16:9 等)而不是 auto。模型会重新构图以适配该形状,而不是简单裁切自动匹配的输出。
关键要点
- flux-2/image-to-image 编辑现有商品照片,而非从零生成——参考图输入,编辑后的图输出,商品身份得以保留。
aspect_ratio: "auto"跟随输入图自身的形状;当你需要整个目录网格保持一致的输出比例时,请显式设置。- 1K 分辨率($0.035/张)覆盖大多数电商用例;2K($0.05/张)用于主视觉尺寸或重度裁切的输出。
- 同一端点同时处理单图背景替换和多图场景合成——区别只在于你传了多少张
image_urls。 - 批处理只是在任务/轮询/下载循环上套一个普通循环,无需单独的批量端点。
如果你已准备好把它用于自己的产品目录,flux-2/image-to-image 模型页提供实时 schema 与快速开始请求,flux-2/image-to-image 提示词配方则收录了背景替换和场景合成之外的更多经测试的提示词模式。