xyz-video-skill 是一个由宿主 LLM 驱动、由 Python 执行层落地的视频生成 skill。
它的定位不是“一键广告片生成器”,而是:
- 宿主 LLM 负责故事创作、角色设计、剧本框架、分镜脚本、导演级审片判断
- Python 脚本负责角色参考图、图片/视频素材、质量审查、品牌化处理、FFmpeg 合成
当前主链路已经收口为一条可执行的视频生产流水线:story.json -> framework.json -> storyboard.json -> refs -> assets -> brand(optional) -> compose。
仓库当前已经覆盖:
story.json/framework.json/storyboard.json校验storyboard.json规范化与兼容迁移- 自动回填 legacy storyboard 缺失的
shot_type - 自动补全或规范化
video_references - 输出
_normalized/storyboard.json - 输出
_normalized/storyboard_migration_report.json
- 自动回填 legacy storyboard 缺失的
- 角色参考图生成
- 图片生成、视频生成、BGM 生成
- 用途驱动的视频参考协议
first_framereference_characterreference_propreference_compositionreference_stylereference_stagereference_target_state
continuity_mode/chain_from_previous/keyframes驱动的连续性控制- 视频质量两阶段审查
- 自动粗筛:MSE、spike、人脸变形、重复角色风险等
- 视觉裁定:
metrics_only/hybrid_judge/director_review
- pair-level 编辑决策与 FFmpeg 合成
- 可选品牌化处理:Logo、标题条、字幕条、水印、产品贴图
- 多平台输出:
douyin/wechat/youtube
当前没有自动完成的部分:
- 自动生成
story.json/framework.json/storyboard.json - 自动生成
publish.json - 自动导出 Remotion 配置
按 SKILL.md 的协议,先产出:
story.jsonframework.jsonstoryboard.json
这一步是 skill 协议的一部分,不是仓库里的 CLI 自动生成。
python3 scripts/ad_assets.py \
--mode character_refs \
--framework /path/to/framework.json \
--output_dir /path/to/output/character_refs推荐直接走 orchestrator:
python3 scripts/run_pipeline.py \
--framework /path/to/framework.json \
--storyboard /path/to/storyboard.json \
--platform douyin wechat youtube执行阶段顺序:
validaterefsassetsbrandcompose
python3 scripts/ad_brand.py \
--assets_manifest /path/to/output/assets/assets.json \
--storyboard_file /path/to/storyboard.json \
--logo_path /path/to/logo.png \
--brand_color '#FF6A00' \
--output_dir /path/to/output/brandpython3 scripts/ad_compose.py \
--storyboard /path/to/output/_normalized/storyboard.json \
--assets /path/to/output/assets/assets.json \
--platform douyin wechat youtube \
--output_dir /path/to/output/videos如果要使用品牌化素材,--assets 传 brand_manifest.json 即可。
- Python
3.11+ ffmpeg/ffprobe- 可用的图像、视频、BGM API Key
安装依赖:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt先复制模板:
cp config/api_keys.yaml.example config/api_keys.yaml配置优先级:
- 环境变量
AD_GENERATOR_CONFIG指向的 YAMLconfig/api_keys.yamlconfig/providers.yaml中的默认api_base
常用环境变量:
VOLCENGINE_API_KEYAPIMART_API_KEYFAL_KEYBYTEPLUS_API_KEYEVOLINK_API_KEYOPENROUTER_API_KEYVIDEO_OUTPUT_ROOTAD_GENERATOR_CONFIG
python3 scripts/validate_json.py /path/to/story.json
python3 scripts/validate_json.py /path/to/framework.json
python3 scripts/validate_json.py /path/to/storyboard.json也可以一次校验多个文件:
python3 scripts/validate_json.py \
/path/to/story.json \
/path/to/framework.json \
/path/to/storyboard.jsonpython3 scripts/run_pipeline.py \
--framework /path/to/framework.json \
--storyboard /path/to/storyboard.json \
--platform douyin wechat youtube \
--review_mode metrics_only只跑某一段阶段:
python3 scripts/run_pipeline.py \
--framework /path/to/framework.json \
--storyboard /path/to/storyboard.json \
--from assets \
--to compose断点续跑素材生成:
python3 scripts/run_pipeline.py \
--framework /path/to/framework.json \
--storyboard /path/to/storyboard.json \
--resume离线占位调试:
python3 scripts/run_pipeline.py \
--framework /path/to/framework.json \
--storyboard /path/to/storyboard.json \
--no_api \
--skip_compose从已有素材继续品牌化并合成:
python3 scripts/run_pipeline.py \
--storyboard /path/to/storyboard.json \
--assets_manifest /path/to/output/assets/assets.json \
--from brand \
--logo_path /path/to/logo.pngscripts/ad_assets.py 和 scripts/run_pipeline.py 支持三种审查模式:
metrics_only:只做自动质量检测,适合快速迭代hybrid_judge:自动粗筛后导出风险帧,等待视觉裁定director_review:逐张图进入导演审图流程,适合高要求项目
当流程进入待裁定状态时,assets.json 和 pipeline_result.json 会带上 pending_reviews / blocked_reviews。
当前执行层重点依赖这些字段:
shot_typesubject_constraintscontinuity_modechain_from_previousvideo_referenceskeyframesend_frame_descriptionmotion_control
其中:
video_references已经是主协议keyframes仍兼容,但执行层会把它映射成reference_stagecontinuity_mode=scene_end会在 scene 末尾优先生成目标状态参考continuity_mode=strict会强约束目标状态chain_from_previous=true会尽量从上一镜真实视频尾帧续接
如果传入的是旧版 storyboard,scripts/run_pipeline.py 会先做兼容迁移,再进入执行。
默认输出目录为 ~/video-output/{timestamp}/;不可写时回退 /tmp/video-output/。也可以用 VIDEO_OUTPUT_ROOT 覆盖。
一次完整运行通常会生成:
{output_dir}/
├── _normalized/
│ ├── storyboard.json
│ ├── storyboard_migration_report.json
│ └── ref_binding_report.json
├── character_refs/
│ └── character_refs.json
├── assets/
│ ├── assets.json
│ ├── images/
│ ├── videos/
│ ├── bgm/
│ ├── audit/
│ └── image_audit/
├── brand/
│ └── brand_manifest.json
├── videos/
│ ├── result.json
│ └── edit_decisions.json
└── pipeline_result.json
关键产物:
_normalized/storyboard.json:执行层实际使用的 storyboardassets/assets.json:素材 manifestvideos/edit_decisions.json:相邻 shot 的剪辑决策videos/result.json:合成结果pipeline_result.json:整条 pipeline 的阶段结果汇总
.
├── README.md
├── SKILL.md
├── TASK.md
├── config/
│ ├── api_keys.yaml.example
│ ├── platforms.yaml
│ └── providers.yaml
├── docs/
├── examples/
├── reference/
├── scripts/
│ ├── run_pipeline.py
│ ├── ad_assets.py
│ ├── ad_brand.py
│ ├── ad_compose.py
│ ├── validate_json.py
│ ├── re_audit_videos.py
│ ├── summarize_audit.py
│ ├── image_gen.py
│ ├── video_gen.py
│ ├── reference_builder.py
│ ├── video_quality.py
│ └── ...
└── templates/
主要脚本职责:
scripts/run_pipeline.py:执行编排入口scripts/ad_assets.py:角色参考图、图片、视频、BGM 生成scripts/ad_brand.py:品牌化处理scripts/ad_compose.py:编辑决策 + FFmpeg 合成scripts/validate_json.py:输入 JSON 校验scripts/re_audit_videos.py:离线复审已有视频scripts/summarize_audit.py:汇总 audit 结果
推荐按这个顺序看:
SKILL.md:宿主 LLM 的完整工作流协议docs/pipeline_overview.md:完整流程总览docs/pipeline-deep-dive.md:执行链路细节reference/video_generation_strategy.md:视频参考图与video_references设计原则reference/video_quality_standard.md:视频质检标准examples/medical_reunion_storyboard.json:较新的 storyboard 示例
examples/sample_output/ 是历史样例输出,只能当结构参考,不能当作当前 CLI 的精确输出合同。
尤其这几个文件代表的是旧链路设想:
examples/sample_output/publish.jsonexamples/sample_output/ad_config.tsexamples/sample_output/compose_result.json
当前仓库的主入口和主合同,已经切到 SKILL.md + scripts/run_pipeline.py。