数字我 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,83 @@
---
name: historical-battle-assets
description: "为 Digital Me 生成纯素材型历史战役包:史实上下文、中文旁白、分幕图片、人物标签和项目自生成音乐选曲,并在校验后自动创建本地 Git 提交。用户说“某战役生成”“玄武门事变生成”,或要求战役图片配文字与 BGM 素材时使用;不负责前端页面或交互实现,不执行 Git push。"
---
# 历史战役素材生成
交付“食材”,不替用户“炒菜”:产出可直接交给前端、剪辑或策划使用的图片、文字和音乐选择,不写页面组件、样式或交互代码,除非用户另行明确要求。
## 先定史实边界
1. 规范战役名称和时代;遇到俗称、错别字或多个同名事件时,依据史料确定规范名,并在交付中列出用户原称和规范名。
2. 优先读取目标项目已有的事件资料、人物表、史料引文、`gaps` 与 `blacklist`。在 Digital Me 中重点查找 `digital-me-backend/src/mingchangmianData.js`、`digital-me-backend/src/rujuDashi/` 及相关朝代数据。
3. 本地资料不足时,再查权威史料或正式学术来源。事实、合理视觉补全与纯气氛描写必须分开标注;史料空白不得写成确定事实。
4. 战役胜负、生死、时间、地点、身份、器物和服饰不得为戏剧性而改写。演义、影视桥段或后世传说若无可靠依据,放进“禁用元素”,不要画进图片。
## 组成素材包
默认按事件复杂度设计 3–5 幕,而不是强行把所有战役切成同样长度。每幕必须含:
- 时间与地点;
- 这一幕在整场战役中的作用;
- 适合配音的连续旁白;
- 适合画面叠加的短标题与一句短文案;
- 在场人物的“姓名/当时身份/本幕动作或结局”;
- 图片文件名、画面说明、无障碍替代文本和最终生成提示词;
- 史实依据,以及哪些画面细节属于不改变事件走向的视觉补全。
另写一段可从头顺读的主旁白。用户未指定时,以约 60–90 秒为目标,句子短、可口播,用具体动作连接上下文,不写教科书式人物履历堆砌。
完整目录与 `manifest.json` 字段遵循 [交付结构](references/deliverable-schema.md)。
## 生成图片
需要成图时,先加载并遵循 `imagegen` skill,再使用图像生成工具。保持同一战役的建筑时代、服饰、盔甲、人物外观、色调和镜头语言一致。
- 默认横版 16:9,适配网页大画幅与视频分镜。
- 图片本身不烘焙姓名、字幕、书法、Logo 或水印;为后续叠字保留可用负空间。
- 人物关系通过站位、视线、明暗和景深表达;人物姓名与身份写在伴随文案中。
- 暴力场面以动作、兵器和后果暗示为主,不依赖血腥特写。
- 每幕生成不同构图,不能只换同一画面的滤镜。
- 保存原始生成图,并为交付另备体积合理的 WebP;文件名使用稳定的幕次和英文 slug。
## 从项目音乐里选 BGM
只从用户指定项目的自生成音乐或自有曲库选曲,不拿外部商业歌曲凑数。Digital Me 默认先查:
- `digital-me-backend/src/data/music-library.json`;
- `digital-me-backend/src/storyScores.js`;
- `/api/tianxia/yue/library?q=<战役名>` 返回的音频绑定状态。
优先级依次为:同一事件且已有可播放音频、同一人物或时代且已有音频、最贴合叙事曲线的自生成音乐方案。判断维度是情绪弧、节奏、是否压住旁白、时代音色、开头和收尾是否易剪。
如果曲库只有作曲方案而没有实际音频:仍可选出最佳曲目 ID 和版本,但必须写明“待生成/待导出”,不得声称已附 MP3;同时给出 3–5 段 cue sheet。若选中含人声版本作为 BGM 来源,明确要求使用伴奏或去人声 stem。
## 写入与交付
若用户给了项目,默认在项目内创建 `战役素材/<规范战役名>/`;没有目标目录时,在当前工作区创建同名素材包。不要把素材自动接进页面。
### 自动创建本地 Git 提交
素材包写入并通过检查后,只要交付目录位于 Git 工作树内,默认自动创建本地 commit,不再另行询问;这项默认授权只覆盖本次新生成或更新的战役素材包,以及用户明确要求同步更新的本技能文件。
1. 先读取目标仓库的 `AGENTS.md`、Git 发布约束和适用架构文档,并用 `git rev-parse --show-toplevel`、当前分支、远端和 `git status --short --branch` 确认提交位置。
2. Digital Me 的源码目录与历史归档仓库分离时,以用户指定的交付仓库为准。若用户已指定 `SPianPianShaoNian/digital-me-history`,应把最终素材包同步到该远端对应的本地工作树,再在那里提交;不要把源码仓库的其他改动带入归档提交。
3. 工作树存在无关改动时,保留且不触碰它们。只按明确路径暂存本次素材目录和本技能文件,禁止使用 `git add .` 或 `git add -A`。
4. 提交前至少验证:`manifest.json` 可解析、所有清单引用的 PNG/WebP 都存在、图片格式与尺寸可读、`git diff --cached --check` 通过。纯图片/文案素材不触发前后端构建;若同时修改代码,则按仓库门禁运行相应测试。
5. 默认提交信息使用 `feat: add <规范战役名> battle asset bundle`;若只是修订已有素材,则使用 `docs: update <规范战役名> battle asset bundle`。
6. 创建 commit 后报告提交号、暂存范围、验证结果和相对上游的领先状态。
7. 只创建本地提交。禁止执行 `git push`、`git publish`、强推或其他远端写操作;远端上传仍由用户手动完成。
如果交付目录不在 Git 工作树内、找不到用户指定的交付仓库、提交身份缺失,或本次文件与用户未提交改动发生重叠,先完成素材交付并说明未自动提交的具体原因,不得猜测远端、覆盖改动或扩大提交范围。
完成前检查:
- 每张图都能对应一段旁白,而不是装饰图;
- 人名、官职和动作在各文件中一致;
- 主旁白能按幕次顺读;
- 图片提示词不含违背本战史实的元素;
- BGM 有明确选曲理由、状态和剪辑点;
- 所有来源、生成提示词和文件路径可追溯。
交付时列出素材目录、图片数量、旁白时长、选中 BGM 及其是否已有音频。若调用图像生成,附上最终提示词摘要。
@@ -0,0 +1,4 @@
interface:
display_name: "历史战役素材生成"
short_description: "生成历史战役图片、旁白、人物标签与项目内 BGM 选曲"
default_prompt: "使用 $historical-battle-assets 为玄武门之变生成完整图片、旁白和 BGM 素材包。"
@@ -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`。