video-batch-runner
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseVideo Batch Runner
视频批量运行器
Follow shared release-shell rules in:
- release-shell rules
postplus-shared
Use this skill after image, script, voice, or prompt-planning work already exists.
This skill is for:
- generating talking-head videos from approved image and audio inputs
- generating Seedance videos from text, images, videos, audio references, or first/last frames
- storing render jobs as local assets with normalized manifests
- preserving traceability from final video back to persona, concept, script, and voice take
- keeping render providers replaceable behind a stable adapter contract
This skill is not for unconstrained video ideation.
遵循以下共享的release-shell规则:
- release-shell规则
postplus-shared
此工具应在图像、脚本、语音或提示规划工作已完成后使用。
该工具适用于:
- 从获批的图像和音频输入生成数字人讲解视频
- 从文本、图像、视频、音频参考或首尾帧生成Seedance视频
- 将渲染任务存储为带有标准化清单的本地资产
- 保留从最终视频回溯到角色、概念、脚本和语音素材的可追溯性
- 通过稳定的适配器契约保持渲染供应商的可替换性
该工具不适用于无约束的视频创意构思。
Quality Default
质量默认规则
When the goal is believable human video, default to the highest practical render quality the provider offers.
Default quality assumption:
- lower render quality can make already-imperfect source faces look more fake
- realism-sensitive talking-head jobs should start from the best available resolution before blaming script or voice
- only step down when the user is explicitly running a cheap draft, a latency test, or a provider-limited experiment
The selected resolution should always be persisted in the request and manifest.
当目标是生成逼真的人物视频时,默认选择供应商提供的最高实用渲染质量。
默认质量假设:
- 较低的渲染质量会让原本就不够完美的源人脸看起来更虚假
- 对真实度敏感的数字人讲解任务应从可用的最佳分辨率开始,之后再考虑脚本或语音的问题
- 仅当用户明确要求生成低成本草稿、进行延迟测试或受供应商限制的实验时,才降低分辨率
所选分辨率应始终在请求和清单中持久化存储。
Core Idea
核心理念
The video layer should be organized around render objects, not around one provider endpoint.
Treat a video render as:
render job- one attempt to produce a video from approved upstream assets
render manifest- the normalized local record of that attempt
video asset- the downloaded output file(s) produced by the render
The main value is not "image plus audio becomes video". The main value is preserving the chain:
campaignconceptpersonascriptvoice takeimage assetrender jobqa report
视频层应围绕渲染对象而非单一供应商端点进行组织。
将视频渲染视为:
- (渲染任务)
render job- 从获批的上游资产生成视频的一次尝试
- (渲染清单)
render manifest- 该次尝试的标准化本地记录
- (视频资产)
video asset- 渲染生成的已下载输出文件
核心价值不在于“图像加音频变成视频”,而在于保留以下链路:
- (营销活动)
campaign - (创意概念)
concept - (角色)
persona - (脚本)
script - (语音素材)
voice take - (图像资产)
image asset - (渲染任务)
render job - (质检报告)
qa report
Fact Rule
事实规则
Video render inputs must be grounded in approved upstream assets or an explicit prompt plan.
Required upstream inputs depend on route:
talking-head- approved image asset
- approved voice take
- script or concept reference
- render purpose
- local output directory
ark / seedance- prompt or
promptPlan - any required media refs for the chosen mode
- concept reference
- render purpose
- local output directory
- prompt or
Do not let the render stage silently redefine:
- who the persona is
- how the voice should sound
- what the concept is trying to test
If the request is experimenting with a new render style, record that as an explicit render variant.
视频渲染输入必须基于获批的上游资产或明确的提示计划。
不同路由所需的上游输入如下:
- (数字人讲解)
talking-head- 获批的图像资产
- 获批的语音素材
- 脚本或概念参考
- 渲染用途
- 本地输出目录
ark / seedance- 提示词或(提示计划)
promptPlan - 所选模式所需的任何媒体参考
- 概念参考
- 渲染用途
- 本地输出目录
- 提示词或
不要让渲染阶段悄悄重新定义:
- 角色是谁
- 语音应呈现的效果
- 创意概念要测试的内容
如果请求是尝试新的渲染风格,请将其记录为明确的渲染变体。
Source Selection Rule
源选择规则
Start from the active project's approved upstream assets and manifests.
If a current task clearly belongs to one project or client folder, stay within that context first.
Do not assume one client directory is the default home for all renders.
从当前项目的获批上游资产和清单开始。
如果当前任务明确属于某个项目或客户文件夹,请首先在该上下文范围内操作。
不要假设一个客户目录是所有渲染的默认存储位置。
Video Routes
视频路由
Current routes:
talking-head- model: hosted talking-head capability
- category: image-to-video digital human
- (hosted)
seedance- endpoint keys: ,
video-seedance-2-image,video-seedance-2-image-turbo,video-seedance-2-textvideo-seedance-2-text-turbo - category: text/image/reference-media to video
- endpoint keys:
ark- direct workspace route for internal video/audio workflows
- category: text/image/video/audio to video
Read before implementation or request design.
Read before designing hosted Seedance requests.
Read before designing Seedance requests.
references/hosted-video-talking-head.mdreferences/hosted-video-generative.mdreferences/volcengine-seedance-2.mdIf the project should keep related image, audio, and video files under one asset root, use the shared asset model in .
../image-batch-runner/references/unified-asset-contract-v1.md当前可用路由:
- (数字人讲解)
talking-head- 模型:托管式数字人讲解能力
- 分类:图像转视频数字人
- (托管式)
seedance- 端点密钥:,
video-seedance-2-image,video-seedance-2-image-turbo,video-seedance-2-textvideo-seedance-2-text-turbo - 分类:文本/图像/参考媒体转视频
- 端点密钥:
ark- 内部视频/音频工作流的直接工作区路由
- 分类:文本/图像/视频/音频转视频
在实施或请求设计前,请阅读 。
在设计托管式Seedance请求前,请阅读 。
在设计Seedance请求前,请阅读 。
references/hosted-video-talking-head.mdreferences/hosted-video-generative.mdreferences/volcengine-seedance-2.md如果项目需要将相关的图像、音频和视频文件放在同一个资产根目录下,请使用 中的共享资产模型。
../image-batch-runner/references/unified-asset-contract-v1.mdHosted Boundary Rule
托管边界规则
- keep request files, raw provider responses, and polling state under
when they are internal execution state
<work-folder>/.postplus/video-batch-runner/ - keep only final user-facing renders outside
.postplus/ - if hosted video capability is unavailable, unauthorized, or returns a stable network error, stop immediately instead of switching to ad hoc shell glue
- 当请求文件、原始供应商响应和轮询状态属于内部执行状态时,请将其保存在 目录下
<work-folder>/.postplus/video-batch-runner/ - 仅将最终面向用户的渲染文件保存在 目录外
.postplus/ - 如果托管式视频能力不可用、未授权或返回稳定的网络错误,请立即停止操作,不要改用临时的shell脚本
Render Objects
渲染对象
1. Render Job
1. 渲染任务(Render Job)
One request to a video provider.
Should include:
jobIdcampaignIdpersonaIdconceptId- or source path
scriptId voiceTakeIdimageAssetIdassetPurposeprovidermodelstatus
向视频供应商发起的一次请求。
应包含:
jobIdcampaignIdpersonaIdconceptId- 或源路径
scriptId voiceTakeIdimageAssetIdassetPurposeprovidermodelstatus
2. Render Manifest
2. 渲染清单(Render Manifest)
The normalized local handoff object for later review.
Should include:
jobIdcampaignIdpersonaIdconceptIdprovidermodelrequestPathresponsePathpredictionIdproviderStatusassets[]sourceBasisupstreamRefs
用于后续审核的标准化本地交付对象。
应包含:
jobIdcampaignIdpersonaIdconceptIdprovidermodelrequestPathresponsePathpredictionIdproviderStatusassets[]sourceBasisupstreamRefs
3. Video Asset
3. 视频资产(Video Asset)
One downloaded output.
Should include:
assetIdlocalPathremoteUrlmimeTypesourceBasiscreatedAt
已下载的单个输出文件。
应包含:
assetIdlocalPathremoteUrlmimeTypesourceBasiscreatedAt
Default Workflow
默认工作流
1. Lock the render brief
1. 锁定渲染需求
Before calling any provider, write down:
jobIdcampaignIdpersonaIdconceptId- or script source
scriptId voiceTakeIdimageAssetIdassetPurposetalking_headsinging_avatarfirst_pass_renderrender_fix
sourceBasismustKeepcanVaryfeedback
在调用任何供应商之前,记录以下内容:
jobIdcampaignIdpersonaIdconceptId- 或脚本源
scriptId voiceTakeIdimageAssetIdassetPurpose- (数字人讲解)
talking_head - (唱歌虚拟形象)
singing_avatar - (初次渲染)
first_pass_render - (渲染修正)
render_fix
sourceBasis- (必须保留的元素)
mustKeep - (可调整的元素)
canVary - (反馈)
feedback
2. Produce a normalized request record
2. 生成标准化请求记录
The local request JSON should contain stable fields even if provider fields change later.
At minimum record:
- provider route
- model
- prompt or prompt plan
- media refs used by the route
- optional mask image
- resolution
- ratio when relevant
- duration or frames when relevant
- seed
- local output directory
When the provider exposes multiple resolution tiers, default to the highest practical tier for realism-sensitive renders.
本地请求JSON应包含稳定字段,即使供应商字段后续发生变化也不受影响。
至少记录以下内容:
- 供应商路由
- 模型
- 提示词或提示计划
- 路由使用的媒体参考
- 可选遮罩图像
- 分辨率
- 相关宽高比
- 相关时长或帧数
- 随机种子(seed)
- 本地输出目录
当供应商提供多个分辨率层级时,对真实度敏感的渲染默认选择最高实用层级。
3. Call the provider and save raw response
3. 调用供应商并保存原始响应
Always save:
request.jsonresponse.jsonmanifest.json- downloaded video files under
renders/
Do not use the provider response alone as the durable store.
始终保存:
request.jsonresponse.jsonmanifest.json- 下载的视频文件保存在 目录下
renders/
不要仅将供应商响应作为持久化存储。
4. Normalize local outputs
4. 标准化本地输出
Every run should end with a local manifest containing:
- stable upstream refs
- provider ids
- local asset paths
- source basis
- feedback history
每次运行结束后,应生成包含以下内容的本地清单:
- 稳定的上游参考
- 供应商ID
- 本地资产路径
- 源依据
- 反馈历史
5. Hand off to human QA
5. 交付给人工质检
Do not auto-approve a render.
The next stage is , where a person may record:
creative-qa- verdict
- what worked
- what failed
- which stage should be rerun
If there is no human feedback yet, the render can remain in .
review_pending不要自动批准渲染结果。
下一阶段为(创意质检),相关人员可记录:
creative-qa- 结论
- 有效部分
- 问题部分
- 应重新运行的阶段
如果尚未收到人工反馈,渲染结果可保持(待审核)状态。
review_pendingPath Selection Rule
路径选择规则
Write outputs into the active project's render structure when one already exists.
If no project structure exists yet, choose a clear workspace output path and make it visible in the task summary.
If the chosen location will become the long-term handoff point for a client, prefer confirming the destination with the user.
如果当前项目已有渲染结构,请将输出写入该结构。
如果尚未建立项目结构,请选择清晰的工作区输出路径,并在任务摘要中明确显示。
如果所选位置将成为客户的长期交付点,请优先与用户确认目标位置。
Example Persistence Convention
持久化约定示例
One possible project-local layout is:
text
videos/<job-id>/
request.json
response.json
manifest.json
renders/
qa/Do not assume this example layout is the universal default.
Keep draft request files, raw provider responses, and polling state under
when they are internal execution
artifacts rather than the final handoff.
<work-folder>/.postplus/video-batch-runner/一种可行的项目本地布局如下:
text
videos/<job-id>/
request.json
response.json
manifest.json
renders/
qa/不要假设此示例布局为通用默认。
当草稿请求文件、原始供应商响应和轮询状态属于内部执行工件而非最终交付内容时,请将其保存在 目录下。
<work-folder>/.postplus/video-batch-runner/Tool Contract
工具契约
This skill expects these adapters:
generate_video_from_image_audio- for async providers
poll_prediction
For Seedance, the same script is used as the normalized submit entrypoint even though the request may be text-to-video or multimodal; the route is chosen by .
generate_video_from_image_audioproviderThe normalized request and manifest shapes live in .
references/tool-contracts.md此工具依赖以下适配器:
generate_video_from_image_audio- 用于异步供应商的
poll_prediction
对于Seedance,即使请求可能是文本转视频或多模态,仍使用同一个脚本作为标准化提交入口点;路由由字段选择。
generate_video_from_image_audioprovider标准化的请求和清单格式定义在 中。
references/tool-contracts.mdReview Rule
审核规则
Before calling a video provider, verify:
- for , persona is approved
talking-head - for , image asset is approved
talking-head - for , voice take is approved
talking-head - for (hosted), request mode is explicit and required media exists
seedance - for , request mode is explicit
ark - for , media roles match the intended Seedance mode
ark - for , prompt or prompt plan is concrete enough to constrain the generation
ark - render request is tied to a real concept or asset purpose
- local output path is explicit
After generation, review:
- lip sync acceptability
- persona continuity
- audio and image match
- TikTok-native feel
- ad-like drift
调用视频供应商之前,请验证:
- 对于(数字人讲解),角色已获批
talking-head - 对于(数字人讲解),图像资产已获批
talking-head - 对于(数字人讲解),语音素材已获批
talking-head - 对于托管式,请求模式明确且所需媒体已存在
seedance - 对于,请求模式明确
ark - 对于,媒体角色与预期的Seedance模式匹配
ark - 对于,提示词或提示计划足够具体以约束生成结果
ark - 渲染请求关联真实的创意概念或资产用途
- 本地输出路径明确
生成完成后,请审核:
- 唇形同步是否可接受
- 角色连续性
- 音频与图像是否匹配
- 是否符合TikTok原生风格
- 是否出现广告化偏离
Failure Mode
失败模式
Stop and say the request is under-specified if any of these are missing:
- for , no approved image asset
talking-head - for , no approved voice take
talking-head - for (hosted), no prompt or no required first image
seedance - for , no prompt or no usable
arkcontent - no asset purpose
- no source basis
- no local output path
Do not compensate for missing upstream approvals by letting the render model improvise.
如果缺少以下任意一项,请停止操作并说明请求规格不足:
- 对于(数字人讲解),无获批图像资产
talking-head - 对于(数字人讲解),无获批语音素材
talking-head - 对于托管式,无提示词或无所需首帧图像
seedance - 对于,无提示词或无可用
arkcontent - 无资产用途
- 无源依据
- 无本地输出路径
不要通过让渲染模型自行发挥来弥补缺失的上游审批。
Seedance Prompt Rule
Seedance提示词规则
For Seedance 2.0 work, prefer a structured prompt plan over a single dense paragraph.
The adapter accepts and turns it into one compact prompt string in this order:
promptPlan- subject + action
- scene / environment
- camera / shot / motion
- visual style / realism target
- sound intent
- continuity constraints
- must-keep
- must-avoid
- reference bindings such as
[图1]...,[图2]...
This is a better default than freehand adjective stacks.
对于Seedance 2.0任务,优先使用结构化提示计划而非单一密集段落。
适配器接受并按以下顺序将其转换为一个紧凑的提示字符串:
promptPlan- 主体 + 动作
- 场景/环境
- 镜头/拍摄/运动
- 视觉风格/真实度目标
- 声音意图
- 连续性约束
- 必须保留的元素
- 必须避免的元素
- 参考绑定,例如
[图1]...,[图2]...
这比自由堆砌形容词的方式更优。
Core Scripts
核心脚本
scripts/generate_video_from_image_audio.mjsscripts/poll_prediction.mjs
These scripts take normalized request JSON files and write:
request.jsonresponse.jsonmanifest.json- downloaded videos under
renders/
scripts/generate_video_from_image_audio.mjsscripts/poll_prediction.mjs
这些脚本接收标准化请求JSON文件并生成:
request.jsonresponse.jsonmanifest.json- 下载的视频文件保存在 目录下
renders/