# 交付结构 为每场战役创建独立目录: ```text 战役素材/<规范战役名>/ ├── 素材说明.md ├── manifest.json ├── images/ │ ├── 01-.png │ ├── 01-.webp │ └── ... └── audio/ # 仅在确有可用音频文件时创建 └── . ``` ## 素材说明.md 建议依次写: 1. 规范事件名、时代、日期、地点与一句话结论; 2. “60–90 秒主旁白”; 3. 分幕素材,每幕列旁白、短标题、人物标签、图片文件、画面说明、替代文本和提示词; 4. BGM 选曲、音频状态、选择理由与 cue sheet; 5. 史实依据、可视化补全和禁用元素。 避免把大量代码或页面实现写进素材说明。 ## manifest.json 使用 UTF-8 和相对路径。最低字段如下: ```json { "event": { "canonicalName": "规范战役名", "aliases": ["用户原称"], "era": "时代", "date": "日期", "place": "地点", "summary": "一句话结论" }, "narration": { "language": "zh-CN", "estimatedSeconds": 75, "fullText": "可连续口播的主旁白" }, "scenes": [ { "id": "01", "title": "幕标题", "timePlace": "本幕时间地点", "purpose": "本幕叙事作用", "narration": "本幕旁白", "overlay": { "heading": "短标题", "line": "一句短文案" }, "people": [ { "name": "人物", "office": "当时身份", "action": "动作或结局" } ], "image": { "original": "images/01-scene.png", "delivery": "images/01-scene.webp", "alt": "准确替代文本", "prompt": "最终成图提示词", "visualInference": "不属于史料明文的气氛或构图补全" }, "sources": ["史料及卷次"] } ], "bgm": { "catalogId": "项目曲目 ID", "title": "曲名", "version": "版本", "status": "attached | playable-url | pending-export | unavailable", "pathOrUrl": "有实际音频时填写,否则为空", "usage": "伴奏、去人声或原曲使用方式", "reason": "为何适合这场战役", "cues": [ { "from": "00:00", "to": "00:12", "scene": "01", "direction": "剪辑和情绪说明" } ] }, "sources": [ { "claim": "覆盖的事实", "citation": "来源" } ], "blacklist": ["禁止画入或写成事实的内容"] } ``` `status` 必须反映真实状态。只有文件已复制进 `audio/` 才使用 `attached`;只有可访问的项目自有音频地址才使用 `playable-url`。