{"slug":"batch-image","title":"batch-image","summary":"多商品批量生图流水线。商品清单 CSV → 整批统一视觉的商拍图，带并发、重试、断点续跑、成本熔断与挑图联系表。当用户说「批量生图」「一批商品」「跑整个 SKU 表」「几百个商品出图」时使用。","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-28T16:27:18.929126Z","repo":{"url":"https://github.com/dlazy-ai/ecommerce-skills","stars":21,"forks":3,"license":"MIT","updatedAt":"2026-09-28T02:49:10Z"},"bodyHtml":"<hr>\n<h2>name: batch-image\ndescription: 多商品批量生图流水线。商品清单 CSV → 整批统一视觉的商拍图，带并发、重试、断点续跑、成本熔断与挑图联系表。当用户说「批量生图」「一批商品」「跑整个 SKU 表」「几百个商品出图」时使用。</h2>\n<h1>batch-image — 多商品批量生图</h1>\n<p>把单张生图变成<strong>流水线</strong>：一份商品清单 → 一整套风格统一的商拍图。</p>\n<p>批量的难点不是「跑很多次」，而是<strong>跑出来的图要像一套</strong>。本技能的核心是<strong>规范段与变量段分离</strong>：视觉规范逐字不变，只有商品描述随 SKU 变化。</p>\n<hr>\n<h2>生成效果示例</h2>\n<table>\n<thead>\n<tr>\n<th>输入：商品清单（2 个 SKU）</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>SKU001</code> <img src=\"../../docs/batch-image/sku-a-sweater.jpg\" width=\"150\"> <code>军绿色麻花针织圆领毛衣，落肩宽松版型</code></td>\n</tr>\n<tr>\n<td><code>SKU002</code> <img src=\"../../docs/batch-image/sku-b-shoes.jpg\" width=\"150\"> <code>黑色亮面皮革布洛克德比鞋，厚底系带</code></td>\n</tr>\n</tbody>\n</table>\n<p>实际执行的命令（循环体，两个 SKU 只有 <code>DESC</code> 与 <code>--images</code> 不同，规范段逐字相同）：</p>\n<pre><code>for sku in a-sweater b-shoes; do\n  case $sku in\n    a-sweater) DESC='军绿色麻花针织圆领毛衣，落肩宽松版型' ;;\n    b-shoes)   DESC='黑色亮面皮革布洛克德比鞋，厚底系带' ;;\n  esac\n  dlazy seedream-5.0 \\\n    --prompt \"电商商拍图。图1 是商品：${DESC}。商品的颜色、材质纹理、款式细节必须与图1完全一致。放置在同一套统一视觉里：纯米白色摄影棚背景，柔和顶光加左侧补光，45 度视角，画面下方留出统一的商品投影，构图与留白在整组图中保持一致。真实商业产品摄影，无文字无水印。\" \\\n    --images docs/batch-image/sku-${sku}.jpg --size 1:1 --resolution 2k \\\n    --save docs/batch-image/example-output-${sku}.jpg\ndone\n</code></pre>\n<p><strong>输出：同一套视觉规范下的两个 SKU</strong></p>\n<table>\n<thead>\n<tr>\n<th>SKU001</th>\n<th>SKU002</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><img src=\"../../docs/batch-image/example-output-a-sweater.jpg\" width=\"280\"></td>\n<td><img src=\"../../docs/batch-image/example-output-b-shoes.jpg\" width=\"280\"></td>\n</tr>\n<tr>\n<td>1:1 / 2K，5 credits</td>\n<td>1:1 / 2K，5 credits</td>\n</tr>\n</tbody>\n</table>\n<p>两张的背景色、光位、视角与投影方向一致——因为规范段逐字相同；商品各自保真。100 个 SKU 就是这个循环跑 100 次，总价约 500 credits。</p>\n<hr>\n<h2>1、能力边界</h2>\n<table>\n<thead>\n<tr>\n<th>能力</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>批量规模</td>\n<td>一批最多 100 个商品（对应企业功能的规格）</td>\n</tr>\n<tr>\n<td>成本优势</td>\n<td>批量场景下单图算力成本可降至约 7 折</td>\n</tr>\n<tr>\n<td>协作</td>\n<td>多人在线协作、出片进度实时追踪</td>\n</tr>\n<tr>\n<td>资产共享</td>\n<td>共享模特 / 参考图 / 作品 / 算力点</td>\n</tr>\n<tr>\n<td>本技能落地</td>\n<td>清单驱动循环 + 并发控制 + 失败重试 + 按 SKU 归档 + 汇总报告</td>\n</tr>\n</tbody>\n</table>\n<p><strong>不做</strong>：不在同一批里混用不同视觉规范（那不是一批）；不跳过抽样质检直接全量上架；不因为批量就放宽商品保真要求。</p>\n<hr>\n<h2>2、输入素材规则</h2>\n<p>生成前先自检这几条硬性约束：</p>\n<ul>\n<li>大小：<strong>20KB ~ 15MB</strong></li>\n<li>分辨率：<strong>大于 400×400</strong></li>\n<li>格式：<strong>jpg / jpeg / png / webp</strong></li>\n</ul>\n<p><strong>商品清单（manifest）</strong> 是批量的输入，建议 CSV：</p>\n<pre><code>sku,image,desc\nSKU001,docs/batch-image/sku-a-sweater.jpg,军绿色麻花针织圆领毛衣，落肩宽松版型\nSKU002,docs/batch-image/sku-b-shoes.jpg,黑色亮面皮革布洛克德比鞋，厚底系带\n</code></pre>\n<p><strong>每张商品图仍要满足单图规则</strong>：20KB~15MB、&gt;400×400、jpg/jpeg/png/webp。</p>\n<p><strong>批量前必做的事</strong></p>\n<table>\n<thead>\n<tr>\n<th>步骤</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>✅ 先跑通 1 个 SKU</td>\n<td>单个跑不对，跑 100 个只是错 100 次</td>\n</tr>\n<tr>\n<td>✅ 再抽样 5 个 SKU</td>\n<td>覆盖品类/颜色/深浅色的边界情况</td>\n</tr>\n<tr>\n<td>✅ 确认成本</td>\n<td><code>--dry-run</code> 单价 × SKU 数 × batch 数</td>\n</tr>\n<tr>\n<td>❌ 直接全量</td>\n<td>最容易烧算力的做法</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2>3、规范段 / 变量段分离</h2>\n<p>这是批量出统一视觉的唯一方法：</p>\n<pre><code>prompt = [规范段：整批逐字不变]  +  [变量段：每个 SKU 不同]\n</code></pre>\n<table>\n<thead>\n<tr>\n<th>段</th>\n<th>内容</th>\n<th>是否变</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>规范段</td>\n<td>背景、光位、机位、构图留白、投影、色调、输出风格、<code>no text, no watermark</code></td>\n<td><strong>整批逐字不变</strong></td>\n</tr>\n<tr>\n<td>变量段</td>\n<td>商品品类 + 颜色 + 材质 + 关键结构特征</td>\n<td>每个 SKU 不同</td>\n</tr>\n</tbody>\n</table>\n<p>写成 shell：</p>\n<pre><code>SPEC='放置在同一套统一视觉里：纯米白色摄影棚背景，柔和顶光加左侧补光，45 度视角，画面下方留出统一的商品投影，构图与留白在整组图中保持一致。真实商业产品摄影，无文字无水印。'\n\nwhile IFS=, read -r SKU IMG DESC; do\n  dlazy seedream-5.0 \\\n    --prompt \"电商商拍图。图1 是商品：${DESC}。商品的颜色、材质纹理、款式细节必须与图1完全一致。${SPEC}\" \\\n    --images \"$IMG\" --size 1:1 --resolution 2k \\\n    --save \"docs/batch-image/out/${SKU}.jpg\"\ndone &lt; manifest.csv\n</code></pre>\n<p><strong>规范段一旦改动就必须整批重跑</strong>——否则同一批里会出现两种视觉。</p>\n<hr>\n<h2>4、并发、重试与进度</h2>\n<p><strong>并发</strong>：dlazy 是单次调用一个任务，批量靠 shell 并发。控制在 4~6 路，太高容易触发限流。</p>\n<pre><code>run_one() { ... }               # 单个 SKU 的生成逻辑\nexport -f run_one\nxargs -P 5 -I{} bash -c 'run_one {}' &lt; sku-list.txt     # 5 路并发\n</code></pre>\n<p><strong>重试</strong>：网络与服务端偶发失败很正常，包一层重试。</p>\n<pre><code>for attempt in 1 2 3; do\n  dlazy ... &amp;&amp; break\n  echo \"retry $attempt for $SKU\" &gt;&amp;2; sleep $((attempt * 10))\ndone\n</code></pre>\n<p><strong>异步模式</strong>：SKU 很多时用 <code>--no-wait</code> 先把任务全部提交，拿到 <code>generateId</code> 后再统一轮询，避免长时间占着进程。</p>\n<pre><code>GID=$(dlazy seedream-5.0 --no-wait ... | python3 -c 'import sys,json;print(json.load(sys.stdin)[\"result\"][\"task\"][\"generateId\"])')\necho \"$SKU,$GID\" &gt;&gt; tasks.csv\n# 稍后统一收结果\nwhile IFS=, read -r SKU GID; do dlazy status \"$GID\" --wait; done &lt; tasks.csv\n</code></pre>\n<p><strong>进度与汇总</strong>：每个 SKU 记一行状态，跑完输出报告。</p>\n<pre><code>echo \"$SKU,$(test -f out/$SKU.jpg &amp;&amp; echo ok || echo fail)\" &gt;&gt; report.csv\nawk -F, '{c[$2]++} END{for(k in c) print k, c[k]}' report.csv\n</code></pre>\n<hr>\n<h2>5、工具调用</h2>\n<p>本技能使用 dLazy 的 <strong><code>seedream-5.0</code></strong>（批量场景的关键指标是<strong>单图成本</strong>与<strong>参考图支持</strong>：本模型单张约 5 credits、支持最多 10 张参考图、支持 2K/3K/4K；100 个 SKU 的成本量级从数百降到数十。对商品保真要求极高的批次改用 <code>gpt-image-2</code>）。</p>\n<h3>调用方式</h3>\n<p>两种等价写法，选一种。统一入口会自动选后端、失败重试、建目录落盘、估算成本：</p>\n<pre><code># A. 统一入口（推荐）：可切任意后端，加 --dry-run 不计费空跑\nnode scripts/gen.mjs --task batch-image \\\n  --prompt '&lt;见下方 Prompt 模板&gt;' \\\n  --images &lt;按下表顺序&gt; \\\n  --save output/batch-image-&lt;sku&gt;.jpg\n\n# B. 直接用 dLazy CLI（不想引入 Node 依赖时，效果等价）\ndlazy seedream-5.0 --prompt '...' --images ... --save output/batch-image.jpg\n</code></pre>\n<p><strong>参数约定（本技能固定用法）</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>取值</th>\n<th>理由</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>--images</code></td>\n<td><code>[该 SKU 的商品图]</code>（+ 整批共用的参考图 / 模特图）</td>\n<td>共用素材放在固定位置，prompt 里用固定图号引用</td>\n</tr>\n<tr>\n<td><code>--size</code></td>\n<td>整批统一（<code>1:1</code> 主图 / <code>3:4</code> 竖版）</td>\n<td>不统一就不是一套</td>\n</tr>\n<tr>\n<td><code>--resolution</code></td>\n<td><code>2k</code></td>\n<td>上架足够；4K 只给需要印刷的批次</td>\n</tr>\n<tr>\n<td><code>--batch</code></td>\n<td><code>1</code>（批量场景靠 SKU 数量，不靠 batch）</td>\n<td>batch 会让成本翻倍</td>\n</tr>\n<tr>\n<td><code>--no-wait</code></td>\n<td>SKU 很多时开启</td>\n<td>先提交后轮询，避免长时间阻塞</td>\n</tr>\n<tr>\n<td><code>--save</code></td>\n<td><code>docs/batch-image/out/&lt;SKU&gt;.jpg</code></td>\n<td>用 SKU 命名，便于回填到商品库</td>\n</tr>\n</tbody>\n</table>\n<blockquote>\n<p><strong>模型切换</strong>：<code>seedream-5.0</code> 便宜、适合氛围与场景图；对商品保真要求极高（图案位置、五金细节）的批次换 <code>gpt-image-2</code>，成本约 6 倍。同一批内不要混用两个模型。</p>\n</blockquote>\n<h3>Command Examples</h3>\n<pre><code># basic call: 单个 SKU（先跑通这个，再谈批量）\ndlazy seedream-5.0 \\\n  --prompt '电商商拍图。图1 是商品：军绿色麻花针织圆领毛衣，落肩宽松版型。商品的颜色、材质纹理、款式细节必须与图1完全一致。放置在同一套统一视觉里：纯米白色摄影棚背景，柔和顶光加左侧补光，45 度视角，画面下方留出统一的商品投影。真实商业产品摄影，无文字无水印。' \\\n  --images docs/batch-image/sku-a-sweater.jpg --size 1:1 --resolution 2k\n\n# complex call: 完整流水线（清单驱动 + 5 路并发 + 3 次重试 + 汇总报告）\ncat &gt; manifest.csv &lt;&lt;'CSV'\nSKU001,docs/batch-image/sku-a-sweater.jpg,军绿色麻花针织圆领毛衣，落肩宽松版型\nSKU002,docs/batch-image/sku-b-shoes.jpg,黑色亮面皮革布洛克德比鞋，厚底系带\nCSV\n\nSPEC='放置在同一套统一视觉里：纯米白色摄影棚背景，柔和顶光加左侧补光，45 度视角，画面下方留出统一的商品投影，构图与留白在整组图中保持一致。真实商业产品摄影，无文字无水印。'\nmkdir -p docs/batch-image/out\n\nrun_one() {\n  IFS=, read -r SKU IMG DESC &lt;&lt;&lt; \"$1\"\n  for attempt in 1 2 3; do\n    dlazy seedream-5.0 \\\n      --prompt \"电商商拍图。图1 是商品：${DESC}。商品的颜色、材质纹理、款式细节必须与图1完全一致。${SPEC}\" \\\n      --images \"$IMG\" --size 1:1 --resolution 2k \\\n      --save \"docs/batch-image/out/${SKU}.jpg\" &gt;/dev/null 2&gt;&amp;1 &amp;&amp; break\n    sleep $((attempt * 10))\n  done\n  if [ -f \"docs/batch-image/out/${SKU}.jpg\" ]; then echo \"${SKU},ok\"; else echo \"${SKU},fail\"; fi\n}\nexport -f run_one; export SPEC\n\nxargs -P 5 -I{} bash -c 'run_one \"{}\"' &lt; manifest.csv | tee docs/batch-image/report.csv\nawk -F, '{c[$2]++} END{printf \"\\n=== 汇总 ===\\n\"; for(k in c) printf \"%s: %d\\n\", k, c[k]}' docs/batch-image/report.csv\n\n# 先估价：单价 × SKU 数\ndlazy seedream-5.0 --dry-run --prompt '...' --images a.jpg --size 1:1 | grep estimatedCost\necho \"SKU 数：$(wc -l &lt; manifest.csv)\"\n\n</code></pre>\n<h3>延伸阅读</h3>\n<table>\n<thead>\n<tr>\n<th>要查什么</th>\n<th>去哪</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>认证、多后端配置、输出结构、错误码</td>\n<td><a href=\"references/provider-cli.md\"><code>references/provider-cli.md</code></a></td>\n</tr>\n<tr>\n<td><code>seedream-5.0</code> 的全部可用参数</td>\n<td><a href=\"references/model-flags.md\"><code>references/model-flags.md</code></a></td>\n</tr>\n<tr>\n<td>统一入口的全部选项</td>\n<td><code>node scripts/gen.mjs --help</code></td>\n</tr>\n</tbody>\n</table>\n<h2>6、Prompt 模板</h2>\n<pre><code>【变量段 · 每个 SKU 不同】\n电商商拍图。图1 是商品：[品类 + 颜色 + 材质 + 关键结构特征]。\n商品的颜色、材质纹理、款式细节必须与图1完全一致。\n\n【规范段 · 整批逐字不变】\n放置在同一套统一视觉里：[背景]，[光位]，[机位/视角]，\n画面下方留出统一的商品投影，构图与留白在整组图中保持一致。\n真实商业产品摄影，无文字无水印。\n</code></pre>\n<p><strong>按问题追加的修正句</strong>（改了就要整批重跑）</p>\n<table>\n<thead>\n<tr>\n<th>问题</th>\n<th>处理</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>深色商品在浅背景上发灰</td>\n<td>规范段补 <code>深色商品需加右侧轮廓光勾边，避免与背景糊在一起</code></td>\n</tr>\n<tr>\n<td>不同 SKU 的商品大小忽大忽小</td>\n<td>规范段补 <code>商品在画面中的占比统一为约 [X]%，边距一致</code></td>\n</tr>\n<tr>\n<td>投影方向不一致</td>\n<td>规范段补 <code>投影统一朝画面右下方，长度约为商品高度的 [X]</code></td>\n</tr>\n<tr>\n<td>某些 SKU 保真度不够</td>\n<td>那部分 SKU 单独用 <code>gpt-image-2</code> 重跑，并在报告里标注</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2>7、执行流程</h2>\n<ol>\n<li><strong>建清单</strong>：<code>sku,image,desc</code> 三列 CSV，每张商品图先过单图规则校验。</li>\n<li><strong>写规范段</strong>：背景 / 光位 / 机位 / 占比 / 投影 / 色调 / 输出风格——<strong>定稿后不许改</strong>。</li>\n<li><strong>跑通 1 个 SKU</strong>：确认规范段和变量段都对。</li>\n<li><strong>抽样 5 个 SKU</strong>：覆盖深色 / 浅色 / 反光 / 大件 / 小件的边界。</li>\n<li><strong><code>--dry-run</code> 估总价</strong>：单价 × SKU 数。</li>\n<li><strong>全量跑</strong>：5 路并发 + 3 次重试；SKU 很多时用 <code>--no-wait</code> 提交后统一轮询。</li>\n<li><strong>看汇总报告</strong>：失败的单独重跑。</li>\n<li><strong>抽样质检</strong>：随机抽 10% 过 <a href=\"../detect-task/skill.md\">detect-task</a>；不合格的 SKU 单独用 <code>gpt-image-2</code> 重跑。</li>\n</ol>\n<hr>\n<h2>8、常见问题</h2>\n<table>\n<thead>\n<tr>\n<th>现象</th>\n<th>原因</th>\n<th>处理</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>同一批里视觉不统一</td>\n<td>中途改了规范段</td>\n<td>规范段定稿后不许改；改了就整批重跑</td>\n</tr>\n<tr>\n<td>深色商品糊进背景</td>\n<td>缺轮廓光</td>\n<td>规范段补轮廓光句，整批重跑</td>\n</tr>\n<tr>\n<td>商品占比忽大忽小</td>\n<td>未约束占比</td>\n<td>规范段补占比与边距句</td>\n</tr>\n<tr>\n<td>部分 SKU 保真度不够</td>\n<td>低价模型的局限</td>\n<td>那些 SKU 单独用 <code>gpt-image-2</code> 重跑</td>\n</tr>\n<tr>\n<td>跑到一半失败一堆</td>\n<td>并发太高触发限流</td>\n<td>并发降到 4~5，加重试与退避</td>\n</tr>\n<tr>\n<td>成本超预算</td>\n<td>用了 <code>--batch</code> 或 4K</td>\n<td>批量场景 <code>--batch 1</code> + <code>2k</code></td>\n</tr>\n<tr>\n<td>跑完不知道哪些失败了</td>\n<td>没有报告</td>\n<td>用第四节的 report.csv + 汇总</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2>Tips</h2>\n<p>Visit <a href=\"https://dlazy.com\">https://dlazy.com</a> for more information.</p>\n","files":[{"path":"examples/brand.yaml","sizeBytes":1617,"isText":true},{"path":"references/model-flags.md","sizeBytes":1866,"isText":true},{"path":"references/platform-specs.md","sizeBytes":2136,"isText":true},{"path":"references/provider-cli.md","sizeBytes":4802,"isText":true},{"path":"scripts/batch.mjs","sizeBytes":11011,"isText":false},{"path":"scripts/brand.mjs","sizeBytes":4516,"isText":false},{"path":"scripts/check_listing.py","sizeBytes":15929,"isText":true},{"path":"scripts/gen.mjs","sizeBytes":9495,"isText":false},{"path":"scripts/lib/miniyaml.mjs","sizeBytes":2824,"isText":false},{"path":"scripts/lib/providers.mjs","sizeBytes":12171,"isText":false},{"path":"scripts/lib/tasks.json","sizeBytes":3202,"isText":true},{"path":"scripts/run_loop.mjs","sizeBytes":9719,"isText":false},{"path":"skill.md","sizeBytes":12888,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-28T16:27:29.816808Z","sha256":"1FDC77EC3FA9BC6E1C9FCE5C18AEEC84D56C2B02F77D91083F4B005588C54EE7","sizeBytes":41376},"review":null,"source":{"repositoryUrl":"https://github.com/dlazy-ai/ecommerce-skills","path":"skills/batch-image","license":"MIT","commit":"c022f20067c5a83126643e518519dd567de187c1","subtreeSha":"98292BBC8212823F79FED8C9B5FF6035EF60C3F001ACD5D0C3CEEE7937928BA3","lastSyncedAt":"2026-09-28T16:27:18.924816Z"},"reviewedAt":"2026-09-28T16:28:26.742657Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/dlazy-ai/ecommerce-skills/tree/main/skills/batch-image"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install dlazy-ai-ecommerce-skills@llmmart"},{"target":"git","command":"git clone https://github.com/dlazy-ai/ecommerce-skills.git"}]}