Files
mcn-short-video/project/短视频提示词生成/V1.0/参考skills/seedance2.0-prompt-skill/references/cli-integration.md
T

298 lines
11 KiB
Markdown
Raw Normal View History

# Dreamina CLI 集成指南(可选增值)
> 即梦官方命令行工具 `dreamina` 的集成规范。Skill 的主输出仍是"可复制的中文提示词",CLI 执行是**可选增值步骤**,用户明确说"跑"才执行。
---
## 0. 设计原则(写在最前,不能违反)
1. **提示词输出是主线,CLI 执行是支线。** 任何情况下都要先给出可复制的提示词文本;CLI 跑不通不影响 Skill 可用性。
2. **消耗积分的命令执行前必须警告。** 跑之前明确告知模型、分辨率、时长、预估消耗;余额不足(<100)拒跑。
3. **默认保守(模式 A)**:生成完提示词后**询问**用户是否执行,绝不默认跑。
4. **不硬编码模型参数。** 以官方 `dreamina <cmd> -h` 的实时输出为准;本文档只描述当前约定的默认值。
5. **以 `submit_id` 和 `gen_status` 判断成败**,不看 exit code。
6. **遇到 `AigcComplianceConfirmationRequired`**:引导用户先去 Web 端完成授权,再 retry。
7. **单次对话内连续失败 3 次后必须停下**,问用户"问题是提示词还是模型,是否换策略",避免无脑烧积分。
---
## 1. 前置检查
调用 CLI 前按顺序验证:
```bash
# 1. 命令存在
command -v dreamina || echo "CLI 未安装,访问 jimeng.jianying.com/cli 安装"
# 2. 已登录 + 看余额
dreamina user_credit
```
`user_credit` 返回示例:
```json
{
"total_credit": 5077,
"user_id": 2107134092516990,
"user_name": "",
"vip_level": "maestro"
}
```
**判断规则**:
| 场景 | 动作 |
|--|--|
| 无返回 / 报未登录 | 提示用户 `dreamina login` 后再试,暂停执行 |
| `total_credit < 100` | 拒跑,提示充值 |
| `total_credit < 500` | 警告余额偏低,让用户确认是否继续 |
| `vip_level` 为 `maestro` / `pro` / `vip` | 可以用 `seedance2.0_vip`(1080p 支持) |
| `vip_level` 为空 / 普通 | 降级到 `seedance2.0` 或 `seedance2.0fast`,720p |
---
## 2. 命令选型决策树(路径 C)
```
用户素材只有 1 张图 + 提示词?
├─ 是 → image2video(最轻量,比例自动从图推断)
└─ 否(多图 / 参考视频 / 音频 / @图片1@图片2 多素材 @引用)
→ multimodal2video(全能参考,需手动指定 --ratio)
```
### 2.1 `image2video`(单图场景,路径 C 默认)
**典型调用**:
```bash
dreamina image2video \
--image='/path/to/scene.jpg' \
--prompt="$(cat /tmp/dreamina_prompt.txt)" \
--duration=15 \
--model_version=seedance2.0_vip \
--video_resolution=720p \
--poll=120
```
**关键点**:
- **比例自动从输入图推断**,不要传 `--ratio`(传了会报错)
- `--prompt` 用 `$(cat file)` 读文件的方式传,彻底避开 shell 转义问题(见第 5 节)
- `--duration` 支持 `4-15`,**路径 C v2 默认值由 image-to-prompt.md 的"建议时长"推算决定,不再硬编码 15**(v2 升级)
- `--poll=120` 提交后最多前台等 120 秒,超时自动 fallback 到 `query_result`
### 2.2 `multimodal2video`(全能参考场景)
**典型调用**:
```bash
dreamina multimodal2video \
--image='/path/to/img1.jpg' \
--image='/path/to/img2.jpg' \
--prompt="$(cat /tmp/dreamina_prompt.txt)" \
--ratio=9:16 \
--duration=15 \
--model_version=seedance2.0_vip \
--video_resolution=720p \
--poll=120
```
**关键点**:
- 必须指定 `--ratio`,可选 `1:1, 3:4, 16:9, 4:3, 9:16, 21:9`
- `--image` 可重复多次传多张图(上限 9 张)
- 可选 `--video`(上限 3)`--audio`(上限 3,时长 2-15s)
- 至少需要一张 `--image` 或 `--video`
---
## 3. 默认参数约定(Skill 路径 C 用)
| 参数 | 默认值 | 何时改 |
|--|--|--|
| `--model_version` | `seedance2.0_vip` | 想快速试片/降本 → `seedance2.0fast_vip`;无 VIP → `seedance2.0` |
| `--video_resolution` | `720p` | 成品满意后用户要 1080p → 改 `1080p`(仅 `seedance2.0_vip` 支持) |
| `--duration` | `15` | 用户要更短就按用户的 |
| `--poll` | `120` | 网络差可调到 `180`;不想等就设 `0` |
| `--ratio`(仅 multimodal) | 跟随路径 C 的比例诊断结果 | - |
**质量 / 速度 / 成本光谱**(从高到低):
```
seedance2.0_vip (1080p) ← 最终成片
seedance2.0_vip (720p) ← 默认
seedance2.0 ← 标准
seedance2.0fast_vip ← VIP 快速试片
seedance2.0fast ← 最便宜的试片
```
---
## 4. 交互模板(Skill 路径 C Step 4)
**生成提示词后,Skill 默认输出这段询问**:
```
---
## 是否直接调用 dreamina CLI 生成?
- **图片**:./scene.jpg
- **模型**:seedance2.0_vip
- **分辨率**:720p(效果满意后可升级 1080p)
- **时长**:15s
- **比例**:自动从图推断(image2video)
- **预计前台等待**:最多 120s,超时转后台轮询
**当前余额**:[运行 user_credit 查到的值] 积分
回复:
- `跑` / `yes` → 直接执行 image2video(默认配置)
- `fast` → 换 seedance2.0fast_vip 试片(更便宜更快)
- `1080p` → 升到 1080p 高质量(仅 seedance2.0_vip)
- `no` / 不回 → 只保留提示词,不执行
```
**用户回复后的处理**:
| 回复 | 动作 |
|--|--|
| `跑` / `yes` / `执行` / `go` | 按默认配置调用 image2video |
| `fast` / `试片` | 切换 `--model_version=seedance2.0fast_vip`,其他不变 |
| `1080p` / `高清` | 切换 `--video_resolution=1080p`,警告消耗翻倍 |
| `no` / 不回 / 其他话题 | 不执行,保留提示词 |
| 提出调整提示词 | 回到提示词迭代,调整完再次询问 |
---
## 5. Shell 转义与提示词传递
**问题**:Seedance 提示词经常包含中文引号、英文引号、冒号、逗号、换行,直接塞 `--prompt="..."` 容易翻车。
**稳妥方案:写入临时文件 + `$(cat ...)`**
```bash
# 1. 把提示词写入临时文件(cat heredoc 避开所有转义)
cat > /tmp/dreamina_prompt.txt <<'PROMPT_EOF'
15秒赛博朋克暴雨追逐,8K超高清...(完整提示词多行都可以)
PROMPT_EOF
# 2. 调用时用 $(cat file) 读入
dreamina image2video \
--image='/path/to/scene.jpg' \
--prompt="$(cat /tmp/dreamina_prompt.txt)" \
--duration=15 \
--model_version=seedance2.0_vip \
--video_resolution=720p \
--poll=120
```
**heredoc 用 `<<'PROMPT_EOF'`(带单引号)很关键**,这样里面的 `$` `` ` `` `\` 全部按字面量处理,不会被 shell 二次解释。
**图片路径用单引号包裹**(`'/path/with spaces/img.jpg'`),防空格和特殊字符。
**执行完清理临时文件**:
```bash
rm -f /tmp/dreamina_prompt.txt
```
---
## 6. 异步任务处理
### 6.1 提交成功的识别
提交后 CLI 会返回 JSON(或结构化输出),**关键字段**:
- `submit_id`:任务 ID,必须记下来
- `gen_status`:任务状态(`pending` / `running` / `success` / `fail`)
- `result`:成功时包含视频 URL 或本地保存路径
**判断**:看 `submit_id` 有没有拿到。**不看 exit code**。
### 6.2 Poll 超时的处理
如果 `--poll=120` 到点还没完成,CLI 会返回当前状态(通常是 `running`),此时要告诉用户:
```
任务已提交,submit_id=xxxx
目前仍在生成中,前台等待已超时。可以稍后手动查:
dreamina query_result --submit_id=xxxx
或者让我稍等 30-60 秒再帮你查一次。
```
**我可以在对话里主动再跑一次 query_result**,但不要无脑轮询烧 token。
### 6.3 失败处理
`gen_status=fail` 时,读 `fail_reason` 字段,常见:
| fail_reason | 含义 | 处理 |
|--|--|--|
| `AigcComplianceConfirmationRequired` | 模型需要先在 Web 端完成授权 | 引导用户去 https://jimeng.jianying.com 对应模型首次使用授权后重试 |
| 内容安全 / 合规相关 | 提示词或图片触发了内容安全 | 分析提示词,去掉敏感元素重写 |
| 配额 / 限流 | 模型当前 capacity 紧张 | 建议换 `seedance2.0fast_vip` 或稍后重试 |
| 超时 / 网络 | 服务端出错 | 直接重试 |
---
## 7. 审计日志建议
每次执行后在对话里简要回显一次执行记录,方便用户回溯:
```
### 执行记录
- 命令:dreamina image2video
- 图片:./scene.jpg
- 模型:seedance2.0_vip / 720p / 15s
- submit_id:xxxxxxxx
- 状态:success
- 结果:[视频路径或 URL]
- 消耗:[如 CLI 返回了扣分数就写]
```
---
## 8. 硬约束(Skill 级 guardrail)
1. **跑之前必须先 `user_credit`**,余额 < 100 拒跑。
2. **prompt 中含品牌名 / 真人名 / 政治人物**时,即使模型没拦也要先警告。
3. **连续失败 3 次强制停下问用户**:"问题是提示词还是模型,是否换策略?"
4. **用户没说"跑"就不要跑。** 哪怕提示词改了 N 版,也只输出文本。
5. **不要跑 image2video 时传 `--ratio`**(不支持,会报错)。
6. **不要把 `--prompt` 的内容直接写进命令行字符串**,始终走临时文件方案(第 5 节)。
---
## 9. 常见错误速查
| 现象 | 原因 | 解决 |
|--|--|--|
| `command not found: dreamina` | CLI 没装 / PATH 没刷新 | 重开终端,或 `export PATH="$HOME/.local/bin:$PATH"` |
| 登录状态丢失 | token 过期 | `dreamina relogin` |
| `unsupported ratio` | image2video 传了 `--ratio` | 去掉 `--ratio`,image2video 从图自动推断 |
| `1080p not supported` | 非 `seedance2.0_vip` 模型用了 1080p | 要么换模型,要么改 720p |
| `AigcComplianceConfirmationRequired` | 模型首次使用未授权 | 去 Web 端该模型下走一次生成流程授权,再 retry |
| `duration out of range` | 超出模型支持范围 | seedance2.0 家族支持 4-15s |
| prompt 里的中文冒号变乱码 | shell 转义出错 | 用临时文件方案(第 5 节) |
| 余额充足但秒挂 | 可能是图片格式 / 大小问题 | 换 jpg/png,尺寸控制在 2K 以内 |
---
## 10. 与其他文档的关系
- 路径 C 提示词生成方法论 → [image-to-prompt.md](image-to-prompt.md)
- 平台基础参数(画幅/时长等限制)→ [platform-specs.md](platform-specs.md)
- 实时命令参数以 `dreamina <subcommand> -h` 为准,本文档仅描述 Skill 约定的默认配置
---
## 11. 非路径 C 场景的兼容
虽然默认只在路径 C Step 4 激活 CLI 询问,但如果用户在路径 A / B 中明确说"帮我直接跑",也可以按同样的决策树调用:
- 路径 A(纯文本)→ `dreamina text2video`(参数类似,`-h` 现查)
- 路径 B 的逐镜头 → 每个镜头单独调 `image2video` 或 `multimodal2video`
- 角色图/首帧图生成 → `dreamina text2image` / `image2image`
这些不是当前集成的主线,用户明确要求时现场查 `-h` 组命令即可。