name: meitu-video-dance
description: "将参考视频中的动作(舞蹈、手势、运动)迁移到目标人物或角色图片上,生成动作视频。仅在用户明确提供目标人物图片和参考动作视频,并表达动作迁移、舞蹈复刻、让照片跳舞、让人物动起来等意图时触发。"
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: "Target images, reference videos, project context, 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."
biometric_notice: "Target portrait images and reference motion videos may contain sensitive biometric-like personal data. Confirm the depicted person has agreed to this processing before running the 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/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: file_write
paths:
- ~/.openclaw/workspace/visual/
- ./DESIGN.md
- ./output/
- $VISUAL/output/meitu-video-dance/
- ~/.openclaw/workspace/visual/output/meitu-video-dance/
- ~/.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
从一段参考视频中提取动作轨迹,迁移到用户提供的目标人物/角色图片上,生成该角色执行相同动作的视频。核心工具为 meitu video-motion-transfer(异步任务)。
执行前应让用户清楚知道:本 Skill 会读取 Meitu 凭证、调用本地 meitu CLI、将用户提供的人物图片、参考动作视频及相关提示发送到 Meitu OpenAPI 处理,并把结果写入 ./output/ 或 $VISUAL/output/meitu-video-dance/。涉及人像与动作素材时,应确认对素材中人物具备处理授权。
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
- 首选环境变量:
路径别名: 下文中
$VISUAL={OPENCLAW_HOME}/workspace/visual/
Core Workflow
Preflight → [Context] → Execute → Refine → Deliver → [Record]
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-video-dance/mkdir -p {output_dir}
Context(项目模式时执行,一次性模式跳过)
mode = one-off → 跳过此步,直接到 Execute。
逐步读取:
- 读 DESIGN.md → 提取 Context References(quality, preferences, brand_refs)
- 尝试读全局资产:quality.yaml → global.md → scenes/{type}.md(scene 文件来源:从 openclaw.yaml 的
project.types(数组优先)或project.type读取类型) - 读不到用内联兜底值(均 skip if missing) → quality forbidden list 过滤 prompt 元素,preferences 增强创意方向
Execute
这是 skill 的核心。 动作迁移的质量 80% 取决于输入素材,15% 取决于 prompt,5% 取决于参数。
1. 收集与验证输入
用户必须提供两项输入:
| 输入 | 说明 | 接受格式 |
|---|---|---|
| 目标人物图片 (image_url) | 要"动起来"的角色 | URL 或本地路径 (.jpg/.jpeg/.png) |
| 参考动作视频 (video_url) | 动作来源 | URL 或本地路径 (.mp4/.mov) |
输入质量预检 — 在调用 API 前主动评估,避免浪费额度:
对目标图片检查:
- 全身可见(至少到膝盖,舞蹈类必须含脚部)→ 不满足则提醒用户换图
- 人物轮廓清晰,不与背景融合 → 背景杂乱建议先用
meitu image-cutout抠图换干净背景 - 手部可见且未遮挡面部 → 手遮脸会导致严重伪影
- 正面或微侧角度(非纯侧面/背面)→ 极端角度生成质量差
- 分辨率短边 ≥ 300px → 太小则建议先用
meitu image-superres-enhance提升清晰度 - 紧身衣物优于宽松衣物 → 宽松衣物(长裙、大衣)模糊关节导致畸变
对参考视频检查:
- 时长 3-10 秒为最佳 → 过长则建议截取核心片段
- 单人画面 → 多人画面会导致动作混淆
- 镜头稳定(固定机位)→ 手持晃动/快速变焦会引入噪声
- 全身在画面内 → 人物出画会导致动作丢失
- 动作速度适中 → 极快动作(如breaking)容易产生肢体重影
- 背景简洁 → 复杂背景干扰姿态估计
详细评估标准: 当需要更细致的输入评估时,读取 references/input-quality-guide.md
如果输入质量问题严重(如半身图 + 全身舞蹈视频),直接告知用户问题并建议更换素材,不要勉强调用 API。
2. 构建 Prompt
关键原则:prompt 描述角色外观和场景,不描述动作。 动作来自参考视频,prompt 中写动作描述会与视频信号冲突。
Prompt 构建策略:
{角色外观描述}, {场景/背景描述}, {画面质量修饰}
角色外观 — 从目标图片中提取或由用户补充:
- 性别、年龄范围、体型
- 服装描述(颜色、款式、材质)
- 发型、发色
- 显著特征(饰品、纹身等)
场景/背景 — 默认与目标图片一致,用户可指定:
- "white studio background"(干净万能背景)
- "city street at sunset"(场景化)
- 保持简洁,不超过一句
画面质量 — 固定后缀:
high quality, detailed, natural proportions, realistic hands
Prompt 示例:
| 场景 | Prompt |
|---|---|
| 女生跳舞 | a young woman in a white crop top and jeans, long black hair, white studio background, high quality, detailed, natural proportions |
| 动漫角色 | anime character with blue hair and school uniform, rooftop scene, vibrant colors, high quality, consistent style |
| 商务人物 | a man in a dark blue suit, short hair, modern office background, high quality, professional lighting |
禁忌:
- 不描述具体动作("hip-hop dance"、"waving hands")→ 动作由视频决定
- 不用平台特定语法(
--no、(keyword:1.5)、<lora:xxx>) - 不用否定描述 → 正面表达("clean background" 而非 "no clutter")
3. 调用 meitu-cli
meitu video-motion-transfer \
--skill_name skill_meitu-video-dance \
--image_list "{image_url}" \
--reference_video_list "{video_url}" \
--prompt "{composed_prompt}" \
--download-dir "{output_dir}"
异步任务说明:
- 该命令为异步任务,CLI 会自动轮询直到完成(内部调用
meitu task wait) - 生成时间通常 30s-120s,取决于视频时长和服务器负载
- 返回 JSON:
ok: true→ 结果在downloaded_files[0].saved_path(因使用了--download-dir);ok: false→ 先检查 CLI 原始字段code、hint、error_name、action_url,再按meitu-tools归类为error_type
4. 质量判断与错误降级
成功时检查生成质量:
- 角色身份一致性 — 面部、服装、发型是否与原图匹配
- 动作完整性 — 是否完整复现了参考视频的动作
- 肢体自然度 — 有无多余肢体、关节扭曲、手指异常
- 时间连贯性 — 帧间是否流畅,有无闪烁/跳变
失败时错误降级策略:
| 级别 | 操作 | 说明 |
|---|---|---|
| L1 | 精简 prompt | 移除装饰性修饰词,保留核心外观 + quality 后缀 |
| L2 | 检查输入匹配度 | 确认图片体型与视频人物体型是否匹配,不匹配则建议换图 |
| L3 | 缩短参考视频 | 截取动作最清晰的 3-5 秒片段重试 |
| L4 | 简化目标图片 | 用 meitu image-cutout 去除复杂背景后重试 |
| L5 | 停止并报错 | 连续 2 次失败 → 报告 code 和 hint,不再重试 |
常见错误码处理:
- 原始错误经
meitu-tools归类为ORDER_REQUIRED→ 余额不足,告知用户充值,提供 action_url - 原始错误经
meitu-tools归类为CREDENTIALS_MISSING→ AK/SK 未配置,优先提示使用环境变量或预置~/.meitu/credentials.json;仅在用户明确要求写入本地凭证时,再提示meitu config set-ak/set-sk - 超时 → 视频过长或服务器繁忙,建议缩短视频或稍后重试
Refine
呈现结果: 向用户展示生成的视频,说明:
- "动作来源于您提供的参考视频"
- 指出可能的质量问题(如手部细节、面部一致性)
- 如有明显瑕疵,主动提出修复建议
反馈分类与对应调整:
| 反馈类型 | 调整方式 |
|---|---|
| "动作不对/不像" | 检查参考视频质量,建议换更清晰的视频片段 |
| "人物不像原图" | 增强 prompt 中的外观描述,添加更多细节 |
| "背景不对" | 调整 prompt 中的场景描述 |
| "画面质量差" | 检查输入图片分辨率,必要时先 upscale |
| "手/脸有问题" | 这是当前技术的常见局限,建议用后期工具修复;或尝试不同角度的参考图 |
| "想换个动作" | 需要用户提供新的参考视频 |
迭代节奏: 建议最多 3 轮。超过后主动建议:
- 更换输入素材(换图或换视频)
- 将需求拆分(如先生成满意的角色图,再做动作迁移)
- 降低期望并说明当前技术局限
Deliver
直接使用 Preflight 解析的 output_dir。
mv {file} {output_dir}/{date}_{name}.mp4
命名规范: {date}_{描述性名称}.mp4,如 2026-03-23_girl-hip-hop-dance.mp4
Record(项目模式 MUST / 一次性模式跳过)
can_record = false → 跳过。一次性模式下反馈仅当前对话有效。
can_record 定义:
can_record = cwd 有 openclaw.yaml AND $VISUAL 存在(两者缺一即 false)
User approved style →
read $VISUAL/memory/observations/observations.yaml → scan similar key → merge or append → write back.
len(projects) >= 2 → propose promotion (non-blocking).
提议晋升(非阻塞:在回复末尾提及,不打断主流程) → confirmed → write target + delete observation entry
User rejected ("不要 XX") → has openclaw.yaml → ask scope → project: DESIGN.md Constraints / universal: quality.yaml no openclaw.yaml → current task only
No feedback → skip entirely.
Output
| 属性 | 值 |
|---|---|
| 格式 | MP4 视频 |
| 命名 | {date}_{effect-name}.mp4 |
| 时长 | 与参考视频一致(通常 3-10 秒) |
| 路径 | 由 Deliver 步骤确定 |