这个 skill 提供豆包(火山引擎 Ark)的图片生成和视频生成能力,结果保存到本地。
适用场景:
脚本位于 skill 目录内的 scripts/,运行时始终使用绝对路径。
设 DOUBAO_SKILL_DIR 为 .claude/skills/doubao-all-in-one 的绝对路径:
uv run python $DOUBAO_SKILL_DIR/scripts/text_to_image.pyuv run python $DOUBAO_SKILL_DIR/scripts/image_to_image.pyuv run python $DOUBAO_SKILL_DIR/scripts/create_video_task.pyuv run python $DOUBAO_SKILL_DIR/scripts/query_video_task.pyuv run python $DOUBAO_SKILL_DIR/scripts/list_video_tasks.pyuv run python $DOUBAO_SKILL_DIR/scripts/delete_video_task.pyuv run python $DOUBAO_SKILL_DIR/scripts/download_video.pyuv run python $DOUBAO_SKILL_DIR/scripts/webhook_server.pyshell
uv run python $DOUBAO_SKILL_DIR/scripts/text_to_image.py \
--prompt "一张电影感写实人像海报,光影强烈,构图干净" \
--name "写实人像海报"
shell
uv run python $DOUBAO_SKILL_DIR/scripts/image_to_image.py \
--image resources/images/climb1.jpeg \
--prompt "保留主体动作,改为日落暖光的写实摄影风格" \
--name "日落暖光人像"
shell
uv run python $DOUBAO_SKILL_DIR/scripts/create_video_task.py \
--prompt "写实风格,晴朗的蓝天之下,一大片白色的雏菊花田,镜头逐渐拉近,最终定格在一朵雏菊花的特写上,花瓣上有几颗晶莹的露珠" \
--name "雏菊花田特写" \
--ratio 16:9 --duration 5 --poll
shell
uv run python $DOUBAO_SKILL_DIR/scripts/create_video_task.py \
--prompt "女孩抱着狐狸,女孩睁开眼,温柔地看向镜头" \
--name "女孩抱狐狸" \
--image-url "https://example.com/first_frame.png" \
--role first_frame --ratio adaptive --duration 5 --poll
shell
uv run python $DOUBAO_SKILL_DIR/scripts/create_video_task.py \
--prompt "小猫对着镜头打哈欠" --name "猫咪打哈欠" --ratio 16:9 --duration 5
shell
# 先启动 Webhook 服务器
uv run python $DOUBAO_SKILL_DIR/scripts/webhook_server.py
# 再创建任务,传入回调地址(不传则自动检测本机 8888 端口)
uv run python $DOUBAO_SKILL_DIR/scripts/create_video_task.py \
--prompt "小猫对着镜头打哈欠" --name "猫咪打哈欠" --ratio 16:9 --duration 5
参数说明文生图图生图--prompt提示词是是--name文件名描述(不超过 10 个中文字)否否--model模型 ID,默认 doubao-seedream-5-0-260128否否--image输入图片路径或 URL,可多次传-是--size输出尺寸:2K / 3K / 4K / 2048x2048,默认 2K否否--response-format返回格式:b64_json / url,默认 b64_json否否--output-format输出文件格式:png / jpeg(仅 5.0 lite)否否--guidance-scale文本权重,范围 [1, 10](仅 3.0 系列)否否--watermark添加水印否否--sequential-image-generation组图模式:auto / disabled,默认 disabled否否--max-images组图最大数量,范围 [1, 15],默认 15否否--optimize-prompt提示词优化:standard / fast(仅 5.0 lite/4.5/4.0)否否--web-search启用联网搜索(仅 5.0 lite)否否--output输出文件路径否否
所有路径相对于 OUTPUT_ROOT(由环境变量注入,兜底为用户主目录):
outputs/doubao/images/text_to_image/outputs/doubao/images/image_to_image/json
{
"type": "image",
"scene": "text_to_image",
"provider": "doubao",
"used_model": "doubao-seedream-5-0-260128",
"local_path": "outputs/doubao/images/text_to_image/20260330_120000.png",
"image_count": 1,
"generated_images": 1,
"usage": {"generated_images": 1, "output_tokens": 0, "total_tokens": 0}
}
参数说明必需--prompt提示词是--name文件名描述(不超过 10 个中文字)否--model模型 ID,默认 doubao-seedance-1-5-pro-251215否--image-url图片 URL(可多次传),配合 --role 使用否--role图片角色: first_frame / last_frame否--ratio宽高比:16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive否,默认 16:9--duration视频时长(秒):2~12(1.5 pro 支持 -1 由模型自选)否,默认 5--resolution分辨率:480p, 720p, 1080p(1.0 lite 参考图不支持 1080p)否,默认 480p--seed随机种子,范围 [-1, 2^32-1]否--frames视频帧数,格式 25+4n,范围 [29, 289](1.5 pro 暂不支持)否--generate-audio生成有声视频(仅 1.5 pro,API 默认 true)否--watermark添加水印否--camera-fixed固定摄像头(参考图场景不支持)否--return-last-frame返回视频尾帧图像(可用于连续视频拼接)否--draft生成样片(仅 1.5 pro,固定 480p,不支持离线)否--execution-expires-after任务超时秒数,范围 [3600, 259200],默认 172800(48h)否--service-tier推理模式:default(在线)/ flex(离线,50% 价格)否--poll创建后自动轮询直到完成并下载否--poll-interval轮询间隔秒数,默认 10否--timeout轮询超时秒数,默认 900否--callback-urlWebhook 回调地址;不传时自动检测否
所有路径相对于 OUTPUT_ROOT(由环境变量注入,兜底为用户主目录):
outputs/doubao/videos/text_to_video/outputs/doubao/videos/first_frame_to_video/outputs/doubao/videos/first_last_frame_to_video/创建任务返回:
json
{
"type": "video",
"scene": "text_to_video",
"provider": "doubao",
"task_id": "cgt-2025xxxx",
"status": "queued"
}
轮询完成并下载后返回:
json
{
"type": "video",
"scene": "text_to_video",
"provider": "doubao",
"task_id": "cgt-2025xxxx",
"used_model": "doubao-seedance-1-5-pro-251215",
"local_path": "outputs/doubao/videos/text_to_video/20260330_120000_cgt-xxx.mp4",
"source_url": "https://...",
"resolution": "480p",
"ratio": "16:9",
"duration": 5
}
查询任务返回:
json
{
"task_id": "cgt-2025xxxx",
"model": "doubao-seedance-1-5-pro-251215",
"status": "succeeded",
"created_at": 1743300000,
"updated_at": 1743300120,
"video_url": "https://...",
"last_frame_url": "https://...",
"resolution": "480p",
"ratio": "16:9",
"duration": 5,
"seed": 12345,
"generate_audio": true,
"draft": false,
"service_tier": "default",
"execution_expires_after": 172800,
"usage": {"completion_tokens": 100, "total_tokens": 100}
}
模型Model ID特点Seedream 5.0doubao-seedream-5-0-260128默认首选Seedream 4.5doubao-seedream-4-5-251128额度不足时自动 fallback
模型Model ID特点Seedance 1.5 Prodoubao-seedance-1-5-pro-251215最高质量,支持有声视频、样片模式、返回尾帧、4~12秒
调用图片生成脚本前, 必须 先读取 references/seedream_prompt_guide.md,并对照以下检查清单审核用户的提示词。
必须读取参考文档:每次生成图片前,先读取 references/seedream_prompt_guide.md
提示词公式:主体 + 行为(非必须)+ 环境(非必须)+ 风格/色彩/光影/构图(非必须)
使用自然语言:用简洁连贯的自然语言描述,不要用逗号分隔的关键词堆叠
质量检查与处理策略:对照检查清单逐项审核
自动优化格式: text
优化说明:
文件名标题:[不超过 10 个中文字的内容简述,如"雪中小猫玩耍"]
优化后提示词: [完整提示词]
- **文件名标题**:在优化提示词时同时生成一个简短标题,不超过 10 个中文字, **调用脚本时必须通过 `--name` 参数传入**。标题应概括画面核心内容,如"雪中小猫玩耍""金色麦田奔跑""日落海边漫步"
### 提示词质量检查清单
- **使用自然语言**:是否用简洁连贯的句子描述画面,而非逗号分隔的关键词堆叠?
- **主体明确**:是否清楚描述了画面中的主体是谁/什么?特征是否具体?
- **编辑目标明确**(图生图):是否准确指示了需要编辑的对象和变化要求?是否避免使用模糊代词?
- **保持不变的部分**(图生图):是否明确说明了希望保持不变的内容?
- **文字内容加引号**:如需生成文字,文字内容是否放在双引号中?
- **简洁精确**(5.0 lite/4.5/4.0):是否避免了不必要的华丽词汇堆叠?简洁精确优于重复冗余
- **风格词精准**:如有风格需求,是否使用了精准的风格词而非模糊描述?
- **多图关系清晰**(多图输入):是否清楚指明了不同图像间的编辑/参考关系?
### 必须拒绝的情况
- 主体完全缺失(如"一张好看的图""生成一张图")
### 应自动补充的情况
- 关键词堆砌 → 改写为自然语言
- 缺少风格/美学描述 → 根据画面内容补充合适的风格
- 图生图中使用模糊代词 → 替换为具体对象描述
- 需要渲染文字但未加双引号 → 补充双引号
- 多图输入但未指明图间关系 → 根据意图补充关系描述
### 图生图额外规则
- **图像编辑**(增加/删除/替换/修改):用简洁明确的指令,准确指示编辑对象
- **参考图生图**:提示词必须包含两部分—— **指明参考对象** \+ **描述生成画面**
- **多图输入**:清楚指明不同图像需要编辑/参考的对象及操作(如"用图一的人物替换图二的人物")
- **设计草图转高保真**:注明"遵循图中文字内容进行生成",明确需与参考图保持一致的关键要求
* * *
## 提示词最佳实践(视频,强制)
调用视频生成脚本前, **必须** 先读取 `references/seedance_1_5_pro_prompt_guide.md`,并对照其中的 **提示词质量检查清单** 审核用户的提示词。
### 参数约束
- **分辨率默认 480p**:除非用户明确要求更高分辨率(如"720p""1080p""高清"),否则 **不得** 传 `--resolution` 参数,直接使用脚本默认的 480p
- **宽高比默认 16:9**:除非用户明确要求其他比例(如"竖屏""正方形""9:16""1:1"等),否则 **不得** 传 `--ratio` 参数,直接使用脚本默认的 16:9。有首帧/尾帧参考图且用户未指定比例时也应使用 16:9,而非 adaptive
### 执行规则
1. **必须读取参考文档**:每次生成视频前,先读取 `references/seedance_1_5_pro_prompt_guide.md`
2. **提示词公式**:主体 \+ 运动 \+ 环境(非必须)\+ 运镜/切镜(非必须)\+ 美学描述(非必须)\+ 声音(非必须)
3. **质量检查与处理策略**:对照检查清单逐项审核
- **缺少主体**: **必须拒绝执行**,返回 JSON 格式的拒绝信息,自行优化后请用户确认再执行
- **其他不合规项**(缺少运动描述、缺少环境、切镜不清晰等): **直接按最佳实践指南自动补充优化**,向用户展示优化后的提示词并说明补充了哪些内容,然后直接执行
4. **自动优化格式**:
text
优化说明:
文件名标题:[不超过 10 个中文字的内容简述,如"金毛麦田奔跑"]
优化后提示词: [完整提示词]
- **文件名标题**:在优化提示词时同时生成一个简短标题,不超过 10 个中文字, **调用脚本时必须通过 `--name` 参数传入**。标题应概括画面核心内容,如"金毛麦田奔跑""猫咪打哈欠""海边日落漫步"
### 必须拒绝的情况
- 主体完全缺失(如"生成一个视频""做个动画")
- 主体不明确且无法推断(如"一个东西在动")
### 应自动补充的情况
- 缺少运动描述 → 根据主体特性补充合理的动作和运动方式
- 缺少环境描述 → 根据主体和场景补充环境信息
- 多人场景角色特征不可区分 → 为每个角色补充唯一标识特征
- 包含切镜但未区分镜头编号或景别 → 补充镜头编号和景别描述
- 包含对话但未指定语言类型或音色特征 → 补充音色和语言描述
* * *
## 配置
- 环境变量: `ARK_API_KEY`(必需,未设置时直接报错)
- 环境变量: `OUTPUT_ROOT`(可选,输出根目录,支持 `~` 展开,默认为用户主目录)
## 短剧批量视频生成
当用户请求为短剧的多个 clip(C01、C02…)批量生成视频时,遵循以下规则:
### 一 clip 一请求
- 每个 clip(CXX)是 **一个完整的视频生成请求**,不得按分镜(sub-shot)拆分为多次请求
- 分镜仅用于提示词规划(描述运镜变化、景别切换等),最终合并为一条 prompt 提交给模型
- 示例:C01 有 2 个分镜(C01-1、C01-2),仍只调用一次 `create_video_task.py --duration 8`
### 输出目录与文件名
- 视频生成完成后, **必须** 将文件从脚本默认输出目录复制到项目的视频生成目录
- 输出路径: `outputs/scripts/{项目名}/video_generation/{篇章}/CXX.MP4`
- 例如: `outputs/scripts/chong_sheng_zhui_qi_20260401/video_generation/nightmare/C01.MP4`
- 项目名和篇章名从用户提供的视频生成指令文档路径中推断
## 协作方式
- 图片生成可直接完成任务
- 视频生成使用 `--poll` 模式可直接完成任务;异步工作流可分步操作
- Webhook 模式:先启动 `webhook_server.py`(默认端口 8888),创建任务时自动检测回调地址(优先级:手动 `--callback-url` \> 环境变量 `VIDEO_CALLBACK_BASE_URL` \> 自动检测本机 IP + 8888 端口)
- 如果用户还需要公网链接或临时下载链接,应由后续的交付环节继续处理