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@latest
meitu 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 步骤确定 |
1---
2name: meitu-video-dance
3description: "将参考视频中的动作(舞蹈、手势、运动)迁移到目标人物或角色图片上,生成动作视频。仅在用户明确提供目标人物图片和参考动作视频,并表达动作迁移、舞蹈复刻、让照片跳舞、让人物动起来等意图时触发。"
4version: "1.1.0"
5metadata: {"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."}}}
6security:
7 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."
8 remote_processing: "Target images, reference videos, project context, and generated prompts may be sent to Meitu OpenAPI."
9 persistence: "Project mode may write output files and may update project or visual-memory files according to the Record workflow."
10 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."
11requirements:
12 credentials:
13 - name: MEITU_OPENAPI_ACCESS_KEY
14 source: env | ~/.meitu/credentials.json
15 - name: MEITU_OPENAPI_SECRET_KEY
16 source: env | ~/.meitu/credentials.json
17 permissions:
18 - type: file_read
19 paths:
20 - ~/.meitu/credentials.json
21 - ./
22 - ~/.openclaw/workspace/visual/
23 - ./openclaw.yaml
24 - ./DESIGN.md
25 - ~/.openclaw/workspace/visual/rules/quality.yaml
26 - ~/.openclaw/workspace/visual/memory/global.md
27 - ~/.openclaw/workspace/visual/memory/scenes/
28 - ~/.openclaw/workspace/visual/memory/observations/observations.yaml
29 - $VISUAL/rules/quality.yaml
30 - $VISUAL/memory/global.md
31 - $VISUAL/memory/scenes/
32 - $VISUAL/memory/observations/observations.yaml
33 - type: file_write
34 paths:
35 - ~/.openclaw/workspace/visual/
36 - ./DESIGN.md
37 - ./output/
38 - $VISUAL/output/meitu-video-dance/
39 - ~/.openclaw/workspace/visual/output/meitu-video-dance/
40 - ~/.openclaw/workspace/visual/rules/quality.yaml
41 - ~/.openclaw/workspace/visual/memory/global.md
42 - ~/.openclaw/workspace/visual/memory/scenes/
43 - ~/.openclaw/workspace/visual/memory/observations/observations.yaml
44 - $VISUAL/rules/quality.yaml
45 - $VISUAL/memory/global.md
46 - $VISUAL/memory/scenes/
47 - $VISUAL/memory/observations/observations.yaml
48 - type: exec
49 commands:
50 - meitu
51---
52
53## Overview
54
55从一段参考视频中提取动作轨迹,迁移到用户提供的目标人物/角色图片上,生成该角色执行相同动作的视频。核心工具为 `meitu video-motion-transfer`(异步任务)。
56
57执行前应让用户清楚知道:本 Skill 会读取 Meitu 凭证、调用本地 `meitu` CLI、将用户提供的人物图片、参考动作视频及相关提示发送到 Meitu OpenAPI 处理,并把结果写入 `./output/` 或 `$VISUAL/output/meitu-video-dance/`。涉及人像与动作素材时,应确认对素材中人物具备处理授权。
58
59## Dependencies
60
61- **meitu-cli** (>=2.0.6): `npm install -g meitu-cli@latest`
62 - 首选环境变量:`MEITU_OPENAPI_ACCESS_KEY` / `MEITU_OPENAPI_SECRET_KEY`
63 - 或预置凭证文件:`~/.meitu/credentials.json`
64 - 如需人工初始化本地凭证,可显式执行 `meitu config set-ak --value "..."` + `meitu config set-sk --value "..."`(会写入本地文件)
65 - 验证: `meitu auth verify --json`
66
67> **路径别名:** 下文中 `$VISUAL` = `{OPENCLAW_HOME}/workspace/visual/`
68
69---
70
71## Core Workflow
72
73```
74Preflight → [Context] → Execute → Refine → Deliver → [Record]
75```
76
77### Preflight
78
791. `meitu --version` → 未安装则提示 `npm install -g meitu-cli@latest`
802. `meitu auth verify --json` → 凭证无效则引导配置
813. Detect mode: cwd has `openclaw.yaml` → project mode; else → one-off
82 检查 `$VISUAL` 目录 → 确定 capabilities
83 can_record = cwd 有 openclaw.yaml AND `$VISUAL` 存在(两者缺一即 false)
844. output_dir 解析(Preflight 内 MUST 完成):
85 Resolve output_dir: openclaw.yaml → `./output/` | else → `$VISUAL/output/meitu-video-dance/`
86 `mkdir -p {output_dir}`
87
88### Context(项目模式时执行,一次性模式跳过)
89
90mode = one-off → 跳过此步,直接到 Execute。
91
92逐步读取:
93 1. 读 DESIGN.md → 提取 Context References(quality, preferences, brand_refs)
94 2. 尝试读全局资产:quality.yaml → global.md → scenes/{type}.md(scene 文件来源:从 openclaw.yaml 的 `project.types`(数组优先)或 `project.type` 读取类型)
95 3. 读不到用内联兜底值(均 skip if missing)
96→ quality forbidden list 过滤 prompt 元素,preferences 增强创意方向
97
98### Execute
99
100**这是 skill 的核心。** 动作迁移的质量 80% 取决于输入素材,15% 取决于 prompt,5% 取决于参数。
101
102**1. 收集与验证输入**
103
104用户必须提供两项输入:
105
106| 输入 | 说明 | 接受格式 |
107|------|------|----------|
108| **目标人物图片** (image_url) | 要"动起来"的角色 | URL 或本地路径 (.jpg/.jpeg/.png) |
109| **参考动作视频** (video_url) | 动作来源 | URL 或本地路径 (.mp4/.mov) |
110
111**输入质量预检** — 在调用 API 前主动评估,避免浪费额度:
112
113对目标图片检查:
114- 全身可见(至少到膝盖,舞蹈类必须含脚部)→ 不满足则提醒用户换图
115- 人物轮廓清晰,不与背景融合 → 背景杂乱建议先用 `meitu image-cutout` 抠图换干净背景
116- 手部可见且未遮挡面部 → 手遮脸会导致严重伪影
117- 正面或微侧角度(非纯侧面/背面)→ 极端角度生成质量差
118- 分辨率短边 ≥ 300px → 太小则建议先用 `meitu image-superres-enhance` 提升清晰度
119- 紧身衣物优于宽松衣物 → 宽松衣物(长裙、大衣)模糊关节导致畸变
120
121对参考视频检查:
122- 时长 3-10 秒为最佳 → 过长则建议截取核心片段
123- 单人画面 → 多人画面会导致动作混淆
124- 镜头稳定(固定机位)→ 手持晃动/快速变焦会引入噪声
125- 全身在画面内 → 人物出画会导致动作丢失
126- 动作速度适中 → 极快动作(如breaking)容易产生肢体重影
127- 背景简洁 → 复杂背景干扰姿态估计
128
129> **详细评估标准:** 当需要更细致的输入评估时,读取 [references/input-quality-guide.md](references/input-quality-guide.md)
130
131如果输入质量问题严重(如半身图 + 全身舞蹈视频),**直接告知用户问题并建议更换素材**,不要勉强调用 API。
132
133**2. 构建 Prompt**
134
135**关键原则:prompt 描述角色外观和场景,不描述动作。** 动作来自参考视频,prompt 中写动作描述会与视频信号冲突。
136
137**Prompt 构建策略:**
138
139```
140{角色外观描述}, {场景/背景描述}, {画面质量修饰}
141```
142
143**角色外观** — 从目标图片中提取或由用户补充:
144- 性别、年龄范围、体型
145- 服装描述(颜色、款式、材质)
146- 发型、发色
147- 显著特征(饰品、纹身等)
148
149**场景/背景** — 默认与目标图片一致,用户可指定:
150- "white studio background"(干净万能背景)
151- "city street at sunset"(场景化)
152- 保持简洁,不超过一句
153
154**画面质量** — 固定后缀:
155- `high quality, detailed, natural proportions, realistic hands`
156
157**Prompt 示例:**
158
159| 场景 | Prompt |
160|------|--------|
161| 女生跳舞 | `a young woman in a white crop top and jeans, long black hair, white studio background, high quality, detailed, natural proportions` |
162| 动漫角色 | `anime character with blue hair and school uniform, rooftop scene, vibrant colors, high quality, consistent style` |
163| 商务人物 | `a man in a dark blue suit, short hair, modern office background, high quality, professional lighting` |
164
165**禁忌:**
166- 不描述具体动作("hip-hop dance"、"waving hands")→ 动作由视频决定
167- 不用平台特定语法(`--no`、`(keyword:1.5)`、`<lora:xxx>`)
168- 不用否定描述 → 正面表达("clean background" 而非 "no clutter")
169
170**3. 调用 meitu-cli**
171
172```bash
173meitu video-motion-transfer \
174 --skill_name skill_meitu-video-dance \
175 --image_list "{image_url}" \
176 --reference_video_list "{video_url}" \
177 --prompt "{composed_prompt}" \
178 --download-dir "{output_dir}"
179```
180
181**异步任务说明:**
182- 该命令为异步任务,CLI 会自动轮询直到完成(内部调用 `meitu task wait`)
183- 生成时间通常 30s-120s,取决于视频时长和服务器负载
184- 返回 JSON:`ok: true` → 结果在 `downloaded_files[0].saved_path`(因使用了 `--download-dir`);`ok: false` → 先检查 CLI 原始字段 `code`、`hint`、`error_name`、`action_url`,再按 `meitu-tools` 归类为 `error_type`
185
186**4. 质量判断与错误降级**
187
188**成功时检查生成质量:**
189- 角色身份一致性 — 面部、服装、发型是否与原图匹配
190- 动作完整性 — 是否完整复现了参考视频的动作
191- 肢体自然度 — 有无多余肢体、关节扭曲、手指异常
192- 时间连贯性 — 帧间是否流畅,有无闪烁/跳变
193
194**失败时错误降级策略:**
195
196| 级别 | 操作 | 说明 |
197|------|------|------|
198| L1 | 精简 prompt | 移除装饰性修饰词,保留核心外观 + quality 后缀 |
199| L2 | 检查输入匹配度 | 确认图片体型与视频人物体型是否匹配,不匹配则建议换图 |
200| L3 | 缩短参考视频 | 截取动作最清晰的 3-5 秒片段重试 |
201| L4 | 简化目标图片 | 用 `meitu image-cutout` 去除复杂背景后重试 |
202| L5 | 停止并报错 | 连续 2 次失败 → 报告 code 和 hint,不再重试 |
203
204**常见错误码处理:**
205- 原始错误经 `meitu-tools` 归类为 `ORDER_REQUIRED` → 余额不足,告知用户充值,提供 action_url
206- 原始错误经 `meitu-tools` 归类为 `CREDENTIALS_MISSING` → AK/SK 未配置,优先提示使用环境变量或预置 `~/.meitu/credentials.json`;仅在用户明确要求写入本地凭证时,再提示 `meitu config set-ak/set-sk`
207- 超时 → 视频过长或服务器繁忙,建议缩短视频或稍后重试
208
209### Refine
210
211**呈现结果:** 向用户展示生成的视频,说明:
212- "动作来源于您提供的参考视频"
213- 指出可能的质量问题(如手部细节、面部一致性)
214- 如有明显瑕疵,主动提出修复建议
215
216**反馈分类与对应调整:**
217
218| 反馈类型 | 调整方式 |
219|----------|----------|
220| "动作不对/不像" | 检查参考视频质量,建议换更清晰的视频片段 |
221| "人物不像原图" | 增强 prompt 中的外观描述,添加更多细节 |
222| "背景不对" | 调整 prompt 中的场景描述 |
223| "画面质量差" | 检查输入图片分辨率,必要时先 upscale |
224| "手/脸有问题" | 这是当前技术的常见局限,建议用后期工具修复;或尝试不同角度的参考图 |
225| "想换个动作" | 需要用户提供新的参考视频 |
226
227**迭代节奏:** 建议最多 3 轮。超过后主动建议:
228- 更换输入素材(换图或换视频)
229- 将需求拆分(如先生成满意的角色图,再做动作迁移)
230- 降低期望并说明当前技术局限
231
232### Deliver
233
234直接使用 Preflight 解析的 output_dir。
235
236`mv {file} {output_dir}/{date}_{name}.mp4`
237
238**命名规范:** `{date}_{描述性名称}.mp4`,如 `2026-03-23_girl-hip-hop-dance.mp4`
239
240### Record(项目模式 MUST / 一次性模式跳过)
241
242can_record = false → 跳过。一次性模式下反馈仅当前对话有效。
243> can_record 定义:`can_record = cwd 有 openclaw.yaml AND $VISUAL 存在`(两者缺一即 false)
244
245User approved style →
246 read `$VISUAL/memory/observations/observations.yaml` → scan similar key → merge or append → write back.
247 `len(projects) >= 2` → propose promotion (non-blocking).
248 提议晋升(非阻塞:在回复末尾提及,不打断主流程) → confirmed → write target + delete observation entry
249
250User rejected ("不要 XX") →
251 has openclaw.yaml → ask scope → project: DESIGN.md Constraints / universal: quality.yaml
252 no openclaw.yaml → current task only
253
254No feedback → skip entirely.
255
256---
257
258## Output
259
260| 属性 | 值 |
261|------|-----|
262| 格式 | MP4 视频 |
263| 命名 | `{date}_{effect-name}.mp4` |
264| 时长 | 与参考视频一致(通常 3-10 秒) |
265| 路径 | 由 Deliver 步骤确定 |
266