单张图好看不难,难的是一百个 SKU 出来是一套。风格飘的话,店铺看着像拼盘, 比图糙更伤转化。
这篇讲在该服务上怎么用 批量生图做出风格统一的全店视觉。
一、把提示词拆成「固定部分」和「变量部分」
风格统一的核心就一句话:除了商品本身,其它全部写死。
// 固定部分:整店共用,一个字都不要改
const STYLE = [
'正方形构图,商品居中,占画面约 60%',
'纯白色背景,商品下方有柔和接地投影',
'柔和顶部打光,单一光源,高光克制不过曝',
'真实商业摄影质感,无文字无水印',
].join(',');
// 变量部分:只描述这个商品是什么
const buildPrompt = (sku) => `${sku.desc},${STYLE}`;
一旦 STYLE 定下来就别再动。改一个字,之前出的图就和后面的对不上了------ 真要调整,就整店重出,别半路改。
二、商品描述怎么写才不打架
变量部分只写"是什么",别写构图和光线(那些在 STYLE 里已经定了):
✓ 白色无线蓝牙耳机充电盒,盒盖打开露出耳机
✓ 深灰色针织毛衣,圆领,平铺展示
✗ 白色耳机,居中构图,柔和打光 ← 和 STYLE 重复,还可能冲突
重复描述同一件事最容易出问题。STYLE 说"柔和顶光"、商品描述又说"自然光", 模型就得在两个矛盾指令里挑一个,结果就是这张和那张不一样。
三、同一批一次跑完,别分几天
模型侧可能有版本更新,隔几天跑出来的风格会有细微差异。 全店换图就一次性跑完:
async function batchStyled(skus, { workers = 16, model = 'nano-banana2' } = {}) {
let next = 0;
const out = new Array(skus.length);
await Promise.all(Array.from({ length: workers }, async () => {
while (next < skus.length) {
const i = next++;
try {
out[i] = await callTtq(model, buildPrompt(skus[i]));
} catch { out[i] = null; } // 失败留空,跑完统一挑出来重试
}
}));
return out;
}
同一批必须用同一个模型 。跑到一半换模型,风格立刻断层------ 这也是为什么建议把 model 存进结果里,出问题能查。
四、先小批验证,再全店铺开
一百个 SKU 直接开跑,风格不对就是一百次积分白花。正确顺序:
1. 挑 5 个有代表性的 SKU(规则的、反光的、软材质的、多部件的、主推款)
2. 用 nano-banana2 出,每个 3 版 5 × 3 × 8 = 120 积分
3. 看这 15 张放一起是不是一套 ← 关键的一步,横着看不是竖着看
4. 不一套就调 STYLE,回第 2 步
5. 一套了,全店铺开
第 3 步一定要把图并排放在一起看。单张单张看每张都挺好, 放一起才能发现"这张偏暖那张偏冷"。
五、主推款单独升级
跑量用便宜的,主推款值得多花:
// 全店用 nano-banana2(8 积分)
await batchStyled(allSkus, { model: 'nano-banana2' });
// 主推的 20 个用 nano-banana-pro 或 gpt-image-2 重出,STYLE 完全不变
await batchStyled(topSkus, { model: 'nano-banana-pro' });
STYLE 不变的前提下换模型,风格差异很小,但细节和质感明显更好。 一百个 SKU 里挑 20 个主推重出,成本只多 200 积分。
六、模型与消耗
| 模型代码 | 定位 | 消耗 |
|---|---|---|
nano-banana2 |
全店跑量首选 | 8 积分/次 |
nano-banana-pro |
主推款升级,支持 1K/2K/4K | 10 积分/次 |
gpt-image-2 |
质感最好,首页/banner 用 | 按次计费 |
Veo 3.1 视频生成 / Sora 2 |
商品视频 | 120 / 130 积分/次 |
七、小结
风格统一四条:提示词拆成固定 STYLE + 商品变量 、商品描述别重复构图和光线 、 同一批用同一个模型一次跑完 、先 5 个验证再全店铺开。
该服务并发高 ,一百个 SKU 一次跑完才现实; 模型全 (nano banana pro、nano-banana2、gpt-image-2)、价格便宜 (跑量成本可控)、 出图快 、稳定。
接口服务:甜甜圈API(dashengfenshen.cn)