数字我 Digital Me:全量入库(大文件走 Git LFS)
nginx serve /uploads direct (audio speed) / patch-nginx (push) Failing after 1m34s

This commit is contained in:
2026-10-10 16:24:43 +08:00
commit 0593ff7e62
1893 changed files with 361723 additions and 0 deletions
@@ -0,0 +1,91 @@
# 交付结构
为每场战役创建独立目录:
```text
战役素材/<规范战役名>/
├── 素材说明.md
├── manifest.json
├── images/
│ ├── 01-<scene-slug>.png
│ ├── 01-<scene-slug>.webp
│ └── ...
└── audio/ # 仅在确有可用音频文件时创建
└── <track-slug>.<ext>
```
## 素材说明.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`。