整部作品提交技能 (Submit Project)
概述
本技能用于将一整部短剧项目的分镜任务(通常 50 条)批量提交到 Seedance 任务服务。
输入来源:
seedance_project_tasks.json(项目根目录下的唯一任务文件)
输出结果:
- 提交成功的
taskCodes - 失败任务清单
submission_report.json
依赖协议
遵循 seedance-video-task-submit 协议(详见 skill-task-submit.md):
- 服务地址默认:
http://localhost:3456 - 核心接口:
POST /api/tasks/push - 支持单任务或批量(
tasks数组)
任务对象关键字段:
prompt(必填,使用(@fileName)语法引用参考图)descriptionmodelConfig(model/referenceMode/aspectRatio/duration)referenceFiles(对象数组,每项包含fileName/base64/fileType)realSubmit(默认false)priority(默认1)tags(建议包含project_id,EPxx,A|B)
referenceFiles 存储与展开
存储格式(seedance_tasks.json 中):referenceFiles 为相对路径字符串数组,相对于项目根目录。包含分镜参考图、角色参考图、场景参考图和道具参考图。
json"referenceFiles": [ "episodes/EP01/DM-002-EP01-A_storyboard.png", "characters/林策_ref.png", "characters/沈璃_ref.png", "scenes/scene_01_ref.png", "props/prop_01_ref.png" ]
提交时展开:提交前将每个路径展开为对象,读取文件转 base64:
json"referenceFiles": [ { "fileName": "DM-002-EP01-A_storyboard.png", "base64": "data:image/png;base64,iVBOR...", "fileType": "image/png" } ]
展开逻辑(Python 伪代码):
pythonimport base64, os, mimetypes def expand_reference_files(ref_paths, project_dir): result = [] for rel_path in ref_paths: abs_path = os.path.join(project_dir, rel_path) file_name = os.path.basename(rel_path) mime_type = mimetypes.guess_type(abs_path)[0] or "image/png" with open(abs_path, "rb") as f: b64 = base64.b64encode(f.read()).decode() result.append({ "fileName": file_name, "base64": f"data:{mime_type};base64,{b64}", "fileType": mime_type }) return result
目录约定
目标项目目录(示例 DM-002_tjkc/)应包含:
DM-002_tjkc/ ├── seedance_project_tasks.json # 必须,唯一任务文件 ├── episodes/ │ ├── EP01/ │ │ ├── dialogue.md │ │ └── storyboard_config.json │ └── ... └── submission_report.json # 本技能生成
执行流程
第一步:定位项目
- 若用户指定项目编号(如
DM-002),定位对应目录 - 若未指定,使用
projects/index.json最新项目
第二步:加载任务
- 优先读取
seedance_project_tasks.json - 若不存在,遍历
episodes/EP01-EP25/seedance_tasks.json聚合 - 若用户指定单集(如 EP01),只读取该集的
seedance_tasks.json - 校验任务结构:
- 每个任务必须有
prompt modelConfig缺失时补默认值realSubmit缺失时默认false
- 每个任务必须有
第三步:展开 referenceFiles
对每个任务的 referenceFiles(相对路径字符串数组),执行 base64 展开:
- 拼接绝对路径:
项目根目录 + 相对路径 - 读取文件二进制内容
- 转换为
{fileName, base64: "data:mime;base64,...", fileType}对象 - 替换原
referenceFiles数组
第四步:批量提交
- 按批次提交(推荐每批 20~50 条)到
/api/tasks/push - 请求体格式:
json{ "tasks": [ { "prompt": "...", "description": "...", "modelConfig": { "model": "Seedance 2.0 Fast", "referenceMode": "全能参考", "aspectRatio": "16:9", "duration": "15s" }, "referenceFiles": [ { "fileName": "DM-002-EP01-A_storyboard.png", "base64": "data:image/png;base64,...", "fileType": "image/png" }, { "fileName": "林策_ref.png", "base64": "data:image/png;base64,...", "fileType": "image/png" }, { "fileName": "scene_01_ref.png", "base64": "data:image/png;base64,...", "fileType": "image/png" } ], "realSubmit": true, "priority": 1, "tags": ["DM-002", "EP01", "A"] } ] }
- 收集返回的
taskCodes - 记录失败批次与错误信息
第五步:生成报告
在项目根目录生成 submission_report.json,格式示例:
json{ "project_id": "DM-002", "submitted_at": "2026-02-16T12:00:00Z", "api_base": "http://localhost:3456", "total_tasks": 300, "submitted_tasks": 300, "failed_tasks": 0, "task_codes": ["SD-20260216-0001"], "failed_items": [] }
推荐默认值
当字段缺失时,按以下默认值补齐:
json{ "modelConfig": { "model": "Seedance 2.0 Fast", "referenceMode": "全能参考", "aspectRatio": "16:9", "duration": "15s" }, "referenceFiles": [], "realSubmit": false, "priority": 1, "tags": [] }
运行指令
可通过以下表达触发:
- "提交整部作品任务"
- "把 DM-002 全部分镜提交到 Seedance"
- "batch submit drama tasks"
- "提交所有 seedance_tasks"
可附带参数:
- 项目编号:如
DM-002 realSubmit:true/false- 批次大小:如
batch=30 - API 地址:如
api_base=http://localhost:3456
检查清单
- 已定位正确项目目录
- 任务来源文件存在(项目级或分集级)
- 每个任务包含
prompt - 批量提交到
/api/tasks/push成功 - 已收集全部
taskCodes - 失败项已记录并可重试
-
submission_report.json已生成
输出示例
text✅ 整部作品任务提交完成 项目:DM-002 总任务数:300 成功提交:300 失败:0 报告文件:/data/dongman/projects/DM-002_tjkc/submission_report.json


