This is a complete pipeline for turning text descriptions into storyboarded videos using Seedance 2.0 and the Jimeng API. It walks you through three stages: first generating professional storyboard prompts with time codes and camera movements, then calling a text-to-image API to create the first frame (since Seedance requires at least one reference image), and finally generating the actual video with those images and prompts. You'll need to run the jimeng-free-api-all Docker container and grab your sessionid from the Jimeng website. It handles 4-15 second videos, supports multiple aspect ratios, and automatically downloads everything. The conversational prompt engineering for shot composition and pacing is notably thorough, breaking down narrative, visual style, camera language, and sound design before assembly.
npx -y skills add wwwzhouhui/skills_collection --skill seedance-video-creator --agent claude-codeInstalls into .claude/skills of the current project.
将创意想法转化为专业分镜提示词,通过即梦 API 先生成参考图,再基于图片+提示词生成视频、自动下载。
使用本技能前,确保以下服务可用:
jimeng-free-api-all 服务运行中(默认端口 8000)
# Docker 部署
docker run -it -d --init --name jimeng-free-api-all \
-p 8000:8000 -e TZ=Asia/Shanghai \
wwwzhouhui569/jimeng-free-api-all:latest
获取 SessionID:
sessionid 值环境变量(可选,也可在交互中指定):
JIMENG_API_URL:API 基础地址(默认 http://127.0.0.1:8000),注意只填基础地址,不要包含路径部分。如使用 duckcloud 服务则为 https://jimeng.duckcloud.funJIMENG_SESSION_ID:即梦 SessionID重要约束:Seedance 2.0 必须至少提供一张参考图片,不支持纯文本生成视频。当用户没有提供图片时,需要先通过文生图 API 生成首帧参考图。
多模态输入(最多12个文件):
视频参数:
seedance-2.0-fast(推荐,快速版)/ jimeng-video-seedance-2.0-fast(等价别名)/ jimeng-video-seedance-2.0(Pro版)/ seedance-2.0 / seedance-2.0-pro(Pro等价别名)1:1 / 4:3 / 3:4 / 16:9 / 9:16 / 3:2 / 2:3 / 21:9480p / 720p(默认)/ 1080p4 - 15 秒交互方式:使用 @1、@2(或 @图1、@image1)指定素材用途
核心流程:分镜提示词 → 文生图生成首帧 → 图片+提示词生成视频
用户输入创意 → 第一阶段:生成分镜提示词
→ 第二阶段:调用文生图 API 生成首帧参考图 → 下载图片到本地
→ 第三阶段:用参考图 + 分镜提示词调用 Seedance 2.0 → 下载视频
用友好的方式询问用户:
根据用户的初步回答,逐步引导完善以下维度:
将故事拆解为时间轴上的镜头序列。
示例结构(4秒视频):
0-1秒:开场镜头,建立场景
1-3秒:发展,核心动作/情感
3-4秒:结尾,画面定格
根据收集的信息,分别生成:
描述视频第一帧的静态画面,作为 Seedance 2.0 的首帧参考图。
首帧提示词要求:
示例:
日落时分的海边沙滩,一位穿着白色飘逸长裙的年轻女孩站在海边,面朝大海,夕阳逆光照射,金色光晕笼罩全身,长发和裙摆被海风轻轻吹动,远处海平线上的落日将天空染成橘红色,脚边浅浅的海浪泡沫
完整的分镜提示词,用 @1 引用首帧参考图。
提示词结构模板:
【整体描述】风格 + 时长 + 画面比例 + 整体氛围
@1 作为画面首帧参考
【分镜描述】
0-X秒:[镜头运动],[画面内容],[主体动作],[光影/特效]
X-Y秒:[镜头运动],[画面内容],[主体动作],[光影/特效]
...
【声音说明】配乐风格/音效/对白
提示词书写原则:
@1 引用首帧图片(首帧图片由第二阶段自动生成)@1、@2 分别引用目的:Seedance 2.0 必须有参考图片,当用户没有提供图片时,先通过文生图 API 生成首帧画面。
如果用户已提供图片:跳过此阶段,直接进入第三阶段。
curl -s --max-time 120 -X POST "${API_URL}/v1/images/generations" \
-H "Authorization: Bearer ${SESSION_ID}" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"jimeng-4.5\",
\"prompt\": \"${首帧图片提示词}\",
\"ratio\": \"${RATIO}\",
\"resolution\": \"2k\"
}"
参数说明:
| 参数 | 说明 | 推荐值 |
|---|---|---|
| model | 图像生成模型 | jimeng-4.5(稳定高质量) |
| prompt | 首帧画面描述 | 第一阶段生成的首帧提示词 |
| ratio | 画面比例 | 与视频比例一致(如 9:16) |
| resolution | 图片分辨率 | 2k |
API 返回格式:
{
"created": 1700000000,
"data": [
{ "url": "https://p6-heycan-hgt.byteimg.com/..." }
]
}
IMAGE_URL=$(echo "${RESPONSE}" | jq -r '.data[0].url')
IMAGE_FILE="/tmp/seedance_frame_$(date +%Y%m%d_%H%M%S).png"
curl -sL -o "${IMAGE_FILE}" "${IMAGE_URL}"
报告生成结果,让用户确认首帧画面满意后进入第三阶段。
| 参数 | 说明 | 默认值 |
|---|---|---|
| API 地址 | jimeng-free-api-all 服务地址 | http://127.0.0.1:8000 |
| SessionID | 即梦平台的 sessionid | 环境变量或用户提供 |
| 模型 | seedance-2.0-fast | seedance-2.0-fast |
| 比例 | 视频画面比例 | 与首帧图片一致 |
| 分辨率 | 视频分辨率 | 720p |
| 时长 | 4-15 秒 | 4 |
| 参考图片 | 首帧图片路径(第二阶段生成或用户提供) | 必需 |
使用本地图片(multipart/form-data):
curl -s --max-time 300 -X POST "${API_URL}/v1/videos/generations" \
-H "Authorization: Bearer ${SESSION_ID}" \
-F "model=seedance-2.0-fast" \
-F "prompt=${VIDEO_PROMPT}" \
-F "ratio=${RATIO}" \
-F "resolution=${RESOLUTION}" \
-F "duration=${DURATION}" \
-F "files=@${IMAGE_FILE}"
多张图片时:
curl -s --max-time 300 -X POST "${API_URL}/v1/videos/generations" \
-H "Authorization: Bearer ${SESSION_ID}" \
-F "model=seedance-2.0-fast" \
-F "prompt=${VIDEO_PROMPT}" \
-F "ratio=${RATIO}" \
-F "resolution=${RESOLUTION}" \
-F "duration=${DURATION}" \
-F "files=@/path/to/image1.jpg" \
-F "files=@/path/to/image2.jpg"
重要:
{"code":-2001,"message":"Seedance 2.0 需要至少一张图片"}--max-time 300@1、@2 对应 files 参数中图片的上传顺序Bearer 前缀,格式为 Bearer your_sessionidAPI 返回 OpenAI 兼容格式:
{
"created": 1700000000,
"data": [
{
"url": "https://v3-dreamnia.jimeng.com/...",
"revised_prompt": "原始提示词"
}
]
}
VIDEO_URL=$(echo "${RESPONSE}" | jq -r '.data[0].url')
OUTPUT_FILE="seedance_$(date +%Y%m%d_%H%M%S).mp4"
curl -L -o "${OUTPUT_FILE}" "${VIDEO_URL}"
echo "视频已下载到: $(pwd)/${OUTPUT_FILE}"
向用户报告:
| 错误 | 含义 | 处理方式 |
|---|---|---|
code: -2001 | Seedance 需要至少一张图片 | 先调文生图 API 生成首帧,再重试 |
| HTTP 200 | 成功 | 提取 data[0].url |
| HTTP 401 | SessionID 过期 | 提示用户重新获取 |
| HTTP 400 | 参数错误 | 检查 model/ratio/duration |
| HTTP 429 | 积分不足 | 提示用户等待或充值 |
| HTTP 500 | 服务器错误 | 重试或检查服务状态 |
| 问题 | 解决方案 |
|---|---|
| Seedance 报错需要图片 | 必须先通过文生图生成首帧,再用图片调 Seedance |
| 连接拒绝 | 检查 jimeng-free-api-all 容器是否运行 |
| 生成超时 | 增加 curl --max-time,或降低时长 |
| 内容被过滤 | 修改提示词,避免敏感内容 |
| 视频 URL 失效 | URL 有时效性,及时下载 |
| 积分不足 | 每日免费积分有限,次日刷新 |
用户:帮我生成一个橘猫在海边捉螃蟹的视频,9:16竖屏,4秒
第一阶段 - 生成提示词:
首帧图片提示词:
阳光明媚的海边沙滩,一只圆滚滚的橘色猫咪蹲在潮湿的沙滩上,好奇地盯着面前一只小螃蟹,金色阳光照射,海浪轻轻拍打岸边,色彩鲜明活泼,3D动画风格
视频分镜提示词:
可爱3D动画风格,4秒,9:16竖屏,阳光明媚的海边
@1 作为画面首帧参考
0-1秒:中景,画面中的橘猫好奇地盯着沙滩上的小螃蟹,海浪轻拍岸边
1-3秒:近景跟随,橘猫伸出爪子试探性地去抓螃蟹,螃蟹举起钳子反击,橘猫被吓得往后一跳,表情夸张可爱
3-4秒:中景微拉远,橘猫和螃蟹对峙,背景碧蓝大海和白色浪花
背景音效:欢快俏皮卡通配乐 + 海浪声
第二阶段 - 生成首帧参考图:
# 1. 调用文生图 API 生成首帧
curl -s --max-time 120 -X POST "${API_URL}/v1/images/generations" \
-H "Authorization: Bearer ${SESSION_ID}" \
-H "Content-Type: application/json" \
-d '{
"model": "jimeng-4.5",
"prompt": "阳光明媚的海边沙滩,一只圆滚滚的橘色猫咪蹲在潮湿的沙滩上,好奇地盯着面前一只小螃蟹,金色阳光照射,海浪轻轻拍打岸边,色彩鲜明活泼,3D动画风格",
"ratio": "9:16",
"resolution": "2k"
}'
# 2. 下载图片
IMAGE_URL=$(echo "${RESPONSE}" | jq -r '.data[0].url')
curl -sL -o /tmp/seedance_frame.png "${IMAGE_URL}"
第三阶段 - 生成视频:
curl -s --max-time 300 -X POST "${API_URL}/v1/videos/generations" \
-H "Authorization: Bearer ${SESSION_ID}" \
-F "model=seedance-2.0-fast" \
-F "prompt=可爱3D动画风格,4秒,9:16竖屏,阳光明媚的海边
@1 作为画面首帧参考
0-1秒:中景,画面中的橘猫好奇地盯着沙滩上的小螃蟹,海浪轻拍岸边
1-3秒:近景跟随,橘猫伸出爪子试探性地去抓螃蟹,螃蟹举起钳子反击,橘猫被吓得往后一跳,表情夸张可爱
3-4秒:中景微拉远,橘猫和螃蟹对峙,背景碧蓝大海和白色浪花
背景音效:欢快俏皮卡通配乐 + 海浪声" \
-F "ratio=9:16" \
-F "resolution=720p" \
-F "duration=4" \
-F "files=@/tmp/seedance_frame.png"
用户:用这两张图片生成一个两人跳舞的视频
跳过第二阶段,直接进入第三阶段:
curl -s --max-time 300 -X POST "${API_URL}/v1/videos/generations" \
-H "Authorization: Bearer ${SESSION_ID}" \
-F "model=seedance-2.0-fast" \
-F "prompt=电影级写实风格,10秒,4:3画幅,舞台灯光氛围
@1 和 @2 面对面站立,两人开始双人舞,镜头缓慢环绕,动作优雅协调,光影交错" \
-F "ratio=4:3" \
-F "resolution=720p" \
-F "duration=10" \
-F "files=@/home/user/dancer1.jpg" \
-F "files=@/home/user/dancer2.jpg"
【风格】电影级写实/动画/水墨/科幻风格
【时长】4-15秒
【画幅】16:9
@1 作为画面首帧参考
0-X秒:[镜头运动],[场景建立],[主体引入]
X-Y秒:[镜头运动],[情节发展],[动作描述]
Y-Z秒:[镜头运动],[高潮/结尾]
【声音】配乐风格 + 音效 + 对白
【风格】商业广告/极简/高端/科技感
【时长】4-15秒
@1 作为产品首帧参考
0-X秒:产品展示,运镜环绕/推拉
X-Y秒:产品细节特写,材质/工艺展示
Y-Z秒:品牌落版,slogan展示
【声音】大气恢宏/轻快时尚/科技感配乐
【风格】根据角色设定(武侠/科幻/现代/奇幻)
【时长】4-15秒
@1 作为角色参考
0-X秒:角色亮相,定格或缓慢展示造型
X-Y秒:核心动作展示(打斗/舞蹈/特技)
Y-Z秒:动作收尾,pose定格
【声音】动作音效 + 氛围配乐
【风格】电影级纪录片/治愈系/史诗感
【时长】4-15秒
@1 作为场景首帧参考
0-X秒:大景别建立镜头,展示环境全貌
X-Y秒:中景推进,引入人物或细节
Y-Z秒:回到大景别或意境落版
【声音】环境音 + 氛围配乐
| 中文 | 效果 | 适用场景 |
|---|---|---|
| 推镜头 | 强调主体,营造紧张感 | 情感爆发、细节展示 |
| 拉镜头 | 展现场景,营造疏离感 | 开场建立、结尾收束 |
| 摇镜头 | 左右/上下展示环境 | 环境介绍、角色关系 |
| 移镜头 | 平行移动,跟随主体 | 行走、追逐 |
| 跟镜头 | 跟随主体移动 | 动作跟拍 |
| 环绕镜头 | 360度展示主体 | 产品展示、角色亮相 |
| 升降镜头 | 从上往下或从下往上 | 场景全貌、气势展示 |
| 希区柯克变焦 | 背景压缩/拉伸效果 | 悬疑、心理变化 |
| 手持晃动 | 纪实感/紧张感 | 纪录片、追逐 |
| 一镜到底 | 不切镜头,连续拍摄 | 沉浸感、长叙事 |
光影:逆光、侧光、顶光、伦勃朗光、剪影、轮廓光、体积光、丁达尔效应 色调:暖色调、冷色调、高饱和、低饱和、黑白、赛博朋克、复古胶片 质感:电影级、纪录片风格、广告质感、MV风格、油画感、水墨感 情绪:温馨、紧张、悬疑、欢快、忧伤、史诗、治愈、惊悚
Bearer 前缀,格式为 Bearer your_sessionid最终输出应包含:
juliusbrussee/caveman
mattpocock/skills
shadcn/improve
obra/superpowers
forrestchang/andrej-karpathy-skills
vercel-labs/skills