DramaMint Video Provider for OpenClaw / OneClaw
DramaMint AI 视频生成 provider,支持四种生成方式:文生视频、首帧图生视频、首尾帧图生视频、参考生。
特点:
- 模型清单实时拉后端 —
/mobile/ai/video-scenario/config,后端新增模型自动可用,无需改插件 - scenario 自动切换 — 根据输入自动选对应 scenario,flag 0/1/2/3 各有独立模型清单
- 参数本地校验 — 发请求前校验
(aspect_ratio, resolution, duration)是否被所选模型支持,不浪费积分 - vendor 自动反推 — 只需传
model_id,插件自动定位 vendor - 素材自动上传 — Buffer 走
/mobile/upload转 URL;已是 http(s) URL 则直接使用 - 统一 User-Agent — 所有出站请求都带
dramamint;2.3.2;iOS;18.4.1;iPhone13,1;Apple Store;480;zh
---
1. 最小化配置
只配 apiKey 即可,其他全走默认:
{
"plugins": {
"entries": {
"dramamint-video": {
"enabled": true,
"config": {
"apiKey": "<JWT>",
"defaultModel": "ep-20260422152223-c8b2j"
}
}
}
},
"agents": {
"defaults": {
"videoGenerationModel": {
"primary": "dramamint-video/auto",
"timeoutMs": 1800000
}
}
}
}
> 推荐把 defaultModel 配成 Seedance 系列(ep-*)—— 它在所有 scenario 都可用,跨文生/图生/参考生通吃。
或用环境变量:
export DRAMAMINT_JWT="<your-jwt-token>"
| 字段 | 默认值 | |---|---| | scenario | 由 flag 自动决定 | | model | defaultModel 配置 > scenario 第一个 | | aspect_ratio | 9:16 | | resolution | 720p | | duration | 5 秒 |
---
2. 四种生成方式(flag)
flag 自动推导规则
| 输入 | 自动 flag | scenario | |---|---|---| | 无任何输入 | 0 文生 | text-to-video | | 1 张图(inputImages) | 1 首帧图生 | first-frame-to-video | | 2 张图(inputImages) | 2 首尾帧图生 | first-last-frame-to-video | | 有参考视频或参考音频 | 3 参考生 | reference-to-video | | providerOptions.flag=3 或 scenario="reference-to-video" | 3 参考生 | reference-to-video |
> 1 张图默认推 flag=1(首帧)。若要用 1 张图做风格参考(不是首帧),需显式指定 providerOptions.flag=3 或 providerOptions.scenario="reference-to-video"。
---
flag=0 文生视频
纯文字描述生成视频。
帮我生成一个视频:一只猫在月亮上跳舞
---
flag=1 首帧图生视频
以图片作为视频第一帧,让画面动起来。
基于这张图生成 8 秒动态视频 [附 1 张图]
插件流程:上传图片 → images[0] → flag=1 → 创建任务
---
flag=2 首尾帧图生视频
提供开头帧和结尾帧,生成两图之间的过渡动画。
基于这两张图生成 6 秒过渡视频(第一张是开头,第二张是结尾) [附 2 张图]
插件流程:上传两张图 → images[0] 首帧、images[1] 尾帧 → flag=2
---
flag=3 参考生
参考生与图生视频有本质区别:
| | 图生 flag=1/2 | 参考生 flag=3 | |---|---|---| | 图片作用 | 内容起点 — 让图里的画面动起来 | 风格/角色参考 — 生成有相似外貌的新内容 | | 视频作用 | ✗ | 动作/运镜参考 — 生成动作风格相似的新视频 | | 音频作用 | ✗ | 配乐参考 — 生成与音乐节奏匹配的视频 | | 素材是 | 视频内容的起点 | 生成的参考依据,不直接出现在结果里 |
参考生可接收的输入(inputImages、referenceVideo、referenceAudio 可任意组合,至少一种):
只传参考图(人物/风格参考)
参考这张图片里的人物外貌,生成一段 5 秒的街道行走视频 [附参考图]
providerOptions: { flag: 3 }
只传参考音频(配乐驱动)
根据这段音频的节奏生成一段海浪视频 [providerOptions.referenceAudio = <音频>]
→ 自动推 flag=3
只传参考视频(运镜/动作参考)
模仿这段视频的运镜风格生成城市夜景视频 [inputVideos = [<视频>]]
→ 自动推 flag=3
混合传(图 + 音频)
参考这张图里的人物,配上这段背景音乐,生成宣传视频
inputImages=[参考图] + providerOptions.referenceAudio=<音频> → flag=3
参考素材会分别上传到后端对应字段:
inputImages→images[](参考图)providerOptions.referenceVideo或req.inputVideos→video[]providerOptions.referenceAudio或req.inputAudios→reference_audio[]
各模型参考生能力:
| model | 参考图 | 参考视频 | 参考音频 | |---|---|---|---| | wan2.7-r2v | ✓ | ✓ | ✓ | | ep-* Seedance | ✓ | ✓ | ✓ | | happyhorse-1.0-r2v | ✓ | ✗ | ✗ |
---
3. 后端 scenario × 模型矩阵
后端按 scenario 隔离模型清单,Wan/HappyHorse 用不同后缀的 model_id 区分能力,Seedance(ep-*)一个 id 跨所有 scenario。
| scenario | Wan | HappyHorse | Seedance | |---|---|---|---| | text-to-video | wan2.7-t2v | happyhorse-1.0-t2v | ep-20260422151344-2r2x9 | | first-frame-to-video | wan2.7-i2v | happyhorse-1.0-i2v | ep-20260422152223-c8b2j | | first-last-frame-to-video | wan2.7-i2v | — | ep- | | reference-to-video | wan2.7-r2v | happyhorse-1.0-r2v | ep- | | video-edit | wan2.7-videoedit | happyhorse-1.0-video-edit | — |
各模型参数范围
| model_id | 比例 | 分辨率 | 时长 | 积分/秒 | 真人 | |---|---|---|---|---|---| | Wan 系列(t2v/i2v/r2v) | 16:9 / 9:16 / 1:1 / 4:3 / 3:4 | 720p / 1080p | 2-10 | 17 / 34 | 允许 | | HappyHorse 系列 | 同上 | 720p / 1080p | 2-10 | 17 / 34 | 允许 | | Seedance 2.0 ep-20260422151344-2r2x9 | + 21:9 | 480p / 720p | 4-15 | 14 / 17 | 禁 | | Seedance 2.0 Fast ep-20260422152223-c8b2j | + 21:9 | 480p / 720p | 4-15 | 10 / 14 | 禁 |
> 精确组合以 /mobile/ai/video-scenario/config 返回的 allowed_combos 为准,插件自动校验,非法组合在发请求前抛错。
选型建议:
- 跨场景万能(推荐默认) →
ep-20260422152223-c8b2jSeedance Fast — 一个 id 通吃,480p 最便宜 - 高质量 1080p → Wan / HappyHorse,可用于真人题材(34/秒)
- 21:9 宽屏 → 只能 Seedance
- 真人题材 → Wan / HappyHorse(Seedance 禁真人)
---
4. 完整 config schema
{
"apiKey": "必填,JWT token(或 DRAMAMINT_JWT 环境变量)",
"baseUrl": "可选,默认 https://dramamint-backend-v2-751695506196.us-central1.run.app",
"providerConfigId": "可选,引用 models.providers 中其他条目复用 baseUrl/apiKey",
"defaultModel": "可选,推荐 ep-20260422152223-c8b2j;在目标 scenario 找不到时 fallback 到第一个",
"defaultScenario": "可选,覆盖 flag 自动映射的 scenario",
"defaultAspectRatio":"可选,默认 9:16",
"defaultResolution": "可选,默认 720p",
"defaultDuration": "可选,默认 5",
"timeoutMs": "可选,默认 1800000 (30 分钟)",
"pollIntervalMs": "可选,默认 2500",
"maxPollAttempts": "可选,默认 1200",
"configCacheTtlMs": "可选,scenario 配置缓存 TTL,默认 300000 (5 分钟),0 关闭"
}
---
5. providerOptions 透传
| 字段 | 类型 | 说明 | |---|---|---| | flag | 0\|1\|2\|3 | 显式覆盖 flag 自动推导 | | scenario | string | 显式指定 scenario(同时覆盖 flag 映射) | | referenceVideo | Buffer-like / URL / 数组 | 参考生视频,自动上传 | | referenceAudio | 同上 | 参考生音频,自动上传 | | shot_type | boolean | Wan 镜头模式(true=多镜头/false=单镜头) | | 其他字段 | — | 直接透传后端 |
Buffer-like 对象格式:{ buffer: Buffer, mimeType: string, fileName?: string }
URL 字符串:"https://..." — 跳过上传,直接传后端
以下字段被插件接管,不可通过 providerOptions 覆盖:
prompt / vendor / model_id / aspect_ratio / resolution / duration / audio / negative_prompt / images / video / reference_audio / referenceVideo / referenceAudio / scenario / flag
---
6. 错误处理
后端用 status:"error" 表示业务失败(HTTP 仍是 200),插件统一识别并抛出 description 字段内容。
常见错误码:
| 错误 | 含义 | |---|---| | data.code === 10001 | 积分不足 | | status:"error", description:"..." | 业务失败,参数不合法等 | | 插件抛 does not support aspect_ratio=... | 参数组合违反 allowed_combos | | 插件抛 flag=1 requires exactly 1 input image | 输入数量不对 | | 插件抛 flag=3 requires at least one of: inputImages... | 参考生无任何输入 |
---
7. 任务状态机
| data.status | 含义 | 行为 | |---|---|---| | 1 | 生成中 | 继续轮询 /mobile/ai/video-direct/status?task_id=... | | 3 | 完成 | 下载 data.video_url | | 4 | 失败 | 抛 data.failed_reason |
---
8. 上传接口
/mobile/upload(multipart, 字段名 file),返回:
{ "code": 0, "data": { "URL": "https://cdn.dramamint.io/...", "MimeType": "image/png" } }
注意 URL 字段名大写(Go struct 导出字段)。图片/视频/音频均走此接口上传。
---
9. 验证
video_generate action=list # 应显示 dramamint-video configured: yes
修改插件代码后,重启 OneClaw 桌面端使源码热加载生效(plugins.load.paths 指向本地仓库)。





