# Meitu Video Dance

> 将参考视频中的动作（舞蹈、手势、运动）迁移到目标人物或角色图片上，生成动作视频。仅在用户明确提供目标人物图片和参考动作视频，并表达动作迁移、舞蹈复刻、让照片跳舞、让人物动起来等意图时触发。

- **Type:** Skill
- **Install:** `agentstack add skill-meitu-meitu-skills-meitu-video-dance`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [meitu](https://agentstack.voostack.com/s/meitu)
- **Installs:** 0
- **Category:** [Content & Media](https://agentstack.voostack.com/c/content-and-media)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [meitu](https://github.com/meitu)
- **Source:** https://github.com/meitu/meitu-skills/tree/main/skills/meitu-video-dance

## Install

```sh
agentstack add skill-meitu-meitu-skills-meitu-video-dance
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

## 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

1. `meitu --version` → 未安装则提示 `npm install -g meitu-cli@latest`
2. `meitu auth verify --json` → 凭证无效则引导配置
3. Detect mode: cwd has `openclaw.yaml` → project mode; else → one-off
   检查 `$VISUAL` 目录 → 确定 capabilities
   can_record = cwd 有 openclaw.yaml AND `$VISUAL` 存在（两者缺一即 false）
4. 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。

逐步读取：
  1. 读 DESIGN.md → 提取 Context References（quality, preferences, brand_refs）
  2. 尝试读全局资产：quality.yaml → global.md → scenes/{type}.md（scene 文件来源：从 openclaw.yaml 的 `project.types`（数组优先）或 `project.type` 读取类型）
  3. 读不到用内联兜底值（均 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](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)`、``）
- 不用否定描述 → 正面表达（"clean background" 而非 "no clutter"）

**3. 调用 meitu-cli**

```bash
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 步骤确定 |

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [meitu](https://github.com/meitu)
- **Source:** [meitu/meitu-skills](https://github.com/meitu/meitu-skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-meitu-meitu-skills-meitu-video-dance
- Seller: https://agentstack.voostack.com/s/meitu
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
