任务是唯一上下文
只使用当前对话和当前任务目录。没有账号画像、持久受众记忆、历史选题库、发布队列或隐式偏好。
Architecture guide · source-reviewed
这份报告梳理 codex-content-video-skills 的完整设计逻辑:它如何把“今天做一条视频”的自然语言请求,拆成九个可替换模块、若干版本化工件和一条可自检的本地交付链路。
01 · Thesis
这个仓库不试图让一个提示词包办选题、研究、写稿、配音、字幕和渲染。它把每一步限制在一个明确边界内,并把跨步骤的信息写进任务目录。下一步读取的是工件,不是上一轮聊天记忆。
系统的中心不是模型,而是交接契约。 上游输出需要被下游读取、验证和追溯;任何模块都不能借由“猜测上下文”填补关键事实、时间或布局信息。
只使用当前对话和当前任务目录。没有账号画像、持久受众记忆、历史选题库、发布队列或隐式偏好。
请求、信号、选题、文稿、音频、字幕、清单和 QC 都有文件化落点,便于重跑、审计、替换与局部修复。
交付可编辑工程、MP4 和质检报告。工作流不上传、不发布、不入队,也不向第三方发通知。
02 · End-to-end pipeline
完整视频请求由 content-video-workflow 编排,但它只拥有编排权,不吞并领域实现。它决定何时调用其他 Skill、何时验证工件、何时进入指定渲染器。
video-manifest.json 处分叉到用户指定的渲染器。| 阶段 / Skill | 唯一职责 | 主要输入 | 主要输出 | 不可越过的边界 |
|---|---|---|---|---|
| 信号 public-hot-signals | 收集并标准化中文公网热榜信号。 | 所需平台、超时、任务输出路径。 | hot-signals.json | 不推荐最终选题,不据热度断言事实。 |
| 信号 ai-trend-report | 拉取并清洗 SciTiger AI 日报。 | 公共日报端点。 | 已脱敏报告 JSON 或概览。 | 不写应用代码,不把报告建议当独立事实。 |
| 选题 content-topic-selection | 选择信号源,产出可研究的选题简报。 | 用户请求、可选的两类信号。 | topic-brief.json | 不写成片文稿,不渲染视频。 |
| 写稿 self-media-script | 研究、设定事实边界、写可旁白的脚本及视觉节拍。 | 主题或 topic-brief.json、权威资料。 | script-package.json、script.md | 不替未证实事实背书;不从热榜直接生成结论。 |
| 音频 tts-generate-audio | 调用异步 TTS 并生成可交付旁白。 | 旁白文本、参考音频、用户 API key。 | 原始音频、48kHz 归一化音频、元数据。 | 不生成字幕;密钥不进入仓库或任务工件。 |
| 字幕 audio-generate-subtitle | 从真实音频生成时间轴字幕。 | 归一化音频、可选原稿。 | subtitle.srt、时间段 JSON。 | 不合成音频,不手工编造时间戳。 |
| 编排 content-video-workflow | 建目录、串联交接、选择渲染器、守住质检门。 | 当前请求与所有上游工件。 | video-manifest.json、caption-layout.json | 不拥有领域实现;不发布、不上传。 |
| 渲染 hyperframes-content-video | 把清单落地为 HTML/HyperFrames 工程和 MP4。 | 已验证 manifest、音频、SRT、视觉节拍。 | 工程、MP4、QC。 | 不选题、不写稿、不替换用户指定的渲染器。 |
| 渲染 remotion-content-video | 把清单落地为 React/Remotion 工程和 MP4。 | 已验证 manifest、音频、SRT、视觉节拍。 | 工程、MP4、QC。 | 同上;仅使用帧驱动动画。 |
03 · Topic routing
选题模块先把自然语言请求压缩为 topic_request:领域、受众、平台、时效性和来源偏好。随后以固定优先级得出 source_mode,并把理由写回工件。这让同一输入的来源选择可以被复查。
source_mode=none 且主题精确,只生成一个候选。source_signal_ids,并提出后续必须验证的 research_questions。04 · Artifact contracts
工件按任务目录保存。这样可以替换某个实现,例如更换 TTS 服务或渲染器,而不必重新发明选题和研究;也可以从任一中间产物重启。
工作流的入口快照,保存主题、受众、时长、画幅、风格、来源偏好、渲染器和交付表面。
把“为什么用这些信号”和“准备研究什么”显式分开。包含 source_decision、信号、候选和选择状态。
source_mode、routing_reason、user_override。research_questions 不是事实,是待核查问题。机器可读的编辑包;script.md 只保留按章节排序的口播,不混进内部选题元数据。
visual_beats、编辑复核。verified 主张至少有一个来源 URL;每章必须被视觉节拍覆盖。TTS 同时保留下载的原始音频和可交付的归一化版本,元数据记录无密钥的请求快照、轮询结果和参考音色来源。
audio_path 生成字幕。时间来自真实旁白音频;原稿只是 reference_text,用于提高转写对齐,不是时间轴的替代品。
渲染器中立的最终交接:项目路径、媒体路径、画布、字幕策略、视觉节拍和输出路径。
renderer、project_dir、音频、SRT、尺寸、FPS、画幅、非空节拍。caption-layout.json。{
"schema_version": 2,
"renderer": "remotion",
"project_dir": "remotion-project",
"source": {"topic_brief": "topic-brief.json", "script_package": "script-package.json", "script": "script.md"},
"media": {"audio_path": "tts/tts_x.wav", "subtitle_srt_path": "subtitle/subtitle.srt", "subtitle_segments_path": "subtitle/subtitle_segments.json"},
"format": {"width": 1920, "height": 1080, "fps": 30, "aspect_ratio": "16:9", "language": "zh-CN"},
"caption_policy": {"enabled": true, "max_lines": 2, "delivery_surface": "clean-player", "platform_ui_bottom_ratio": 0.04, "caption_bottom_ratio": 0.10, "caption_max_height_ratio": 0.12, "visual_clearance_ratio": 0.02},
"visual_beats": [/* 从 script-package 继承的可执行视觉说明 */],
"output": {"video_path": "renders/final.mp4", "qc_report_path": "renders/qc-report.json"}
}
05 · Evidence & editorial boundaries
这是整套设计最重要的内容安全机制。公开热榜和 AI 日报都是发现入口,不能成为视频中实质性论断的唯一根据。脚本模块负责把它们转化为待查问题,再用权威资料决定能否说出口。
标题、榜单名次、互动指标、日报中的机会建议。
允许:说明“该平台收集到/该条目正在被讨论”、解释选题的时效理由。
不能:证明产品能力、技术因果、法律状态、医学或金融结论。
一手公告、官方文档、论文原文、监管机构、可核验的机构材料。
要求:在 claims 写 URL、发布者、日期(若有)及它支持的具体主张。
输出:verified、uncertain 或 opinion。
除了文案,script-package.json 还存 narrative_strategy 与 editorial_review。前者记录本题为何采用“场景到原理”“对比到解决”“主张到反例”等路径;后者明确观众承诺,并检查钩子是否脱离发现元数据、归因是否具体、结尾是否只属于这个主题。
06 · Timing & layout authority
旁白先由 SciTiger 异步 TTS 生成,再经 FFmpeg 归一化为 48 kHz、-16 LUFS、-1 dBTP 峰值上限的交付音频。字幕服务从这个音频生成 SRT;原稿只作为对齐参考。渲染器以探测到的旁白时长设定总时长,SRT 决定当前字幕。
tts_rate=1.0。要达到指定时长,应增减有证据支撑的叙事节拍,而不是偷偷放慢语速。assets/default-reference.mp3,不会扫描用户目录随机找声音。resolve_caption_layout.py 将清单中按画面高度表达的比率,转换为确定的像素边界。任何渲染器都不能硬编码字幕偏移:字幕必须在 caption_box 内,其他视觉元素必须止于 visual_content.bottom_y 之上。
caption_bottom_ratio、最大高度和 max_lines 定义;不是 CSS 里的魔法数字。例:1080×1920、generic-short-video
底部 UI 346px;字幕盒底部距画面底 422px;字幕盒高 192px;视觉区下边界为 y=1268px。
07 · Renderer contract
两条渲染实现共享 manifest、音频、SRT、视觉节拍和布局边界,但工程形态不同。用户指定 remotion 或 hyperframes 后,工作流可以诊断和修复该渲染器,却不能悄悄改用另一个。
index.html 组合,使用固定尺寸、FPS 和由旁白探测出的时长。content-media/ 和 content-inputs.json,不修改原始媒体与 manifest。<audio> 持续承载旁白;时间线同步、可 seek、无渲染时网络请求、时钟、随机状态、CSS transition 或无限循环。HYPERFRAMES_SKIP_SKILLS=1。public/,但保留 manifest 原路径不变。\n、\t、\r,规避错误转义被显示出来。08 · Validation & recovery
本仓库把可预见的错误前移为脚本检查。正常的文字、布局、音频或渲染缺陷应自动修复并重渲染;只有不可恢复的环境或源媒体问题,才需要报告给用户并请求改变条件。
任一正常检查失败 → 修复对应源工件 / 布局 / 场景 → 从相关检查重新开始,而非索要预览批准。
| 质量门 | 检查对象 | 失败后的系统行为 | 可复刻价值 |
|---|---|---|---|
| 信号采集 | 各来源独立成功与错误记录。 | 单个源失败不阻断;只有所有源都无信号才失败。 | 把外部网络不稳定隔离成局部故障。 |
| AI 日报 | 根对象有 report_meta 与 summary;删除签名或凭据 URL 字段。 | 端点或 schema 不符即明确报错。 | 对公开数据也设结构与脱敏边界。 |
| 脚本包 | 主张状态与 URL、章节引用、视觉节拍字段。 | validator 失败即回到写稿;严格审计拒绝热榜泄漏、空泛归因、模板结尾。 | 让编辑要求可机器预检。 |
| Manifest | 版本、renderer、项目目录、音频/SRT 路径、画布、非空节拍、真实文件。 | 不进入渲染。 | 渲染器只收到完整且可执行的合同。 |
| 字幕几何 | schema 2 的完整 caption_policy;比例与空间关系。 | 解析失败,不允许硬编码替代。 | 将跨平台安全区做成确定函数。 |
| 交付参考线 | 源树中贴着左边、延伸到视觉边界的可见 guide bar。 | 检出即移除或改入 debug/preview 树,重渲染。 | 防止调试辅助线漏入成片。 |
| Remotion 源码 | 裸 JSX 文本中直接出现的转义控制符。 | 改为 JSX 字符串表达式或拆分文本元素。 | 把一种常见、难发现的中文文本渲染错误前置。 |
| 成片 QC | 视频流、尺寸、FPS、时长、SRT、字幕几何、关键静帧。 | 正常问题自动修复并重渲染。 | 最终判断来自可播放文件,不只看源码。 |
可借鉴的增强点:HyperFrames 的 QC 会独立检查音频流和旁白覆盖;Remotion 附带的 QC 重点是视频、SRT 和字幕几何。若你复刻这套包,建议两条分支都强制验证音频流存在、音频时长与视频时长的覆盖关系,并把静帧人工检查记录进 QC 报告。
09 · Build your own
要复刻的不是这九个名字,而是“将不确定性留在上游、将确定性交给合同和验证器”的工作方式。下面的顺序适用于任何多阶段内容、报告、课程或媒体生成系统。
一个 Skill 只做一类领域决策。采集只采集、研究只研究、转写只转写、渲染只渲染。模块描述里也要写清“不要做什么”。
在实现提示与脚本之前,定义版本号、必填字段、路径相对性、未知字段保留策略、主张状态和输出位置。用 JSON Schema 或小型 validator 固化。
任何路由、模型选择、来源选择、策略选择都输出 reason、override 和输入引用。这样人能审,AI 也能稳定续跑。
趋势、检索、社交讨论、模型建议只生成研究问题。面向用户的事实性主张必须对应独立、可核验的高质量来源。
音频/SRT 是唯一时间线;布局 resolver 是唯一几何来源。禁止各下游自行估算时长、再造字幕或写入魔法像素。
不要只交付长文。为每段声明目标、主视觉、辅视觉、数据/图示、文案和安全区约束,让渲染器能据此工作。
用户选的渲染器、画幅、FPS、平台和音色不应被静默替换。允许诊断与修复;不能完成时请求明确的选择变更。
每个反复出现的失误都值得一段确定脚本:缺字段、路径失效、字幕越界、调试线泄漏、转义文本、无音频流,而不是反复靠提示词提醒。
拼写、换行、safe-zone、正常 QC 失败应自动重做;缺凭据、不可访问的源媒体、渲染器启动失败等外部阻塞才向用户升级。
将输出保存在任务目录,交付源文件、产物和 QC。上传、发布、通知、排队是独立的、有明确授权的后续动作。
function makeVideo(request) {
task = createTaskDirectory(request) // request.json
brief = request.needsTopic ? selectTopic(task) : briefFromExactTopic(task)
package = researchAndWrite(brief) // claims + visual_beats
assert(validateScriptPackage(package))
assert(auditNarration(package, {strict: true}))
audio = synthesizeTTS(package.script, {rate: 1.0}) // normalized delivery audio
subtitles = transcribe(audio, {referenceText: package.script})
manifest = makeRendererNeutralManifest(package, audio, subtitles, request)
assert(validateManifest(manifest, {checkPaths: true}))
layout = resolveCaptionLayout(manifest)
renderer = request.renderer ?? "hyperframes"
project = renderer === "remotion"
? buildRemotion(manifest, layout)
: buildHyperFrames(manifest, layout)
assert(noDeliveryGuides(project.deliverySource, layout))
video = render(project)
qc = inspectVideo(video, subtitles, layout)
while (!qc.passed && qc.isRepairable) { repair(project, qc); video = render(project); qc = inspectVideo(video, subtitles, layout) }
return {project, video, qc}
}
10 · Usage & source map
仓库 README 提供的项目内安装命令如下。它将整个技能包放入当前项目的 .agents/skills/,不会安装为全局 Skill。安装后在新的 Codex 对话或下一轮会话中使用。
npx skills add Scitiger-AI/codex-content-video-skills
完整生产请求可以直接描述时长、话题来源、画幅和渲染器,例如:
结合今天公开热榜,做一个 90 秒中文科技知识视频, 横屏 16:9,使用 Remotion。
README.md:安装、运行环境与包级边界。content-video-workflow/SKILL.md:全链路编排与交付合同。content-topic-selection/SKILL.md:来源路由及选择权。content-topic-selection/references/topic-brief.md:选题工件。self-media-script/SKILL.md:事实、叙事、视觉节拍与编辑复核。self-media-script/references/script-package.md:文稿交接契约。public-hot-signals/scripts/collect_public_hot_signals.mjs:来源独立失败与信号标准化。ai-trend-report/scripts/fetch_report.py:日报根 schema 校验与敏感 URL 清除。tts-generate-audio/SKILL.md、audio-generate-subtitle/SKILL.md:两段异步媒体服务。content-video-workflow/references/video-manifest.md:渲染器中立清单。resolve_caption_layout.py、validate_video_manifest.py:确定性几何与入口验证。hyperframes-content-video/、remotion-content-video/:两条渲染合同与 QC 实现。