{"id":"4203cc20-8568-4d30-9dfd-45ee4c2fcbab","entityType":"agent","slug":"clawhub-dlazyai-fabric-on-body","name":"一键替换服装面料 Fabric on Body","canonicalUrl":"https://www.xpersona.co/agent/clawhub-dlazyai-fabric-on-body","canonicalPath":"/agent/clawhub-dlazyai-fabric-on-body","generatedAt":"2026-10-10T22:49:15.525Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T20:33:10.360Z","emptyReason":null},"description":"一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。 Skill: 一键替换服装面料 Fabric on Body Owner: dlazyai Summary: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。 Tags: latest:1.0.19 Version history: v1.0.19 | 2026-10-10T01:49:39.917Z | user 例行版本更新 2026-10-10 v1.0.18 | 2026-10-08T01:42:20.407Z | user 例行版本更新 2026-10-08 v1.0.17 | 2026-10-04T01:42:31.563Z | user 例行版本更新 2026-10-04 v1.0.16 | 2026-10-02T05:15:32.141Z | user 例行版本更新 2026-10-02 v1.0.15 |","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.3K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s170j1ymymrxasgd00dsk7tckx84cf45:fabric-on-body","sourceUrl":"https://clawhub.ai/dlazyai/fabric-on-body","homepage":"https://clawhub.ai/dlazyai/skills/fabric-on-body","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/dlazyai/fabric-on-body","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/dlazyai/skills/fabric-on-body","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。 Skill: 一键替换服装面料 Fabric on Body Owner: dlazyai Summary: 一键替换服装面料。版式图 + 面料图 → 换上新面料的"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T20:33:10.360Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T20:33:10.360Z","emptyReason":null},"stars":null,"forks":null,"downloads":1265,"packageName":null,"latestVersion":"1.0.19","tractionLabel":"1.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T20:33:10.360Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T20:33:10.360Z","lastCrawledAt":"2026-10-10T20:33:10.360Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T20:33:10.360Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.19","createdAt":"2026-10-10T01:49:39.917Z","changelog":"例行版本更新 2026-10-10","fileCount":11,"zipByteSize":25340},{"version":"1.0.18","createdAt":"2026-10-08T01:42:20.407Z","changelog":"例行版本更新 2026-10-08","fileCount":11,"zipByteSize":25398},{"version":"1.0.17","createdAt":"2026-10-04T01:42:31.563Z","changelog":"例行版本更新 2026-10-04","fileCount":11,"zipByteSize":25336},{"version":"1.0.16","createdAt":"2026-10-02T05:15:32.141Z","changelog":"例行版本更新 2026-10-02","fileCount":11,"zipByteSize":25428},{"version":"1.0.15","createdAt":"2026-09-30T01:45:42.070Z","changelog":"例行版本更新 2026-09-30","fileCount":11,"zipByteSize":25286},{"version":"1.0.14","createdAt":"2026-09-28T02:35:48.622Z","changelog":"例行版本更新 2026-09-28","fileCount":11,"zipByteSize":25367},{"version":"1.0.13","createdAt":"2026-09-24T02:37:00.890Z","changelog":"例行版本更新 2026-09-24","fileCount":11,"zipByteSize":25817},{"version":"1.0.12","createdAt":"2026-09-22T01:40:31.296Z","changelog":"例行版本更新 2026-09-22","fileCount":11,"zipByteSize":25757}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s170j1ymymrxasgd00dsk7tckx84cf45:fabric-on-body","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dlazyai-fabric-on-body/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dlazyai-fabric-on-body/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dlazyai-fabric-on-body/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dlazyai-fabric-on-body/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dlazyai-fabric-on-body/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dlazyai-fabric-on-body/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T22:49:15.522Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dlazyai-fabric-on-body/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dlazyai-fabric-on-body/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dlazyai-fabric-on-body/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dlazyai-fabric-on-body/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T20:33:10.360Z","emptyReason":null},"readme":"Skill: 一键替换服装面料 Fabric on Body\n\nOwner: dlazyai\n\nSummary: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。\n\nTags: latest:1.0.19\n\nVersion history:\n\nv1.0.19 | 2026-10-10T01:49:39.917Z | user\n\n例行版本更新 2026-10-10\n\nv1.0.18 | 2026-10-08T01:42:20.407Z | user\n\n例行版本更新 2026-10-08\n\nv1.0.17 | 2026-10-04T01:42:31.563Z | user\n\n例行版本更新 2026-10-04\n\nv1.0.16 | 2026-10-02T05:15:32.141Z | user\n\n例行版本更新 2026-10-02\n\nv1.0.15 | 2026-09-30T01:45:42.070Z | user\n\n例行版本更新 2026-09-30\n\nv1.0.14 | 2026-09-28T02:35:48.622Z | user\n\n例行版本更新 2026-09-28\n\nv1.0.13 | 2026-09-24T02:37:00.890Z | user\n\n例行版本更新 2026-09-24\n\nv1.0.12 | 2026-09-22T01:40:31.296Z | user\n\n例行版本更新 2026-09-22\n\nv1.0.11 | 2026-09-20T01:49:40.568Z | user\n\n例行版本更新 2026-09-20\n\nv1.0.10 | 2026-09-18T02:10:53.767Z | user\n\n例行版本更新 2026-09-18\n\nv1.0.9 | 2026-09-14T01:40:29.557Z | user\n\n例行版本更新 2026-09-14\n\nv1.0.8 | 2026-09-10T01:34:08.433Z | user\n\n例行版本更新 2026-09-10\n\nv1.0.7 | 2026-09-08T01:40:54.263Z | user\n\n例行版本更新 2026-09-08\n\nv1.0.6 | 2026-09-07T01:48:48.608Z | user\n\n例行版本更新 2026-09-07\n\nv1.0.5 | 2026-09-04T01:41:58.629Z | user\n\n例行版本更新 2026-09-04\n\nv1.0.4 | 2026-09-02T01:37:34.169Z | user\n\n例行版本更新 2026-09-02\n\nv1.0.3 | 2026-08-31T07:04:08.201Z | user\n\n源码仓库迁移至 github.com/dlazy-ai/ecommerce-skills\n\nv1.0.2 | 2026-08-31T05:25:00.945Z | user\n\n源码仓库迁移至 github.com/dlazy-ai/ecommerce-skills\n\nv1.0.1 | 2026-08-29T04:02:23.774Z | user\n\nSync from GitHub\n\nv1.0.0 | 2026-08-18T04:39:35.161Z | user\n\nSync from GitHub\n\nArchive index:\n\nArchive v1.0.19: 11 files, 25340 bytes\n\nFiles: examples/brand.yaml (1655b), references/model-flags.md (2144b), references/provider-cli.md (4802b), scripts/brand.mjs (4516b), scripts/gen.mjs (9733b), scripts/lib/miniyaml.mjs (2901b), scripts/lib/providers.mjs (12510b), scripts/lib/tasks.json (3234b), skill-card.md (2013b), SKILL.md (11767b), _meta.json (134b)\n\nFile v1.0.19:SKILL.md\n\n---\nname: fabric-on-body\nversion: 1.0.19\ndescription: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。\n---\n\n# fabric-on-body — 一键替换服装面料\n\n**版型不动，面料换掉**。给一张服装版式图 + 一张面料小样，输出这个版型用新面料做出来的样衣效果图。\n\n价值在打样前：一个版型试 8 种面料，传统做法是打 8 件样衣（每件几天、几百块）；这里是 8 次生成。\n\n---\n\n## 生成效果示例\n\n| 输入：服装版式图 | 输入：面料图 |\n| --- | --- |\n| <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/style-sheet.jpg\" width=\"260\"> | <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/fabric-swatch.jpg\" width=\"260\"> |\n| `style-sheet.jpg` — 落肩宽松圆领毛衣版型，800×800 | `fabric-swatch.jpg` — 象牙白真丝缎面小样，640×640 |\n\n实际执行的命令：\n\n```bash\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference: an oversized drop-shoulder crewneck sweater with ribbed collar, cuffs and hem. Image 2 is the target fabric: ivory silk satin with a soft lustrous sheen and fine weave. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material — the sweater must now read as ivory silk satin with specular highlights on the folds and soft drape instead of chunky knit. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality medium --imageFormat jpeg \\\n  --save docs/fabric-on-body/example-output.jpg\n```\n\n**输出**\n\n<img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/example-output.jpg\" width=\"320\">\n\n`example-output.jpg` — 1024×1024。落肩剪裁、身长袖长、罗纹领口袖口下摆的结构与平铺角度都与版式图一致；材质从粗针织变成象牙白真丝缎面，褶皱上出现高光、垂坠变得柔顺，罗纹部位仍以缎面质感保留。\n\n---\n\n## 1、能力边界\n\n| 输入 | 说明 |\n| --- | --- |\n| 服装版式图 | 决定版型、剪裁、结构与拍摄角度 |\n| 面料图 | 决定材质、纹理、光泽与垂坠感（面料小样特写最佳） |\n| 服装类型 | 帮助模型理解结构（上装 / 下装 / 连衣裙 / 外套 / 内衣） |\n\n| 保持不变 | 会改变 |\n| --- | --- |\n| 版型与剪裁、身长袖长、领口/袖口/下摆结构、缝线位置、拍摄角度与构图 | 材质与织法、表面光泽、垂坠与褶皱形态、厚度观感 |\n\n**不做**：不改版型比例；不改变服装的结构设计；不承诺真实打样的手感与克重——输出是视觉预览，不是工艺样衣。\n\n---\n\n## 2、输入素材规则\n\n生成前先自检这几条硬性约束：\n\n- 大小：**20KB ~ 15MB**\n- 分辨率：**大于 400×400**\n- 格式：**jpg / jpeg / png / webp**\n\n**版式图（✅）**：纯色背景、结构清晰、正面完整的平铺图或人台图。\n\n**面料图（✅）**：面料小样特写，能看清织纹与光泽；有褶皱转折更好（能交代垂坠）。\n\n**会明显拉低效果的输入（❌）**\n\n| 问题 | 说明 |\n| --- | --- |\n| 面料图拍太远 | 看不清织纹，只会当成一块纯色 |\n| 面料图带强环境色 | 黄光下拍的白布会换成米黄色 |\n| 版式图有复杂印花 | 原印花会和新面料打架，先用 [item-repair](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/item-repair/skill.md) 或换素图 |\n| 面料与品类不匹配 | 硬挺牛仔布做不出吊带裙的垂坠，模型会硬凑 |\n\n---\n\n## 3、面料替换的关键：写清「材质带来的物理变化」\n\n只说「换成真丝」不够——模型不知道该怎么改光影。要把材质翻译成**可画出来的物理特征**：\n\n| 面料 | 要写的物理特征 |\n| --- | --- |\n| 真丝 / 缎面 | `lustrous specular highlights along the folds, fluid drape, soft continuous gradients` |\n| 粗针织 | `chunky knit loops with visible yarn twist, matte fibre halo, structured heavy drape` |\n| 牛仔 | `twill diagonal weave, slight slub texture, stiff drape with sharp fold creases` |\n| 灯芯绒 | `vertical wale ridges catching light, matte pile, medium-stiff drape` |\n| 雪纺 | `semi-sheer, very light drape with many fine ripples, soft diffused light through the fabric` |\n| 皮革 | `low-frequency specular sheen, grain texture, stiff drape with broad soft creases` |\n| 摇粒绒 | `dense short pile, fuzzy silhouette edge, no specular highlight` |\n\n**再加一句「版型不许动」**——这是本技能最容易失守的地方：\n\n```text\nKeep the pattern identical: same cut, same body length, same sleeve length,\nsame collar/cuff/hem construction, same flat-lay layout and camera angle.\nReplace only the material.\n```\n\n---\n\n## 4、工具调用\n\n本技能使用 dLazy 的 **`gpt-image-2`**（图像编辑模型；面料替换要求「几何完全不动、材质完全改变」，是典型的定向属性替换任务）。\n\n### 调用方式\n\n两种等价写法，选一种。统一入口会自动选后端、失败重试、建目录落盘、估算成本：\n\n```bash\n# A. 统一入口（推荐）：可切任意后端，加 --dry-run 不计费空跑\nnode scripts/gen.mjs --task fabric-on-body \\\n  --prompt '<见下方 Prompt 模板>' \\\n  --images <按下表顺序> \\\n  --save output/fabric-on-body-<sku>.jpg\n\n# B. 直接用 dLazy CLI（不想引入 Node 依赖时，效果等价）\ndlazy gpt-image-2 --prompt '...' --images ... --save output/fabric-on-body.jpg\n```\n\n**参数约定（本技能固定用法）**\n\n| 参数 | 取值 | 理由 |\n| --- | --- | --- |\n| `--images` | `[版式图, 面料图]` | 顺序即 prompt 中的 image 1 / 2 |\n| `--size` | 与版式图比例一致（`1024x1024` 平铺 / `1024x1536` 人台竖版） | 换料不该改构图 |\n| `--quality` | `high` | 材质是本技能的唯一产出，必须 high |\n| `--imageFormat` | `jpeg` | 通用格式 |\n| `--batch` | `2` ~ `3` | 垂坠形态有随机性 |\n| `--save` | `docs/fabric-on-body/output-<版型>-<面料>.jpg` | 版型 × 面料矩阵命名 |\n\n### Command Examples\n\n```bash\n# basic call: 一个版型换一种面料\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement. Image 1 is the garment pattern reference, image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same cut, body length, sleeve length, collar/cuff/hem construction, layout and camera angle. Replace only the material. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality high\n\n# complex call: 一个版型 × 多种面料，跑成一个选型矩阵\nSTYLE=docs/fabric-on-body/style-sheet.jpg\nKEEP='Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material.'\nfor F in satin corduroy denim fleece; do\n  case $F in\n    satin)    PHYS='lustrous specular highlights along the folds, fluid drape, soft continuous gradients' ;;\n    corduroy) PHYS='vertical wale ridges catching light, matte pile, medium-stiff drape' ;;\n    denim)    PHYS='twill diagonal weave, slight slub texture, stiff drape with sharp fold creases' ;;\n    fleece)   PHYS='dense short pile, fuzzy silhouette edge, no specular highlight' ;;\n  esac\n  dlazy gpt-image-2 \\\n    --prompt \"Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference. Image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. $KEEP The garment must now read as $F: $PHYS. Clean white background, even studio light, no text.\" \\\n    --images \"$STYLE\" \"docs/fabric-on-body/swatch-$F.jpg\" \\\n    --size 1024x1024 --quality high --imageFormat jpeg \\\n    --save \"docs/fabric-on-body/output-drop-shoulder-$F.jpg\"\ndone\n\n# 先估价不真跑\ndlazy gpt-image-2 --dry-run --prompt '...' --images a.jpg b.jpg --size 1024x1024 --quality high\n```\n\n### 延伸阅读\n\n| 要查什么 | 去哪 |\n| --- | --- |\n| 认证、多后端配置、输出结构、错误码 | [`references/provider-cli.md`](references/provider-cli.md) |\n| `gpt-image-2` 的全部可用参数 | [`references/model-flags.md`](references/model-flags.md) |\n| 统一入口的全部选项 | `node scripts/gen.mjs --help` |\n\n## 5、Prompt 模板\n\n```text\nFabric replacement for a garment style sheet.\nImage 1 is the garment pattern/style reference: [品类 + 版型描述].\nImage 2 is the target fabric: [面料名 + 颜色 + 光泽描述].\n\nRe-render the exact same garment silhouette from image 1 in the fabric from image 2.\n\nKeep the pattern identical: same [剪裁], same body length, same sleeve length,\nsame [领口/袖口/下摆结构], same [缝线位置], same layout and camera angle.\n\nReplace only the material — the garment must now read as [面料名]:\n[第三节表格里对应的物理特征].\n\nClean [背景色] background, even studio light, no text.\n```\n\n**按问题追加的修正句**\n\n| 问题 | 追加到 prompt 末尾 |\n| --- | --- |\n| 版型跟着变了 | `The silhouette outline must be pixel-aligned with image 1. Only surface material may differ.` |\n| 面料颜色偏了 | `Sample the fabric colour from image 2 under neutral light; do not shift hue or add colour cast.` |\n| 换完还是原来的质感 | 把物理特征写得更极端，并追加 `The original [原面料] texture must be completely gone.` |\n| 垂坠不对 | `Drape stiffness: [very fluid / medium / stiff]. Fold count and fold radius must match a [面料] of about [克重] gsm.` |\n| 缝线/罗纹消失了 | `Preserve construction details: [罗纹/明线/拉链] must remain visible in the new material.` |\n\n---\n\n## 6、执行流程\n\n1. **备素材**：版式图（结构清晰、印花越少越好）+ 面料小样特写（能看清织纹）。\n2. **翻译材质**：查第三节表格，把面料名换成物理特征描述。\n3. **写版型锁定句**：剪裁 / 身长 / 袖长 / 领口袖口下摆 / 缝线 / 角度，逐项写死。\n4. **`--quality high` 起跑**，比例跟随版式图。\n5. **要做选型矩阵**：用第四节循环，一个版型 × N 种面料。\n6. **质检**：版型轮廓是否与原图对齐、面料颜色是否准、质感是否真的换掉了、缝线罗纹是否还在。\n7. **交付时注明这是视觉预览**，不代表真实手感与克重。\n\n---\n\n## 7、常见问题\n\n| 现象 | 原因 | 处理 |\n| --- | --- | --- |\n| 版型变了 | 未锁定轮廓 | 追加 `silhouette outline must be pixel-aligned with image 1` |\n| 面料颜色不对 | 面料图带环境色 | 重拍面料小样（中性光），或追加取色约束句 |\n| 质感没换掉 | 物理特征写得太弱 | 用第三节表格的极端描述 + `original texture must be completely gone` |\n| 垂坠像纸板 | 未指定垂坠刚度 | 追加 drape stiffness 句，给出克重参考 |\n| 罗纹/明线消失 | 被新材质吞掉 | 追加保留结构细节句 |\n| 面料与品类物理上不成立 | 硬挺布做垂坠款 | 换匹配的面料，或改版型 |\n\n---\n\n## Tips\n\nVisit https://dlazy.com for more information.\n\nFile v1.0.19:_meta.json\n\n{\n  \"ownerId\": \"kn7c5wgeajfcfvdfb5ceemvdb984cjpd\",\n  \"slug\": \"fabric-on-body\",\n  \"version\": \"1.0.19\",\n  \"publishedAt\": 1791596979917\n}\n\nFile v1.0.19:references/model-flags.md\n\n# `gpt-image-2` 参数清单\r\n\r\n本技能默认用的模型的完整参数。日常只需要「参数约定」里那几个，\r\n这份清单在需要用到非常规参数时再看。\r\n\r\n**CRITICAL INSTRUCTION FOR AGENT**:\r\nRun the `dlazy gpt-image-2` command to get results.\r\n\r\n```bash\r\ndlazy gpt-image-2 -h\r\n\r\nOptions:\r\n  --prompt <prompt>            Prompt\r\n  --images [images...]         Images [image: url or local path] (max 5)\r\n  --size <size>                Size [default: auto] (choices: \"1024x1024\",\r\n                               \"1536x1024\", \"1024x1536\", \"2048x2048\",\r\n                               \"2048x1152\", \"3840x2160\", \"2160x3840\", \"auto\")\r\n  --imageFormat <imageFormat>  Image Format [default: jpeg] (choices: \"jpeg\",\r\n                               \"png\", \"webp\")\r\n  --quality <quality>          Quality [default: medium] (choices: \"low\",\r\n                               \"medium\", \"high\")\r\n  --dry-run                    Print payload without executing the tool\r\n  --no-wait                    Return generateId immediately for async tasks\r\n  --timeout <seconds>          Max seconds to wait for async completion\r\n                               (default: \"1800\")\r\n  --input <jsonOrFile>         Inline JSON or @path/to/file.json — merged under\r\n                               flag values (flags win)\r\n  --save <path>                Download the result asset to this local path\r\n                               (mkdir + retry handled for you). A destination\r\n                               path — NOT a response format; for stdout shape\r\n                               use --format\r\n  --batch <n>                  Fan-out N parallel runs (cloud tools only)\r\n                               (default: \"1\")\r\n  -h, --help                   display help for command\r\n```\r\n\r\n> Any flag also accepts pipe references — `-` (auto-pick from upstream stdin), `@N` (n-th output), `@N.path` (jsonpath into output), `@*` (all primary values), `@stdin` / `@stdin:path` (whole envelope). See `dlazy --help` for details.\r\n\r\n---\r\n\r\n换其他后端时参数由 `scripts/gen.mjs` 统一翻译，见 [`provider-cli.md`](provider-cli.md)。\n\nFile v1.0.19:references/provider-cli.md\n\n<!-- 由 scripts/build-skills.mjs 从 shared/references/provider-cli.md 同步生成，不要直接改这里。 -->\n# 后端调用参考\n\n技能正文只写「要生成什么」。认证、计费、错误码、输出结构这些每个技能都一样的东西放在这里，\n**用到时再读**，不占技能的常驻上下文。\n\n---\n\n## 一、认证\n\n### 默认后端 dLazy\n\n```bash\ndlazy login            # 设备码流程，远程 shell 也能用，自动写入本地配置\ndlazy auth set <KEY>   # 已有 key 时直接写入\n```\n\nkey 存在用户配置目录（macOS/Linux `~/.dlazy/config.json`，Windows `%USERPROFILE%\\.dlazy\\config.json`），\n权限限本机用户。也可以每次调用用环境变量 `DLAZY_API_KEY` 传入。\n\n手动获取：登录 [dlazy.com](https://dlazy.com) → [API Key 页面](https://dlazy.com/dashboard/organization/api-key)。\nkey 按组织隔离，可随时轮换或吊销。\n\n### 其他后端\n\n本技能库不锁定单一厂商。配好任意一家的 key 即可跑：\n\n| 后端 | 环境变量 | 说明 |\n| --- | --- | --- |\n| `dlazy` | `dlazy login` 或 `DLAZY_API_KEY` | 默认，最省事 |\n| `openai` | `OPENAI_API_KEY` | 走 `/v1/images/edits` 与 `/v1/images/generations` |\n| `gemini` | `GEMINI_API_KEY` | Nano Banana 系列 |\n| `fal` | `FAL_KEY` | |\n| `replicate` | `REPLICATE_API_TOKEN` | |\n| `ark` | `ARK_API_KEY` + `ARK_MODEL` | 火山方舟，模型 ID 需按开通情况填 |\n\n选路优先级：`--provider` 参数 > `PROVIDER` 环境变量 > 第一个配了 key 的 > `dlazy`。\n\n```bash\nnode scripts/gen.mjs --doctor     # 看当前哪个后端可用\n```\n\n各后端的模型 ID 可用 `GEN_MODEL_OPENAI` / `GEN_MODEL_GEMINI` / `GEN_MODEL_FAL` /\n`GEN_MODEL_REPLICATE` / `GEN_MODEL_ARK` 覆盖。**厂商目录会变，以各家最新文档为准。**\n\n---\n\n## 二、两种调用方式\n\n### 方式 A：统一入口（推荐）\n\n```bash\nnode scripts/gen.mjs --task <技能名> --prompt '...' --images a.jpg b.jpg --save out.jpg\n```\n\n它负责：后端选路、默认尺寸档位、失败重试（429/5xx 指数退避）、落盘建目录、成本估算。\n\n```bash\nnode scripts/gen.mjs --task flat-lay --prompt '...' --dry-run   # 不调用不计费，只看要发什么\nnode scripts/gen.mjs --help\n```\n\n### 方式 B：直接用 dLazy CLI\n\n不想引入 Node 依赖时，技能正文里的 `dlazy ...` 命令可以原样执行，效果等价。\n\n```bash\nnpx @dlazy/cli@1.2.3 <command>     # 不装全局二进制\n```\n\n- CLI 源码：[github.com/dlazy-ai/cli](https://github.com/dlazy-ai/cli) · npm 包 `@dlazy/cli`\n\n---\n\n## 三、数据流向\n\n调用 dLazy 时：提示词与参数发往 `api.dlazy.com`；传入的本地图片会上传到 `files.dlazy.com`\n供模型读取；产出 URL 同样托管在 `files.dlazy.com`。这是云端生成 API 的通用形态。\n换成其他后端时，数据流向对应厂商，不经过 dLazy。\n\n---\n\n## 四、输出结构\n\n`gen.mjs`（加 `--json`）：\n\n```json\n{\n  \"ok\": true,\n  \"task\": \"flat-lay\",\n  \"provider\": \"dlazy\",\n  \"model\": \"gpt-image-2\",\n  \"files\": [\"docs/flat-lay/output-sku001.jpg\"],\n  \"texts\": [],\n  \"estimatedCredits\": 60,\n  \"elapsedMs\": 58213\n}\n```\n\ndLazy CLI 原生：\n\n```json\n{\n  \"ok\": true,\n  \"result\": {\n    \"tool\": \"gpt-image-2\",\n    \"data\": { \"urls\": [\"https://files.dlazy.com/data/ai/....jpg\"] },\n    \"savedPath\": \"docs/flat-lay/example-output.jpg\"\n  }\n}\n```\n\n加 `--no-wait` 的异步任务不返回 `data`，返回 `task: { generateId, status }`，\n用 `dlazy status <generateId> --wait` 轮询。\n\n文本类模型（如质检）产出在 `result.data.texts[0]`：\n\n```bash\ndlazy claude-sonnet-5 --prompt '...' --images x.jpg \\\n  | python3 -c 'import sys,json;print(json.load(sys.stdin)[\"result\"][\"data\"][\"texts\"][0])'\n```\n\n---\n\n## 五、错误处理\n\n| Code | 类型 | 示例 |\n| --- | --- | --- |\n| 401 | 未授权 / 无 key | `ok: false, code: \"unauthorized\"` |\n| 501 | 缺必填参数 | `error: required option '--prompt <prompt>' not specified` |\n| 502 | 本地文件读不到 | `Error: Image file not found: ...` |\n| 503 | 余额不足 | `ok: false, code: \"insufficient_balance\"` |\n| 503 | 服务端错误 | `HTTP status code error (500)` |\n| 504 | 异步任务失败 | `=== Generation Failed ===` / `Prompt violates safety policy` |\n\n**给 Agent 的硬性要求**\n\n1. 命中 `insufficient_balance` → 明确告诉用户算力不足，并给出充值入口\n   <https://dlazy.com/dashboard/organization/settings?tab=credits>\n2. 命中 `unauthorized` / 缺 key → 告诉用户去 <https://dlazy.com/dashboard/organization/api-key>\n   取 key，用 `dlazy auth set <key>` 存好再继续。\n3. 用 `gen.mjs` 时，429 与 5xx 已自动重试；仍失败才向用户报错。\n4. **不要**为了「跑通」而偷偷降级参数（尺寸、档位、批量），先问用户。\n\nFile v1.0.19:scripts/lib/tasks.json\n\n{\r\n  \"_note\": \"技能 → 默认模型与参数。dlazy 列为默认后端的模型名；其他后端走 providers.mjs 的通用映射，可用 GEN_MODEL_<PROVIDER> 覆盖。\",\r\n  \"_credits\": { \"gpt-image-2\": 60, \"seedream-5.0\": 30, \"seedream-5.0-pro\": 45, \"banana-pro\": 25, \"claude-sonnet-5\": 3 },\r\n  \"tasks\": {\r\n    \"flat-lay\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"wear-everything\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"image-fusion\":            { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"one-shot\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"fission-pattern\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-detail\":             { \"model\": \"seedream-5.0-pro\", \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"creative-scene\":          { \"model\": \"banana-pro\",       \"size\": \"1024x1536\", \"format\": \"jpeg\" },\r\n    \"batch-image\":             { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"to-3d\":                   { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-extraction\":     { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"fabric-on-body\":          { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-detail\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-grass-planting\": { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-selling-point\":      { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"item-change-background\":  { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"remove-watermark\":        { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"material-enhancement\":    { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"item-repair\":             { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"detect-task\":             { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"listing-optimizer\":       { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"cross-border-localize\":   { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"brand-kit\":               { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"platform-compliance\":     { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"main-image-video\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"product-video-ad\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"ugc-testimonial\":         { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true }\r\n  }\r\n}\n\nFile v1.0.19:skill-card.md\n\n## Description:\n\nCreates visual garment previews by applying a fabric swatch to a reference garment while preserving its cut and construction.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[dlazyai](https://clawhub.ai/user/dlazyai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nFashion designers and product teams use garment reference images and fabric swatches to compare visual material options before physical sampling.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Prompts and garment or fabric images may be sent to a selected cloud image-generation provider.\n\nMitigation: Check provider terms before submitting sensitive material, and use --dry-run to preview requests.\n\nRisk: Optional external installation commands may fetch unpinned code.\n\nMitigation: Pin or verify the package and version before running network installs.\n\nRisk: Generated previews may misrepresent real fabric drape, color, feel, or weight.\n\nMitigation: Check silhouette and material details against references and label results as visual previews rather than physical samples.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/dlazyai/skills/fabric-on-body)\n- [Provider CLI reference](references/provider-cli.md)\n- [Image model options](references/model-flags.md)\n\n## Skill Output:\n\n**Output Type(s):** [Images, Guidance, Shell commands]\n\n**Output Format:** [Garment preview image files (JPEG, PNG, or WebP) with Markdown guidance and optional JSON results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Visual previews only; appearance does not establish real fabric feel or weight.]\n\n## Skill Version(s):\n\n1.0.19 (source: skill frontmatter and server release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.19:examples/brand.yaml\n\n# ⚠️ 由 scripts/build-skills.mjs 从 shared/examples/brand.yaml 同步生成，不要直接改这里。\r\n# 店铺品牌视觉规范 —— 所有生图技能读这一份，保证几百个 SKU 看起来像同一家店。\r\n#   node scripts/brand.mjs --brand brand.yaml --for flat-lay\r\n#   node scripts/gen.mjs --task flat-lay --brand brand.yaml --prompt '...'\r\n\r\nbrand:\r\n  name: 示例品牌\r\n  # 一句话概括调性，会原样进 prompt\r\n  tone: quiet minimalist, warm and lived-in, never glossy or commercial\r\n\r\nmodel:\r\n  # 锁模特：给一张脸的参考图，所有技能都会把它作为最后一张参考图传入\r\n  reference: assets/model/face-a.jpg\r\n  description: East Asian woman, late twenties, natural makeup, shoulder-length black hair\r\n  body: slim, height around 168cm\r\n\r\nphotography:\r\n  background: seamless off-white studio backdrop, RGB 248 248 246\r\n  lighting: soft large softbox from camera left, gentle fill, no hard shadows\r\n  camera: 85mm equivalent, eye level, shallow depth of field\r\n  grade: neutral white balance around 5200K, low contrast, slightly lifted blacks\r\n  crop: full body with headroom, product centered\r\n\r\nlayout:\r\n  # 给带排版的技能（主图 / 详情页）用\r\n  margin: at least 8% empty margin on all sides\r\n  typeface: clean sans-serif, no decorative fonts\r\n  text_color: near-black on light background\r\n\r\nforbid:\r\n  - no visible brand logos other than the product's own\r\n  - no text or watermark\r\n  - no exaggerated poses or dramatic wind effects\r\n  - no oversaturated colors\r\n\r\n# 可选：把这些直接写进合规目标，生成时就按平台要求出图\r\ncompliance:\r\n  platform: amazon\n\nArchive v1.0.18: 11 files, 25398 bytes\n\nFiles: examples/brand.yaml (1655b), references/model-flags.md (2144b), references/provider-cli.md (4802b), scripts/brand.mjs (4516b), scripts/gen.mjs (9733b), scripts/lib/miniyaml.mjs (2901b), scripts/lib/providers.mjs (12510b), scripts/lib/tasks.json (3234b), skill-card.md (2118b), SKILL.md (11767b), _meta.json (134b)\n\nFile v1.0.18:SKILL.md\n\n---\nname: fabric-on-body\nversion: 1.0.18\ndescription: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。\n---\n\n# fabric-on-body — 一键替换服装面料\n\n**版型不动，面料换掉**。给一张服装版式图 + 一张面料小样，输出这个版型用新面料做出来的样衣效果图。\n\n价值在打样前：一个版型试 8 种面料，传统做法是打 8 件样衣（每件几天、几百块）；这里是 8 次生成。\n\n---\n\n## 生成效果示例\n\n| 输入：服装版式图 | 输入：面料图 |\n| --- | --- |\n| <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/style-sheet.jpg\" width=\"260\"> | <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/fabric-swatch.jpg\" width=\"260\"> |\n| `style-sheet.jpg` — 落肩宽松圆领毛衣版型，800×800 | `fabric-swatch.jpg` — 象牙白真丝缎面小样，640×640 |\n\n实际执行的命令：\n\n```bash\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference: an oversized drop-shoulder crewneck sweater with ribbed collar, cuffs and hem. Image 2 is the target fabric: ivory silk satin with a soft lustrous sheen and fine weave. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material — the sweater must now read as ivory silk satin with specular highlights on the folds and soft drape instead of chunky knit. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality medium --imageFormat jpeg \\\n  --save docs/fabric-on-body/example-output.jpg\n```\n\n**输出**\n\n<img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/example-output.jpg\" width=\"320\">\n\n`example-output.jpg` — 1024×1024。落肩剪裁、身长袖长、罗纹领口袖口下摆的结构与平铺角度都与版式图一致；材质从粗针织变成象牙白真丝缎面，褶皱上出现高光、垂坠变得柔顺，罗纹部位仍以缎面质感保留。\n\n---\n\n## 1、能力边界\n\n| 输入 | 说明 |\n| --- | --- |\n| 服装版式图 | 决定版型、剪裁、结构与拍摄角度 |\n| 面料图 | 决定材质、纹理、光泽与垂坠感（面料小样特写最佳） |\n| 服装类型 | 帮助模型理解结构（上装 / 下装 / 连衣裙 / 外套 / 内衣） |\n\n| 保持不变 | 会改变 |\n| --- | --- |\n| 版型与剪裁、身长袖长、领口/袖口/下摆结构、缝线位置、拍摄角度与构图 | 材质与织法、表面光泽、垂坠与褶皱形态、厚度观感 |\n\n**不做**：不改版型比例；不改变服装的结构设计；不承诺真实打样的手感与克重——输出是视觉预览，不是工艺样衣。\n\n---\n\n## 2、输入素材规则\n\n生成前先自检这几条硬性约束：\n\n- 大小：**20KB ~ 15MB**\n- 分辨率：**大于 400×400**\n- 格式：**jpg / jpeg / png / webp**\n\n**版式图（✅）**：纯色背景、结构清晰、正面完整的平铺图或人台图。\n\n**面料图（✅）**：面料小样特写，能看清织纹与光泽；有褶皱转折更好（能交代垂坠）。\n\n**会明显拉低效果的输入（❌）**\n\n| 问题 | 说明 |\n| --- | --- |\n| 面料图拍太远 | 看不清织纹，只会当成一块纯色 |\n| 面料图带强环境色 | 黄光下拍的白布会换成米黄色 |\n| 版式图有复杂印花 | 原印花会和新面料打架，先用 [item-repair](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/item-repair/skill.md) 或换素图 |\n| 面料与品类不匹配 | 硬挺牛仔布做不出吊带裙的垂坠，模型会硬凑 |\n\n---\n\n## 3、面料替换的关键：写清「材质带来的物理变化」\n\n只说「换成真丝」不够——模型不知道该怎么改光影。要把材质翻译成**可画出来的物理特征**：\n\n| 面料 | 要写的物理特征 |\n| --- | --- |\n| 真丝 / 缎面 | `lustrous specular highlights along the folds, fluid drape, soft continuous gradients` |\n| 粗针织 | `chunky knit loops with visible yarn twist, matte fibre halo, structured heavy drape` |\n| 牛仔 | `twill diagonal weave, slight slub texture, stiff drape with sharp fold creases` |\n| 灯芯绒 | `vertical wale ridges catching light, matte pile, medium-stiff drape` |\n| 雪纺 | `semi-sheer, very light drape with many fine ripples, soft diffused light through the fabric` |\n| 皮革 | `low-frequency specular sheen, grain texture, stiff drape with broad soft creases` |\n| 摇粒绒 | `dense short pile, fuzzy silhouette edge, no specular highlight` |\n\n**再加一句「版型不许动」**——这是本技能最容易失守的地方：\n\n```text\nKeep the pattern identical: same cut, same body length, same sleeve length,\nsame collar/cuff/hem construction, same flat-lay layout and camera angle.\nReplace only the material.\n```\n\n---\n\n## 4、工具调用\n\n本技能使用 dLazy 的 **`gpt-image-2`**（图像编辑模型；面料替换要求「几何完全不动、材质完全改变」，是典型的定向属性替换任务）。\n\n### 调用方式\n\n两种等价写法，选一种。统一入口会自动选后端、失败重试、建目录落盘、估算成本：\n\n```bash\n# A. 统一入口（推荐）：可切任意后端，加 --dry-run 不计费空跑\nnode scripts/gen.mjs --task fabric-on-body \\\n  --prompt '<见下方 Prompt 模板>' \\\n  --images <按下表顺序> \\\n  --save output/fabric-on-body-<sku>.jpg\n\n# B. 直接用 dLazy CLI（不想引入 Node 依赖时，效果等价）\ndlazy gpt-image-2 --prompt '...' --images ... --save output/fabric-on-body.jpg\n```\n\n**参数约定（本技能固定用法）**\n\n| 参数 | 取值 | 理由 |\n| --- | --- | --- |\n| `--images` | `[版式图, 面料图]` | 顺序即 prompt 中的 image 1 / 2 |\n| `--size` | 与版式图比例一致（`1024x1024` 平铺 / `1024x1536` 人台竖版） | 换料不该改构图 |\n| `--quality` | `high` | 材质是本技能的唯一产出，必须 high |\n| `--imageFormat` | `jpeg` | 通用格式 |\n| `--batch` | `2` ~ `3` | 垂坠形态有随机性 |\n| `--save` | `docs/fabric-on-body/output-<版型>-<面料>.jpg` | 版型 × 面料矩阵命名 |\n\n### Command Examples\n\n```bash\n# basic call: 一个版型换一种面料\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement. Image 1 is the garment pattern reference, image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same cut, body length, sleeve length, collar/cuff/hem construction, layout and camera angle. Replace only the material. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality high\n\n# complex call: 一个版型 × 多种面料，跑成一个选型矩阵\nSTYLE=docs/fabric-on-body/style-sheet.jpg\nKEEP='Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material.'\nfor F in satin corduroy denim fleece; do\n  case $F in\n    satin)    PHYS='lustrous specular highlights along the folds, fluid drape, soft continuous gradients' ;;\n    corduroy) PHYS='vertical wale ridges catching light, matte pile, medium-stiff drape' ;;\n    denim)    PHYS='twill diagonal weave, slight slub texture, stiff drape with sharp fold creases' ;;\n    fleece)   PHYS='dense short pile, fuzzy silhouette edge, no specular highlight' ;;\n  esac\n  dlazy gpt-image-2 \\\n    --prompt \"Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference. Image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. $KEEP The garment must now read as $F: $PHYS. Clean white background, even studio light, no text.\" \\\n    --images \"$STYLE\" \"docs/fabric-on-body/swatch-$F.jpg\" \\\n    --size 1024x1024 --quality high --imageFormat jpeg \\\n    --save \"docs/fabric-on-body/output-drop-shoulder-$F.jpg\"\ndone\n\n# 先估价不真跑\ndlazy gpt-image-2 --dry-run --prompt '...' --images a.jpg b.jpg --size 1024x1024 --quality high\n```\n\n### 延伸阅读\n\n| 要查什么 | 去哪 |\n| --- | --- |\n| 认证、多后端配置、输出结构、错误码 | [`references/provider-cli.md`](references/provider-cli.md) |\n| `gpt-image-2` 的全部可用参数 | [`references/model-flags.md`](references/model-flags.md) |\n| 统一入口的全部选项 | `node scripts/gen.mjs --help` |\n\n## 5、Prompt 模板\n\n```text\nFabric replacement for a garment style sheet.\nImage 1 is the garment pattern/style reference: [品类 + 版型描述].\nImage 2 is the target fabric: [面料名 + 颜色 + 光泽描述].\n\nRe-render the exact same garment silhouette from image 1 in the fabric from image 2.\n\nKeep the pattern identical: same [剪裁], same body length, same sleeve length,\nsame [领口/袖口/下摆结构], same [缝线位置], same layout and camera angle.\n\nReplace only the material — the garment must now read as [面料名]:\n[第三节表格里对应的物理特征].\n\nClean [背景色] background, even studio light, no text.\n```\n\n**按问题追加的修正句**\n\n| 问题 | 追加到 prompt 末尾 |\n| --- | --- |\n| 版型跟着变了 | `The silhouette outline must be pixel-aligned with image 1. Only surface material may differ.` |\n| 面料颜色偏了 | `Sample the fabric colour from image 2 under neutral light; do not shift hue or add colour cast.` |\n| 换完还是原来的质感 | 把物理特征写得更极端，并追加 `The original [原面料] texture must be completely gone.` |\n| 垂坠不对 | `Drape stiffness: [very fluid / medium / stiff]. Fold count and fold radius must match a [面料] of about [克重] gsm.` |\n| 缝线/罗纹消失了 | `Preserve construction details: [罗纹/明线/拉链] must remain visible in the new material.` |\n\n---\n\n## 6、执行流程\n\n1. **备素材**：版式图（结构清晰、印花越少越好）+ 面料小样特写（能看清织纹）。\n2. **翻译材质**：查第三节表格，把面料名换成物理特征描述。\n3. **写版型锁定句**：剪裁 / 身长 / 袖长 / 领口袖口下摆 / 缝线 / 角度，逐项写死。\n4. **`--quality high` 起跑**，比例跟随版式图。\n5. **要做选型矩阵**：用第四节循环，一个版型 × N 种面料。\n6. **质检**：版型轮廓是否与原图对齐、面料颜色是否准、质感是否真的换掉了、缝线罗纹是否还在。\n7. **交付时注明这是视觉预览**，不代表真实手感与克重。\n\n---\n\n## 7、常见问题\n\n| 现象 | 原因 | 处理 |\n| --- | --- | --- |\n| 版型变了 | 未锁定轮廓 | 追加 `silhouette outline must be pixel-aligned with image 1` |\n| 面料颜色不对 | 面料图带环境色 | 重拍面料小样（中性光），或追加取色约束句 |\n| 质感没换掉 | 物理特征写得太弱 | 用第三节表格的极端描述 + `original texture must be completely gone` |\n| 垂坠像纸板 | 未指定垂坠刚度 | 追加 drape stiffness 句，给出克重参考 |\n| 罗纹/明线消失 | 被新材质吞掉 | 追加保留结构细节句 |\n| 面料与品类物理上不成立 | 硬挺布做垂坠款 | 换匹配的面料，或改版型 |\n\n---\n\n## Tips\n\nVisit https://dlazy.com for more information.\n\nFile v1.0.18:_meta.json\n\n{\n  \"ownerId\": \"kn7c5wgeajfcfvdfb5ceemvdb984cjpd\",\n  \"slug\": \"fabric-on-body\",\n  \"version\": \"1.0.18\",\n  \"publishedAt\": 1791423740407\n}\n\nFile v1.0.18:references/model-flags.md\n\n# `gpt-image-2` 参数清单\r\n\r\n本技能默认用的模型的完整参数。日常只需要「参数约定」里那几个，\r\n这份清单在需要用到非常规参数时再看。\r\n\r\n**CRITICAL INSTRUCTION FOR AGENT**:\r\nRun the `dlazy gpt-image-2` command to get results.\r\n\r\n```bash\r\ndlazy gpt-image-2 -h\r\n\r\nOptions:\r\n  --prompt <prompt>            Prompt\r\n  --images [images...]         Images [image: url or local path] (max 5)\r\n  --size <size>                Size [default: auto] (choices: \"1024x1024\",\r\n                               \"1536x1024\", \"1024x1536\", \"2048x2048\",\r\n                               \"2048x1152\", \"3840x2160\", \"2160x3840\", \"auto\")\r\n  --imageFormat <imageFormat>  Image Format [default: jpeg] (choices: \"jpeg\",\r\n                               \"png\", \"webp\")\r\n  --quality <quality>          Quality [default: medium] (choices: \"low\",\r\n                               \"medium\", \"high\")\r\n  --dry-run                    Print payload without executing the tool\r\n  --no-wait                    Return generateId immediately for async tasks\r\n  --timeout <seconds>          Max seconds to wait for async completion\r\n                               (default: \"1800\")\r\n  --input <jsonOrFile>         Inline JSON or @path/to/file.json — merged under\r\n                               flag values (flags win)\r\n  --save <path>                Download the result asset to this local path\r\n                               (mkdir + retry handled for you). A destination\r\n                               path — NOT a response format; for stdout shape\r\n                               use --format\r\n  --batch <n>                  Fan-out N parallel runs (cloud tools only)\r\n                               (default: \"1\")\r\n  -h, --help                   display help for command\r\n```\r\n\r\n> Any flag also accepts pipe references — `-` (auto-pick from upstream stdin), `@N` (n-th output), `@N.path` (jsonpath into output), `@*` (all primary values), `@stdin` / `@stdin:path` (whole envelope). See `dlazy --help` for details.\r\n\r\n---\r\n\r\n换其他后端时参数由 `scripts/gen.mjs` 统一翻译，见 [`provider-cli.md`](provider-cli.md)。\n\nFile v1.0.18:references/provider-cli.md\n\n<!-- 由 scripts/build-skills.mjs 从 shared/references/provider-cli.md 同步生成，不要直接改这里。 -->\n# 后端调用参考\n\n技能正文只写「要生成什么」。认证、计费、错误码、输出结构这些每个技能都一样的东西放在这里，\n**用到时再读**，不占技能的常驻上下文。\n\n---\n\n## 一、认证\n\n### 默认后端 dLazy\n\n```bash\ndlazy login            # 设备码流程，远程 shell 也能用，自动写入本地配置\ndlazy auth set <KEY>   # 已有 key 时直接写入\n```\n\nkey 存在用户配置目录（macOS/Linux `~/.dlazy/config.json`，Windows `%USERPROFILE%\\.dlazy\\config.json`），\n权限限本机用户。也可以每次调用用环境变量 `DLAZY_API_KEY` 传入。\n\n手动获取：登录 [dlazy.com](https://dlazy.com) → [API Key 页面](https://dlazy.com/dashboard/organization/api-key)。\nkey 按组织隔离，可随时轮换或吊销。\n\n### 其他后端\n\n本技能库不锁定单一厂商。配好任意一家的 key 即可跑：\n\n| 后端 | 环境变量 | 说明 |\n| --- | --- | --- |\n| `dlazy` | `dlazy login` 或 `DLAZY_API_KEY` | 默认，最省事 |\n| `openai` | `OPENAI_API_KEY` | 走 `/v1/images/edits` 与 `/v1/images/generations` |\n| `gemini` | `GEMINI_API_KEY` | Nano Banana 系列 |\n| `fal` | `FAL_KEY` | |\n| `replicate` | `REPLICATE_API_TOKEN` | |\n| `ark` | `ARK_API_KEY` + `ARK_MODEL` | 火山方舟，模型 ID 需按开通情况填 |\n\n选路优先级：`--provider` 参数 > `PROVIDER` 环境变量 > 第一个配了 key 的 > `dlazy`。\n\n```bash\nnode scripts/gen.mjs --doctor     # 看当前哪个后端可用\n```\n\n各后端的模型 ID 可用 `GEN_MODEL_OPENAI` / `GEN_MODEL_GEMINI` / `GEN_MODEL_FAL` /\n`GEN_MODEL_REPLICATE` / `GEN_MODEL_ARK` 覆盖。**厂商目录会变，以各家最新文档为准。**\n\n---\n\n## 二、两种调用方式\n\n### 方式 A：统一入口（推荐）\n\n```bash\nnode scripts/gen.mjs --task <技能名> --prompt '...' --images a.jpg b.jpg --save out.jpg\n```\n\n它负责：后端选路、默认尺寸档位、失败重试（429/5xx 指数退避）、落盘建目录、成本估算。\n\n```bash\nnode scripts/gen.mjs --task flat-lay --prompt '...' --dry-run   # 不调用不计费，只看要发什么\nnode scripts/gen.mjs --help\n```\n\n### 方式 B：直接用 dLazy CLI\n\n不想引入 Node 依赖时，技能正文里的 `dlazy ...` 命令可以原样执行，效果等价。\n\n```bash\nnpx @dlazy/cli@1.2.3 <command>     # 不装全局二进制\n```\n\n- CLI 源码：[github.com/dlazy-ai/cli](https://github.com/dlazy-ai/cli) · npm 包 `@dlazy/cli`\n\n---\n\n## 三、数据流向\n\n调用 dLazy 时：提示词与参数发往 `api.dlazy.com`；传入的本地图片会上传到 `files.dlazy.com`\n供模型读取；产出 URL 同样托管在 `files.dlazy.com`。这是云端生成 API 的通用形态。\n换成其他后端时，数据流向对应厂商，不经过 dLazy。\n\n---\n\n## 四、输出结构\n\n`gen.mjs`（加 `--json`）：\n\n```json\n{\n  \"ok\": true,\n  \"task\": \"flat-lay\",\n  \"provider\": \"dlazy\",\n  \"model\": \"gpt-image-2\",\n  \"files\": [\"docs/flat-lay/output-sku001.jpg\"],\n  \"texts\": [],\n  \"estimatedCredits\": 60,\n  \"elapsedMs\": 58213\n}\n```\n\ndLazy CLI 原生：\n\n```json\n{\n  \"ok\": true,\n  \"result\": {\n    \"tool\": \"gpt-image-2\",\n    \"data\": { \"urls\": [\"https://files.dlazy.com/data/ai/....jpg\"] },\n    \"savedPath\": \"docs/flat-lay/example-output.jpg\"\n  }\n}\n```\n\n加 `--no-wait` 的异步任务不返回 `data`，返回 `task: { generateId, status }`，\n用 `dlazy status <generateId> --wait` 轮询。\n\n文本类模型（如质检）产出在 `result.data.texts[0]`：\n\n```bash\ndlazy claude-sonnet-5 --prompt '...' --images x.jpg \\\n  | python3 -c 'import sys,json;print(json.load(sys.stdin)[\"result\"][\"data\"][\"texts\"][0])'\n```\n\n---\n\n## 五、错误处理\n\n| Code | 类型 | 示例 |\n| --- | --- | --- |\n| 401 | 未授权 / 无 key | `ok: false, code: \"unauthorized\"` |\n| 501 | 缺必填参数 | `error: required option '--prompt <prompt>' not specified` |\n| 502 | 本地文件读不到 | `Error: Image file not found: ...` |\n| 503 | 余额不足 | `ok: false, code: \"insufficient_balance\"` |\n| 503 | 服务端错误 | `HTTP status code error (500)` |\n| 504 | 异步任务失败 | `=== Generation Failed ===` / `Prompt violates safety policy` |\n\n**给 Agent 的硬性要求**\n\n1. 命中 `insufficient_balance` → 明确告诉用户算力不足，并给出充值入口\n   <https://dlazy.com/dashboard/organization/settings?tab=credits>\n2. 命中 `unauthorized` / 缺 key → 告诉用户去 <https://dlazy.com/dashboard/organization/api-key>\n   取 key，用 `dlazy auth set <key>` 存好再继续。\n3. 用 `gen.mjs` 时，429 与 5xx 已自动重试；仍失败才向用户报错。\n4. **不要**为了「跑通」而偷偷降级参数（尺寸、档位、批量），先问用户。\n\nFile v1.0.18:scripts/lib/tasks.json\n\n{\r\n  \"_note\": \"技能 → 默认模型与参数。dlazy 列为默认后端的模型名；其他后端走 providers.mjs 的通用映射，可用 GEN_MODEL_<PROVIDER> 覆盖。\",\r\n  \"_credits\": { \"gpt-image-2\": 60, \"seedream-5.0\": 30, \"seedream-5.0-pro\": 45, \"banana-pro\": 25, \"claude-sonnet-5\": 3 },\r\n  \"tasks\": {\r\n    \"flat-lay\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"wear-everything\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"image-fusion\":            { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"one-shot\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"fission-pattern\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-detail\":             { \"model\": \"seedream-5.0-pro\", \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"creative-scene\":          { \"model\": \"banana-pro\",       \"size\": \"1024x1536\", \"format\": \"jpeg\" },\r\n    \"batch-image\":             { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"to-3d\":                   { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-extraction\":     { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"fabric-on-body\":          { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-detail\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-grass-planting\": { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-selling-point\":      { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"item-change-background\":  { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"remove-watermark\":        { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"material-enhancement\":    { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"item-repair\":             { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"detect-task\":             { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"listing-optimizer\":       { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"cross-border-localize\":   { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"brand-kit\":               { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"platform-compliance\":     { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"main-image-video\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"product-video-ad\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"ugc-testimonial\":         { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true }\r\n  }\r\n}\n\nFile v1.0.18:skill-card.md\n\n## Description:\n\nUses a garment style image and fabric swatch to preview the same garment silhouette in a different material.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[dlazyai](https://clawhub.ai/user/dlazyai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nApparel designers and merchandisers use this skill to preview different fabrics on a garment before making physical samples. It provides image-generation instructions and helps check the resulting silhouette, texture, and color.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Garment images, fabric swatches, prompts, and generated outputs may be sent to a cloud image provider.\n\nMitigation: Use the skill only when sharing these materials with the selected provider is acceptable.\n\nRisk: Untrusted image paths or URLs and an unchecked save destination may expose or overwrite unintended material.\n\nMitigation: Use trusted image sources and review the output path before running.\n\nRisk: Unrelated shared tasks, including watermark removal, can be invoked without a legitimate purpose.\n\nMitigation: Avoid unrelated tasks unless you have the rights and a legitimate reason to use them.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/dlazyai/skills/fabric-on-body)\n- [Provider CLI reference](artifact/references/provider-cli.md)\n- [Image model options](artifact/references/model-flags.md)\n- [dLazy](https://dlazy.com)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Files]\n\n**Output Format:** [Markdown guidance and shell commands; generated JPEG images saved locally]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Images are visual previews, not guarantees of physical fabric behavior.]\n\n## Skill Version(s):\n\n1.0.18 (source: frontmatter and server-resolved release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.18:examples/brand.yaml\n\n# ⚠️ 由 scripts/build-skills.mjs 从 shared/examples/brand.yaml 同步生成，不要直接改这里。\r\n# 店铺品牌视觉规范 —— 所有生图技能读这一份，保证几百个 SKU 看起来像同一家店。\r\n#   node scripts/brand.mjs --brand brand.yaml --for flat-lay\r\n#   node scripts/gen.mjs --task flat-lay --brand brand.yaml --prompt '...'\r\n\r\nbrand:\r\n  name: 示例品牌\r\n  # 一句话概括调性，会原样进 prompt\r\n  tone: quiet minimalist, warm and lived-in, never glossy or commercial\r\n\r\nmodel:\r\n  # 锁模特：给一张脸的参考图，所有技能都会把它作为最后一张参考图传入\r\n  reference: assets/model/face-a.jpg\r\n  description: East Asian woman, late twenties, natural makeup, shoulder-length black hair\r\n  body: slim, height around 168cm\r\n\r\nphotography:\r\n  background: seamless off-white studio backdrop, RGB 248 248 246\r\n  lighting: soft large softbox from camera left, gentle fill, no hard shadows\r\n  camera: 85mm equivalent, eye level, shallow depth of field\r\n  grade: neutral white balance around 5200K, low contrast, slightly lifted blacks\r\n  crop: full body with headroom, product centered\r\n\r\nlayout:\r\n  # 给带排版的技能（主图 / 详情页）用\r\n  margin: at least 8% empty margin on all sides\r\n  typeface: clean sans-serif, no decorative fonts\r\n  text_color: near-black on light background\r\n\r\nforbid:\r\n  - no visible brand logos other than the product's own\r\n  - no text or watermark\r\n  - no exaggerated poses or dramatic wind effects\r\n  - no oversaturated colors\r\n\r\n# 可选：把这些直接写进合规目标，生成时就按平台要求出图\r\ncompliance:\r\n  platform: amazon\n\nArchive v1.0.17: 11 files, 25336 bytes\n\nFiles: examples/brand.yaml (1655b), references/model-flags.md (2144b), references/provider-cli.md (4802b), scripts/brand.mjs (4516b), scripts/gen.mjs (9733b), scripts/lib/miniyaml.mjs (2901b), scripts/lib/providers.mjs (12510b), scripts/lib/tasks.json (3234b), skill-card.md (1992b), SKILL.md (11767b), _meta.json (134b)\n\nFile v1.0.17:SKILL.md\n\n---\nname: fabric-on-body\nversion: 1.0.17\ndescription: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。\n---\n\n# fabric-on-body — 一键替换服装面料\n\n**版型不动，面料换掉**。给一张服装版式图 + 一张面料小样，输出这个版型用新面料做出来的样衣效果图。\n\n价值在打样前：一个版型试 8 种面料，传统做法是打 8 件样衣（每件几天、几百块）；这里是 8 次生成。\n\n---\n\n## 生成效果示例\n\n| 输入：服装版式图 | 输入：面料图 |\n| --- | --- |\n| <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/style-sheet.jpg\" width=\"260\"> | <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/fabric-swatch.jpg\" width=\"260\"> |\n| `style-sheet.jpg` — 落肩宽松圆领毛衣版型，800×800 | `fabric-swatch.jpg` — 象牙白真丝缎面小样，640×640 |\n\n实际执行的命令：\n\n```bash\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference: an oversized drop-shoulder crewneck sweater with ribbed collar, cuffs and hem. Image 2 is the target fabric: ivory silk satin with a soft lustrous sheen and fine weave. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material — the sweater must now read as ivory silk satin with specular highlights on the folds and soft drape instead of chunky knit. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality medium --imageFormat jpeg \\\n  --save docs/fabric-on-body/example-output.jpg\n```\n\n**输出**\n\n<img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/example-output.jpg\" width=\"320\">\n\n`example-output.jpg` — 1024×1024。落肩剪裁、身长袖长、罗纹领口袖口下摆的结构与平铺角度都与版式图一致；材质从粗针织变成象牙白真丝缎面，褶皱上出现高光、垂坠变得柔顺，罗纹部位仍以缎面质感保留。\n\n---\n\n## 1、能力边界\n\n| 输入 | 说明 |\n| --- | --- |\n| 服装版式图 | 决定版型、剪裁、结构与拍摄角度 |\n| 面料图 | 决定材质、纹理、光泽与垂坠感（面料小样特写最佳） |\n| 服装类型 | 帮助模型理解结构（上装 / 下装 / 连衣裙 / 外套 / 内衣） |\n\n| 保持不变 | 会改变 |\n| --- | --- |\n| 版型与剪裁、身长袖长、领口/袖口/下摆结构、缝线位置、拍摄角度与构图 | 材质与织法、表面光泽、垂坠与褶皱形态、厚度观感 |\n\n**不做**：不改版型比例；不改变服装的结构设计；不承诺真实打样的手感与克重——输出是视觉预览，不是工艺样衣。\n\n---\n\n## 2、输入素材规则\n\n生成前先自检这几条硬性约束：\n\n- 大小：**20KB ~ 15MB**\n- 分辨率：**大于 400×400**\n- 格式：**jpg / jpeg / png / webp**\n\n**版式图（✅）**：纯色背景、结构清晰、正面完整的平铺图或人台图。\n\n**面料图（✅）**：面料小样特写，能看清织纹与光泽；有褶皱转折更好（能交代垂坠）。\n\n**会明显拉低效果的输入（❌）**\n\n| 问题 | 说明 |\n| --- | --- |\n| 面料图拍太远 | 看不清织纹，只会当成一块纯色 |\n| 面料图带强环境色 | 黄光下拍的白布会换成米黄色 |\n| 版式图有复杂印花 | 原印花会和新面料打架，先用 [item-repair](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/item-repair/skill.md) 或换素图 |\n| 面料与品类不匹配 | 硬挺牛仔布做不出吊带裙的垂坠，模型会硬凑 |\n\n---\n\n## 3、面料替换的关键：写清「材质带来的物理变化」\n\n只说「换成真丝」不够——模型不知道该怎么改光影。要把材质翻译成**可画出来的物理特征**：\n\n| 面料 | 要写的物理特征 |\n| --- | --- |\n| 真丝 / 缎面 | `lustrous specular highlights along the folds, fluid drape, soft continuous gradients` |\n| 粗针织 | `chunky knit loops with visible yarn twist, matte fibre halo, structured heavy drape` |\n| 牛仔 | `twill diagonal weave, slight slub texture, stiff drape with sharp fold creases` |\n| 灯芯绒 | `vertical wale ridges catching light, matte pile, medium-stiff drape` |\n| 雪纺 | `semi-sheer, very light drape with many fine ripples, soft diffused light through the fabric` |\n| 皮革 | `low-frequency specular sheen, grain texture, stiff drape with broad soft creases` |\n| 摇粒绒 | `dense short pile, fuzzy silhouette edge, no specular highlight` |\n\n**再加一句「版型不许动」**——这是本技能最容易失守的地方：\n\n```text\nKeep the pattern identical: same cut, same body length, same sleeve length,\nsame collar/cuff/hem construction, same flat-lay layout and camera angle.\nReplace only the material.\n```\n\n---\n\n## 4、工具调用\n\n本技能使用 dLazy 的 **`gpt-image-2`**（图像编辑模型；面料替换要求「几何完全不动、材质完全改变」，是典型的定向属性替换任务）。\n\n### 调用方式\n\n两种等价写法，选一种。统一入口会自动选后端、失败重试、建目录落盘、估算成本：\n\n```bash\n# A. 统一入口（推荐）：可切任意后端，加 --dry-run 不计费空跑\nnode scripts/gen.mjs --task fabric-on-body \\\n  --prompt '<见下方 Prompt 模板>' \\\n  --images <按下表顺序> \\\n  --save output/fabric-on-body-<sku>.jpg\n\n# B. 直接用 dLazy CLI（不想引入 Node 依赖时，效果等价）\ndlazy gpt-image-2 --prompt '...' --images ... --save output/fabric-on-body.jpg\n```\n\n**参数约定（本技能固定用法）**\n\n| 参数 | 取值 | 理由 |\n| --- | --- | --- |\n| `--images` | `[版式图, 面料图]` | 顺序即 prompt 中的 image 1 / 2 |\n| `--size` | 与版式图比例一致（`1024x1024` 平铺 / `1024x1536` 人台竖版） | 换料不该改构图 |\n| `--quality` | `high` | 材质是本技能的唯一产出，必须 high |\n| `--imageFormat` | `jpeg` | 通用格式 |\n| `--batch` | `2` ~ `3` | 垂坠形态有随机性 |\n| `--save` | `docs/fabric-on-body/output-<版型>-<面料>.jpg` | 版型 × 面料矩阵命名 |\n\n### Command Examples\n\n```bash\n# basic call: 一个版型换一种面料\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement. Image 1 is the garment pattern reference, image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same cut, body length, sleeve length, collar/cuff/hem construction, layout and camera angle. Replace only the material. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality high\n\n# complex call: 一个版型 × 多种面料，跑成一个选型矩阵\nSTYLE=docs/fabric-on-body/style-sheet.jpg\nKEEP='Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material.'\nfor F in satin corduroy denim fleece; do\n  case $F in\n    satin)    PHYS='lustrous specular highlights along the folds, fluid drape, soft continuous gradients' ;;\n    corduroy) PHYS='vertical wale ridges catching light, matte pile, medium-stiff drape' ;;\n    denim)    PHYS='twill diagonal weave, slight slub texture, stiff drape with sharp fold creases' ;;\n    fleece)   PHYS='dense short pile, fuzzy silhouette edge, no specular highlight' ;;\n  esac\n  dlazy gpt-image-2 \\\n    --prompt \"Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference. Image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. $KEEP The garment must now read as $F: $PHYS. Clean white background, even studio light, no text.\" \\\n    --images \"$STYLE\" \"docs/fabric-on-body/swatch-$F.jpg\" \\\n    --size 1024x1024 --quality high --imageFormat jpeg \\\n    --save \"docs/fabric-on-body/output-drop-shoulder-$F.jpg\"\ndone\n\n# 先估价不真跑\ndlazy gpt-image-2 --dry-run --prompt '...' --images a.jpg b.jpg --size 1024x1024 --quality high\n```\n\n### 延伸阅读\n\n| 要查什么 | 去哪 |\n| --- | --- |\n| 认证、多后端配置、输出结构、错误码 | [`references/provider-cli.md`](references/provider-cli.md) |\n| `gpt-image-2` 的全部可用参数 | [`references/model-flags.md`](references/model-flags.md) |\n| 统一入口的全部选项 | `node scripts/gen.mjs --help` |\n\n## 5、Prompt 模板\n\n```text\nFabric replacement for a garment style sheet.\nImage 1 is the garment pattern/style reference: [品类 + 版型描述].\nImage 2 is the target fabric: [面料名 + 颜色 + 光泽描述].\n\nRe-render the exact same garment silhouette from image 1 in the fabric from image 2.\n\nKeep the pattern identical: same [剪裁], same body length, same sleeve length,\nsame [领口/袖口/下摆结构], same [缝线位置], same layout and camera angle.\n\nReplace only the material — the garment must now read as [面料名]:\n[第三节表格里对应的物理特征].\n\nClean [背景色] background, even studio light, no text.\n```\n\n**按问题追加的修正句**\n\n| 问题 | 追加到 prompt 末尾 |\n| --- | --- |\n| 版型跟着变了 | `The silhouette outline must be pixel-aligned with image 1. Only surface material may differ.` |\n| 面料颜色偏了 | `Sample the fabric colour from image 2 under neutral light; do not shift hue or add colour cast.` |\n| 换完还是原来的质感 | 把物理特征写得更极端，并追加 `The original [原面料] texture must be completely gone.` |\n| 垂坠不对 | `Drape stiffness: [very fluid / medium / stiff]. Fold count and fold radius must match a [面料] of about [克重] gsm.` |\n| 缝线/罗纹消失了 | `Preserve construction details: [罗纹/明线/拉链] must remain visible in the new material.` |\n\n---\n\n## 6、执行流程\n\n1. **备素材**：版式图（结构清晰、印花越少越好）+ 面料小样特写（能看清织纹）。\n2. **翻译材质**：查第三节表格，把面料名换成物理特征描述。\n3. **写版型锁定句**：剪裁 / 身长 / 袖长 / 领口袖口下摆 / 缝线 / 角度，逐项写死。\n4. **`--quality high` 起跑**，比例跟随版式图。\n5. **要做选型矩阵**：用第四节循环，一个版型 × N 种面料。\n6. **质检**：版型轮廓是否与原图对齐、面料颜色是否准、质感是否真的换掉了、缝线罗纹是否还在。\n7. **交付时注明这是视觉预览**，不代表真实手感与克重。\n\n---\n\n## 7、常见问题\n\n| 现象 | 原因 | 处理 |\n| --- | --- | --- |\n| 版型变了 | 未锁定轮廓 | 追加 `silhouette outline must be pixel-aligned with image 1` |\n| 面料颜色不对 | 面料图带环境色 | 重拍面料小样（中性光），或追加取色约束句 |\n| 质感没换掉 | 物理特征写得太弱 | 用第三节表格的极端描述 + `original texture must be completely gone` |\n| 垂坠像纸板 | 未指定垂坠刚度 | 追加 drape stiffness 句，给出克重参考 |\n| 罗纹/明线消失 | 被新材质吞掉 | 追加保留结构细节句 |\n| 面料与品类物理上不成立 | 硬挺布做垂坠款 | 换匹配的面料，或改版型 |\n\n---\n\n## Tips\n\nVisit https://dlazy.com for more information.\n\nFile v1.0.17:_meta.json\n\n{\n  \"ownerId\": \"kn7c5wgeajfcfvdfb5ceemvdb984cjpd\",\n  \"slug\": \"fabric-on-body\",\n  \"version\": \"1.0.17\",\n  \"publishedAt\": 1791078151563\n}\n\nFile v1.0.17:references/model-flags.md\n\n# `gpt-image-2` 参数清单\r\n\r\n本技能默认用的模型的完整参数。日常只需要「参数约定」里那几个，\r\n这份清单在需要用到非常规参数时再看。\r\n\r\n**CRITICAL INSTRUCTION FOR AGENT**:\r\nRun the `dlazy gpt-image-2` command to get results.\r\n\r\n```bash\r\ndlazy gpt-image-2 -h\r\n\r\nOptions:\r\n  --prompt <prompt>            Prompt\r\n  --images [images...]         Images [image: url or local path] (max 5)\r\n  --size <size>                Size [default: auto] (choices: \"1024x1024\",\r\n                               \"1536x1024\", \"1024x1536\", \"2048x2048\",\r\n                               \"2048x1152\", \"3840x2160\", \"2160x3840\", \"auto\")\r\n  --imageFormat <imageFormat>  Image Format [default: jpeg] (choices: \"jpeg\",\r\n                               \"png\", \"webp\")\r\n  --quality <quality>          Quality [default: medium] (choices: \"low\",\r\n                               \"medium\", \"high\")\r\n  --dry-run                    Print payload without executing the tool\r\n  --no-wait                    Return generateId immediately for async tasks\r\n  --timeout <seconds>          Max seconds to wait for async completion\r\n                               (default: \"1800\")\r\n  --input <jsonOrFile>         Inline JSON or @path/to/file.json — merged under\r\n                               flag values (flags win)\r\n  --save <path>                Download the result asset to this local path\r\n                               (mkdir + retry handled for you). A destination\r\n                               path — NOT a response format; for stdout shape\r\n                               use --format\r\n  --batch <n>                  Fan-out N parallel runs (cloud tools only)\r\n                               (default: \"1\")\r\n  -h, --help                   display help for command\r\n```\r\n\r\n> Any flag also accepts pipe references — `-` (auto-pick from upstream stdin), `@N` (n-th output), `@N.path` (jsonpath into output), `@*` (all primary values), `@stdin` / `@stdin:path` (whole envelope). See `dlazy --help` for details.\r\n\r\n---\r\n\r\n换其他后端时参数由 `scripts/gen.mjs` 统一翻译，见 [`provider-cli.md`](provider-cli.md)。\n\nFile v1.0.17:references/provider-cli.md\n\n<!-- 由 scripts/build-skills.mjs 从 shared/references/provider-cli.md 同步生成，不要直接改这里。 -->\n# 后端调用参考\n\n技能正文只写「要生成什么」。认证、计费、错误码、输出结构这些每个技能都一样的东西放在这里，\n**用到时再读**，不占技能的常驻上下文。\n\n---\n\n## 一、认证\n\n### 默认后端 dLazy\n\n```bash\ndlazy login            # 设备码流程，远程 shell 也能用，自动写入本地配置\ndlazy auth set <KEY>   # 已有 key 时直接写入\n```\n\nkey 存在用户配置目录（macOS/Linux `~/.dlazy/config.json`，Windows `%USERPROFILE%\\.dlazy\\config.json`），\n权限限本机用户。也可以每次调用用环境变量 `DLAZY_API_KEY` 传入。\n\n手动获取：登录 [dlazy.com](https://dlazy.com) → [API Key 页面](https://dlazy.com/dashboard/organization/api-key)。\nkey 按组织隔离，可随时轮换或吊销。\n\n### 其他后端\n\n本技能库不锁定单一厂商。配好任意一家的 key 即可跑：\n\n| 后端 | 环境变量 | 说明 |\n| --- | --- | --- |\n| `dlazy` | `dlazy login` 或 `DLAZY_API_KEY` | 默认，最省事 |\n| `openai` | `OPENAI_API_KEY` | 走 `/v1/images/edits` 与 `/v1/images/generations` |\n| `gemini` | `GEMINI_API_KEY` | Nano Banana 系列 |\n| `fal` | `FAL_KEY` | |\n| `replicate` | `REPLICATE_API_TOKEN` | |\n| `ark` | `ARK_API_KEY` + `ARK_MODEL` | 火山方舟，模型 ID 需按开通情况填 |\n\n选路优先级：`--provider` 参数 > `PROVIDER` 环境变量 > 第一个配了 key 的 > `dlazy`。\n\n```bash\nnode scripts/gen.mjs --doctor     # 看当前哪个后端可用\n```\n\n各后端的模型 ID 可用 `GEN_MODEL_OPENAI` / `GEN_MODEL_GEMINI` / `GEN_MODEL_FAL` /\n`GEN_MODEL_REPLICATE` / `GEN_MODEL_ARK` 覆盖。**厂商目录会变，以各家最新文档为准。**\n\n---\n\n## 二、两种调用方式\n\n### 方式 A：统一入口（推荐）\n\n```bash\nnode scripts/gen.mjs --task <技能名> --prompt '...' --images a.jpg b.jpg --save out.jpg\n```\n\n它负责：后端选路、默认尺寸档位、失败重试（429/5xx 指数退避）、落盘建目录、成本估算。\n\n```bash\nnode scripts/gen.mjs --task flat-lay --prompt '...' --dry-run   # 不调用不计费，只看要发什么\nnode scripts/gen.mjs --help\n```\n\n### 方式 B：直接用 dLazy CLI\n\n不想引入 Node 依赖时，技能正文里的 `dlazy ...` 命令可以原样执行，效果等价。\n\n```bash\nnpx @dlazy/cli@1.2.3 <command>     # 不装全局二进制\n```\n\n- CLI 源码：[github.com/dlazy-ai/cli](https://github.com/dlazy-ai/cli) · npm 包 `@dlazy/cli`\n\n---\n\n## 三、数据流向\n\n调用 dLazy 时：提示词与参数发往 `api.dlazy.com`；传入的本地图片会上传到 `files.dlazy.com`\n供模型读取；产出 URL 同样托管在 `files.dlazy.com`。这是云端生成 API 的通用形态。\n换成其他后端时，数据流向对应厂商，不经过 dLazy。\n\n---\n\n## 四、输出结构\n\n`gen.mjs`（加 `--json`）：\n\n```json\n{\n  \"ok\": true,\n  \"task\": \"flat-lay\",\n  \"provider\": \"dlazy\",\n  \"model\": \"gpt-image-2\",\n  \"files\": [\"docs/flat-lay/output-sku001.jpg\"],\n  \"texts\": [],\n  \"estimatedCredits\": 60,\n  \"elapsedMs\": 58213\n}\n```\n\ndLazy CLI 原生：\n\n```json\n{\n  \"ok\": true,\n  \"result\": {\n    \"tool\": \"gpt-image-2\",\n    \"data\": { \"urls\": [\"https://files.dlazy.com/data/ai/....jpg\"] },\n    \"savedPath\": \"docs/flat-lay/example-output.jpg\"\n  }\n}\n```\n\n加 `--no-wait` 的异步任务不返回 `data`，返回 `task: { generateId, status }`，\n用 `dlazy status <generateId> --wait` 轮询。\n\n文本类模型（如质检）产出在 `result.data.texts[0]`：\n\n```bash\ndlazy claude-sonnet-5 --prompt '...' --images x.jpg \\\n  | python3 -c 'import sys,json;print(json.load(sys.stdin)[\"result\"][\"data\"][\"texts\"][0])'\n```\n\n---\n\n## 五、错误处理\n\n| Code | 类型 | 示例 |\n| --- | --- | --- |\n| 401 | 未授权 / 无 key | `ok: false, code: \"unauthorized\"` |\n| 501 | 缺必填参数 | `error: required option '--prompt <prompt>' not specified` |\n| 502 | 本地文件读不到 | `Error: Image file not found: ...` |\n| 503 | 余额不足 | `ok: false, code: \"insufficient_balance\"` |\n| 503 | 服务端错误 | `HTTP status code error (500)` |\n| 504 | 异步任务失败 | `=== Generation Failed ===` / `Prompt violates safety policy` |\n\n**给 Agent 的硬性要求**\n\n1. 命中 `insufficient_balance` → 明确告诉用户算力不足，并给出充值入口\n   <https://dlazy.com/dashboard/organization/settings?tab=credits>\n2. 命中 `unauthorized` / 缺 key → 告诉用户去 <https://dlazy.com/dashboard/organization/api-key>\n   取 key，用 `dlazy auth set <key>` 存好再继续。\n3. 用 `gen.mjs` 时，429 与 5xx 已自动重试；仍失败才向用户报错。\n4. **不要**为了「跑通」而偷偷降级参数（尺寸、档位、批量），先问用户。\n\nFile v1.0.17:scripts/lib/tasks.json\n\n{\r\n  \"_note\": \"技能 → 默认模型与参数。dlazy 列为默认后端的模型名；其他后端走 providers.mjs 的通用映射，可用 GEN_MODEL_<PROVIDER> 覆盖。\",\r\n  \"_credits\": { \"gpt-image-2\": 60, \"seedream-5.0\": 30, \"seedream-5.0-pro\": 45, \"banana-pro\": 25, \"claude-sonnet-5\": 3 },\r\n  \"tasks\": {\r\n    \"flat-lay\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"wear-everything\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"image-fusion\":            { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"one-shot\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"fission-pattern\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-detail\":             { \"model\": \"seedream-5.0-pro\", \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"creative-scene\":          { \"model\": \"banana-pro\",       \"size\": \"1024x1536\", \"format\": \"jpeg\" },\r\n    \"batch-image\":             { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"to-3d\":                   { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-extraction\":     { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"fabric-on-body\":          { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-detail\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-grass-planting\": { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-selling-point\":      { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"item-change-background\":  { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"remove-watermark\":        { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"material-enhancement\":    { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"item-repair\":             { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"detect-task\":             { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"listing-optimizer\":       { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"cross-border-localize\":   { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"brand-kit\":               { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"platform-compliance\":     { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"main-image-video\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"product-video-ad\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"ugc-testimonial\":         { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true }\r\n  }\r\n}\n\nFile v1.0.17:skill-card.md\n\n## Description:\n\nCreates visual previews of a garment in a new fabric from a garment reference and fabric swatch while aiming to preserve its cut and construction.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[dlazyai](https://clawhub.ai/user/dlazyai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nFashion designers and ecommerce teams use a garment image and fabric swatch to compare how a style might look in different materials before physical sampling.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Garment photos, fabric swatches, and prompts may be sent to a cloud image provider.\n\nMitigation: Use approved providers for sensitive designs; use dry-run or explicitly select the provider to check what will be sent.\n\nRisk: Generated previews may not preserve every garment detail or reflect the fabric's real-world drape and weight.\n\nMitigation: Check silhouette, construction details, color, and texture against the inputs; label results as visual previews rather than physical samples.\n\n## Reference(s):\n\n- [Fabric on Body skill release](https://clawhub.ai/dlazyai/skills/fabric-on-body)\n- [Provider and CLI usage](references/provider-cli.md)\n- [Image model options](references/model-flags.md)\n- [dLazy CLI source and documentation](https://github.com/dlazy-ai/cli)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Image files]\n\n**Output Format:** [Markdown instructions and generated image previews]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Previews show appearance, not verified fabric feel, weight, or manufacturability.]\n\n## Skill Version(s):\n\n1.0.17 (source: frontmatter and server-resolved release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.17:examples/brand.yaml\n\n# ⚠️ 由 scripts/build-skills.mjs 从 shared/examples/brand.yaml 同步生成，不要直接改这里。\r\n# 店铺品牌视觉规范 —— 所有生图技能读这一份，保证几百个 SKU 看起来像同一家店。\r\n#   node scripts/brand.mjs --brand brand.yaml --for flat-lay\r\n#   node scripts/gen.mjs --task flat-lay --brand brand.yaml --prompt '...'\r\n\r\nbrand:\r\n  name: 示例品牌\r\n  # 一句话概括调性，会原样进 prompt\r\n  tone: quiet minimalist, warm and lived-in, never glossy or commercial\r\n\r\nmodel:\r\n  # 锁模特：给一张脸的参考图，所有技能都会把它作为最后一张参考图传入\r\n  reference: assets/model/face-a.jpg\r\n  description: East Asian woman, late twenties, natural makeup, shoulder-length black hair\r\n  body: slim, height around 168cm\r\n\r\nphotography:\r\n  background: seamless off-white studio backdrop, RGB 248 248 246\r\n  lighting: soft large softbox from camera left, gentle fill, no hard shadows\r\n  camera: 85mm equivalent, eye level, shallow depth of field\r\n  grade: neutral white balance around 5200K, low contrast, slightly lifted blacks\r\n  crop: full body with headroom, product centered\r\n\r\nlayout:\r\n  # 给带排版的技能（主图 / 详情页）用\r\n  margin: at least 8% empty margin on all sides\r\n  typeface: clean sans-serif, no decorative fonts\r\n  text_color: near-black on light background\r\n\r\nforbid:\r\n  - no visible brand logos other than the product's own\r\n  - no text or watermark\r\n  - no exaggerated poses or dramatic wind effects\r\n  - no oversaturated colors\r\n\r\n# 可选：把这些直接写进合规目标，生成时就按平台要求出图\r\ncompliance:\r\n  platform: amazon\n\nArchive v1.0.16: 11 files, 25428 bytes\n\nFiles: examples/brand.yaml (1655b), references/model-flags.md (2144b), references/provider-cli.md (4802b), scripts/brand.mjs (4516b), scripts/gen.mjs (9733b), scripts/lib/miniyaml.mjs (2901b), scripts/lib/providers.mjs (12510b), scripts/lib/tasks.json (3234b), skill-card.md (2196b), SKILL.md (11767b), _meta.json (134b)\n\nFile v1.0.16:SKILL.md\n\n---\nname: fabric-on-body\nversion: 1.0.16\ndescription: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。\n---\n\n# fabric-on-body — 一键替换服装面料\n\n**版型不动，面料换掉**。给一张服装版式图 + 一张面料小样，输出这个版型用新面料做出来的样衣效果图。\n\n价值在打样前：一个版型试 8 种面料，传统做法是打 8 件样衣（每件几天、几百块）；这里是 8 次生成。\n\n---\n\n## 生成效果示例\n\n| 输入：服装版式图 | 输入：面料图 |\n| --- | --- |\n| <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/style-sheet.jpg\" width=\"260\"> | <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/fabric-swatch.jpg\" width=\"260\"> |\n| `style-sheet.jpg` — 落肩宽松圆领毛衣版型，800×800 | `fabric-swatch.jpg` — 象牙白真丝缎面小样，640×640 |\n\n实际执行的命令：\n\n```bash\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference: an oversized drop-shoulder crewneck sweater with ribbed collar, cuffs and hem. Image 2 is the target fabric: ivory silk satin with a soft lustrous sheen and fine weave. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material — the sweater must now read as ivory silk satin with specular highlights on the folds and soft drape instead of chunky knit. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality medium --imageFormat jpeg \\\n  --save docs/fabric-on-body/example-output.jpg\n```\n\n**输出**\n\n<img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/example-output.jpg\" width=\"320\">\n\n`example-output.jpg` — 1024×1024。落肩剪裁、身长袖长、罗纹领口袖口下摆的结构与平铺角度都与版式图一致；材质从粗针织变成象牙白真丝缎面，褶皱上出现高光、垂坠变得柔顺，罗纹部位仍以缎面质感保留。\n\n---\n\n## 1、能力边界\n\n| 输入 | 说明 |\n| --- | --- |\n| 服装版式图 | 决定版型、剪裁、结构与拍摄角度 |\n| 面料图 | 决定材质、纹理、光泽与垂坠感（面料小样特写最佳） |\n| 服装类型 | 帮助模型理解结构（上装 / 下装 / 连衣裙 / 外套 / 内衣） |\n\n| 保持不变 | 会改变 |\n| --- | --- |\n| 版型与剪裁、身长袖长、领口/袖口/下摆结构、缝线位置、拍摄角度与构图 | 材质与织法、表面光泽、垂坠与褶皱形态、厚度观感 |\n\n**不做**：不改版型比例；不改变服装的结构设计；不承诺真实打样的手感与克重——输出是视觉预览，不是工艺样衣。\n\n---\n\n## 2、输入素材规则\n\n生成前先自检这几条硬性约束：\n\n- 大小：**20KB ~ 15MB**\n- 分辨率：**大于 400×400**\n- 格式：**jpg / jpeg / png / webp**\n\n**版式图（✅）**：纯色背景、结构清晰、正面完整的平铺图或人台图。\n\n**面料图（✅）**：面料小样特写，能看清织纹与光泽；有褶皱转折更好（能交代垂坠）。\n\n**会明显拉低效果的输入（❌）**\n\n| 问题 | 说明 |\n| --- | --- |\n| 面料图拍太远 | 看不清织纹，只会当成一块纯色 |\n| 面料图带强环境色 | 黄光下拍的白布会换成米黄色 |\n| 版式图有复杂印花 | 原印花会和新面料打架，先用 [item-repair](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/item-repair/skill.md) 或换素图 |\n| 面料与品类不匹配 | 硬挺牛仔布做不出吊带裙的垂坠，模型会硬凑 |\n\n---\n\n## 3、面料替换的关键：写清「材质带来的物理变化」\n\n只说「换成真丝」不够——模型不知道该怎么改光影。要把材质翻译成**可画出来的物理特征**：\n\n| 面料 | 要写的物理特征 |\n| --- | --- |\n| 真丝 / 缎面 | `lustrous specular highlights along the folds, fluid drape, soft continuous gradients` |\n| 粗针织 | `chunky knit loops with visible yarn twist, matte fibre halo, structured heavy drape` |\n| 牛仔 | `twill diagonal weave, slight slub texture, stiff drape with sharp fold creases` |\n| 灯芯绒 | `vertical wale ridges catching light, matte pile, medium-stiff drape` |\n| 雪纺 | `semi-sheer, very light drape with many fine ripples, soft diffused light through the fabric` |\n| 皮革 | `low-frequency specular sheen, grain texture, stiff drape with broad soft creases` |\n| 摇粒绒 | `dense short pile, fuzzy silhouette edge, no specular highlight` |\n\n**再加一句「版型不许动」**——这是本技能最容易失守的地方：\n\n```text\nKeep the pattern identical: same cut, same body length, same sleeve length,\nsame collar/cuff/hem construction, same flat-lay layout and camera angle.\nReplace only the material.\n```\n\n---\n\n## 4、工具调用\n\n本技能使用 dLazy 的 **`gpt-image-2`**（图像编辑模型；面料替换要求「几何完全不动、材质完全改变」，是典型的定向属性替换任务）。\n\n### 调用方式\n\n两种等价写法，选一种。统一入口会自动选后端、失败重试、建目录落盘、估算成本：\n\n```bash\n# A. 统一入口（推荐）：可切任意后端，加 --dry-run 不计费空跑\nnode scripts/gen.mjs --task fabric-on-body \\\n  --prompt '<见下方 Prompt 模板>' \\\n  --images <按下表顺序> \\\n  --save output/fabric-on-body-<sku>.jpg\n\n# B. 直接用 dLazy CLI（不想引入 Node 依赖时，效果等价）\ndlazy gpt-image-2 --prompt '...' --images ... --save output/fabric-on-body.jpg\n```\n\n**参数约定（本技能固定用法）**\n\n| 参数 | 取值 | 理由 |\n| --- | --- | --- |\n| `--images` | `[版式图, 面料图]` | 顺序即 prompt 中的 image 1 / 2 |\n| `--size` | 与版式图比例一致（`1024x1024` 平铺 / `1024x1536` 人台竖版） | 换料不该改构图 |\n| `--quality` | `high` | 材质是本技能的唯一产出，必须 high |\n| `--imageFormat` | `jpeg` | 通用格式 |\n| `--batch` | `2` ~ `3` | 垂坠形态有随机性 |\n| `--save` | `docs/fabric-on-body/output-<版型>-<面料>.jpg` | 版型 × 面料矩阵命名 |\n\n### Command Examples\n\n```bash\n# basic call: 一个版型换一种面料\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement. Image 1 is the garment pattern reference, image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same cut, body length, sleeve length, collar/cuff/hem construction, layout and camera angle. Replace only the material. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality high\n\n# complex call: 一个版型 × 多种面料，跑成一个选型矩阵\nSTYLE=docs/fabric-on-body/style-sheet.jpg\nKEEP='Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material.'\nfor F in satin corduroy denim fleece; do\n  case $F in\n    satin)    PHYS='lustrous specular highlights along the folds, fluid drape, soft continuous gradients' ;;\n    corduroy) PHYS='vertical wale ridges catching light, matte pile, medium-stiff drape' ;;\n    denim)    PHYS='twill diagonal weave, slight slub texture, stiff drape with sharp fold creases' ;;\n    fleece)   PHYS='dense short pile, fuzzy silhouette edge, no specular highlight' ;;\n  esac\n  dlazy gpt-image-2 \\\n    --prompt \"Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference. Image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. $KEEP The garment must now read as $F: $PHYS. Clean white background, even studio light, no text.\" \\\n    --images \"$STYLE\" \"docs/fabric-on-body/swatch-$F.jpg\" \\\n    --size 1024x1024 --quality high --imageFormat jpeg \\\n    --save \"docs/fabric-on-body/output-drop-shoulder-$F.jpg\"\ndone\n\n# 先估价不真跑\ndlazy gpt-image-2 --dry-run --prompt '...' --images a.jpg b.jpg --size 1024x1024 --quality high\n```\n\n### 延伸阅读\n\n| 要查什么 | 去哪 |\n| --- | --- |\n| 认证、多后端配置、输出结构、错误码 | [`references/provider-cli.md`](references/provider-cli.md) |\n| `gpt-image-2` 的全部可用参数 | [`references/model-flags.md`](references/model-flags.md) |\n| 统一入口的全部选项 | `node scripts/gen.mjs --help` |\n\n## 5、Prompt 模板\n\n```text\nFabric replacement for a garment style sheet.\nImage 1 is the garment pattern/style reference: [品类 + 版型描述].\nImage 2 is the target fabric: [面料名 + 颜色 + 光泽描述].\n\nRe-render the exact same garment silhouette from image 1 in the fabric from image 2.\n\nKeep the pattern identical: same [剪裁], same body length, same sleeve length,\nsame [领口/袖口/下摆结构], same [缝线位置], same layout and camera angle.\n\nReplace only the material — the garment must now read as [面料名]:\n[第三节表格里对应的物理特征].\n\nClean [背景色] background, even studio light, no text.\n```\n\n**按问题追加的修正句**\n\n| 问题 | 追加到 prompt 末尾 |\n| --- | --- |\n| 版型跟着变了 | `The silhouette outline must be pixel-aligned with image 1. Only surface material may differ.` |\n| 面料颜色偏了 | `Sample the fabric colour from image 2 under neutral light; do not shift hue or add colour cast.` |\n| 换完还是原来的质感 | 把物理特征写得更极端，并追加 `The original [原面料] texture must be completely gone.` |\n| 垂坠不对 | `Drape stiffness: [very fluid / medium / stiff]. Fold count and fold radius must match a [面料] of about [克重] gsm.` |\n| 缝线/罗纹消失了 | `Preserve construction details: [罗纹/明线/拉链] must remain visible in the new material.` |\n\n---\n\n## 6、执行流程\n\n1. **备素材**：版式图（结构清晰、印花越少越好）+ 面料小样特写（能看清织纹）。\n2. **翻译材质**：查第三节表格，把面料名换成物理特征描述。\n3. **写版型锁定句**：剪裁 / 身长 / 袖长 / 领口袖口下摆 / 缝线 / 角度，逐项写死。\n4. **`--quality high` 起跑**，比例跟随版式图。\n5. **要做选型矩阵**：用第四节循环，一个版型 × N 种面料。\n6. **质检**：版型轮廓是否与原图对齐、面料颜色是否准、质感是否真的换掉了、缝线罗纹是否还在。\n7. **交付时注明这是视觉预览**，不代表真实手感与克重。\n\n---\n\n## 7、常见问题\n\n| 现象 | 原因 | 处理 |\n| --- | --- | --- |\n| 版型变了 | 未锁定轮廓 | 追加 `silhouette outline must be pixel-aligned with image 1` |\n| 面料颜色不对 | 面料图带环境色 | 重拍面料小样（中性光），或追加取色约束句 |\n| 质感没换掉 | 物理特征写得太弱 | 用第三节表格的极端描述 + `original texture must be completely gone` |\n| 垂坠像纸板 | 未指定垂坠刚度 | 追加 drape stiffness 句，给出克重参考 |\n| 罗纹/明线消失 | 被新材质吞掉 | 追加保留结构细节句 |\n| 面料与品类物理上不成立 | 硬挺布做垂坠款 | 换匹配的面料，或改版型 |\n\n---\n\n## Tips\n\nVisit https://dlazy.com for more information.\n\nFile v1.0.16:_meta.json\n\n{\n  \"ownerId\": \"kn7c5wgeajfcfvdfb5ceemvdb984cjpd\",\n  \"slug\": \"fabric-on-body\",\n  \"version\": \"1.0.16\",\n  \"publishedAt\": 1790918132141\n}\n\nFile v1.0.16:references/model-flags.md\n\n# `gpt-image-2` 参数清单\r\n\r\n本技能默认用的模型的完整参数。日常只需要「参数约定」里那几个，\r\n这份清单在需要用到非常规参数时再看。\r\n\r\n**CRITICAL INSTRUCTION FOR AGENT**:\r\nRun the `dlazy gpt-image-2` command to get results.\r\n\r\n```bash\r\ndlazy gpt-image-2 -h\r\n\r\nOptions:\r\n  --prompt <prompt>            Prompt\r\n  --images [images...]         Images [image: url or local path] (max 5)\r\n  --size <size>                Size [default: auto] (choices: \"1024x1024\",\r\n                               \"1536x1024\", \"1024x1536\", \"2048x2048\",\r\n                               \"2048x1152\", \"3840x2160\", \"2160x3840\", \"auto\")\r\n  --imageFormat <imageFormat>  Image Format [default: jpeg] (choices: \"jpeg\",\r\n                               \"png\", \"webp\")\r\n  --quality <quality>          Quality [default: medium] (choices: \"low\",\r\n                               \"medium\", \"high\")\r\n  --dry-run                    Print payload without executing the tool\r\n  --no-wait                    Return generateId immediately for async tasks\r\n  --timeout <seconds>          Max seconds to wait for async completion\r\n                               (default: \"1800\")\r\n  --input <jsonOrFile>         Inline JSON or @path/to/file.json — merged under\r\n                               flag values (flags win)\r\n  --save <path>                Download the result asset to this local path\r\n                               (mkdir + retry handled for you). A destination\r\n                               path — NOT a response format; for stdout shape\r\n                               use --format\r\n  --batch <n>                  Fan-out N parallel runs (cloud tools only)\r\n                               (default: \"1\")\r\n  -h, --help                   display help for command\r\n```\r\n\r\n> Any flag also accepts pipe references — `-` (auto-pick from upstream stdin), `@N` (n-th output), `@N.path` (jsonpath into output), `@*` (all primary values), `@stdin` / `@stdin:path` (whole envelope). See `dlazy --help` for details.\r\n\r\n---\r\n\r\n换其他后端时参数由 `scripts/gen.mjs` 统一翻译，见 [`provider-cli.md`](provider-cli.md)。\n\nFile v1.0.16:references/provider-cli.md\n\n<!-- 由 scripts/build-skills.mjs 从 shared/references/provider-cli.md 同步生成，不要直接改这里。 -->\n# 后端调用参考\n\n技能正文只写「要生成什么」。认证、计费、错误码、输出结构这些每个技能都一样的东西放在这里，\n**用到时再读**，不占技能的常驻上下文。\n\n---\n\n## 一、认证\n\n### 默认后端 dLazy\n\n```bash\ndlazy login            # 设备码流程，远程 shell 也能用，自动写入本地配置\ndlazy auth set <KEY>   # 已有 key 时直接写入\n```\n\nkey 存在用户配置目录（macOS/Linux `~/.dlazy/config.json`，Windows `%USERPROFILE%\\.dlazy\\config.json`），\n权限限本机用户。也可以每次调用用环境变量 `DLAZY_API_KEY` 传入。\n\n手动获取：登录 [dlazy.com](https://dlazy.com) → [API Key 页面](https://dlazy.com/dashboard/organization/api-key)。\nkey 按组织隔离，可随时轮换或吊销。\n\n### 其他后端\n\n本技能库不锁定单一厂商。配好任意一家的 key 即可跑：\n\n| 后端 | 环境变量 | 说明 |\n| --- | --- | --- |\n| `dlazy` | `dlazy login` 或 `DLAZY_API_KEY` | 默认，最省事 |\n| `openai` | `OPENAI_API_KEY` | 走 `/v1/images/edits` 与 `/v1/images/generations` |\n| `gemini` | `GEMINI_API_KEY` | Nano Banana 系列 |\n| `fal` | `FAL_KEY` | |\n| `replicate` | `REPLICATE_API_TOKEN` | |\n| `ark` | `ARK_API_KEY` + `ARK_MODEL` | 火山方舟，模型 ID 需按开通情况填 |\n\n选路优先级：`--provider` 参数 > `PROVIDER` 环境变量 > 第一个配了 key 的 > `dlazy`。\n\n```bash\nnode scripts/gen.mjs --doctor     # 看当前哪个后端可用\n```\n\n各后端的模型 ID 可用 `GEN_MODEL_OPENAI` / `GEN_MODEL_GEMINI` / `GEN_MODEL_FAL` /\n`GEN_MODEL_REPLICATE` / `GEN_MODEL_ARK` 覆盖。**厂商目录会变，以各家最新文档为准。**\n\n---\n\n## 二、两种调用方式\n\n### 方式 A：统一入口（推荐）\n\n```bash\nnode scripts/gen.mjs --task <技能名> --prompt '...' --images a.jpg b.jpg --save out.jpg\n```\n\n它负责：后端选路、默认尺寸档位、失败重试（429/5xx 指数退避）、落盘建目录、成本估算。\n\n```bash\nnode scripts/gen.mjs --task flat-lay --prompt '...' --dry-run   # 不调用不计费，只看要发什么\nnode scripts/gen.mjs --help\n```\n\n### 方式 B：直接用 dLazy CLI\n\n不想引入 Node 依赖时，技能正文里的 `dlazy ...` 命令可以原样执行，效果等价。\n\n```bash\nnpx @dlazy/cli@1.2.3 <command>     # 不装全局二进制\n```\n\n- CLI 源码：[github.com/dlazy-ai/cli](https://github.com/dlazy-ai/cli) · npm 包 `@dlazy/cli`\n\n---\n\n## 三、数据流向\n\n调用 dLazy 时：提示词与参数发往 `api.dlazy.com`；传入的本地图片会上传到 `files.dlazy.com`\n供模型读取；产出 URL 同样托管在 `files.dlazy.com`。这是云端生成 API 的通用形态。\n换成其他后端时，数据流向对应厂商，不经过 dLazy。\n\n---\n\n## 四、输出结构\n\n`gen.mjs`（加 `--json`）：\n\n```json\n{\n  \"ok\": true,\n  \"task\": \"flat-lay\",\n  \"provider\": \"dlazy\",\n  \"model\": \"gpt-image-2\",\n  \"files\": [\"docs/flat-lay/output-sku001.jpg\"],\n  \"texts\": [],\n  \"estimatedCredits\": 60,\n  \"elapsedMs\": 58213\n}\n```\n\ndLazy CLI 原生：\n\n```json\n{\n  \"ok\": true,\n  \"result\": {\n    \"tool\": \"gpt-image-2\",\n    \"data\": { \"urls\": [\"https://files.dlazy.com/data/ai/....jpg\"] },\n    \"savedPath\": \"docs/flat-lay/example-output.jpg\"\n  }\n}\n```\n\n加 `--no-wait` 的异步任务不返回 `data`，返回 `task: { generateId, status }`，\n用 `dlazy status <generateId> --wait` 轮询。\n\n文本类模型（如质检）产出在 `result.data.texts[0]`：\n\n```bash\ndlazy claude-sonnet-5 --prompt '...' --images x.jpg \\\n  | python3 -c 'import sys,json;print(json.load(sys.stdin)[\"result\"][\"data\"][\"texts\"][0])'\n```\n\n---\n\n## 五、错误处理\n\n| Code | 类型 | 示例 |\n| --- | --- | --- |\n| 401 | 未授权 / 无 key | `ok: false, code: \"unauthorized\"` |\n| 501 | 缺必填参数 | `error: required option '--prompt <prompt>' not specified` |\n| 502 | 本地文件读不到 | `Error: Image file not found: ...` |\n| 503 | 余额不足 | `ok: false, code: \"insufficient_balance\"` |\n| 503 | 服务端错误 | `HTTP status code error (500)` |\n| 504 | 异步任务失败 | `=== Generation Failed ===` / `Prompt violates safety policy` |\n\n**给 Agent 的硬性要求**\n\n1. 命中 `insufficient_balance` → 明确告诉用户算力不足，并给出充值入口\n   <https://dlazy.com/dashboard/organization/settings?tab=credits>\n2. 命中 `unauthorized` / 缺 key → 告诉用户去 <https://dlazy.com/dashboard/organization/api-key>\n   取 key，用 `dlazy auth set <key>` 存好再继续。\n3. 用 `gen.mjs` 时，429 与 5xx 已自动重试；仍失败才向用户报错。\n4. **不要**为了「跑通」而偷偷降级参数（尺寸、档位、批量），先问用户。\n\nFile v1.0.16:scripts/lib/tasks.json\n\n{\r\n  \"_note\": \"技能 → 默认模型与参数。dlazy 列为默认后端的模型名；其他后端走 providers.mjs 的通用映射，可用 GEN_MODEL_<PROVIDER> 覆盖。\",\r\n  \"_credits\": { \"gpt-image-2\": 60, \"seedream-5.0\": 30, \"seedream-5.0-pro\": 45, \"banana-pro\": 25, \"claude-sonnet-5\": 3 },\r\n  \"tasks\": {\r\n    \"flat-lay\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"wear-everything\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"image-fusion\":            { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"one-shot\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"fission-pattern\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-detail\":             { \"model\": \"seedream-5.0-pro\", \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"creative-scene\":          { \"model\": \"banana-pro\",       \"size\": \"1024x1536\", \"format\": \"jpeg\" },\r\n    \"batch-image\":             { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"to-3d\":                   { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-extraction\":     { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"fabric-on-body\":          { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-detail\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-grass-planting\": { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-selling-point\":      { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"item-change-background\":  { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"remove-watermark\":        { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"material-enhancement\":    { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"item-repair\":             { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"detect-task\":             { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"listing-optimizer\":       { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"cross-border-localize\":   { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"brand-kit\":               { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"platform-compliance\":     { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"main-image-video\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"product-video-ad\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"ugc-testimonial\":         { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true }\r\n  }\r\n}\n\nFile v1.0.16:skill-card.md\n\n## Description:\n\nCreates a visual garment preview with a new fabric from a style reference and a fabric swatch while aiming to preserve the garment's cut and composition.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[dlazyai](https://clawhub.ai/user/dlazyai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nFashion designers and e-commerce teams use the skill to preview how a garment might look in a different fabric before selecting materials or making physical samples.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Garment photos, fabric samples, prompts, and referenced image URLs may be sent to a selected cloud image provider.\n\nMitigation: Avoid sensitive personal photos and proprietary unreleased designs unless the provider's account and data policies permit their use.\n\nRisk: Automatic provider selection and image generation may route data unexpectedly or incur charges.\n\nMitigation: Select the provider explicitly and use dry-run to check the request and estimated cost before generating.\n\nRisk: The generated preview may not reflect the fabric's real feel, weight, or achievable drape.\n\nMitigation: Label results as visual previews and verify material suitability with physical samples before production.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/dlazyai/skills/fabric-on-body)\n- [Provider CLI and data flow](references/provider-cli.md)\n- [Image generation options](references/model-flags.md)\n- [dLazy CLI source](https://github.com/dlazy-ai/cli)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Image files]\n\n**Output Format:** [Markdown guidance and commands; generated JPEG, PNG, or WebP previews]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Visual previews only; not physical fabric samples.]\n\n## Skill Version(s):\n\n1.0.16 (source: skill frontmatter and ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.16:examples/brand.yaml\n\n# ⚠️ 由 scripts/build-skills.mjs 从 shared/examples/brand.yaml 同步生成，不要直接改这里。\r\n# 店铺品牌视觉规范 —— 所有生图技能读这一份，保证几百个 SKU 看起来像同一家店。\r\n#   node scripts/brand.mjs --brand brand.yaml --for flat-lay\r\n#   node scripts/gen.mjs --task flat-lay --brand brand.yaml --prompt '...'\r\n\r\nbrand:\r\n  name: 示例品牌\r\n  # 一句话概括调性，会原样进 prompt\r\n  tone: quiet minimalist, warm and lived-in, never glossy or commercial\r\n\r\nmodel:\r\n  # 锁模特：给一张脸的参考图，所有技能都会把它作为最后一张参考图传入\r\n  reference: assets/model/face-a.jpg\r\n  description: East Asian woman, late twenties, natural makeup, shoulder-length black hair\r\n  body: slim, height around 168cm\r\n\r\nphotography:\r\n  background: seamless off-white studio backdrop, RGB 248 248 246\r\n  lighting: soft large softbox from camera left, gentle fill, no hard shadows\r\n  camera: 85mm equivalent, eye level, shallow depth of field\r\n  grade: neutral white balance around 5200K, low contrast, slightly lifted blacks\r\n  crop: full body with headroom, product centered\r\n\r\nlayout:\r\n  # 给带排版的技能（主图 / 详情页）用\r\n  margin: at least 8% empty margin on all sides\r\n  typeface: clean sans-serif, no decorative fonts\r\n  text_color: near-black on light background\r\n\r\nforbid:\r\n  - no visible brand logos other than the product's own\r\n  - no text or watermark\r\n  - no exaggerated poses or dramatic wind effects\r\n  - no oversaturated colors\r\n\r\n# 可选：把这些直接写进合规目标，生成时就按平台要求出图\r\ncompliance:\r\n  platform: amazon\n\nArchive v1.0.15: 11 files, 25286 bytes\n\nFiles: examples/brand.yaml (1655b), references/model-flags.md (2144b), references/provider-cli.md (4802b), scripts/brand.mjs (4516b), scripts/gen.mjs (9733b), scripts/lib/miniyaml.mjs (2901b), scripts/lib/providers.mjs (12510b), scripts/lib/tasks.json (3234b), skill-card.md (1880b), SKILL.md (11767b), _meta.json (134b)\n\nFile v1.0.15:SKILL.md\n\n---\nname: fabric-on-body\nversion: 1.0.15\ndescription: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。\n---\n\n# fabric-on-body — 一键替换服装面料\n\n**版型不动，面料换掉**。给一张服装版式图 + 一张面料小样，输出这个版型用新面料做出来的样衣效果图。\n\n价值在打样前：一个版型试 8 种面料，传统做法是打 8 件样衣（每件几天、几百块）；这里是 8 次生成。\n\n---\n\n## 生成效果示例\n\n| 输入：服装版式图 | 输入：面料图 |\n| --- | --- |\n| <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/style-sheet.jpg\" width=\"260\"> | <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/fabric-swatch.jpg\" width=\"260\"> |\n| `style-sheet.jpg` — 落肩宽松圆领毛衣版型，800×800 | `fabric-swatch.jpg` — 象牙白真丝缎面小样，640×640 |\n\n实际执行的命令：\n\n```bash\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference: an oversized drop-shoulder crewneck sweater with ribbed collar, cuffs and hem. Image 2 is the target fabric: ivory silk satin with a soft lustrous sheen and fine weave. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material — the sweater must now read as ivory silk satin with specular highlights on the folds and soft drape instead of chunky knit. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality medium --imageFormat jpeg \\\n  --save docs/fabric-on-body/example-output.jpg\n```\n\n**输出**\n\n<img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/example-output.jpg\" width=\"320\">\n\n`example-output.jpg` — 1024×1024。落肩剪裁、身长袖长、罗纹领口袖口下摆的结构与平铺角度都与版式图一致；材质从粗针织变成象牙白真丝缎面，褶皱上出现高光、垂坠变得柔顺，罗纹部位仍以缎面质感保留。\n\n---\n\n## 1、能力边界\n\n| 输入 | 说明 |\n| --- | --- |\n| 服装版式图 | 决定版型、剪裁、结构与拍摄角度 |\n| 面料图 | 决定材质、纹理、光泽与垂坠感（面料小样特写最佳） |\n| 服装类型 | 帮助模型理解结构（上装 / 下装 / 连衣裙 / 外套 / 内衣） |\n\n| 保持不变 | 会改变 |\n| --- | --- |\n| 版型与剪裁、身长袖长、领口/袖口/下摆结构、缝线位置、拍摄角度与构图 | 材质与织法、表面光泽、垂坠与褶皱形态、厚度观感 |\n\n**不做**：不改版型比例；不改变服装的结构设计；不承诺真实打样的手感与克重——输出是视觉预览，不是工艺样衣。\n\n---\n\n## 2、输入素材规则\n\n生成前先自检这几条硬性约束：\n\n- 大小：**20KB ~ 15MB**\n- 分辨率：**大于 400×400**\n- 格式：**jpg / jpeg / png / webp**\n\n**版式图（✅）**：纯色背景、结构清晰、正面完整的平铺图或人台图。\n\n**面料图（✅）**：面料小样特写，能看清织纹与光泽；有褶皱转折更好（能交代垂坠）。\n\n**会明显拉低效果的输入（❌）**\n\n| 问题 | 说明 |\n| --- | --- |\n| 面料图拍太远 | 看不清织纹，只会当成一块纯色 |\n| 面料图带强环境色 | 黄光下拍的白布会换成米黄色 |\n| 版式图有复杂印花 | 原印花会和新面料打架，先用 [item-repair](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/item-repair/skill.md) 或换素图 |\n| 面料与品类不匹配 | 硬挺牛仔布做不出吊带裙的垂坠，模型会硬凑 |\n\n---\n\n## 3、面料替换的关键：写清「材质带来的物理变化」\n\n只说「换成真丝」不够——模型不知道该怎么改光影。要把材质翻译成**可画出来的物理特征**：\n\n| 面料 | 要写的物理特征 |\n| --- | --- |\n| 真丝 / 缎面 | `lustrous specular highlights along the folds, fluid drape, soft continuous gradients` |\n| 粗针织 | `chunky knit loops with visible yarn twist, matte fibre halo, structured heavy drape` |\n| 牛仔 | `twill diagonal weave, slight slub texture, stiff drape with sharp fold creases` |\n| 灯芯绒 | `vertical wale ridges catching light, matte pile, medium-stiff drape` |\n| 雪纺 | `semi-sheer, very light drape with many fine ripples, soft diffused light through the fabric` |\n| 皮革 | `low-frequency specular sheen, grain texture, stiff drape with broad soft creases` |\n| 摇粒绒 | `dense short pile, fuzzy silhouette edge, no specular highlight` |\n\n**再加一句「版型不许动」**——这是本技能最容易失守的地方：\n\n```text\nKeep the pattern identical: same cut, same body length, same sleeve length,\nsame collar/cuff/hem construction, same flat-lay layout and camera angle.\nReplace only the material.\n```\n\n---\n\n## 4、工具调用\n\n本技能使用 dLazy 的 **`gpt-image-2`**（图像编辑模型；面料替换要求「几何完全不动、材质完全改变」，是典型的定向属性替换任务）。\n\n### 调用方式\n\n两种等价写法，选一种。统一入口会自动选后端、失败重试、建目录落盘、估算成本：\n\n```bash\n# A. 统一入口（推荐）：可切任意后端，加 --dry-run 不计费空跑\nnode scripts/gen.mjs --task fabric-on-body \\\n  --prompt '<见下方 Prompt 模板>' \\\n  --images <按下表顺序> \\\n  --save output/fabric-on-body-<sku>.jpg\n\n# B. 直接用 dLazy CLI（不想引入 Node 依赖时，效果等价）\ndlazy gpt-image-2 --prompt '...' --images ... --save output/fabric-on-body.jpg\n```\n\n**参数约定（本技能固定用法）**\n\n| 参数 | 取值 | 理由 |\n| --- | --- | --- |\n| `--images` | `[版式图, 面料图]` | 顺序即 prompt 中的 image 1 / 2 |\n| `--size` | 与版式图比例一致（`1024x1024` 平铺 / `1024x1536` 人台竖版） | 换料不该改构图 |\n| `--quality` | `high` | 材质是本技能的唯一产出，必须 high |\n| `--imageFormat` | `jpeg` | 通用格式 |\n| `--batch` | `2` ~ `3` | 垂坠形态有随机性 |\n| `--save` | `docs/fabric-on-body/output-<版型>-<面料>.jpg` | 版型 × 面料矩阵命名 |\n\n### Command Examples\n\n```bash\n# basic call: 一个版型换一种面料\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement. Image 1 is the garment pattern reference, image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same cut, body length, sleeve length, collar/cuff/hem construction, layout and camera angle. Replace only the material. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality high\n\n# complex call: 一个版型 × 多种面料，跑成一个选型矩阵\nSTYLE=docs/fabric-on-body/style-sheet.jpg\nKEEP='Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material.'\nfor F in satin corduroy denim fleece; do\n  case $F in\n    satin)    PHYS='lustrous specular highlights along the folds, fluid drape, soft continuous gradients' ;;\n    corduroy) PHYS='vertical wale ridges catching light, matte pile, medium-stiff drape' ;;\n    denim)    PHYS='twill diagonal weave, slight slub texture, stiff drape with sharp fold creases' ;;\n    fleece)   PHYS='dense short pile, fuzzy silhouette edge, no specular highlight' ;;\n  esac\n  dlazy gpt-image-2 \\\n    --prompt \"Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference. Image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. $KEEP The garment must now read as $F: $PHYS. Clean white background, even studio light, no text.\" \\\n    --images \"$STYLE\" \"docs/fabric-on-body/swatch-$F.jpg\" \\\n    --size 1024x1024 --quality high --imageFormat jpeg \\\n    --save \"docs/fabric-on-body/output-drop-shoulder-$F.jpg\"\ndone\n\n# 先估价不真跑\ndlazy gpt-image-2 --dry-run --prompt '...' --images a.jpg b.jpg --size 1024x1024 --quality high\n```\n\n### 延伸阅读\n\n| 要查什么 | 去哪 |\n| --- | --- |\n| 认证、多后端配置、输出结构、错误码 | [`references/provider-cli.md`](references/provider-cli.md) |\n| `gpt-image-2` 的全部可用参数 | [`references/model-flags.md`](references/model-flags.md) |\n| 统一入口的全部选项 | `node scripts/gen.mjs --help` |\n\n## 5、Prompt 模板\n\n```text\nFabric replacement for a garment style sheet.\nImage 1 is the garment pattern/style reference: [品类 + 版型描述].\nImage 2 is the target fabric: [面料名 + 颜色 + 光泽描述].\n\nRe-render the exact same garment silhouette from image 1 in the fabric from image 2.\n\nKeep the pattern identical: same [剪裁], same body length, same sleeve length,\nsame [领口/袖口/下摆结构], same [缝线位置], same layout and camera angle.\n\nReplace only the material — the garment must now read as [面料名]:\n[第三节表格里对应的物理特征].\n\nClean [背景色] background, even studio light, no text.\n```\n\n**按问题追加的修正句**\n\n| 问题 | 追加到 prompt 末尾 |\n| --- | --- |\n| 版型跟着变了 | `The silhouette outline must be pixel-aligned with image 1. Only surface material may differ.` |\n| 面料颜色偏了 | `Sample the fabric colour from image 2 under neutral light; do not shift hue or add colour cast.` |\n| 换完还是原来的质感 | 把物理特征写得更极端，并追加 `The original [原面料] texture must be completely gone.` |\n| 垂坠不对 | `Drape stiffness: [very fluid / medium / stiff]. Fold count and fold radius must match a [面料] of about [克重] gsm.` |\n| 缝线/罗纹消失了 | `Preserve construction details: [罗纹/明线/拉链] must remain visible in the new material.` |\n\n---\n\n## 6、执行流程\n\n1. **备素材**：版式图（结构清晰、印花越少越好）+ 面料小样特写（能看清织纹）。\n2. **翻译材质**：查第三节表格，把面料名换成物理特征描述。\n3. **写版型锁定句**：剪裁 / 身长 / 袖长 / 领口袖口下摆 / 缝线 / 角度，逐项写死。\n4. **`--quality high` 起跑**，比例跟随版式图。\n5. **要做选型矩阵**：用第四节循环，一个版型 × N 种面料。\n6. **质检**：版型轮廓是否与原图对齐、面料颜色是否准、质感是否真的换掉了、缝线罗纹是否还在。\n7. **交付时注明这是视觉预览**，不代表真实手感与克重。\n\n---\n\n## 7、常见问题\n\n| 现象 | 原因 | 处理 |\n| --- | --- | --- |\n| 版型变了 | 未锁定轮廓 | 追加 `silhouette outline must be pixel-aligned with image 1` |\n| 面料颜色不对 | 面料图带环境色 | 重拍面料小样（中性光），或追加取色约束句 |\n| 质感没换掉 | 物理特征写得太弱 | 用第三节表格的极端描述 + `original texture must be completely gone` |\n| 垂坠像纸板 | 未指定垂坠刚度 | 追加 drape stiffness 句，给出克重参考 |\n| 罗纹/明线消失 | 被新材质吞掉 | 追加保留结构细节句 |\n| 面料与品类物理上不成立 | 硬挺布做垂坠款 | 换匹配的面料，或改版型 |\n\n---\n\n## Tips\n\nVisit https://dlazy.com for more information.\n\nFile v1.0.15:_meta.json\n\n{\n  \"ownerId\": \"kn7c5wgeajfcfvdfb5ceemvdb984cjpd\",\n  \"slug\": \"fabric-on-body\",\n  \"version\": \"1.0.15\",\n  \"publishedAt\": 1790732742070\n}\n\nFile v1.0.15:references/model-flags.md\n\n# `gpt-image-2` 参数清单\r\n\r\n本技能默认用的模型的完整参数。日常只需要「参数约定」里那几个，\r\n这份清单在需要用到非常规参数时再看。\r\n\r\n**CRITICAL INSTRUCTION FOR AGENT**:\r\nRun the `dlazy gpt-image-2` command to get results.\r\n\r\n```bash\r\ndlazy gpt-image-2 -h\r\n\r\nOptions:\r\n  --prompt <prompt>            Prompt\r\n  --images [images...]         Images [image: url or local path] (max 5)\r\n  --size <size>                Size [default: auto] (choices: \"1024x1024\",\r\n                               \"1536x1024\", \"1024x1536\", \"2048x2048\",\r\n                               \"2048x1152\", \"3840x2160\", \"2160x3840\", \"auto\")\r\n  --imageFormat <imageFormat>  Image Format [default: jpeg] (choices: \"jpeg\",\r\n                               \"png\", \"webp\")\r\n  --quality <quality>          Quality [default: medium] (choices: \"low\",\r\n                               \"medium\", \"high\")\r\n  --dry-run                    Print payload without executing the tool\r\n  --no-wait                    Return generateId immediately for async tasks\r\n  --timeout <seconds>          Max seconds to wait for async completion\r\n                               (default: \"1800\")\r\n  --input <jsonOrFile>         Inline JSON or @path/to/file.json — merged under\r\n                               flag values (flags win)\r\n  --save <path>                Download the result asset to this local path\r\n                               (mkdir + retry handled for you). A destination\r\n                               path — NOT a response format; for stdout shape\r\n                               use --format\r\n  --batch <n>                  Fan-out N parallel runs (cloud tools only)\r\n                               (default: \"1\")\r\n  -h, --help                   display help for command\r\n```\r\n\r\n> Any flag also accepts pipe references — `-` (auto-pick from upstream stdin), `@N` (n-th output), `@N.path` (jsonpath into output), `@*` (all primary values), `@stdin` / `@stdin:path` (whole envelope). See `dlazy --help` for details.\r\n\r\n---\r\n\r\n换其他后端时参数由 `scripts/gen.mjs` 统一翻译，见 [`provider-cli.md`](provider-cli.md)。\n\nFile v1.0.15:references/provider-cli.md\n\n<!-- 由 scripts/build-skills.mjs 从 shared/references/provider-cli.md 同步生成，不要直接改这里。 -->\n# 后端调用参考\n\n技能正文只写「要生成什么」。认证、计费、错误码、输出结构这些每个技能都一样的东西放在这里，\n**用到时再读**，不占技能的常驻上下文。\n\n---\n\n## 一、认证\n\n### 默认后端 dLazy\n\n```bash\ndlazy login            # 设备码流程，远程 shell 也能用，自动写入本地配置\ndlazy auth set <KEY>   # 已有 key 时直接写入\n```\n\nkey 存在用户配置目录（macOS/Linux `~/.dlazy/config.json`，Windows `%USERPROFILE%\\.dlazy\\config.json`），\n权限限本机用户。也可以每次调用用环境变量 `DLAZY_API_KEY` 传入。\n\n手动获取：登录 [dlazy.com](https://dlazy.com) → [API Key 页面](https://dlazy.com/dashboard/organization/api-key)。\nkey 按组织隔离，可随时轮换或吊销。\n\n### 其他后端\n\n本技能库不锁定单一厂商。配好任意一家的 key 即可跑：\n\n| 后端 | 环境变量 | 说明 |\n| --- | --- | --- |\n| `dlazy` | `dlazy login` 或 `DLAZY_API_KEY` | 默认，最省事 |\n| `openai` | `OPENAI_API_KEY` | 走 `/v1/images/edits` 与 `/v1/images/generations` |\n| `gemini` | `GEMINI_API_KEY` | Nano Banana 系列 |\n| `fal` | `FAL_KEY` | |\n| `replicate` | `REPLICATE_API_TOKEN` | |\n| `ark` | `ARK_API_KEY` + `ARK_MODEL` | 火山方舟，模型 ID 需按开通情况填 |\n\n选路优先级：`--provider` 参数 > `PROVIDER` 环境变量 > 第一个配了 key 的 > `dlazy`。\n\n```bash\nnode scripts/gen.mjs --doctor     # 看当前哪个后端可用\n```\n\n各后端的模型 ID 可用 `GEN_MODEL_OPENAI` / `GEN_MODEL_GEMINI` / `GEN_MODEL_FAL` /\n`GEN_MODEL_REPLICATE` / `GEN_MODEL_ARK` 覆盖。**厂商目录会变，以各家最新文档为准。**\n\n---\n\n## 二、两种调用方式\n\n### 方式 A：统一入口（推荐）\n\n```bash\nnode scripts/gen.mjs --task <技能名> --prompt '...' --images a.jpg b.jpg --save out.jpg\n```\n\n它负责：后端选路、默认尺寸档位、失败重试（429/5xx 指数退避）、落盘建目录、成本估算。\n\n```bash\nnode scripts/gen.mjs --task flat-lay --prompt '...' --dry-run   # 不调用不计费，只看要发什么\nnode scripts/gen.mjs --help\n```\n\n### 方式 B：直接用 dLazy CLI\n\n不想引入 Node 依赖时，技能正文里的 `dlazy ...` 命令可以原样执行，效果等价。\n\n```bash\nnpx @dlazy/cli@1.2.3 <command>     # 不装全局二进制\n```\n\n- CLI 源码：[github.com/dlazy-ai/cli](https://github.com/dlazy-ai/cli) · npm 包 `@dlazy/cli`\n\n---\n\n## 三、数据流向\n\n调用 dLazy 时：提示词与参数发往 `api.dlazy.com`；传入的本地图片会上传到 `files.dlazy.com`\n供模型读取；产出 URL 同样托管在 `files.dlazy.com`。这是云端生成 API 的通用形态。\n换成其他后端时，数据流向对应厂商，不经过 dLazy。\n\n---\n\n## 四、输出结构\n\n`gen.mjs`（加 `--json`）：\n\n```json\n{\n  \"ok\": true,\n  \"task\": \"flat-lay\",\n  \"provider\": \"dlazy\",\n  \"model\": \"gpt-image-2\",\n  \"files\": [\"docs/flat-lay/output-sku001.jpg\"],\n  \"texts\": [],\n  \"estimatedCredits\": 60,\n  \"elapsedMs\": 58213\n}\n```\n\ndLazy CLI 原生：\n\n```json\n{\n  \"ok\": true,\n  \"result\": {\n    \"tool\": \"gpt-image-2\",\n    \"data\": { \"urls\": [\"https://files.dlazy.com/data/ai/....jpg\"] },\n    \"savedPath\": \"docs/flat-lay/example-output.jpg\"\n  }\n}\n```\n\n加 `--no-wait` 的异步任务不返回 `data`，返回 `task: { generateId, status }`，\n用 `dlazy status <generateId> --wait` 轮询。\n\n文本类模型（如质检）产出在 `result.data.texts[0]`：\n\n```bash\ndlazy claude-sonnet-5 --prompt '...' --images x.jpg \\\n  | python3 -c 'import sys,json;print(json.load(sys.stdin)[\"result\"][\"data\"][\"texts\"][0])'\n```\n\n---\n\n## 五、错误处理\n\n| Code | 类型 | 示例 |\n| --- | --- | --- |\n| 401 | 未授权 / 无 key | `ok: false, code: \"unauthorized\"` |\n| 501 | 缺必填参数 | `error: required option '--prompt <prompt>' not specified` |\n| 502 | 本地文件读不到 | `Error: Image file not found: ...` |\n| 503 | 余额不足 | `ok: false, code: \"insufficient_balance\"` |\n| 503 | 服务端错误 | `HTTP status code error (500)` |\n| 504 | 异步任务失败 | `=== Generation Failed ===` / `Prompt violates safety policy` |\n\n**给 Agent 的硬性要求**\n\n1. 命中 `insufficient_balance` → 明确告诉用户算力不足，并给出充值入口\n   <https://dlazy.com/dashboard/organization/settings?tab=credits>\n2. 命中 `unauthorized` / 缺 key → 告诉用户去 <https://dlazy.com/dashboard/organization/api-key>\n   取 key，用 `dlazy auth set <key>` 存好再继续。\n3. 用 `gen.mjs` 时，429 与 5xx 已自动重试；仍失败才向用户报错。\n4. **不要**为了「跑通」而偷偷降级参数（尺寸、档位、批量），先问用户。\n\nFile v1.0.15:scripts/lib/tasks.json\n\n{\r\n  \"_note\": \"技能 → 默认模型与参数。dlazy 列为默认后端的模型名；其他后端走 providers.mjs 的通用映射，可用 GEN_MODEL_<PROVIDER> 覆盖。\",\r\n  \"_credits\": { \"gpt-image-2\": 60, \"seedream-5.0\": 30, \"seedream-5.0-pro\": 45, \"banana-pro\": 25, \"claude-sonnet-5\": 3 },\r\n  \"tasks\": {\r\n    \"flat-lay\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"wear-everything\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"image-fusion\":            { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"one-shot\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"fission-pattern\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-detail\":             { \"model\": \"seedream-5.0-pro\", \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"creative-scene\":          { \"model\": \"banana-pro\",       \"size\": \"1024x1536\", \"format\": \"jpeg\" },\r\n    \"batch-image\":             { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"to-3d\":                   { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-extraction\":     { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"fabric-on-body\":          { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-detail\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-grass-planting\": { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-selling-point\":      { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"item-change-background\":  { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"remove-watermark\":        { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"material-enhancement\":    { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"item-repair\":             { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"detect-task\":             { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"listing-optimizer\":       { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"cross-border-localize\":   { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"brand-kit\":               { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"platform-compliance\":     { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"main-image-video\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"product-video-ad\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"ugc-testimonial\":         { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true }\r\n  }\r\n}\n\nFile v1.0.15:skill-card.md\n\n## Description:\n\nCreates a visual garment preview using a style image and a fabric swatch, aiming to preserve the garment's cut while changing its material appearance.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[dlazyai](https://clawhub.ai/user/dlazyai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nApparel designers and merchandising teams use a garment style image and fabric swatch to compare material options before physical sampling.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Garment images, fabric swatches, and prompts may be sent to the selected image-generation provider.\n\nMitigation: Use materials you are comfortable sharing and check the active provider and key with dry-run or doctor mode before generating.\n\nRisk: Untrusted image sources or a substituted CLI binary may expose the workflow to unwanted content or behavior.\n\nMitigation: Use trusted image files or URLs and a trusted installation of the dLazy CLI.\n\n## Reference(s):\n\n- [Fabric on Body skill release](https://clawhub.ai/dlazyai/skills/fabric-on-body)\n- [Provider CLI reference](artifact/references/provider-cli.md)\n- [Image model flags](artifact/references/model-flags.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Image files]\n\n**Output Format:** [Markdown guidance and commands; generated garment preview image]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [The image is a visual preview, not a physical fabric sample.]\n\n## Skill Version(s):\n\n1.0.15 (source: ClawHub release metadata and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.15:examples/brand.yaml\n\n# ⚠️ 由 scripts/build-skills.mjs 从 shared/examples/brand.yaml 同步生成，不要直接改这里。\r\n# 店铺品牌视觉规范 —— 所有生图技能读这一份，保证几百个 SKU 看起来像同一家店。\r\n#   node scripts/brand.mjs --brand brand.yaml --for flat-lay\r\n#   node scripts/gen.mjs --task flat-lay --brand brand.yaml --prompt '...'\r\n\r\nbrand:\r\n  name: 示例品牌\r\n  # 一句话概括调性，会原样进 prompt\r\n  tone: quiet minimalist, warm and lived-in, never glossy or commercial\r\n\r\nmodel:\r\n  # 锁模特：给一张脸的参考图，所有技能都会把它作为最后一张参考图传入\r\n  reference: assets/model/face-a.jpg\r\n  description: East Asian woman, late twenties, natural makeup, shoulder-length black hair\r\n  body: slim, height around 168cm\r\n\r\nphotography:\r\n  background: seamless off-white studio backdrop, RGB 248 248 246\r\n  lighting: soft large softbox from camera left, gentle fill, no hard shadows\r\n  camera: 85mm equivalent, eye level, shallow depth of field\r\n  grade: neutral white balance around 5200K, low contrast, slightly lifted blacks\r\n  crop: full body with headroom, product centered\r\n\r\nlayout:\r\n  # 给带排版的技能（主图 / 详情页）用\r\n  margin: at least 8% empty margin on all sides\r\n  typeface: clean sans-serif, no decorative fonts\r\n  text_color: near-black on light background\r\n\r\nforbid:\r\n  - no visible brand logos other than the product's own\r\n  - no text or watermark\r\n  - no exaggerated poses or dramatic wind effects\r\n  - no oversaturated colors\r\n\r\n# 可选：把这些直接写进合规目标，生成时就按平台要求出图\r\ncompliance:\r\n  platform: amazon\n\nArchive v1.0.14: 11 files, 25367 bytes\n\nFiles: examples/brand.yaml (1655b), references/model-flags.md (2144b), references/provider-cli.md (4802b), scripts/brand.mjs (4516b), scripts/gen.mjs (9733b), scripts/lib/miniyaml.mjs (2901b), scripts/lib/providers.mjs (12510b), scripts/lib/tasks.json (3234b), skill-card.md (2107b), SKILL.md (11767b), _meta.json (134b)\n\nFile v1.0.14:SKILL.md\n\n---\nname: fabric-on-body\nversion: 1.0.14\ndescription: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。\n---\n\n# fabric-on-body — 一键替换服装面料\n\n**版型不动，面料换掉**。给一张服装版式图 + 一张面料小样，输出这个版型用新面料做出来的样衣效果图。\n\n价值在打样前：一个版型试 8 种面料，传统做法是打 8 件样衣（每件几天、几百块）；这里是 8 次生成。\n\n---\n\n## 生成效果示例\n\n| 输入：服装版式图 | 输入：面料图 |\n| --- | --- |\n| <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/style-sheet.jpg\" width=\"260\"> | <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/fabric-swatch.jpg\" width=\"260\"> |\n| `style-sheet.jpg` — 落肩宽松圆领毛衣版型，800×800 | `fabric-swatch.jpg` — 象牙白真丝缎面小样，640×640 |\n\n实际执行的命令：\n\n```bash\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference: an oversized drop-shoulder crewneck sweater with ribbed collar, cuffs and hem. Image 2 is the target fabric: ivory silk satin with a soft lustrous sheen and fine weave. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material — the sweater must now read as ivory silk satin with specular highlights on the folds and soft drape instead of chunky knit. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality medium --imageFormat jpeg \\\n  --save docs/fabric-on-body/example-output.jpg\n```\n\n**输出**\n\n<img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/example-output.jpg\" width=\"320\">\n\n`example-output.jpg` — 1024×1024。落肩剪裁、身长袖长、罗纹领口袖口下摆的结构与平铺角度都与版式图一致；材质从粗针织变成象牙白真丝缎面，褶皱上出现高光、垂坠变得柔顺，罗纹部位仍以缎面质感保留。\n\n---\n\n## 1、能力边界\n\n| 输入 | 说明 |\n| --- | --- |\n| 服装版式图 | 决定版型、剪裁、结构与拍摄角度 |\n| 面料图 | 决定材质、纹理、光泽与垂坠感（面料小样特写最佳） |\n| 服装类型 | 帮助模型理解结构（上装 / 下装 / 连衣裙 / 外套 / 内衣） |\n\n| 保持不变 | 会改变 |\n| --- | --- |\n| 版型与剪裁、身长袖长、领口/袖口/下摆结构、缝线位置、拍摄角度与构图 | 材质与织法、表面光泽、垂坠与褶皱形态、厚度观感 |\n\n**不做**：不改版型比例；不改变服装的结构设计；不承诺真实打样的手感与克重——输出是视觉预览，不是工艺样衣。\n\n---\n\n## 2、输入素材规则\n\n生成前先自检这几条硬性约束：\n\n- 大小：**20KB ~ 15MB**\n- 分辨率：**大于 400×400**\n- 格式：**jpg / jpeg / png / webp**\n\n**版式图（✅）**：纯色背景、结构清晰、正面完整的平铺图或人台图。\n\n**面料图（✅）**：面料小样特写，能看清织纹与光泽；有褶皱转折更好（能交代垂坠）。\n\n**会明显拉低效果的输入（❌）**\n\n| 问题 | 说明 |\n| --- | --- |\n| 面料图拍太远 | 看不清织纹，只会当成一块纯色 |\n| 面料图带强环境色 | 黄光下拍的白布会换成米黄色 |\n| 版式图有复杂印花 | 原印花会和新面料打架，先用 [item-repair](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/item-repair/skill.md) 或换素图 |\n| 面料与品类不匹配 | 硬挺牛仔布做不出吊带裙的垂坠，模型会硬凑 |\n\n---\n\n## 3、面料替换的关键：写清「材质带来的物理变化」\n\n只说「换成真丝」不够——模型不知道该怎么改光影。要把材质翻译成**可画出来的物理特征**：\n\n| 面料 | 要写的物理特征 |\n| --- | --- |\n| 真丝 / 缎面 | `lustrous specular highlights along the folds, fluid drape, soft continuous gradients` |\n| 粗针织 | `chunky knit loops with visible yarn twist, matte fibre halo, structured heavy drape` |\n| 牛仔 | `twill diagonal weave, slight slub texture, stiff drape with sharp fold creases` |\n| 灯芯绒 | `vertical wale ridges catching light, matte pile, medium-stiff drape` |\n| 雪纺 | `semi-sheer, very light drape with many fine ripples, soft diffused light through the fabric` |\n| 皮革 | `low-frequency specular sheen, grain texture, stiff drape with broad soft creases` |\n| 摇粒绒 | `dense short pile, fuzzy silhouette edge, no specular highlight` |\n\n**再加一句「版型不许动」**——这是本技能最容易失守的地方：\n\n```text\nKeep the pattern identical: same cut, same body length, same sleeve length,\nsame collar/cuff/hem construction, same flat-lay layout and camera angle.\nReplace only the material.\n```\n\n---\n\n## 4、工具调用\n\n本技能使用 dLazy 的 **`gpt-image-2`**（图像编辑模型；面料替换要求「几何完全不动、材质完全改变」，是典型的定向属性替换任务）。\n\n### 调用方式\n\n两种等价写法，选一种。统一入口会自动选后端、失败重试、建目录落盘、估算成本：\n\n```bash\n# A. 统一入口（推荐）：可切任意后端，加 --dry-run 不计费空跑\nnode scripts/gen.mjs --task fabric-on-body \\\n  --prompt '<见下方 Prompt 模板>' \\\n  --images <按下表顺序> \\\n  --save output/fabric-on-body-<sku>.jpg\n\n# B. 直接用 dLazy CLI（不想引入 Node 依赖时，效果等价）\ndlazy gpt-image-2 --prompt '...' --images ... --save output/fabric-on-body.jpg\n```\n\n**参数约定（本技能固定用法）**\n\n| 参数 | 取值 | 理由 |\n| --- | --- | --- |\n| `--images` | `[版式图, 面料图]` | 顺序即 prompt 中的 image 1 / 2 |\n| `--size` | 与版式图比例一致（`1024x1024` 平铺 / `1024x1536` 人台竖版） | 换料不该改构图 |\n| `--quality` | `high` | 材质是本技能的唯一产出，必须 high |\n| `--imageFormat` | `jpeg` | 通用格式 |\n| `--batch` | `2` ~ `3` | 垂坠形态有随机性 |\n| `--save` | `docs/fabric-on-body/output-<版型>-<面料>.jpg` | 版型 × 面料矩阵命名 |\n\n### Command Examples\n\n```bash\n# basic call: 一个版型换一种面料\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement. Image 1 is the garment pattern reference, image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same cut, body length, sleeve length, collar/cuff/hem construction, layout and camera angle. Replace only the material. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality high\n\n# complex call: 一个版型 × 多种面料，跑成一个选型矩阵\nSTYLE=docs/fabric-on-body/style-sheet.jpg\nKEEP='Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material.'\nfor F in satin corduroy denim fleece; do\n  case $F in\n    satin)    PHYS='lustrous specular highlights along the folds, fluid drape, soft continuous gradients' ;;\n    corduroy) PHYS='vertical wale ridges catching light, matte pile, medium-stiff drape' ;;\n    denim)    PHYS='twill diagonal weave, slight slub texture, stiff drape with sharp fold creases' ;;\n    fleece)   PHYS='dense short pile, fuzzy silhouette edge, no specular highlight' ;;\n  esac\n  dlazy gpt-image-2 \\\n    --prompt \"Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference. Image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. $KEEP The garment must now read as $F: $PHYS. Clean white background, even studio light, no text.\" \\\n    --images \"$STYLE\" \"docs/fabric-on-body/swatch-$F.jpg\" \\\n    --size 1024x1024 --quality high --imageFormat jpeg \\\n    --save \"docs/fabric-on-body/output-drop-shoulder-$F.jpg\"\ndone\n\n# 先估价不真跑\ndlazy gpt-image-2 --dry-run --prompt '...' --images a.jpg b.jpg --size 1024x1024 --quality high\n```\n\n### 延伸阅读\n\n| 要查什么 | 去哪 |\n| --- | --- |\n| 认证、多后端配置、输出结构、错误码 | [`references/provider-cli.md`](references/provider-cli.md) |\n| `gpt-image-2` 的全部可用参数 | [`references/model-flags.md`](references/model-flags.md) |\n| 统一入口的全部选项 | `node scripts/gen.mjs --help` |\n\n## 5、Prompt 模板\n\n```text\nFabric replacement for a garment style sheet.\nImage 1 is the garment pattern/style reference: [品类 + 版型描述].\nImage 2 is the target fabric: [面料名 + 颜色 + 光泽描述].\n\nRe-render the exact same garment silhouette from image 1 in the fabric from image 2.\n\nKeep the pattern identical: same [剪裁], same body length, same sleeve length,\nsame [领口/袖口/下摆结构], same [缝线位置], same layout and camera angle.\n\nReplace only the material — the garment must now read as [面料名]:\n[第三节表格里对应的物理特征].\n\nClean [背景色] background, even studio light, no text.\n```\n\n**按问题追加的修正句**\n\n| 问题 | 追加到 prompt 末尾 |\n| --- | --- |\n| 版型跟着变了 | `The silhouette outline must be pixel-aligned with image 1. Only surface material may differ.` |\n| 面料颜色偏了 | `Sample the fabric colour from image 2 under neutral light; do not shift hue or add colour cast.` |\n| 换完还是原来的质感 | 把物理特征写得更极端，并追加 `The original [原面料] texture must be completely gone.` |\n| 垂坠不对 | `Drape stiffness: [very fluid / medium / stiff]. Fold count and fold radius must match a [面料] of about [克重] gsm.` |\n| 缝线/罗纹消失了 | `Preserve construction details: [罗纹/明线/拉链] must remain visible in the new material.` |\n\n---\n\n## 6、执行流程\n\n1. **备素材**：版式图（结构清晰、印花越少越好）+ 面料小样特写（能看清织纹）。\n2. **翻译材质**：查第三节表格，把面料名换成物理特征描述。\n3. **写版型锁定句**：剪裁 / 身长 / 袖长 / 领口袖口下摆 / 缝线 / 角度，逐项写死。\n4. **`--quality high` 起跑**，比例跟随版式图。\n5. **要做选型矩阵**：用第四节循环，一个版型 × N 种面料。\n6. **质检**：版型轮廓是否与原图对齐、面料颜色是否准、质感是否真的换掉了、缝线罗纹是否还在。\n7. **交付时注明这是视觉预览**，不代表真实手感与克重。\n\n---\n\n## 7、常见问题\n\n| 现象 | 原因 | 处理 |\n| --- | --- | --- |\n| 版型变了 | 未锁定轮廓 | 追加 `silhouette outline must be pixel-aligned with image 1` |\n| 面料颜色不对 | 面料图带环境色 | 重拍面料小样（中性光），或追加取色约束句 |\n| 质感没换掉 | 物理特征写得太弱 | 用第三节表格的极端描述 + `original texture must be completely gone` |\n| 垂坠像纸板 | 未指定垂坠刚度 | 追加 drape stiffness 句，给出克重参考 |\n| 罗纹/明线消失 | 被新材质吞掉 | 追加保留结构细节句 |\n| 面料与品类物理上不成立 | 硬挺布做垂坠款 | 换匹配的面料，或改版型 |\n\n---\n\n## Tips\n\nVisit https://dlazy.com for more information.\n\nFile v1.0.14:_meta.json\n\n{\n  \"ownerId\": \"kn7c5wgeajfcfvdfb5ceemvdb984cjpd\",\n  \"slug\": \"fabric-on-body\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1790562948622\n}\n\nFile v1.0.14:references/model-flags.md\n\n# `gpt-image-2` 参数清单\r\n\r\n本技能默认用的模型的完整参数。日常只需要「参数约定」里那几个，\r\n这份清单在需要用到非常规参数时再看。\r\n\r\n**CRITICAL INSTRUCTION FOR AGENT**:\r\nRun the `dlazy gpt-image-2` command to get results.\r\n\r\n```bash\r\ndlazy gpt-image-2 -h\r\n\r\nOptions:\r\n  --prompt <prompt>            Prompt\r\n  --images [images...]         Images [image: url or local path] (max 5)\r\n  --size <size>                Size [default: auto] (choices: \"1024x1024\",\r\n                               \"1536x1024\", \"1024x1536\", \"2048x2048\",\r\n                               \"2048x1152\", \"3840x2160\", \"2160x3840\", \"auto\")\r\n  --imageFormat <imageFormat>  Image Format [default: jpeg] (choices: \"jpeg\",\r\n                               \"png\", \"webp\")\r\n  --quality <quality>          Quality [default: medium] (choices: \"low\",\r\n                               \"medium\", \"high\")\r\n  --dry-run                    Print payload without executing the tool\r\n  --no-wait                    Return generateId immediately for async tasks\r\n  --timeout <seconds>          Max seconds to wait for async completion\r\n                               (default: \"1800\")\r\n  --input <jsonOrFile>         Inline JSON or @path/to/file.json — merged under\r\n                               flag values (flags win)\r\n  --save <path>                Download the result asset to this local path\r\n                               (mkdir + retry handled for you). A destination\r\n                               path — NOT a response format; for stdout shape\r\n                               use --format\r\n  --batch <n>                  Fan-out N parallel runs (cloud tools only)\r\n                               (default: \"1\")\r\n  -h, --help                   display help for command\r\n```\r\n\r\n> Any flag also accepts pipe references — `-` (auto-pick from upstream stdin), `@N` (n-th output), `@N.path` (jsonpath into output), `@*` (all primary values), `@stdin` / `@stdin:path` (whole envelope). See `dlazy --help` for details.\r\n\r\n---\r\n\r\n换其他后端时参数由 `scripts/gen.mjs` 统一翻译，见 [`provider-cli.md`](provider-cli.md)。\n\nFile v1.0.14:references/provider-cli.md\n\n<!-- 由 scripts/build-skills.mjs 从 shared/references/provider-cli.md 同步生成，不要直接改这里。 -->\n# 后端调用参考\n\n技能正文只写「要生成什么」。认证、计费、错误码、输出结构这些每个技能都一样的东西放在这里，\n**用到时再读**，不占技能的常驻上下文。\n\n---\n\n## 一、认证\n\n### 默认后端 dLazy\n\n```bash\ndlazy login            # 设备码流程，远程 shell 也能用，自动写入本地配置\ndlazy auth set <KEY>   # 已有 key 时直接写入\n```\n\nkey 存在用户配置目录（macOS/Linux `~/.dlazy/config.json`，Windows `%USERPROFILE%\\.dlazy\\config.json`），\n权限限本机用户。也可以每次调用用环境变量 `DLAZY_API_KEY` 传入。\n\n手动获取：登录 [dlazy.com](https://dlazy.com) → [API Key 页面](https://dlazy.com/dashboard/organization/api-key)。\nkey 按组织隔离，可随时轮换或吊销。\n\n### 其他后端\n\n本技能库不锁定单一厂商。配好任意一家的 key 即可跑：\n\n| 后端 | 环境变量 | 说明 |\n| --- | --- | --- |\n| `dlazy` | `dlazy login` 或 `DLAZY_API_KEY` | 默认，最省事 |\n| `openai` | `OPENAI_API_KEY` | 走 `/v1/images/edits` 与 `/v1/images/generations` |\n| `gemini` | `GEMINI_API_KEY` | Nano Banana 系列 |\n| `fal` | `FAL_KEY` | |\n| `replicate` | `REPLICATE_API_TOKEN` | |\n| `ark` | `ARK_API_KEY` + `ARK_MODEL` | 火山方舟，模型 ID 需按开通情况填 |\n\n选路优先级：`--provider` 参数 > `PROVIDER` 环境变量 > 第一个配了 key 的 > `dlazy`。\n\n```bash\nnode scripts/gen.mjs --doctor     # 看当前哪个后端可用\n```\n\n各后端的模型 ID 可用 `GEN_MODEL_OPENAI` / `GEN_MODEL_GEMINI` / `GEN_MODEL_FAL` /\n`GEN_MODEL_REPLICATE` / `GEN_MODEL_ARK` 覆盖。**厂商目录会变，以各家最新文档为准。**\n\n---\n\n## 二、两种调用方式\n\n### 方式 A：统一入口（推荐）\n\n```bash\nnode scripts/gen.mjs --task <技能名> --prompt '...' --images a.jpg b.jpg --save out.jpg\n```\n\n它负责：后端选路、默认尺寸档位、失败重试（429/5xx 指数退避）、落盘建目录、成本估算。\n\n```bash\nnode scripts/gen.mjs --task flat-lay --prompt '...' --dry-run   # 不调用不计费，只看要发什么\nnode scripts/gen.mjs --help\n```\n\n### 方式 B：直接用 dLazy CLI\n\n不想引入 Node 依赖时，技能正文里的 `dlazy ...` 命令可以原样执行，效果等价。\n\n```bash\nnpx @dlazy/cli@1.2.3 <command>     # 不装全局二进制\n```\n\n- CLI 源码：[github.com/dlazy-ai/cli](https://github.com/dlazy-ai/cli) · npm 包 `@dlazy/cli`\n\n---\n\n## 三、数据流向\n\n调用 dLazy 时：提示词与参数发往 `api.dlazy.com`；传入的本地图片会上传到 `files.dlazy.com`\n供模型读取；产出 URL 同样托管在 `files.dlazy.com`。这是云端生成 API 的通用形态。\n换成其他后端时，数据流向对应厂商，不经过 dLazy。\n\n---\n\n## 四、输出结构\n\n`gen.mjs`（加 `--json`）：\n\n```json\n{\n  \"ok\": true,\n  \"task\": \"flat-lay\",\n  \"provider\": \"dlazy\",\n  \"model\": \"gpt-image-2\",\n  \"files\": [\"docs/flat-lay/output-sku001.jpg\"],\n  \"texts\": [],\n  \"estimatedCredits\": 60,\n  \"elapsedMs\": 58213\n}\n```\n\ndLazy CLI 原生：\n\n```json\n{\n  \"ok\": true,\n  \"result\": {\n    \"tool\": \"gpt-image-2\",\n    \"data\": { \"urls\": [\"https://files.dlazy.com/data/ai/....jpg\"] },\n    \"savedPath\": \"docs/flat-lay/example-output.jpg\"\n  }\n}\n```\n\n加 `--no-wait` 的异步任务不返回 `data`，返回 `task: { generateId, status }`，\n用 `dlazy status <generateId> --wait` 轮询。\n\n文本类模型（如质检）产出在 `result.data.texts[0]`：\n\n```bash\ndlazy claude-sonnet-5 --prompt '...' --images x.jpg \\\n  | python3 -c 'import sys,json;print(json.load(sys.stdin)[\"result\"][\"data\"][\"texts\"][0])'\n```\n\n---\n\n## 五、错误处理\n\n| Code | 类型 | 示例 |\n| --- | --- | --- |\n| 401 | 未授权 / 无 key | `ok: false, code: \"unauthorized\"` |\n| 501 | 缺必填参数 | `error: required option '--prompt <prompt>' not specified` |\n| 502 | 本地文件读不到 | `Error: Image file not found: ...` |\n| 503 | 余额不足 | `ok: false, code: \"insufficient_balance\"` |\n| 503 | 服务端错误 | `HTTP status code error (500)` |\n| 504 | 异步任务失败 | `=== Generation Failed ===` / `Prompt violates safety policy` |\n\n**给 Agent 的硬性要求**\n\n1. 命中 `insufficient_balance` → 明确告诉用户算力不足，并给出充值入口\n   <https://dlazy.com/dashboard/organization/settings?tab=credits>\n2. 命中 `unauthorized` / 缺 key → 告诉用户去 <https://dlazy.com/dashboard/organization/api-key>\n   取 key，用 `dlazy auth set <key>` 存好再继续。\n3. 用 `gen.mjs` 时，429 与 5xx 已自动重试；仍失败才向用户报错。\n4. **不要**为了「跑通」而偷偷降级参数（尺寸、档位、批量），先问用户。\n\nFile v1.0.14:scripts/lib/tasks.json\n\n{\r\n  \"_note\": \"技能 → 默认模型与参数。dlazy 列为默认后端的模型名；其他后端走 providers.mjs 的通用映射，可用 GEN_MODEL_<PROVIDER> 覆盖。\",\r\n  \"_credits\": { \"gpt-image-2\": 60, \"seedream-5.0\": 30, \"seedream-5.0-pro\": 45, \"banana-pro\": 25, \"claude-sonnet-5\": 3 },\r\n  \"tasks\": {\r\n    \"flat-lay\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"wear-everything\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"image-fusion\":            { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"one-shot\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"fission-pattern\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-detail\":             { \"model\": \"seedream-5.0-pro\", \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"creative-scene\":          { \"model\": \"banana-pro\",       \"size\": \"1024x1536\", \"format\": \"jpeg\" },\r\n    \"batch-image\":             { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"to-3d\":                   { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-extraction\":     { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"fabric-on-body\":          { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-detail\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-grass-planting\": { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-selling-point\":      { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"item-change-background\":  { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"remove-watermark\":        { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"material-enhancement\":    { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"item-repair\":             { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"detect-task\":             { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"listing-optimizer\":       { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"cross-border-localize\":   { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"brand-kit\":               { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"platform-compliance\":     { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"main-image-video\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"product-video-ad\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"ugc-testimonial\":         { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true }\r\n  }\r\n}\n\nFile v1.0.14:skill-card.md\n\n## Description:\n\nCreates visual previews of a garment in a new fabric from a garment reference and a fabric swatch while aiming to preserve the original design.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[dlazyai](https://clawhub.ai/user/dlazyai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nFashion designers and product teams use this skill to preview how different fabrics might look on an existing garment design before making physical samples.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Garment, fabric, and on-body reference images and prompts are sent to the configured cloud image provider.\n\nMitigation: Use local files or trusted public image URLs; avoid private URLs and sensitive personal photos, and confirm you are comfortable sharing the inputs with the provider.\n\nRisk: Cloud image generation may incur charges and requires provider credentials.\n\nMitigation: Review provider credentials and billing before running generation commands.\n\nRisk: A visual preview may misrepresent fabric color, texture, drape, or garment details.\n\nMitigation: Check the output against both references and label it as a visual preview rather than a physical sample.\n\n## Reference(s):\n\n- [Fabric on Body on ClawHub](https://clawhub.ai/dlazyai/skills/fabric-on-body)\n- [Provider setup and data flow](references/provider-cli.md)\n- [Image generation parameters](references/model-flags.md)\n\n## Skill Output:\n\n**Output Type(s):** [Images, Shell commands, Guidance]\n\n**Output Format:** [Generated garment preview images with Markdown guidance and shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Visual previews only; not a guarantee of real fabric drape, weight, or feel.]\n\n## Skill Version(s):\n\n1.0.14 (source: frontmatter, ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.14:examples/brand.yaml\n\n# ⚠️ 由 scripts/build-skills.mjs 从 shared/examples/brand.yaml 同步生成，不要直接改这里。\r\n# 店铺品牌视觉规范 —— 所有生图技能读这一份，保证几百个 SKU 看起来像同一家店。\r\n#   node scripts/brand.mjs --brand brand.yaml --for flat-lay\r\n#   node scripts/gen.mjs --task flat-lay --brand brand.yaml --prompt '...'\r\n\r\nbrand:\r\n  name: 示例品牌\r\n  # 一句话概括调性，会原样进 prompt\r\n  tone: quiet minimalist, warm and lived-in, never glossy or commercial\r\n\r\nmodel:\r\n  # 锁模特：给一张脸的参考图，所有技能都会把它作为最后一张参考图传入\r\n  reference: assets/model/face-a.jpg\r\n  description: East Asian woman, late twenties, natural makeup, shoulder-length black hair\r\n  body: slim, height around 168cm\r\n\r\nphotography:\r\n  background: seamless off-white studio backdrop, RGB 248 248 246\r\n  lighting: soft large softbox from camera left, gentle fill, no hard shadows\r\n  camera: 85mm equivalent, eye level, shallow depth of field\r\n  grade: neutral white balance around 5200K, low contrast, slightly lifted blacks\r\n  crop: full body with headroom, product centered\r\n\r\nlayout:\r\n  # 给带排版的技能（主图 / 详情页）用\r\n  margin: at least 8% empty margin on all sides\r\n  typeface: clean sans-serif, no decorative fonts\r\n  text_color: near-black on light background\r\n\r\nforbid:\r\n  - no visible brand logos other than the product's own\r\n  - no text or watermark\r\n  - no exaggerated poses or dramatic wind effects\r\n  - no oversaturated colors\r\n\r\n# 可选：把这些直接写进合规目标，生成时就按平台要求出图\r\ncompliance:\r\n  platform: amazon\n\nArchive v1.0.13: 11 files, 25817 bytes\n\nFiles: examples/brand.yaml (1655b), references/model-flags.md (2144b), references/provider-cli.md (4802b), scripts/brand.mjs (4516b), scripts/gen.mjs (9733b), scripts/lib/miniyaml.mjs (2901b), scripts/lib/providers.mjs (12510b), scripts/lib/tasks.json (3234b), skill-card.md (3054b), SKILL.md (11767b), _meta.json (134b)\n\nFile v1.0.13:SKILL.md\n\n---\nname: fabric-on-body\nversion: 1.0.13\ndescription: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。\n---\n\n# fabric-on-body — 一键替换服装面料\n\n**版型不动，面料换掉**。给一张服装版式图 + 一张面料小样，输出这个版型用新面料做出来的样衣效果图。\n\n价值在打样前：一个版型试 8 种面料，传统做法是打 8 件样衣（每件几天、几百块）；这里是 8 次生成。\n\n---\n\n## 生成效果示例\n\n| 输入：服装版式图 | 输入：面料图 |\n| --- | --- |\n| <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/style-sheet.jpg\" width=\"260\"> | <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/fabric-swatch.jpg\" width=\"260\"> |\n| `style-sheet.jpg` — 落肩宽松圆领毛衣版型，800×800 | `fabric-swatch.jpg` — 象牙白真丝缎面小样，640×640 |\n\n实际执行的命令：\n\n```bash\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference: an oversized drop-shoulder crewneck sweater with ribbed collar, cuffs and hem. Image 2 is the target fabric: ivory silk satin with a soft lustrous sheen and fine weave. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material — the sweater must now read as ivory silk satin with specular highlights on the folds and soft drape instead of chunky knit. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality medium --imageFormat jpeg \\\n  --save docs/fabric-on-body/example-output.jpg\n```\n\n**输出**\n\n<img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/example-output.jpg\" width=\"320\">\n\n`example-output.jpg` — 1024×1024。落肩剪裁、身长袖长、罗纹领口袖口下摆的结构与平铺角度都与版式图一致；材质从粗针织变成象牙白真丝缎面，褶皱上出现高光、垂坠变得柔顺，罗纹部位仍以缎面质感保留。\n\n---\n\n## 1、能力边界\n\n| 输入 | 说明 |\n| --- | --- |\n| 服装版式图 | 决定版型、剪裁、结构与拍摄角度 |\n| 面料图 | 决定材质、纹理、光泽与垂坠感（面料小样特写最佳） |\n| 服装类型 | 帮助模型理解结构（上装 / 下装 / 连衣裙 / 外套 / 内衣） |\n\n| 保持不变 | 会改变 |\n| --- | --- |\n| 版型与剪裁、身长袖长、领口/袖口/下摆结构、缝线位置、拍摄角度与构图 | 材质与织法、表面光泽、垂坠与褶皱形态、厚度观感 |\n\n**不做**：不改版型比例；不改变服装的结构设计；不承诺真实打样的手感与克重——输出是视觉预览，不是工艺样衣。\n\n---\n\n## 2、输入素材规则\n\n生成前先自检这几条硬性约束：\n\n- 大小：**20KB ~ 15MB**\n- 分辨率：**大于 400×400**\n- 格式：**jpg / jpeg / png / webp**\n\n**版式图（✅）**：纯色背景、结构清晰、正面完整的平铺图或人台图。\n\n**面料图（✅）**：面料小样特写，能看清织纹与光泽；有褶皱转折更好（能交代垂坠）。\n\n**会明显拉低效果的输入（❌）**\n\n| 问题 | 说明 |\n| --- | --- |\n| 面料图拍太远 | 看不清织纹，只会当成一块纯色 |\n| 面料图带强环境色 | 黄光下拍的白布会换成米黄色 |\n| 版式图有复杂印花 | 原印花会和新面料打架，先用 [item-repair](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/item-repair/skill.md) 或换素图 |\n| 面料与品类不匹配 | 硬挺牛仔布做不出吊带裙的垂坠，模型会硬凑 |\n\n---\n\n## 3、面料替换的关键：写清「材质带来的物理变化」\n\n只说「换成真丝」不够——模型不知道该怎么改光影。要把材质翻译成**可画出来的物理特征**：\n\n| 面料 | 要写的物理特征 |\n| --- | --- |\n| 真丝 / 缎面 | `lustrous specular highlights along the folds, fluid drape, soft continuous gradients` |\n| 粗针织 | `chunky knit loops with visible yarn twist, matte fibre halo, structured heavy drape` |\n| 牛仔 | `twill diagonal weave, slight slub texture, stiff drape with sharp fold creases` |\n| 灯芯绒 | `vertical wale ridges catching light, matte pile, medium-stiff drape` |\n| 雪纺 | `semi-sheer, very light drape with many fine ripples, soft diffused light through the fabric` |\n| 皮革 | `low-frequency specular sheen, grain texture, stiff drape with broad soft creases` |\n| 摇粒绒 | `dense short pile, fuzzy silhouette edge, no specular highlight` |\n\n**再加一句「版型不许动」**——这是本技能最容易失守的地方：\n\n```text\nKeep the pattern identical: same cut, same body length, same sleeve length,\nsame collar/cuff/hem construction, same flat-lay layout and camera angle.\nReplace only the material.\n```\n\n---\n\n## 4、工具调用\n\n本技能使用 dLazy 的 **`gpt-image-2`**（图像编辑模型；面料替换要求「几何完全不动、材质完全改变」，是典型的定向属性替换任务）。\n\n### 调用方式\n\n两种等价写法，选一种。统一入口会自动选后端、失败重试、建目录落盘、估算成本：\n\n```bash\n# A. 统一入口（推荐）：可切任意后端，加 --dry-run 不计费空跑\nnode scripts/gen.mjs --task fabric-on-body \\\n  --prompt '<见下方 Prompt 模板>' \\\n  --images <按下表顺序> \\\n  --save output/fabric-on-body-<sku>.jpg\n\n# B. 直接用 dLazy CLI（不想引入 Node 依赖时，效果等价）\ndlazy gpt-image-2 --prompt '...' --images ... --save output/fabric-on-body.jpg\n```\n\n**参数约定（本技能固定用法）**\n\n| 参数 | 取值 | 理由 |\n| --- | --- | --- |\n| `--images` | `[版式图, 面料图]` | 顺序即 prompt 中的 image 1 / 2 |\n| `--size` | 与版式图比例一致（`1024x1024` 平铺 / `1024x1536` 人台竖版） | 换料不该改构图 |\n| `--quality` | `high` | 材质是本技能的唯一产出，必须 high |\n| `--imageFormat` | `jpeg` | 通用格式 |\n| `--batch` | `2` ~ `3` | 垂坠形态有随机性 |\n| `--save` | `docs/fabric-on-body/output-<版型>-<面料>.jpg` | 版型 × 面料矩阵命名 |\n\n### Command Examples\n\n```bash\n# basic call: 一个版型换一种面料\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement. Image 1 is the garment pattern reference, image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same cut, body length, sleeve length, collar/cuff/hem construction, layout and camera angle. Replace only the material. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality high\n\n# complex call: 一个版型 × 多种面料，跑成一个选型矩阵\nSTYLE=docs/fabric-on-body/style-sheet.jpg\nKEEP='Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material.'\nfor F in satin corduroy denim fleece; do\n  case $F in\n    satin)    PHYS='lustrous specular highlights along the folds, fluid drape, soft continuous gradients' ;;\n    corduroy) PHYS='vertical wale ridges catching light, matte pile, medium-stiff drape' ;;\n    denim)    PHYS='twill diagonal weave, slight slub texture, stiff drape with sharp fold creases' ;;\n    fleece)   PHYS='dense short pile, fuzzy silhouette edge, no specular highlight' ;;\n  esac\n  dlazy gpt-image-2 \\\n    --prompt \"Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference. Image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. $KEEP The garment must now read as $F: $PHYS. Clean white background, even studio light, no text.\" \\\n    --images \"$STYLE\" \"docs/fabric-on-body/swatch-$F.jpg\" \\\n    --size 1024x1024 --quality high --imageFormat jpeg \\\n    --save \"docs/fabric-on-body/output-drop-shoulder-$F.jpg\"\ndone\n\n# 先估价不真跑\ndlazy gpt-image-2 --dry-run --prompt '...' --images a.jpg b.jpg --size 1024x1024 --quality high\n```\n\n### 延伸阅读\n\n| 要查什么 | 去哪 |\n| --- | --- |\n| 认证、多后端配置、输出结构、错误码 | [`references/provider-cli.md`](references/provider-cli.md) |\n| `gpt-image-2` 的全部可用参数 | [`references/model-flags.md`](references/model-flags.md) |\n| 统一入口的全部选项 | `node scripts/gen.mjs --help` |\n\n## 5、Prompt 模板\n\n```text\nFabric replacement for a garment style sheet.\nImage 1 is the garment pattern/style reference: [品类 + 版型描述].\nImage 2 is the target fabric: [面料名 + 颜色 + 光泽描述].\n\nRe-render the exact same garment silhouette from image 1 in the fabric from image 2.\n\nKeep the pattern identical: same [剪裁], same body length, same sleeve length,\nsame [领口/袖口/下摆结构], same [缝线位置], same layout and camera angle.\n\nReplace only the material — the garment must now read as [面料名]:\n[第三节表格里对应的物理特征].\n\nClean [背景色] background, even studio light, no text.\n```\n\n**按问题追加的修正句**\n\n| 问题 | 追加到 prompt 末尾 |\n| --- | --- |\n| 版型跟着变了 | `The silhouette outline must be pixel-aligned with image 1. Only surface material may differ.` |\n| 面料颜色偏了 | `Sample the fabric colour from image 2 under neutral light; do not shift hue or add colour cast.` |\n| 换完还是原来的质感 | 把物理特征写得更极端，并追加 `The original [原面料] texture must be completely gone.` |\n| 垂坠不对 | `Drape stiffness: [very fluid / medium / stiff]. Fold count and fold radius must match a [面料] of about [克重] gsm.` |\n| 缝线/罗纹消失了 | `Preserve construction details: [罗纹/明线/拉链] must remain visible in the new material.` |\n\n---\n\n## 6、执行流程\n\n1. **备素材**：版式图（结构清晰、印花越少越好）+ 面料小样特写（能看清织纹）。\n2. **翻译材质**：查第三节表格，把面料名换成物理特征描述。\n3. **写版型锁定句**：剪裁 / 身长 / 袖长 / 领口袖口下摆 / 缝线 / 角度，逐项写死。\n4. **`--quality high` 起跑**，比例跟随版式图。\n5. **要做选型矩阵**：用第四节循环，一个版型 × N 种面料。\n6. **质检**：版型轮廓是否与原图对齐、面料颜色是否准、质感是否真的换掉了、缝线罗纹是否还在。\n7. **交付时注明这是视觉预览**，不代表真实手感与克重。\n\n---\n\n## 7、常见问题\n\n| 现象 | 原因 | 处理 |\n| --- | --- | --- |\n| 版型变了 | 未锁定轮廓 | 追加 `silhouette outline must be pixel-aligned with image 1` |\n| 面料颜色不对 | 面料图带环境色 | 重拍面料小样（中性光），或追加取色约束句 |\n| 质感没换掉 | 物理特征写得太弱 | 用第三节表格的极端描述 + `original texture must be completely gone` |\n| 垂坠像纸板 | 未指定垂坠刚度 | 追加 drape stiffness 句，给出克重参考 |\n| 罗纹/明线消失 | 被新材质吞掉 | 追加保留结构细节句 |\n| 面料与品类物理上不成立 | 硬挺布做垂坠款 | 换匹配的面料，或改版型 |\n\n---\n\n## Tips\n\nVisit https://dlazy.com for more information.\n\nFile v1.0.13:_meta.json\n\n{\n  \"ownerId\": \"kn7c5wgeajfcfvdfb5ceemvdb984cjpd\",\n  \"slug\": \"fabric-on-body\",\n  \"version\": \"1.0.13\",\n  \"publishedAt\": 1790217420890\n}\n\nFile v1.0.13:references/model-flags.md\n\n# `gpt-image-2` 参数清单\r\n\r\n本技能默认用的模型的完整参数。日常只需要「参数约定」里那几个，\r\n这份清单在需要用到非常规参数时再看。\r\n\r\n**CRITICAL INSTRUCTION FOR AGENT**:\r\nRun the `dlazy gpt-image-2` command to get results.\r\n\r\n```bash\r\ndlazy gpt-image-2 -h\r\n\r\nOptions:\r\n  --prompt <prompt>            Prompt\r\n  --images [images...]         Images [image: url or local path] (max 5)\r\n  --size <size>                Size [default: auto] (choices: \"1024x1024\",\r\n                               \"1536x1024\", \"1024x1536\", \"2048x2048\",\r\n                               \"2048x1152\", \"3840x2160\", \"2160x3840\", \"auto\")\r\n  --imageFormat <imageFormat>  Image Format [default: jpeg] (choices: \"jpeg\",\r\n                               \"png\", \"webp\")\r\n  --quality <quality>          Quality [default: medium] (choices: \"low\",\r\n                               \"medium\", \"high\")\r\n  --dry-run                    Print payload without executing the tool\r\n  --no-wait                    Return generateId immediately for async tasks\r\n  --timeout <seconds>          Max seconds to wait for async completion\r\n                               (default: \"1800\")\r\n  --input <jsonOrFile>         Inline JSON or @path/to/file.json — merged under\r\n                               flag values (flags win)\r\n  --save <path>                Download the result asset to this local path\r\n                               (mkdir + retry handled for you). A destination\r\n                               path — NOT a response format; for stdout shape\r\n                               use --format\r\n  --batch <n>                  Fan-out N parallel runs (cloud tools only)\r\n                               (default: \"1\")\r\n  -h, --help                   display help for command\r\n```\r\n\r\n> Any flag also accepts pipe references — `-` (auto-pick from upstream stdin), `@N` (n-th output), `@N.path` (jsonpath into output), `@*` (all primary values), `@stdin` / `@stdin:path` (whole envelope). See `dlazy --help` for details.\r\n\r\n---\r\n\r\n换其他后端时参数由 `scripts/gen.mjs` 统一翻译，见 [`provider-cli.md`](provider-cli.md)。\n\nFile v1.0.13:references/provider-cli.md\n\n<!-- 由 scripts/build-skills.mjs 从 shared/references/provider-cli.md 同步生成，不要直接改这里。 -->\n# 后端调用参考\n\n技能正文只写「要生成什么」。认证、计费、错误码、输出结构这些每个技能都一样的东西放在这里，\n**用到时再读**，不占技能的常驻上下文。\n\n---\n\n## 一、认证\n\n### 默认后端 dLazy\n\n```bash\ndlazy login            # 设备码流程，远程 shell 也能用，自动写入本地配置\ndlazy auth set <KEY>   # 已有 key 时直接写入\n```\n\nkey 存在用户配置目录（macOS/Linux `~/.dlazy/config.json`，Windows `%USERPROFILE%\\.dlazy\\config.json`），\n权限限本机用户。也可以每次调用用环境变量 `DLAZY_API_KEY` 传入。\n\n手动获取：登录 [dlazy.com](https://dlazy.com) → [API Key 页面](https://dlazy.com/dashboard/organization/api-key)。\nkey 按组织隔离，可随时轮换或吊销。\n\n### 其他后端\n\n本技能库不锁定单一厂商。配好任意一家的 key 即可跑：\n\n| 后端 | 环境变量 | 说明 |\n| --- | --- | --- |\n| `dlazy` | `dlazy login` 或 `DLAZY_API_KEY` | 默认，最省事 |\n| `openai` | `OPENAI_API_KEY` | 走 `/v1/images/edits` 与 `/v1/images/generations` |\n| `gemini` | `GEMINI_API_KEY` | Nano Banana 系列 |\n| `fal` | `FAL_KEY` | |\n| `replicate` | `REPLICATE_API_TOKEN` | |\n| `ark` | `ARK_API_KEY` + `ARK_MODEL` | 火山方舟，模型 ID 需按开通情况填 |\n\n选路优先级：`--provider` 参数 > `PROVIDER` 环境变量 > 第一个配了 key 的 > `dlazy`。\n\n```bash\nnode scripts/gen.mjs --doctor     # 看当前哪个后端可用\n```\n\n各后端的模型 ID 可用 `GEN_MODEL_OPENAI` / `GEN_MODEL_GEMINI` / `GEN_MODEL_FAL` /\n`GEN_MODEL_REPLICATE` / `GEN_MODEL_ARK` 覆盖。**厂商目录会变，以各家最新文档为准。**\n\n---\n\n## 二、两种调用方式\n\n### 方式 A：统一入口（推荐）\n\n```bash\nnode scripts/gen.mjs --task <技能名> --prompt '...' --images a.jpg b.jpg --save out.jpg\n```\n\n它负责：后端选路、默认尺寸档位、失败重试（429/5xx 指数退避）、落盘建目录、成本估算。\n\n```bash\nnode scripts/gen.mjs --task flat-lay --prompt '...' --dry-run   # 不调用不计费，只看要发什么\nnode scripts/gen.mjs --help\n```\n\n### 方式 B：直接用 dLazy CLI\n\n不想引入 Node 依赖时，技能正文里的 `dlazy ...` 命令可以原样执行，效果等价。\n\n```bash\nnpx @dlazy/cli@1.2.3 <command>     # 不装全局二进制\n```\n\n- CLI 源码：[github.com/dlazy-ai/cli](https://github.com/dlazy-ai/cli) · npm 包 `@dlazy/cli`\n\n---\n\n## 三、数据流向\n\n调用 dLazy 时：提示词与参数发往 `api.dlazy.com`；传入的本地图片会上传到 `files.dlazy.com`\n供模型读取；产出 URL 同样托管在 `files.dlazy.com`。这是云端生成 API 的通用形态。\n换成其他后端时，数据流向对应厂商，不经过 dLazy。\n\n---\n\n## 四、输出结构\n\n`gen.mjs`（加 `--json`）：\n\n```json\n{\n  \"ok\": true,\n  \"task\": \"flat-lay\",\n  \"provider\": \"dlazy\",\n  \"model\": \"gpt-image-2\",\n  \"files\": [\"docs/flat-lay/output-sku001.jpg\"],\n  \"texts\": [],\n  \"estimatedCredits\": 60,\n  \"elapsedMs\": 58213\n}\n```\n\ndLazy CLI 原生：\n\n```json\n{\n  \"ok\": true,\n  \"result\": {\n    \"tool\": \"gpt-image-2\",\n    \"data\": { \"urls\": [\"https://files.dlazy.com/data/ai/....jpg\"] },\n    \"savedPath\": \"docs/flat-lay/example-output.jpg\"\n  }\n}\n```\n\n加 `--no-wait` 的异步任务不返回 `data`，返回 `task: { generateId, status }`，\n用 `dlazy status <generateId> --wait` 轮询。\n\n文本类模型（如质检）产出在 `result.data.texts[0]`：\n\n```bash\ndlazy claude-sonnet-5 --prompt '...' --images x.jpg \\\n  | python3 -c 'import sys,json;print(json.load(sys.stdin)[\"result\"][\"data\"][\"texts\"][0])'\n```\n\n---\n\n## 五、错误处理\n\n| Code | 类型 | 示例 |\n| --- | --- | --- |\n| 401 | 未授权 / 无 key | `ok: false, code: \"unauthorized\"` |\n| 501 | 缺必填参数 | `error: required option '--prompt <prompt>' not specified` |\n| 502 | 本地文件读不到 | `Error: Image file not found: ...` |\n| 503 | 余额不足 | `ok: false, code: \"insufficient_balance\"` |\n| 503 | 服务端错误 | `HTTP status code error (500)` |\n| 504 | 异步任务失败 | `=== Generation Failed ===` / `Prompt violates safety policy` |\n\n**给 Agent 的硬性要求**\n\n1. 命中 `insufficient_balance` → 明确告诉用户算力不足，并给出充值入口\n   <https://dlazy.com/dashboard/organization/settings?tab=credits>\n2. 命中 `unauthorized` / 缺 key → 告诉用户去 <https://dlazy.com/dashboard/organization/api-key>\n   取 key，用 `dlazy auth set <key>` 存好再继续。\n3. 用 `gen.mjs` 时，429 与 5xx 已自动重试；仍失败才向用户报错。\n4. **不要**为了「跑通」而偷偷降级参数（尺寸、档位、批量），先问用户。\n\nFile v1.0.13:scripts/lib/tasks.json\n\n{\r\n  \"_note\": \"技能 → 默认模型与参数。dlazy 列为默认后端的模型名；其他后端走 providers.mjs 的通用映射，可用 GEN_MODEL_<PROVIDER> 覆盖。\",\r\n  \"_credits\": { \"gpt-image-2\": 60, \"seedream-5.0\": 30, \"seedream-5.0-pro\": 45, \"banana-pro\": 25, \"claude-sonnet-5\": 3 },\r\n  \"tasks\": {\r\n    \"flat-lay\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"wear-everything\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"image-fusion\":            { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"one-shot\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"fission-pattern\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-detail\":             { \"model\": \"seedream-5.0-pro\", \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"creative-scene\":          { \"model\": \"banana-pro\",       \"size\": \"1024x1536\", \"format\": \"jpeg\" },\r\n    \"batch-image\":             { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"to-3d\":                   { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-extraction\":     { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"fabric-on-body\":          { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-detail\":         { \"model\": \"gpt-image-2\",      \"size\": \"1\n\nArchive v1.0.12: 11 files, 25757 bytes\n\nFiles: examples/brand.yaml (1655b), references/model-flags.md (2144b), references/provider-cli.md (4802b), scripts/brand.mjs (4516b), scripts/gen.mjs (9733b), scripts/lib/miniyaml.mjs (2901b), scripts/lib/providers.mjs (12510b), scripts/lib/tasks.json (3234b), skill-card.md (2752b), SKILL.md (11767b), _meta.json (134b)\n\nArchive v1.0.11: 11 files, 25732 bytes\n\nFiles: examples/brand.yaml (1655b), references/model-flags.md (2144b), references/provider-cli.md (4802b), scripts/brand.mjs (4516b), scripts/gen.mjs (9733b), scripts/lib/miniyaml.mjs (2901b), scripts/lib/providers.mjs (12510b), scripts/lib/tasks.json (3234b), skill-card.md (2660b), SKILL.md (11767b), _meta.json (134b)\n\nArchive v1.0.10: 11 files, 25527 bytes\n\nFiles: examples/brand.yaml (1655b), references/model-flags.md (2144b), references/provider-cli.md (4802b), scripts/brand.mjs (4516b), scripts/gen.mjs (9733b), scripts/lib/miniyaml.mjs (2901b), scripts/lib/providers.mjs (12510b), scripts/lib/tasks.json (3234b), skill-card.md (2262b), SKILL.md (11767b), _meta.json (134b)","readmeExcerpt":"Skill: 一键替换服装面料 Fabric on Body Owner: dlazyai Summary: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。 Tags: latest:1.0.19 Version history: v1.0.19 | 2026-10-10T01:49:39.917Z | user 例行版本更新 2026-10-10 v1.0.18 | 2026-10-08T01:42:20.407Z | user 例行版本更新 2026-10-08 v1.0.17 | 2026-10-04T01:42:31.563Z | user 例行版本更新 2026-10-04 v1.0.16 | 2026-10-02T05:15:32.141Z | user 例行版本更新 2026-10-02 v1.0.15 | ","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"dlazy gpt-image-2 \\\n  --prompt 'Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference: an oversized drop-shoulder crewneck sweater with ribbed collar, cuffs and hem. Image 2 is the target fabric: ivory silk satin with a soft lustrous sheen and fine weave. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material — the sweater must now read as ivory silk satin with specular highlights on the folds and soft drape instead of chunky knit. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality medium --imageFormat jpeg \\\n  --save docs/fabric-on-body/example-output.jpg"},{"language":"text","snippet":"Keep the pattern identical: same cut, same body length, same sleeve length,\nsame collar/cuff/hem construction, same flat-lay layout and camera angle.\nReplace only the material."},{"language":"bash","snippet":"# A. 统一入口（推荐）：可切任意后端，加 --dry-run 不计费空跑\nnode scripts/gen.mjs --task fabric-on-body \\\n  --prompt '<见下方 Prompt 模板>' \\\n  --images <按下表顺序> \\\n  --save output/fabric-on-body-<sku>.jpg\n\n# B. 直接用 dLazy CLI（不想引入 Node 依赖时，效果等价）\ndlazy gpt-image-2 --prompt '...' --images ... --save output/fabric-on-body.jpg"},{"language":"bash","snippet":"# basic call: 一个版型换一种面料\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement. Image 1 is the garment pattern reference, image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same cut, body length, sleeve length, collar/cuff/hem construction, layout and camera angle. Replace only the material. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality high\n\n# complex call: 一个版型 × 多种面料，跑成一个选型矩阵\nSTYLE=docs/fabric-on-body/style-sheet.jpg\nKEEP='Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material.'\nfor F in satin corduroy denim fleece; do\n  case $F in\n    satin)    PHYS='lustrous specular highlights along the folds, fluid drape, soft continuous gradients' ;;\n    corduroy) PHYS='vertical wale ridges catching light, matte pile, medium-stiff drape' ;;\n    denim)    PHYS='twill diagonal weave, slight slub texture, stiff drape with sharp fold creases' ;;\n    fleece)   PHYS='dense short pile, fuzzy silhouette edge, no specular highlight' ;;\n  esac\n  dlazy gpt-image-2 \\\n    --prompt \"Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference. Image 2 is the target fabric. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. $KEEP The garment must now read as $F: $PHYS. Clean white background, even studio light, no text.\" \\\n    --images \"$STYLE\" \"docs/fabric-on-body/swatch-$F.jpg\" \\\n    --size 1024x1024 --quality high --imageFormat jpeg \\\n    --save \"docs/fabric-on-body/output-drop-shoulder-$F.jpg\"\ndone\n\n# 先估价不真跑\ndlazy gpt-image-2 --dry-run --prompt '...' --images a.jpg b.jpg --size 1024x1024 --quality high"},{"language":"text","snippet":"Fabric replacement for a garment style sheet.\nImage 1 is the garment pattern/style reference: [品类 + 版型描述].\nImage 2 is the target fabric: [面料名 + 颜色 + 光泽描述].\n\nRe-render the exact same garment silhouette from image 1 in the fabric from image 2.\n\nKeep the pattern identical: same [剪裁], same body length, same sleeve length,\nsame [领口/袖口/下摆结构], same [缝线位置], same layout and camera angle.\n\nReplace only the material — the garment must now read as [面料名]:\n[第三节表格里对应的物理特征].\n\nClean [背景色] background, even studio light, no text."},{"language":"bash","snippet":"dlazy login            # 设备码流程，远程 shell 也能用，自动写入本地配置\ndlazy auth set <KEY>   # 已有 key 时直接写入"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: fabric-on-body\nversion: 1.0.19\ndescription: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。\n---\n\n# fabric-on-body — 一键替换服装面料\n\n**版型不动，面料换掉**。给一张服装版式图 + 一张面料小样，输出这个版型用新面料做出来的样衣效果图。\n\n价值在打样前：一个版型试 8 种面料，传统做法是打 8 件样衣（每件几天、几百块）；这里是 8 次生成。\n\n---\n\n## 生成效果示例\n\n| 输入：服装版式图 | 输入：面料图 |\n| --- | --- |\n| <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/style-sheet.jpg\" width=\"260\"> | <img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/fabric-swatch.jpg\" width=\"260\"> |\n| `style-sheet.jpg` — 落肩宽松圆领毛衣版型，800×800 | `fabric-swatch.jpg` — 象牙白真丝缎面小样，640×640 |\n\n实际执行的命令：\n\n```bash\ndlazy gpt-image-2 \\\n  --prompt 'Fabric replacement for a garment style sheet. Image 1 is the garment pattern/style reference: an oversized drop-shoulder crewneck sweater with ribbed collar, cuffs and hem. Image 2 is the target fabric: ivory silk satin with a soft lustrous sheen and fine weave. Re-render the exact same garment silhouette from image 1 in the fabric from image 2. Keep the pattern identical: same oversized drop-shoulder cut, same body length, same sleeve length, same collar/cuff/hem construction, same flat-lay layout and camera angle. Replace only the material — the sweater must now read as ivory silk satin with specular highlights on the folds and soft drape instead of chunky knit. Clean white background, even studio light, no text.' \\\n  --images docs/fabric-on-body/style-sheet.jpg docs/fabric-on-body/fabric-swatch.jpg \\\n  --size 1024x1024 --quality medium --imageFormat jpeg \\\n  --save docs/fabric-on-body/example-output.jpg\n```\n\n**输出**\n\n<img src=\"https://raw.githubusercontent.com/dlazy-ai/ecommerce-skills/main/docs/fabric-on-body/example-output.jpg\" width=\"320\">\n\n`example-output.jpg` — 1024×1024。落肩剪裁、身长袖长、罗纹领口袖口下摆的结构与平铺角度都与版式图一致；材质从粗针织变成象牙白真丝缎面，褶皱上出现高光、垂坠变得柔顺，罗纹部位仍以缎面质感保留。\n\n---\n\n## 1、能力边界\n\n| 输入 | 说明 |\n| --- | --- |\n| 服装版式图 | 决定版型、剪裁、结构与拍摄角度 |\n| 面料图 | 决定材质、纹理、光泽与垂坠感（面料小样特写最佳） |\n| 服装类型 | 帮助模型理解结构（上装 / 下装 / 连衣裙 / 外套 / 内衣） |\n\n| 保持不变 | 会改变 |\n| --- | --- |\n| 版型与剪裁、身长袖长、领口/袖口/下摆结构、缝线位置、拍摄角度与构图 | 材质与织法、表面光泽、垂坠与褶皱形态、厚度观感 |\n\n**不做**：不改版型比例；不改变服装的结构设计；不承诺真实打样的手感与克重——输出是视觉预览，不是工艺样衣。\n\n---\n\n## 2、输入素材规则\n\n生成前先自检这几条硬性约束：\n\n- 大小：**20KB ~ 15MB**\n- 分辨率：**大于 400×400**\n- 格式：**jpg / jpeg / png / webp**\n\n**版式图（✅）**：纯色背景、结构清晰、正面完整的平铺图或人台图。\n\n**面料图（✅）**：面料小样特写，能看清织纹与光泽；有褶皱转折更好（能交代垂坠）。\n\n**会明显拉低效果的输入（❌）**\n\n| 问题 | 说明 |\n| --- | --- |\n| 面料图拍太远 | 看不清织纹，只会当成一块纯色 |\n| 面料图带强环境色 | 黄光下拍的白布会换成米黄色 |\n| 版式图有复杂印花 | 原印花会和新面料打架，先用 [item-repair](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/item-repair/skill.md) 或换素图 |\n| 面料与品类不匹配 | 硬挺牛仔布做不出吊带裙的垂坠，模型会硬凑 |\n\n---\n\n## 3、面料替换的关键：写清「材质带来的物理变化」\n\n只说「换成真丝」不够——模型不知道该怎么改光影。要把材质翻译成**可画出来的物理特征**：\n\n| 面料 | 要写的物理特征 |\n| --- | --- |\n| 真丝 / 缎面 | `lustrous specular highlights along the folds, fluid drape, soft continuous gradients` |\n| 粗针织 | `chunky knit loops with visible yarn twist, matte fibre halo, structured heavy drape` |\n| 牛仔 | `twill diagonal weave, sli"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7c5wgeajfcfvdfb5ceemvdb984cjpd\",\n  \"slug\": \"fabric-on-body\",\n  \"version\": \"1.0.19\",\n  \"publishedAt\": 1791596979917\n}"},{"path":"references/model-flags.md","content":"# `gpt-image-2` 参数清单\r\n\r\n本技能默认用的模型的完整参数。日常只需要「参数约定」里那几个，\r\n这份清单在需要用到非常规参数时再看。\r\n\r\n**CRITICAL INSTRUCTION FOR AGENT**:\r\nRun the `dlazy gpt-image-2` command to get results.\r\n\r\n```bash\r\ndlazy gpt-image-2 -h\r\n\r\nOptions:\r\n  --prompt <prompt>            Prompt\r\n  --images [images...]         Images [image: url or local path] (max 5)\r\n  --size <size>                Size [default: auto] (choices: \"1024x1024\",\r\n                               \"1536x1024\", \"1024x1536\", \"2048x2048\",\r\n                               \"2048x1152\", \"3840x2160\", \"2160x3840\", \"auto\")\r\n  --imageFormat <imageFormat>  Image Format [default: jpeg] (choices: \"jpeg\",\r\n                               \"png\", \"webp\")\r\n  --quality <quality>          Quality [default: medium] (choices: \"low\",\r\n                               \"medium\", \"high\")\r\n  --dry-run                    Print payload without executing the tool\r\n  --no-wait                    Return generateId immediately for async tasks\r\n  --timeout <seconds>          Max seconds to wait for async completion\r\n                               (default: \"1800\")\r\n  --input <jsonOrFile>         Inline JSON or @path/to/file.json — merged under\r\n                               flag values (flags win)\r\n  --save <path>                Download the result asset to this local path\r\n                               (mkdir + retry handled for you). A destination\r\n                               path — NOT a response format; for stdout shape\r\n                               use --format\r\n  --batch <n>                  Fan-out N parallel runs (cloud tools only)\r\n                               (default: \"1\")\r\n  -h, --help                   display help for command\r\n```\r\n\r\n> Any flag also accepts pipe references — `-` (auto-pick from upstream stdin), `@N` (n-th output), `@N.path` (jsonpath into output), `@*` (all primary values), `@stdin` / `@stdin:path` (whole envelope). See `dlazy --help` for details.\r\n\r\n---\r\n\r\n换其他后端时参数由 `scripts/gen.mjs` 统一翻译，见 [`provider-cli.md`](provider-cli.md)。"},{"path":"references/provider-cli.md","content":"<!-- 由 scripts/build-skills.mjs 从 shared/references/provider-cli.md 同步生成，不要直接改这里。 -->\n# 后端调用参考\n\n技能正文只写「要生成什么」。认证、计费、错误码、输出结构这些每个技能都一样的东西放在这里，\n**用到时再读**，不占技能的常驻上下文。\n\n---\n\n## 一、认证\n\n### 默认后端 dLazy\n\n```bash\ndlazy login            # 设备码流程，远程 shell 也能用，自动写入本地配置\ndlazy auth set <KEY>   # 已有 key 时直接写入\n```\n\nkey 存在用户配置目录（macOS/Linux `~/.dlazy/config.json`，Windows `%USERPROFILE%\\.dlazy\\config.json`），\n权限限本机用户。也可以每次调用用环境变量 `DLAZY_API_KEY` 传入。\n\n手动获取：登录 [dlazy.com](https://dlazy.com) → [API Key 页面](https://dlazy.com/dashboard/organization/api-key)。\nkey 按组织隔离，可随时轮换或吊销。\n\n### 其他后端\n\n本技能库不锁定单一厂商。配好任意一家的 key 即可跑：\n\n| 后端 | 环境变量 | 说明 |\n| --- | --- | --- |\n| `dlazy` | `dlazy login` 或 `DLAZY_API_KEY` | 默认，最省事 |\n| `openai` | `OPENAI_API_KEY` | 走 `/v1/images/edits` 与 `/v1/images/generations` |\n| `gemini` | `GEMINI_API_KEY` | Nano Banana 系列 |\n| `fal` | `FAL_KEY` | |\n| `replicate` | `REPLICATE_API_TOKEN` | |\n| `ark` | `ARK_API_KEY` + `ARK_MODEL` | 火山方舟，模型 ID 需按开通情况填 |\n\n选路优先级：`--provider` 参数 > `PROVIDER` 环境变量 > 第一个配了 key 的 > `dlazy`。\n\n```bash\nnode scripts/gen.mjs --doctor     # 看当前哪个后端可用\n```\n\n各后端的模型 ID 可用 `GEN_MODEL_OPENAI` / `GEN_MODEL_GEMINI` / `GEN_MODEL_FAL` /\n`GEN_MODEL_REPLICATE` / `GEN_MODEL_ARK` 覆盖。**厂商目录会变，以各家最新文档为准。**\n\n---\n\n## 二、两种调用方式\n\n### 方式 A：统一入口（推荐）\n\n```bash\nnode scripts/gen.mjs --task <技能名> --prompt '...' --images a.jpg b.jpg --save out.jpg\n```\n\n它负责：后端选路、默认尺寸档位、失败重试（429/5xx 指数退避）、落盘建目录、成本估算。\n\n```bash\nnode scripts/gen.mjs --task flat-lay --prompt '...' --dry-run   # 不调用不计费，只看要发什么\nnode scripts/gen.mjs --help\n```\n\n### 方式 B：直接用 dLazy CLI\n\n不想引入 Node 依赖时，技能正文里的 `dlazy ...` 命令可以原样执行，效果等价。\n\n```bash\nnpx @dlazy/cli@1.2.3 <command>     # 不装全局二进制\n```\n\n- CLI 源码：[github.com/dlazy-ai/cli](https://github.com/dlazy-ai/cli) · npm 包 `@dlazy/cli`\n\n---\n\n## 三、数据流向\n\n调用 dLazy 时：提示词与参数发往 `api.dlazy.com`；传入的本地图片会上传到 `files.dlazy.com`\n供模型读取；产出 URL 同样托管在 `files.dlazy.com`。这是云端生成 API 的通用形态。\n换成其他后端时，数据流向对应厂商，不经过 dLazy。\n\n---\n\n## 四、输出结构\n\n`gen.mjs`（加 `--json`）：\n\n```json\n{\n  \"ok\": true,\n  \"task\": \"flat-lay\",\n  \"provider\": \"dlazy\",\n  \"model\": \"gpt-image-2\",\n  \"files\": [\"docs/flat-lay/output-sku001.jpg\"],\n  \"texts\": [],\n  \"estimatedCredits\": 60,\n  \"elapsedMs\": 58213\n}\n```\n\ndLazy CLI 原生：\n\n```json\n{\n  \"ok\": true,\n  \"result\": {\n    \"tool\": \"gpt-image-2\",\n    \"data\": { \"urls\": [\"https://files.dlazy.com/data/ai/....jpg\"] },\n    \"savedPath\": \"docs/flat-lay/example-output.jpg\"\n  }\n}\n```\n\n加 `--no-wait` 的异步任务不返回 `data`，返回 `task: { generateId, status }`，\n用 `dlazy status <generateId> --wait` 轮询。\n\n文本类模型（如质检）产出在 `result.data.texts[0]`：\n\n```bash\ndlazy claude-sonnet-5 --prompt '...' --images x.jpg \\\n  | python3 -c 'import sys,json;print(json.load(sys.stdin)[\"result\"][\"data\"][\"texts\"][0])'\n```\n\n---\n\n## 五、错误处理\n\n| Code | 类型 | 示例 |\n| --- | --- | --- |\n| 401 | 未授权 / 无 key | `ok: false, code: \"unauthorized\"` |\n| 501 | 缺必填参数 | `error: required option '--prompt <prompt>' not specified` |\n| 502 | 本地文件读不到 | `Error: Image file not found: ...` |\n| 503 | 余额不足 | `ok: false, code: \"insufficient_balance\"` |\n| 503 | 服务端错误 | `HTT"},{"path":"scripts/lib/tasks.json","content":"{\r\n  \"_note\": \"技能 → 默认模型与参数。dlazy 列为默认后端的模型名；其他后端走 providers.mjs 的通用映射，可用 GEN_MODEL_<PROVIDER> 覆盖。\",\r\n  \"_credits\": { \"gpt-image-2\": 60, \"seedream-5.0\": 30, \"seedream-5.0-pro\": 45, \"banana-pro\": 25, \"claude-sonnet-5\": 3 },\r\n  \"tasks\": {\r\n    \"flat-lay\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"wear-everything\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"image-fusion\":            { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"one-shot\":                { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"fission-pattern\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-detail\":             { \"model\": \"seedream-5.0-pro\", \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"creative-scene\":          { \"model\": \"banana-pro\",       \"size\": \"1024x1536\", \"format\": \"jpeg\" },\r\n    \"batch-image\":             { \"model\": \"seedream-5.0\",     \"size\": \"3:4\",       \"resolution\": \"2k\" },\r\n    \"to-3d\":                   { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-extraction\":     { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"fabric-on-body\":          { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-detail\":         { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"clothing-grass-planting\": { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"medium\", \"format\": \"jpeg\" },\r\n    \"item-selling-point\":      { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"item-change-background\":  { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"remove-watermark\":        { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"material-enhancement\":    { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"item-repair\":             { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"detect-task\":             { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"listing-optimizer\":       { \"model\": \"gpt-image-2\",      \"size\": \"1024x1024\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"cross-border-localize\":   { \"model\": \"seedream-5.0-pro\", \"size\": \"1:1\",       \"resolution\": \"2k\" },\r\n    \"brand-kit\":               { \"model\": \"gpt-image-2\",      \"size\": \"1024x1536\", \"quality\": \"high\",   \"format\": \"jpeg\" },\r\n    \"platform-compliance\":     { \"model\": \"claude-sonnet-5\",  \"text\": true },\r\n    \"main-image-video\":        { \"model\": \"$DLAZY_VIDEO_MODEL\", \"video\": true },\r\n    \"product-"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。 Skill: 一键替换服装面料 Fabric on Body Owner: dlazyai Summary: 一键替换服装面料。版式图 + 面料图 → 换上新面料的样衣图，垂坠与光泽随材质变。当用户说「换面料」「换材质」「试布料」「面料上身」「同款不同料」时使用。 Tags: latest:1.0.19 Version history: v1.0.19 | 2026-10-10T01:49:39.917Z | user 例行版本更新 2026-10-10 v1.0.18 | 2026-10-08T01:42:20.407Z | user 例行版本更新 2026-10-08 v1.0.17 | 2026-10-04T01:42:31.563Z | user 例行版本更新 2026-10-04 v1.0.16 | 2026-10-02T05:15:32.141Z | user 例行版本更新 2026-10-02 v1.0.15 |","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1025,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T20:33:10.360Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T20:33:10.360Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T22:49:15.525Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}