Install
openclaw skills install @linkfox-ai/linkfox-aigc-imagegen-cloth服饰图生成(模特/服装类)。支持单张或套图:白底图(隐形模特)、模特图、种草图、卖点图、A+图、尺码图。单张单类型直接出图;多张多类型自动编排规划。用户上传模特图或服饰图(上装/下装/连衣裙/外套/鞋帽等)并说"做套图""做模特图""做种草图""做卖点图""做A+图""做尺码图""做服饰白底图"时触发。纯图片编辑操作走 linkfox-aigc-imagegen。
openclaw skills install @linkfox-ai/linkfox-aigc-imagegen-cloth统一入口:服饰 / 模特类商品(上装、下装、连衣裙、外套、鞋帽等)的全类型电商出图能力。单张直出 & 套图编排都从这一个 skill 进入。
| 条件 | 路径 | 操作 |
|---|---|---|
| 只要一张特定类型的图(如"做一张模特图") | 单张直出 | 确定 type → Read 对应 references/types/<type>.md → 执行共享流水线 |
| 要多张 / 多类型 / 套图(如"做一套图""出5张图") | 套图编排 | Read references/runtime/00-index.md → 按步 Read 01-plan / 02-confirm → 调 scripts/run_collection_pipeline.py 三阶段(plan / dispatch / summary,agent 顺序发 3 个 Bash;dispatch 在 skill 层用 ThreadPoolExecutor 并发跑 scripts/run_one_task.py,agent 自己不并发;禁止 Read maintainer/collection/ 或套图阶段 Read types/*.md) |
| type | 名称 | 与卖点关联 | 是否有画面描述 | 默认比例 | 支线 | 是否走 textgen | 详情 reference |
|---|---|---|---|---|---|---|---|
| WHITE_BG | 白底图(隐形模特) | 否 | 否 | 1:1 | ①静态直出 | 否 | references/types/white-bg.md |
| MODEL_IMAGE | 模特图 | 否 | 是 | 1:1 | ②占位符直出 | 否 | references/types/model-image.md |
| SCENE | 种草图 | 是 | 是 | 1:1 | ③textgen 改写 | 是 | references/types/scene.md |
| SELLING_POINT | 卖点图 | 是 | 是 | 1:1 | ③textgen 改写 | 是 | references/types/selling-point.md |
| PREMIUM_APLUS | 高级A+图 | 是 | 是 | 1464:600 | ③textgen 改写 | 是 | references/types/aplus.md |
| STANDARD_APLUS | 普通A+图 | 是 | 是 | 970:600 | ③textgen 改写 | 是 | references/types/aplus.md |
| PHONE_APLUS | 手机A+图 | 是 | 是 | 600:450 | ③textgen 改写 | 是 | references/types/aplus.md |
| SIZE | 尺码图 | 否 | 是 | 1:1 | 两阶段:①阶段1=③textgen 前置分析 + ②阶段2=占位符直出 | 阶段1是/阶段2否 | references/types/size.md |
确定 type 后,必须 Read 对应的 type reference 文件获取该类型走哪条支线、步骤 2 差异逻辑和运行时模板来源,禁止跳过。
linkfox-aigc-imagegen-product 系列。linkfox-aigc-imagegen。linkfox-aigc-textgen。linkfox-aigc-videogen。所有类型都走同一条 3 步流水线(尺码图为两阶段,见下),步骤 2 的差异由各 type reference 指定走哪条支线。
| 支线 | 机制 | 是否填占位符 | 是否调 textgen | 是否过敏感词 | 适用类型 |
|---|---|---|---|---|---|
| ① 静态直出 | 用 scripts/build_imagegen_prompt.py --type WHITE_BG 从 white-bg.md 动态提取静态正文作为最终 prompt | 否 | 否 | 否 | WHITE_BG |
| ② 占位符直出 | 模板填占位符后直接出图(用 scripts/build_imagegen_prompt.py) | 是 | 否 | MODEL_IMAGE 否 / SIZE 阶段2 末尾追加规避指令 | MODEL_IMAGE、SIZE 阶段2 |
| ③ textgen 改写 | 模板填占位符 → linkfox-aigc-textgen 改写出最终 prompt(用 scripts/build_textgen_params.py) | 是 | 是 | SCENE 否 / 卖点·A+ 是 / SIZE 阶段1 否 | SCENE、SELLING_POINT、*_APLUS、SIZE 阶段1 |
imageUrlsimageUrls 为空数组 / 缺失 / 全部无效,立即停止,不得带空图调下游。优先从上下文(用户本轮/历史上传的原始图片路径)补齐;仍无法补齐时如实向用户报错并请求重新上传,禁止带空 imageUrls 继续执行。imageUrls 中的值(保持原顺序):已是公开 URL(http/https 开头)→ 直接透传;本地文件路径(非 http/https)→ 调 linkfox-file-upload 上传获得公开 URL 后替换。imageUrls(全部为公开可访问的 HTTPS URL)各类型的步骤 2 逻辑不同(走哪条支线、用哪个模型、是否做敏感词规避等),详见已 Read 的 references/types/<type>.md。
①静态直出支线约束(WHITE_BG):用
scripts/build_imagegen_prompt.py --type WHITE_BG构建 imagegen 参数文件,脚本会自动从references/types/white-bg.md的text代码块提取白底图静态正文作为最终 prompt。正文较长,一律交脚本读取,不要手动复制或经 shell 变量传递。②占位符直出支线约束(MODEL_IMAGE、SIZE 阶段2):必须使用本 skill 的
scripts/build_imagegen_prompt.py辅助脚本构建 imagegen 提示词参数文件(脚本自动完成模板读取、占位符填充、null 入参替换、SIZE 阶段2 末尾敏感词规避指令追加),禁止手动用 Write 工具拼接 prompt 或用 shell 变量捕获大文本。SIZE 阶段2 的analysis_result用--analysis-file注入,避免大文本经 shell。③textgen 改写支线约束(SCENE、SELLING_POINT、*_APLUS、SIZE 阶段1):必须使用本 skill 的
build_textgen_params.py辅助脚本构建 textgen 参数文件(脚本自动完成模板读取、占位符填充、模型/thinkingLevel 设置、卖点·A+ 敏感词规避指令追加),然后按 textgen SKILL.md 的链式调用方式执行。套图强制走 pipeline 三阶段:套图路径用
scripts/run_collection_pipeline.py跑 plan / dispatch / summary 三阶段,agent 按顺序发 3 个 Bash;并发由 skill 层 dispatch 用ThreadPoolExecutor完成,agent 自己不并发:
--phase plan写image-plan.json/collection-state.json,stdout 直接打 markdown 表格 + 1 行 status JSON(含specs[]/run_one_task_script/state_file/total)- 用户确认后,agent 只发 1 个 dispatch Bash:
python <本skill根>/scripts/run_collection_pipeline.py --phase dispatch --state <state_file>;dispatch 内部用ThreadPoolExecutor并发跑run_one_task.py --index 1..N,每个子任务落task-result-<id>.json片段;dispatch 自身 stdout 不 emitSaved full response,仅末尾 1 行{"status":"dispatch_complete",...}供 agent 内部解析(这条 Bash 不渲染图,是正常的)--phase summary --state <state_file>读片段 → stdout 打末尾 markdown 明细(每张成功图自带内联引用,前端 markdown 渲染器据此渲染整组图)+ 1 行 status JSON;product variant 同时写collection-asset-manifest.json禁止 Agent 在对话中手工完成 S1 推理或 Read S0~S3 全文;禁止用户确认后自己拆 N 个 Bash 跑
run_one_task.py(旧协议;现在并发已在 skill 层完成,自己并发只会重复出图);禁止转发 summary markdown 时把![]()行剥掉(整组图就靠这些行渲染);禁止在 summary 之外另贴Saved full response: [...](与 markdown![]()双重渲染)。下方 bash 单步链路仅适用于单张直出。路径铁律:本链路横跨两个 skill 目录(构参脚本属本 skill,生文与注参脚本属
linkfox-aigc-textgen),当前工作目录不固定,所有脚本一律用绝对路径调用,不要用裸scripts/...相对路径(相对路径会指向错误目录导致执行失败)。其中<本skill根目录>= 本 SKILL.md 所在目录的绝对路径;<textgen根目录>通过skill:linkfox-aigc-textgen解析其 SKILL.md 所在目录的绝对路径取得。
- 构参(本 skill):
python <本skill根目录>/scripts/build_textgen_params.py --type <TYPE> ... --out <textgen_params.json>- 生文(textgen skill):
PROMPT=$(python <textgen根目录>/scripts/aigc_textgen.py --stdin --content-only < <textgen_params.json>)——--content-only输出单行 content 捕获进变量(换行压平为⏎、下游自动还原的机制见 textgen SKILL.md)。- 注参(步骤 3,用
jq内联):用jq把$PROMPT内联拼进下游 imagegen 参数 JSON,再交linkfox-aigc-imagegen出图。bash PROMPT=$(python <textgen根目录>/scripts/aigc_textgen.py --stdin --content-only < <textgen_params.json>) PARAMS=$(jq -nc --arg p "$PROMPT" --argjson imgs '<步骤1的URL JSON数组>' \ '{prompt:$p, imageUrls:$imgs, provider:"<provider>", outputNum:1, aspectRatio:"<ratio>", resolution:"<resolution>"}') # 然后按 linkfox-aigc-imagegen SKILL.md 的调用方式把 $PARAMS 传入出图禁止手动用 Write 工具构造 textgen 参数文件(必须经
build_textgen_params.py)、用jq -r抽取原始 content(会重新引入真实换行符破坏拼接)、或直接写 Python 调 API 绕过此链路。
linkfox-aigc-imagegen 出图(所有类型通用)prompt、步骤 1 的 imageUrls、ratio、resolution、providerskill:linkfox-aigc-imagegen 的 SKILL.md,按其调用方式执行出图脚本。传入参数:
prompt:步骤 2 产出的最终 promptimageUrls:步骤 1 的全部图片 URLprovider:入参指定的模型(默认 BANANA_PRO)aspectRatio:ratio 原样透传resolution:原样透传outputNum:1Saved full response: 后的本地路径)references/runtime/03-deliver.md §3.1 走,agent 在 imagegen Bash 完成后必须:
解析 stdout 的 Saved full response: ["..."] 取本地路径(成功时 1 张)
在对话回复正文里追加 markdown 内联块:
- 第 1 张 · <类型中文名>

类型中文名对照:SCENE→种草图 / SELLING_POINT→卖点图 / MODEL_IMAGE→模特图 / SIZE→尺码图 / WHITE_BG→白底图 / PREMIUM_APLUS→高级A+图 / STANDARD_APLUS→普通A+图 / PHONE_APLUS→手机A+图
禁止把 Saved full response: [...] / Saved full response: <json路径> 协议原文复述进对话回复——它是 skill ↔ bridge 内部协议行,复述会让用户看到裸露的 JSON 数组路径(即"协议行裸露"故障);只读它取路径,不抄字面
禁止自行 echo 一遍 Saved full response: 字面让 bridge 再渲染——bridge 路径 A 的「任务产出」资源卡是 imagegen Bash stdout 自动触发的,agent 不要手动复制
双重渲染(markdown 内联图 + bridge「任务产出」资源卡同时呈现)是当前协议下的预期行为,不算故障
失败情形(stdout 是 Saved full response: <data 路径>.json 单文件)按本 SKILL.md「错误处理与失败护栏」如实告知,不追加内联图
所有要跨步骤复用或交付的文件一律落到会话目录 <cwd>/linkfox/<YYYY-MM-DD>/<session>/{data|media}/(协议见仓库 CLAUDE.md「输出文件位置」)。
| 产物类型 | 目录 | 获取方式 |
|---|---|---|
| 品牌基因 JSON | data/ | linkfox-aigc-imagegen-brand-gene-extract 的 save_brand_gene.py |
| 套图规划 image-plan.json | data/ | S2 确认后 scripts/save_image_plan.py 逐条追加落盘 |
| imageUrls 数组 | data/ | 步骤 1 校验后 Write 到 $DATADIR/image-urls.json(通常很小) |
| task-result-*.json | data/ | 每个 run_one_task.py 完成后落盘的任务结果片段,summary phase 读后汇总末尾 markdown |
| 单张构参 JSON(textgen/imagegen 入参) | data/ | build_textgen_params.py / build_imagegen_prompt.py 的 --out(仅单张直出场景) |
| 结果图 | media/ | linkfox-aigc-imagegen 脚本自动落盘 |
DATADIR=$(python <brand-gene根目录>/scripts/save_brand_gene.py --datadir);下游 --brand-gene-file 指向 S1 落盘的品牌基因绝对路径。
本 skill 依赖下表两个下游 skill,按文档化方式调用:先 Read 对方 SKILL.md 了解其调用方式,单张直出按步骤 2/3 的链式命令、套图按 scripts/run_collection_pipeline.py + scripts/run_one_task.py 编排——两者都按文档以绝对路径调用下游官方脚本(这是允许的)。本 skill 自带的 build_textgen_params.py / build_imagegen_prompt.py / run_collection_pipeline.py / run_one_task.py 等是参数构建与编排辅助脚本,可直接运行。脱离上述文档化链路自行拼调用、或直连下游 HTTP API 才是不允许的。
| 下游 skill | 用途 | 调用时机 |
|---|---|---|
linkfox-aigc-imagegen | AI 生图 | 步骤 3(所有类型) |
linkfox-aigc-textgen | 提示词改写 / 前置分析 | 步骤 2(SCENE、SELLING_POINT、*_APLUS、SIZE 阶段1) |
调用方式:Read skill:<skill-name> 的 SKILL.md,按其中的调用方式章节执行。
以下参数为所有类型通用(类型特有参数见各 type reference):
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
imageUrls | string[] | 必填 | 服饰参考图 URL。步骤 1 会校验可访问性 |
ratio | string | 随类型 | 图片比例,原样透传给 imagegen 的 aspectRatio |
resolution | string | 2K | 分辨率,2K / 4K |
provider | string | — | 生图模型(BANANA_PRO / GPT_2_IMAGE / BANANA_2 / AIDRAW_EDIT / WAN2_7);未传入时用 AskUserQuestion 让用户从上述 5 个模型中选择 |
linkfox-aigc-imagegenskill 对业务失败也返回 exit 0(不是非零退出),所以不能靠命令退出码判断成败,必须解析 stdout。
1. 怎么判一次调用成败
Saved full response: ["xxx.png", ...](JSON 数组路径)→ 图片已落盘 media/,取路径展示。Saved full response: xxx.json(单个 JSON 文件路径,非数组)→ 无图片产物,需读该 JSON 查看错误详情(errcode/errmsg/error)。2. 失败怎么处理(按类型分流)
| 失败类型 | 判断依据 | 处理 |
|---|---|---|
| 参数非法 | errmsg/errorMsg 指向 provider、aspectRatio、resolution、quality 等入参不被接受 | 用 AskUserQuestion 让用户重选对应参数 |
| 认证失败 | errcode==401 或提示 API Key | 停止并提示用户配置 LINKFOX_AGENT_API_KEY,不重试 |
| 瞬时错误 | error 为网络/超时/连接失败(Connection failed、timeout 等) | 最多自动重试 1 次;再失败转「其它错误」 |
| 其它错误 | 配额、内容被拒、服务端 5xx、未知 errcode 等 | 不重试,如实告知用户失败原因 |
3. 硬性护栏(违反即视为故障)
linkfox-aigc-imagegen),失败就按上表处理或上报,绝不"换一个 skill 试试"。本 skill 支持以下 5 个生图模型,模型由 agent 层通过 provider 参数传入;若未传入则由本 skill 向用户确认。
| 模型名称 | 内部代码 |
|---|---|
| LFBanana Pro | BANANA_PRO |
| Img2 | GPT_2_IMAGE |
| LFBanana2 | BANANA_2 |
| Linkfox-Image-1 | AIDRAW_EDIT |
| Wan 2.7 | WAN2_7 |
模型确认:若 provider 为空或不在上表内,使用 AskUserQuestion 让用户从上述 5 个模型中选择,用户选择后再继续执行。将 provider 统一下发给步骤 3。
分辨率是步骤 3 的必传参数。本 skill 支持 2K、4K。
resolution(值为 2K 或 4K):直接使用AskUserQuestion 让用户从 2K / 4K 中选择套图中的每张图片都是独立任务,各任务之间互不依赖。单个类型出图失败不影响其余任务继续执行。
imageUrls 形式直接传递,本 skill 不涉及本地文件上传操作(步骤 1 的 URL 校验除外),禁止探查或调用任何上传脚本。references/runtime/02-confirm.md)。run_collection_pipeline.py 写盘;禁止 Agent 凭记忆 Write 整份 image-plan。$DATADIR/collection-asset-manifest.json,并在 merge 前把 manifest 中的本地 media/ 路径通过 linkfox-file-upload 换成公开 OSS URL。本 skill 不直接上传,但不得暗示本地路径可直接写入 HTML。仅套图路径触发;单张直出不要 Read 本节。
| 步骤 | Read | 操作 |
|---|---|---|
| 入口 | references/runtime/00-index.md | S0 场景判定 |
| plan | references/runtime/01-plan.md | 写 job.json → --phase plan,stdout markdown 表格原样转发 + AskUserQuestion |
| 确认 → dispatch → summary | references/runtime/02-confirm.md | 用户确认 → agent 发 1 个 --phase dispatch Bash(skill 层并发跑全部 run_one_task.py,不渲染图)→ 紧接 1 个 --phase summary Bash 写 manifest + 打含 ![]() 的 markdown 明细 |
维护细则(场景 A/G 完整规则、历史 S1 文案规范)见 references/maintainer/collection/,运行时禁止 Read。
{image_desc},市场化人种 / 品牌调性强控需经 imageDesc 文字描述传入,否则默认欧美商业模特。linkfox-aigc-textgen(GEM_3_FLASH)对目标人群 / 年龄(童装 vs 成人)/ 性别的判定,判定错误会直接传导到模特画像与场景构图。{layoutInfo} 区分;意图填错会导致版式串型。卖点图/A+ 图在 textgen 环节含敏感词规避。analysis_result 质量直接决定阶段2 尺码表的品类判定与提示文案;阶段2 敏感词规避降级为"在送 imagegen 的最终 prompt 末尾追加规避指令、由出图模型自审",无确定性词库兜底。