name: image-portrait-generate
description: "从参考图(人像/宠物)生成高精度写真,覆盖证件照/形象照/艺术照/宠物写真/多人写真/发型调整以及双人合影合成。仅在用户明确要求写真生成、人像风格化或双人合照合成时触发。"
version: "1.0.0"
metadata: {"openclaw":{"requires":{"bins":["meitu"],"env":["MEITU_OPENAPI_ACCESS_KEY","MEITU_OPENAPI_SECRET_KEY","MEITU_OPENAPI_TOOL_TASK_MODE"],"paths":{"read":["/.meitu/credentials.json","/.meitu/tool-registry.json","/.openclaw/workspace/visual/","./openclaw.yaml"],"write":["/.openclaw/workspace/visual/","./output/"]}},"primaryEnv":"MEITU_OPENAPI_ACCESS_KEY"}}
requirements:
credentials:
- name: MEITU_OPENAPI_ACCESS_KEY
source: env | ~/.meitu/credentials.json
- name: MEITU_OPENAPI_SECRET_KEY
source: env | ~/.meitu/credentials.json
env:
MEITU_OPENAPI_TOOL_TASK_MODE: command
permissions:
- type: file_read
paths:
- ~/.meitu/credentials.json
- ~/.meitu/tool-registry.json
- ~/.openclaw/workspace/visual/
- ./openclaw.yaml
- type: file_write
paths:
- ~/.openclaw/workspace/visual/
- ./output/
- type: exec
commands:
- meitu
Image Portrait Generate
Overview
从参考图(人像/宠物)生成高精度写真,覆盖单人/宠物/多人写真(证件照/形象照/艺术照/发型调整/场景变换)和双人合影合成。支持 2K/4K 分辨率。仅在用户明确要求写真生成或双人合照合成时触发,不用于泛化的“合影”“团体照”闲聊场景。
API Mapping
- 单人/宠物/多人写真(主):
image_gummy_edit_v45 - 单人/宠物写真降级(兜底):
image_mint_portrait_edit_2k - 双人合影合成:
image_groupphoto2_edit - model 映射:
auto(默认)/gummy_pro→v45 /mint_portrait→mint_2k
Dependencies
- meitu-cli:
>=2.0.6 - 凭证:CONFIG AKSK →
meitu tools update;EXEC AKSK → 实际执行(见根CONFIG.md) - 环境变量:
MEITU_OPENAPI_TOOL_TASK_MODE=command
路径别名:
$VISUAL={OPENCLAW_HOME}/workspace/visual/
Core Workflow
Preflight → Execute → Deliver
Preflight
meitu --version≥ 2.0.6- 已用 CONFIG AKSK 跑过
meitu tools update - 当前 AKSK = EXEC,
MEITU_OPENAPI_TOOL_TASK_MODE=command - output_dir:openclaw.yaml →
./output/|else →$VISUAL/output/image-portrait-generate/;mkdir -p
Execute
触发信号 / 路由规则
核心维度:输入图片数 + 合影信号。
| 场景 | 判定关键词 | 图片数 | 路由 |
|---|---|---|---|
| 双人合影 | 合影、合照、两个人合成 | 恰好 2 | image_groupphoto2_edit |
| 双人合影但不足 2 张 | 合影 | 1 | 提示"请提供两张人像照片" |
| 双人合影但超过 2 张 | 合影 | >2 | 取前 2 张 + 告知 |
| 单人 / 宠物写真 | 写真、证件照、形象照、发型、宠物写真 | 1 或 >1 | image_gummy_edit_v45 → image_mint_portrait_edit_2k |
| 多人写真(3 人+) | 团体照、3 人写真 | 1(多人图) | image_gummy_edit_v45(不降级) |
| 意图不明 + 2 张图 | -- | 2 | 默认走单人写真 |
参数定义
| 参数 | 类型 | 必填 | 范围 | 默认 | 说明 |
|---|---|---|---|---|---|
image_list |
ARRAY[STRING] | 是 | 1–N 张 | -- | 人像/宠物图片 URL 数组 |
prompt |
STRING | 是 | -- | -- | 写真描述;缺失时根据上下文自动生成 |
size |
STRING | 否 | 2K / 4K | 2K | 输出分辨率(仅 image_gummy_edit_v45 支持) |
API 映射说明:
image_gummy_edit_v45(主):image_list[0]→image_url(API 本身支持多人),prompt/size直传image_mint_portrait_edit_2k(降级):image_list[0]→image_url,prompt直传image_groupphoto2_edit(双人合影):image_list数组(必须恰好 2 张),prompt→instruction(非中英文自动翻译为中文);固定参数lora_key=multi_duorenhezhao_2k、rsp_media_type=url
证件照 + 指定底色(蓝/白/红):在 prompt 中写入底色要求(如"蓝色纯色背景证件照")。
工具调用
meitu image-portrait-generate --image_list <img1>[,<img2>,...] --prompt "<desc>" [--size 2K|4K] --json --download-dir {output_dir} --skill_name skill_image-portrait-generate
错误降级
| 场景 | 处理方式 |
|---|---|
image_list 缺失 |
提示"请提供参考图片",不调用 API |
image_list 中任一图片不可访问 |
返回图片链接无效错误,不重试 |
prompt 缺失 |
根据上下文自动生成 |
| 合影但仅 1 张 | 提示"请提供两张人像照片" |
| 合影且 >2 张 | 取前 2 张并告知 |
| 写真但给 2 张 | 默认走单人写真 |
image_gummy_edit_v45 失败(单人/宠物) |
自动降级至 image_mint_portrait_edit_2k |
image_mint_portrait_edit_2k 失败 |
返回错误 |
image_gummy_edit_v45 失败(多人/3 人+) |
不降级,直接返回错误 |
image_groupphoto2_edit 失败 |
返回错误 |
| 未检测到人脸/宠物 | 返回错误:参考图需包含清晰人像或宠物 |
| 内容合规拦截 | 直接返回合规提示,不重试、不降级 |
Deliver
- 使用 Preflight 解析的 output_dir
- 从
downloaded_files[0].saved_path读取已下载文件路径 mv {downloaded_files[0].saved_path} {output_dir}/{YYYY-MM-DD}_{descriptive}_image-portrait-generate.{ext}
Output
- 格式:image
- 位置:项目 →
./output/,一次性 →$VISUAL/output/image-portrait-generate/
基线 Task ID
见 references/task-id-baseline.md 中对应行。