name: meitu-product-view
description: "从单张商品图生成多角度展示图(三视图、五视图、全角度)。支持白底、场景、透明底等背景模式,适配主流电商平台规格。当用户提到商品三视图、多角度展示、产品展示图、电商多角度、product multi-angle、三视图、转成三视图、生成多角度商品图时触发。"
version: "1.1.0"
metadata: {"openclaw":{"requires":{"bins":["meitu"],"env":["MEITU_OPENAPI_ACCESS_KEY","MEITU_OPENAPI_SECRET_KEY"],"paths":{"read":["/.meitu/credentials.json","/.openclaw/workspace/visual/","./openclaw.yaml","./DESIGN.md","/.openclaw/workspace/visual/rules/quality.yaml","/.openclaw/workspace/visual/memory/global.md","/.openclaw/workspace/visual/memory/scenes/","/.openclaw/workspace/visual/memory/observations/observations.yaml","$VISUAL/rules/quality.yaml","$VISUAL/memory/global.md","$VISUAL/memory/scenes/","$VISUAL/memory/observations/observations.yaml"],"write":["/.openclaw/workspace/visual/","./DESIGN.md","./output/","/.openclaw/workspace/visual/rules/quality.yaml","/.openclaw/workspace/visual/memory/global.md","/.openclaw/workspace/visual/memory/scenes/","~/.openclaw/workspace/visual/memory/observations/observations.yaml","$VISUAL/rules/quality.yaml","$VISUAL/memory/global.md","$VISUAL/memory/scenes/","$VISUAL/memory/observations/observations.yaml"]}},"primaryEnv":"MEITU_OPENAPI_ACCESS_KEY","security":{"dataFlow":"Inputs, selected local context, and generated prompts may be sent to Meitu OpenAPI when used by the workflow.","credentials":"Credentials are used only for CLI authentication and must not be disclosed.","persistence":"Record workflows may access declared project and visual memory/rules files."}}}
security:
credential_use: "Uses Meitu OpenAPI credentials from env or ~/.meitu/credentials.json for CLI calls; credentials must not be echoed, logged, or embedded in prompts."
remote_processing: "Product images, selected project/platform context, selected visual-workspace brand or platform rules, and generated prompts may be sent to Meitu OpenAPI."
persistence: "Project mode may write output files and may update project or visual-memory files according to the Record workflow."
requirements:
credentials:
- name: MEITU_OPENAPI_ACCESS_KEY
source: env | ~/.meitu/credentials.json
- name: MEITU_OPENAPI_SECRET_KEY
source: env | ~/.meitu/credentials.json
permissions:
- type: file_read
paths:
- ~/.meitu/credentials.json
- ~/.openclaw/workspace/visual/
- ./openclaw.yaml
- ./DESIGN.md
- ~/.openclaw/workspace/visual/rules/quality.yaml
- ~/.openclaw/workspace/visual/rules/platforms/
- ~/.openclaw/workspace/visual/memory/global.md
- ~/.openclaw/workspace/visual/memory/scenes/
- ~/.openclaw/workspace/visual/memory/observations/observations.yaml
- ~/.openclaw/workspace/visual/assets/brands/
- $VISUAL/rules/quality.yaml
- $VISUAL/rules/platforms/
- $VISUAL/memory/global.md
- $VISUAL/memory/scenes/
- $VISUAL/memory/observations/observations.yaml
- $VISUAL/assets/brands/
- type: file_write
paths:
- ~/.openclaw/workspace/visual/
- ./DESIGN.md
- ./output/
- ~/.openclaw/workspace/visual/rules/quality.yaml
- ~/.openclaw/workspace/visual/memory/global.md
- ~/.openclaw/workspace/visual/memory/scenes/
- ~/.openclaw/workspace/visual/memory/observations/observations.yaml
- $VISUAL/rules/quality.yaml
- $VISUAL/memory/global.md
- $VISUAL/memory/scenes/
- $VISUAL/memory/observations/observations.yaml
- type: exec
commands:
- meitu
商品多角度展示图
从单张商品图生成多角度展示图,支持标准三视图、电商五视图、全角度展示。
Overview
用户上传一张商品图,自动生成不同角度的展示图。支持白底/场景/透明底背景,可选超分辨率增强,适配淘宝、京东、拼多多、亚马逊等电商平台规格。
Dependencies
- meitu-cli (≥2.0.6):
npm install -g meitu-cli@latest- 首选环境变量:
MEITU_OPENAPI_ACCESS_KEY/MEITU_OPENAPI_SECRET_KEY - 或预置凭证文件:
~/.meitu/credentials.json - 如需人工初始化本地凭证,可显式执行
meitu config set-ak --value "..."+meitu config set-sk --value "..."(会写入本地文件) - 验证:
meitu auth verify --json
- 首选环境变量:
- package references (bundled with this skill package):
- references/prompts.md — 固定模板与角度 section
- references/ecommerce-specs.md — 平台规格与视角建议
- 这些 reference 文件是包内静态材料;在 project 模式下,如
DESIGN.md或openclaw.yaml显式引用品牌资产或平台规则,还可能额外读取用户启用的$VISUAL/assets/brands/与$VISUAL/rules/platforms/
路径别名: 下文中
$VISUAL={OPENCLAW_HOME}/workspace/visual/
Core Workflow
Preflight → [Context] → Execute → Refine → Deliver → [Record]
可选步骤: [Context] — 一次性模式跳过;[Record] — can_record=false 时跳过。
Preflight
meitu --version→ 未安装则提示npm install -g meitu-cli@latestmeitu auth verify --json→ 凭证无效则引导配置- Detect mode: cwd has
openclaw.yaml→ project mode; else → one-off 检查$VISUAL目录 → 确定 capabilities can_record = cwd 有 openclaw.yaml AND$VISUAL存在(两者缺一即 false) - output_dir 解析(Preflight 内 MUST 完成):
Resolve output_dir: openclaw.yaml →
./output/| else →$VISUAL/output/meitu-product-view/mkdir -p {output_dir}
Execute 中所有
--download-dir {output_dir}使用此处解析的路径。
Context(项目模式执行 / 一次性模式跳过)
mode = one-off → 跳过此步,直接到 Execute。
mode = project → 按序加载(每步 skip if missing):
- 读
./DESIGN.md→ 获取项目决策和 Context References- 解析 references(如
brand: acme)→ 尝试读$VISUAL/assets/brands/acme/ - 读到 → 用最新版;读不到 → 回退到 DESIGN.md 中的内联兜底值
- 解析 references(如
- 读
$VISUAL/rules/quality.yaml→ 获取 forbidden 列表 - 读
$VISUAL/memory/global.md→ 获取跨场景偏好 - 读
openclaw.yaml的project.types(数组,优先)或project.type(单值 → 视为单元素数组) → 对每个 type:查找$VISUAL/memory/scenes/{type}.md→ 存在则读取并合并
→ quality forbidden list 过滤生成元素,preferences 增强创意方向
→ $VISUAL 不存在 → 跳过 2-4,仅读 DESIGN.md
Execute
Step 1: 接收商品图
用户上传一张商品图。若未上传,提示:
"请上传一张商品图片(正面照效果最佳,背景简洁更利于生成质量)。"
收到图片后,分析以下信息(Agent 自行判断,不调外部工具):
| 分析项 | 用途 |
|---|---|
| 商品品类 | 决定推荐角度和场景 |
| 主体形状/比例 | 填充 prompt 的 {product_description} |
| 当前拍摄角度 | 决定是否可作为某个视角直接使用 |
| 背景情况 | 决定是否需要 cutout 预处理 |
若用户同时提供了文字描述商品信息 → 优先使用用户描述。
Step 2: 选择视图方案
展示选项:
| 方案 | 包含角度 | 适用场景 |
|---|---|---|
| 标准三视图 | 正面、右侧、背面 | 基础展示、快速出图 |
| 电商五视图 | 正面、左前45°、右前45°、背面、俯视 | 电商主图套图 |
| 全角度展示 | 正面、左前45°、右前45°、左侧、右侧、背面、俯视、特写 | 高端商品详情页 |
| 拼合三视图 | 一张图内左中右排列正面+侧面+背面 | 社交媒体、快速展示 |
| 自定义 | 用户自选角度组合 | 特殊需求 |
用户选"自定义"时,展示完整角度清单:
| 角度 | 标识 | 方位 |
|---|---|---|
| 正面 | front | 0° |
| 左前45° | front-left-quarter | 315° |
| 右前45° | front-right-quarter | 45° |
| 左侧 | left-side | 270° |
| 右侧 | right-side | 90° |
| 左后45° | back-left-quarter | 225° |
| 右后45° | back-right-quarter | 135° |
| 背面 | back | 180° |
| 俯视 | overhead | 60°仰角 |
| 微俯 | elevated | 30°仰角 |
| 仰视 | low-angle | -30°仰角 |
| 特写 | close-up | 近距离细节 |
If user mentions specific e-commerce platform → read references/ecommerce-specs.md for platform-specific angle recommendations and size requirements → auto-select matching view preset + ratio + size.
Step 3: 选择背景模式
| 模式 | 说明 | CLI 处理方式 |
|---|---|---|
| 白底 | 纯白背景 | prompt 中加白底描述 |
| 场景 | AI 生成商品使用场景 | prompt 中加场景描述 |
| 保留原背景 | 保持上传图的背景 | 使用中文角度指令 prompt |
| 透明底 | 透明 PNG | 先白底生成,再 cutout |
选择"场景"时 → 根据商品品类推荐 3 个场景描述,询问用户偏好。场景推荐原则:
| 品类 | 推荐场景方向 |
|---|---|
| 电子产品 | 极简桌面、科技感空间、办公场景 |
| 服饰/箱包 | 时尚街拍场景、衣帽间、旅行场景 |
| 食品/饮品 | 餐桌场景、厨房、野餐/户外 |
| 家居/家电 | 客厅、卧室、现代家居空间 |
| 美妆/护肤 | 化妆台、浴室、花艺/自然元素 |
| 运动/户外 | 健身房、跑道、户外自然 |
Step 4: 预处理抠图(条件执行)
触发条件:原图背景杂乱 AND 用户选择了白底或场景模式。
meitu image-cutout \
--skill_name skill_meitu-product-view \
--image_url {image_url} \
--prompt "e-commerce product foreground subject" \
--json
抠图结果作为后续生成的参考输入。cutout 失败 → 跳过,直接用原图。
Step 5: 逐角度生成
这是核心生成步骤。对用户选定的每个角度,调用 meitu image-edit。
工具调用模板:
meitu image-edit \
--skill_name skill_meitu-product-view \
--image_list {source_image_url} \
--prompt "{angle_prompt}" \
--model praline_pro \
--ratio {target_ratio} \
--json \
--download-dir {output_dir}
Prompt 构建:
- 从 references/prompts.md 选取对应角度的模板(按
## {angle}-viewsection 定位) - 填入变量:
{product_description}← Step 1 分析结果{background}← Step 3 选择对应的背景后缀(见 prompts.md## Background Suffixes){scene_description}← Step 3 场景描述(仅场景模式)
- Prompt 使用英文(模型效果更好)
- 严禁使用
-ar、--no、(keyword:1.5)、<lora:xxx>等平台特定语法
各角度 → prompts.md section 映射:
| 角度标识 | Prompt 模板 section |
|---|---|
| front | ## front-view |
| right-side | ## right-side-view |
| left-side | ## left-side-view |
| back | ## back-view |
| front-right-quarter | ## front-right-quarter-view |
| front-left-quarter | ## front-left-quarter-view |
| back-right-quarter | ## back-right-quarter-view |
| back-left-quarter | ## back-left-quarter-view |
| overhead | ## overhead-view |
| elevated | ## elevated-view |
| low-angle | ## low-angle-view |
| close-up | ## close-up-view |
| 拼合三视图 | ## combo-three-view |
特殊情况——保留原背景模式:
使用中文 prompt(与英文模板不同,这是经验验证过的写法):
| 角度 | Prompt(原文应用,不修改) |
|---|---|
| 正面 | 将图中的商品旋转到正面朝向镜头的角度。保持商品直立,不要改变商品外观,保证背景一致性。 |
| 侧面 | 将图中的商品旋转到从右侧面观看的角度,展示商品的侧面轮廓。保持商品直立,不要改变商品外观,保证背景一致性。 |
| 背面 | 将图中的商品旋转到背面朝向镜头的角度,展示商品背部细节。保持商品直立,不要改变商品外观,保证背景一致性。 |
| 45° | 将图中的商品旋转到45度斜角观看的角度。保持商品直立,不要改变商品外观,保证背景一致性。 |
| 俯视 | 从上方俯视角度拍摄图中的商品,展示商品顶部。保持商品直立,不要改变商品外观,保证背景一致性。 |
| 特写 | 将图中的商品放大展示细节部分。保持商品一致性,不要改变商品外观,保证背景一致性。 |
特殊情况——拼合三视图:
一次性生成三个视角在同一张图内。从 references/prompts.md ## combo-three-view 取模板,填入 {product_description} 和 {background}:
meitu image-edit \
--skill_name skill_meitu-product-view \
--image_list {source_image_url} \
--prompt "{combo_three_view_prompt}" \
--model praline_pro \
--ratio 4:3 \
--json \
--download-dir {output_dir}
生成顺序策略:
- 若原图是正面 → 直接用原图作为正面视图,从其余角度开始生成
- 若原图不是正面 → 先生成正面,再以正面图为锚点生成其余角度
- 换背景模式 → 先生成正面场景图,再以正面场景图为参考生成其余角度(保证场景一致性)
换背景模式下,侧面和背面的参考图使用正面场景图(不是原图):
# 先生成正面场景图
meitu image-edit \
--skill_name skill_meitu-product-view \
--image_list {original_image_url} \
--prompt "{front_view_scene_prompt}" \
--model praline_pro \
--ratio 1:1 \
--json \
--download-dir {output_dir}
# 以正面场景图为参考,生成其余角度
meitu image-edit \
--skill_name skill_meitu-product-view \
--image_list {front_scene_result_url} \
--prompt "将图中的商品旋转到从右侧面观看的角度,展示商品的侧面轮廓。保持商品直立,不要改变商品外观,保证背景一致性。" \
--model praline_pro \
--ratio 1:1 \
--json \
--download-dir {output_dir}
--ratio 选择:
| 场景 | ratio |
|---|---|
| 默认 | 1:1 |
| 指定电商平台 | 按 references/ecommerce-specs.md 要求 |
| 拼合三视图 | 4:3 |
| 用户自定义 | 按用户指定 |
Step 6: 超分辨率增强(可选)
触发条件:用户主动要求 OR 目标平台要求 ≥2000px(如 Amazon)。
meitu image-superres-enhance \
--skill_name skill_meitu-product-view \
--image_url {generated_url} \
--prompt "e-commerce product image" \
--json \
--download-dir {output_dir}
对每张角度图逐一 upscale。
Step 7: 透明底处理(条件)
触发条件:Step 3 选择了"透明底"。
对每张生成的角度图执行:
meitu image-cutout \
--skill_name skill_meitu-product-view \
--image_url {generated_url} \
--prompt "e-commerce product foreground subject" \
--json \
--download-dir {output_dir}
错误降级策略:
| Level | 操作 | 触发条件 |
|---|---|---|
| L1 | 移除 prompt 中的修饰词(lighting、material 描述),保留核心角度+商品 | 首次生成失败 |
| L2 | ratio 改为 auto | L1 后仍失败 |
| L3 | 跳过 cutout 预处理,直接用原图生成 | L2 后仍失败 |
| L4 | 简化到最核心描述:仅 "A {angle} view of the product. White background." | L3 后仍失败 |
| L5 | 停止,报错并显示 code 和 hint | 连续 2 次 L4 失败 |
Refine
展示所有生成的角度图,说明每张的视角。
反馈分类与响应:
| 用户反馈 | 调整方式 |
|---|---|
| "角度不对" / "再偏一点" | 调整 prompt 中的角度描述词 |
| "商品变形了" / "不像原图" | 在 prompt 末尾追加 "Proportions and every detail exactly matching the uploaded photo" |
| "背景不好看" | 替换场景描述或切换背景模式 |
| "颜色偏了" | 追加 "Color accuracy strictly consistent with the original photo" |
| "要更多角度" | 从角度清单中添加,增量生成(不重新生成已完成的) |
| "换一种风格/氛围" | 调整 lighting/mood 描述词 |
| "分辨率不够" | 追加 upscale 处理 |
迭代节奏:建议最多 3 轮。超过 3 轮 → 建议:
- 更换原始商品图(更好的拍摄角度/光线)
- 分拆为单角度逐个优化
- 尝试不同背景模式
Deliver
output_dir 已在 Preflight 解析完毕,Execute 的 --download-dir 已将文件下载到 {output_dir}。Deliver 只做重命名:
mv {output_dir}/{task_id_file} {output_dir}/{date}_{product}_{angle}.{ext}
{ext} 取自 downloaded_files[0].saved_path 的实际扩展名。
命名规则:{date}_{product}_{angle}.{ext}
示例:2026-03-23_sneaker_front.png、2026-03-23_sneaker_back.jpg、2026-03-23_sneaker_quarter-right.png
Record(项目模式 MUST / 一次性模式跳过)
前提: can_record = cwd 有 openclaw.yaml AND $VISUAL 存在(两者缺一即 false)。不满足 → 跳过全部记录,反馈仅当前对话有效。
No feedback → 完全跳过,不读 observations.yaml,零开销。
User approved style →
read $VISUAL/memory/observations/observations.yaml → scan similar key → merge or append → write back.
len(projects) >= 2 → propose promotion (non-blocking).
提议(在回复末尾提及,不打断主流程):
"顺便说一下,你在 N 个项目中都偏好 X。要保存吗? → 保存到 product-photography 场景 [默认] → 保存到全局偏好 → 不保存" User confirms → write to
$VISUAL/memory/scenes/{scope}.md或global.md,then delete observation entry User ignores → do nothing
User rejected ("不要 XX") →
has openclaw.yaml → ask scope: "仅这个项目不用 XX,还是以后都不要?"
→ 仅项目 → append to ./DESIGN.md Constraints
→ 以后都不要 → append to $VISUAL/rules/quality.yaml(需用户确认)
no openclaw.yaml → current task only, write nothing
Output
- 格式:PNG(白底/场景)/ PNG with alpha(透明底)
- 比例:默认 1:1,可按平台需求调整(见 references/ecommerce-specs.md)
- 分辨率:默认 2K,可选 upscale
- 命名:
{date}_{product}_{angle}.{ext}
Constraints
- 对话中不展示完整 prompt 内容(除非用户主动要求查看)
- Prompt 模板按原文应用,仅替换
{variable}部分 - 保留原背景模式的中文 prompt 不做任何修改
- 若用户语言为英文,所有交互选项翻译为英文
- 每个角度独立生成调用,保证与原始商品的一致性
--download-dir始终指向 Preflight 解析的 output_dir,不指向含源文件的目录