完善框架
This commit is contained in:
parent
b68bec554d
commit
41c6bd0991
@ -1,4 +0,0 @@
|
||||
name
|
||||
123123
|
||||
123123123
|
||||
123123123
|
||||
@ -1,203 +0,0 @@
|
||||
# 人物基础形象生成 · 约束手册
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 一、基础形象原则
|
||||
|
||||
1. **面容即灵魂** — 五官是角色唯一锚点,毛孔级精细渲染
|
||||
2. **底模即基础** — 白色中衣 + 素颜,后续服化均为叠加层
|
||||
3. **四视图一致** — 面容/体型/发型/中衣跨视图高度统一
|
||||
4. **冷艳含情** — 无妆状态仍需体现角色气质(清冷/温润/妩媚)
|
||||
5. **着装安全** — 基础中衣完整覆盖,端庄得体
|
||||
|
||||
---
|
||||
|
||||
## 二、面容约束
|
||||
|
||||
### 女性面容
|
||||
|
||||
| 部位 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 脸型 | 长脸、线条流畅、下颌收窄 | 长脸、鹅蛋偏长脸 |
|
||||
| 眼型 | 狭长妩媚、双眼皮窄、眼尾上扬 | 妩媚狭长眼、凤眼微挑 |
|
||||
| 眉型 | 自然眉形、眉色灰棕(裸眉) | 自然眉形、裸眉 |
|
||||
| 鼻型 | 高挺直鼻、鼻翼窄 | 高鼻梁、鼻翼精致 |
|
||||
| 唇型 | 薄唇、唇色自然裸粉 | 薄唇、唇色裸粉 |
|
||||
| 气质 | 清冷、五官立体、素颜无妆 | 面容清冷、五官立体、素颜 |
|
||||
|
||||
### 男性面容
|
||||
|
||||
| 部位 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 脸型 | 棱角分明、下颌线清晰 | 棱角分明、下颌线硬朗 |
|
||||
| 眼型 | 剑眉星目、深邃克制 | 剑眉星目、眼神清冽 |
|
||||
| 鼻型 | 高挺英挺、鼻梁笔直 | 高鼻英挺 |
|
||||
| 唇型 | 薄唇微抿、唇色自然 | 薄唇、唇色自然 |
|
||||
| 气质 | 清冷疏离 / 温润如玉 | 清冷俊逸 / 温润如玉、素颜 |
|
||||
|
||||
---
|
||||
|
||||
## 三、肤感约束
|
||||
|
||||
### 女性
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 肤色 | 冷白皮、全身均匀、白得通透 | 冷白皮、牛奶肌、milky white skin |
|
||||
| 光泽 | 水光肌、内透光感、非哑光非油光 | 水光肌、luminous skin、dewy skin |
|
||||
| 质感 | 细腻、保留毛孔微质感 | 皮肤细腻、毛孔微可见 |
|
||||
| 露肤 | 面部/颈部/锁骨/手部 | 肩颈线条优美、肌肤白皙透亮 |
|
||||
|
||||
### 男性
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 肤色 | 白皙透亮、带健康感、全身均匀 | 肤色白皙透亮、奶油肌 |
|
||||
| 光泽 | 清爽水光、自然光泽 | 水光肌、皮肤透亮清爽 |
|
||||
| 质感 | 干净利落、可见毛孔 | 皮肤质感细腻、面容清冽 |
|
||||
|
||||
---
|
||||
|
||||
## 四、体型约束
|
||||
|
||||
### 女性
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 比例 | 修长纤细、七头身以上 | 身材修长、比例匀称 |
|
||||
| 肩颈 | 天鹅颈、肩颈线优美 | 天鹅颈、肩颈优美 |
|
||||
| 手部 | 纤长白皙、指节分明、五指正常 | 纤纤玉手、指节分明 |
|
||||
| 体态 | 古典仕女、含蓄端庄 | 体态端庄、身姿优雅 |
|
||||
|
||||
### 男性
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 比例 | 高挑挺拔、肩宽腰窄、七头半身以上 | 身材高挑、比例匀称 |
|
||||
| 肩颈 | 肩部宽阔、颈部有力 | 宽肩窄腰 |
|
||||
| 手部 | 骨节分明、手掌宽大、五指正常 | 手指骨节分明 |
|
||||
| 体态 | 武将/书生体态(按角色) | 身姿挺拔、体态从容 |
|
||||
|
||||
---
|
||||
|
||||
## 五、基础发型约束
|
||||
|
||||
> 仅定义自然散发/简单束发,发饰在服化衍生环节叠加。
|
||||
|
||||
### 女性
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 发色 | 纯黑,禁棕色/挑染 | 黑色长发、墨发如瀑 |
|
||||
| 发长 | 及腰或更长 | 及腰长发 |
|
||||
| 发质 | 根根分明、丝缕清晰 | 发丝根根分明、发丝细腻渲染 |
|
||||
| 造型 | 自然散发、中分/偏分、无发饰 | 长发自然散落、青丝如瀑 |
|
||||
|
||||
### 男性
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 发色 | 纯黑或墨色 | 墨发、黑发如墨 |
|
||||
| 发长 | 中长至长发 | 长发、及肩长发 |
|
||||
| 发质 | 根根分明、质感清晰 | 发丝根根分明、发丝细腻渲染 |
|
||||
| 造型 | 自然散发或半束、无发冠 | 长发自然散落、半束长发 |
|
||||
|
||||
---
|
||||
|
||||
## 六、基础中衣约束
|
||||
|
||||
> 白色交领中衣(古风内搭),完整覆盖身体。正式服饰在服化衍生环节叠加。
|
||||
|
||||
### 女性中衣
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 款式 | 交领右衽、宽袖及腕、衣长及足面 | 白色交领中衣、素白长衣 |
|
||||
| 面料 | 素白棉麻、轻薄不透、自然垂坠 | 棉麻质感、布料垂坠 |
|
||||
| 领口 | 交领V字、锁骨微露、端庄 | 交领、锁骨微露 |
|
||||
| 色彩 | 纯素白 #F8F6F0、无纹样 | 素白无纹样 |
|
||||
|
||||
### 男性中衣
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 款式 | 交领右衽、窄袖/直袖、衣长过膝 | 白色交领中衣、素白长衫 |
|
||||
| 面料 | 素白棉麻、挺括自然 | 棉麻质感、素白面料 |
|
||||
| 领口 | 交领、端正大方 | 交领、领口端正 |
|
||||
| 色彩 | 纯素白 #F8F6F0、无纹样 | 素白无纹样 |
|
||||
|
||||
### 着装统一规则
|
||||
|
||||
- 纯素白无纹样,确保后续服饰叠加无色彩干扰
|
||||
- 除面部/手部/颈部外完全覆盖
|
||||
- 四视图中衣款式完全一致
|
||||
- 中衣仅为安全打底,焦点在面容与体态
|
||||
|
||||
---
|
||||
|
||||
## 七、四视图设定图规范
|
||||
|
||||
### 视图定义
|
||||
|
||||
| 位置 | 视图 | 角度 | 景别 | 要求 | 提示词 |
|
||||
|---|---|---|---|---|---|
|
||||
| 左一 | 人像特写 | 正面平视 | 面部至锁骨 | 面部占60%+,五官清晰 | portrait closeup、face detail |
|
||||
| 左二 | 正视图 | 正面 0° | 全身立像 | 面对镜头、双臂自然 | front view |
|
||||
| 右二 | 侧视图 | 右侧 90° | 全身立像 | 纯侧面轮廓清晰 | side view、profile |
|
||||
| 右一 | 后视图 | 后方 180° | 全身立像 | 后脑/背部/发尾清晰 | back view、rear view |
|
||||
|
||||
### 画面规范
|
||||
|
||||
| 项目 | 约束 |
|
||||
|---|---|
|
||||
| 布局 | 同一画面从左至右并排四视图 |
|
||||
| 背景 | 纯净中性灰 #E8E8E8 |
|
||||
| 站姿 | 自然站立、双脚平行微分、双臂自然下垂或微展 |
|
||||
| 表情 | 中性微表情,符合角色气质 |
|
||||
| 光线 | 均匀柔光,前方主光 + 双侧补光,无硬阴影 |
|
||||
| 一致性 | 四视图的肤色/体型/发型/面容/中衣完全一致 |
|
||||
| 画面比例 | 建议 4:1 或 3:1 |
|
||||
|
||||
---
|
||||
|
||||
## 八、提示词模板
|
||||
|
||||
```
|
||||
{性别}角色四视图设定图,真人写实摄影,超现实主义纪实,强对比度,极致细节,
|
||||
character design sheet,character turnaround,
|
||||
{脸型},{眼型},{鼻型},{唇型},{整体气质},素颜无妆,
|
||||
{肤色},水光肌,皮肤通透发光,皮肤细腻,毛孔微可见,
|
||||
{身材描述},{体态描述},
|
||||
{发色}{发长},发丝根根分明,{基础造型},无发饰,
|
||||
身着白色交领右衽中衣,素白无纹样,布带束腰,端庄得体,
|
||||
同一画面左至右并排:人像特写+正视图+侧视图+后视图,
|
||||
自然站立,纯净中性灰背景,均匀柔光,无硬阴影,
|
||||
四视图一致性,面容细腻渲染,发丝细腻渲染
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、约束规则
|
||||
|
||||
### 必守
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R1 | 必须为「素颜无妆」状态 |
|
||||
| R2 | 必须声明「白色交领中衣」 |
|
||||
| R3 | 必须声明「无发饰、无配饰」 |
|
||||
| R4 | 必须指定「纯净中性灰背景」 |
|
||||
| R5 | 必须指定「四视图一致性」 |
|
||||
|
||||
### 严禁
|
||||
|
||||
| 编号 | 严禁 |
|
||||
|---|---|
|
||||
| X1 | 中衣以外的任何服装/配饰/妆容 |
|
||||
| X2 | 正顶硬光/正底光/彩色光 |
|
||||
| X3 | 过度美白至无血色 / 肤色发灰 |
|
||||
| X4 | 复杂场景背景(必须纯灰底) |
|
||||
| X5 | 夸张表情/动态姿势 |
|
||||
|
||||
|
||||
@ -1,218 +0,0 @@
|
||||
# 人物衍生资产生成 · 约束手册
|
||||
|
||||
---
|
||||
|
||||
## 一、叠加原则
|
||||
|
||||
1. **面容不变** — 叠加后五官必须与底模完全一致,禁止面容偏移
|
||||
2. **逐层可控** — 每层独立描述,便于按层替换(换装不换妆)
|
||||
3. **风格统一** — 所有服化元素服从同一美学体系
|
||||
4. **质感不降** — 叠加后质感标准不低于底模
|
||||
|
||||
---
|
||||
|
||||
## 二、叠加层级
|
||||
|
||||
| 层级 | 内容 | 说明 |
|
||||
|---|---|---|
|
||||
| L0 | 底模 | 基础形象底模,不修改 |
|
||||
| L1 | 妆容 | 底妆 + 眉/眼/唇/腮红 |
|
||||
| L2 | 发型造型 | 发髻/束发/编发 + 发饰 |
|
||||
| L3 | 中衣/内搭 | 替换白色基础中衣 |
|
||||
| L4 | 外衣/主服 | 大袖衫/直裾/大氅等 |
|
||||
| L5 | 配饰 | 头饰/耳饰/项饰/腰饰/手饰 |
|
||||
|
||||
---
|
||||
|
||||
## 三、妆容约束(L1)
|
||||
|
||||
### 女性妆容风格矩阵
|
||||
|
||||
| 风格 | 适用场景 | 核心提示词 |
|
||||
|---|---|---|
|
||||
| 清雅素妆 | 日常、初遇、闺中 | 妆容清雅、淡扫蛾眉、素妆清颜 |
|
||||
| 冷艳霜妆 | 正式、对峙、权力 | 妆容冷艳、眉眼锋利、薄唇冷冽 |
|
||||
| 柔媚桃妆 | 甜宠、暧昧、心动 | 桃花妆、眼尾微红、唇色水润 |
|
||||
| 病弱梨妆 | 受伤、虚弱 | 面色苍白、唇色极淡、眼下微红 |
|
||||
| 华贵凤妆 | 大婚、盛装 | 浓妆华美、朱唇凤眼 |
|
||||
|
||||
### 通用底肤(所有妆容共享)
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 质感 | 水光肌、自然透亮 | 水光肌、奶油瓷肌、luminous skin |
|
||||
| 白度 | 冷白皮、通透不惨白 | 牛奶肌、milky white skin |
|
||||
| 内透光 | 从内向外柔光感 | 内透光感、皮肤通透发光 |
|
||||
| 禁止 | 哑光/死白/蜡感/油光/过曝 | — |
|
||||
|
||||
### 分部位(以清雅素妆为例)
|
||||
|
||||
| 部位 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 底妆 | 轻薄通透、水光微光泽 | 底妆轻薄、水光奶油肌 |
|
||||
| 眉妆 | 远山眉/柳叶眉、灰棕淡扫 | 远山黛眉、淡扫蛾眉 |
|
||||
| 眼妆 | 极淡眼影、内眼线、睫毛纤长 | 眼妆清透、睫毛纤长 |
|
||||
| 腮红 | 极淡薄粉、苹果肌微扫 | 腮红极淡、薄粉微醺 |
|
||||
| 唇妆 | 水润浅粉、微光泽 | 唇色水润浅粉 |
|
||||
|
||||
### 男性妆容
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 底肤 | 水光奶油肌、白皙透亮、清爽自然 | 水光肌、奶油肌、luminous skin |
|
||||
| 原则 | 伪素颜——看着没化妆但皮肤极好 | 伪素颜、天生好皮 |
|
||||
| 眉毛 | 自然浓眉、不画眉 | 剑眉自然、眉形英挺 |
|
||||
| 唇色 | 自然血色、微润 | 唇色自然、血色感 |
|
||||
|
||||
---
|
||||
|
||||
## 四、发型造型约束(L2)
|
||||
|
||||
### 女性造型类型
|
||||
|
||||
| 造型 | 描述 | 适用 | 提示词 |
|
||||
|---|---|---|---|
|
||||
| 半挽云髻 | 发顶挽髻+后方垂发 | 日常、出行 | 半挽云髻、青丝半绾 |
|
||||
| 飞仙髻 | 高髻飞挑、飘逸 | 仙境、亮相 | 飞仙髻、高髻飞挑 |
|
||||
| 堕马髻 | 侧偏低髻、慵懒 | 私密、暧昧 | 堕马髻、慵懒侧髻 |
|
||||
| 双环髻 | 双髻对称、少女 | 年轻角色 | 双环髻、少女双髻 |
|
||||
| 全散发 | 长发全散、配简单发饰 | 受伤、落魄 | 长发散落、青丝如瀑 |
|
||||
| 束发马尾 | 高束干练 | 习武、行动 | 束发高马尾、干练利落 |
|
||||
|
||||
### 女性发饰
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 风格 | 极繁主义,与服饰配套 | 极繁主义发饰、华美精致 |
|
||||
| 材质 | 金属 + 珠玉 + 流苏 | 金丝流苏、珠翠满头 |
|
||||
| 工艺 | 大师工艺、超精细 | 大师工艺、精雕细琢 |
|
||||
|
||||
### 男性造型类型
|
||||
|
||||
| 造型 | 适用 | 提示词 |
|
||||
|---|---|---|
|
||||
| 束发半冠 | 日常、文人 | 束发半冠、玉簪束发 |
|
||||
| 全冠高束 | 正式、朝堂 | 全冠高束、玉冠束发 |
|
||||
| 散发披肩 | 私密、受伤 | 散发披肩、长发如墨 |
|
||||
| 战束马尾 | 战斗、习武 | 高束战发、马尾利落 |
|
||||
|
||||
---
|
||||
|
||||
## 五、服饰约束(L3+L4)
|
||||
|
||||
### 女性服饰矩阵
|
||||
|
||||
| 风格 | 款式 | 适用 | 提示词 |
|
||||
|---|---|---|---|
|
||||
| 仙气飘逸装 | 多层大袖衫、魏晋制 | 日常、仙境 | 大袖衫、多层衣衫、衣料飘逸 |
|
||||
| 端庄礼服 | 曲裾深衣/襦裙 | 朝堂、宴会 | 曲裾深衣、端庄华美 |
|
||||
| 轻便常服 | 窄袖襦裙/短衫 | 行动、习武 | 窄袖短衫、轻便利落 |
|
||||
| 寝衣 | 薄纱内衫、素色 | 室内、夜间 | 素色寝衣、宽松舒适 |
|
||||
| 大婚嫁衣 | 凤冠霞帔、层叠红装 | 婚礼 | 凤冠霞帔、层叠红裳 |
|
||||
|
||||
### 女性服饰通用约束
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 主色 | 白色/月白/银灰为默认 | 白色精致衣服、素衣如雪 |
|
||||
| 材质 | 厚实飘逸 + 刺绣 + 珠光面料 | 衣料厚实飘逸、珠光刺绣 |
|
||||
| 质感 | 纹理必须超清晰 | 衣服质感清晰、纹理超清晰 |
|
||||
| 肩部 | 肩饰/披帛/云肩 | 云肩华美、肩头有装饰 |
|
||||
| 层次 | 多层叠穿、层次分明 | 多层叠穿、层次分明 |
|
||||
|
||||
### 男性服饰矩阵
|
||||
|
||||
| 风格 | 适用 | 提示词 |
|
||||
|---|---|---|
|
||||
| 文人雅装 | 日常、书房 | 宽袖长衫、月白衣衫 |
|
||||
| 武将劲装 | 战斗、练武 | 窄袖劲装、深色战服 |
|
||||
| 玄衣大氅 | 出场、夜行 | 墨色大氅、披风猎猎 |
|
||||
| 常服便装 | 休闲、私密 | 素色常服、简约便装 |
|
||||
| 礼服朝服 | 朝堂、典礼 | 正式朝服、华贵礼袍 |
|
||||
|
||||
---
|
||||
|
||||
## 六、配饰约束(L5)
|
||||
|
||||
### 女性配饰
|
||||
|
||||
| 类型 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 头饰 | 极繁主义、不单薄 | 极繁主义头饰、珠翠满头 |
|
||||
| 耳饰 | 垂坠流苏/玉珰 | 流苏耳环、玉珰垂坠 |
|
||||
| 项饰 | 璎珞/项圈 | 璎珞华美、精致项圈 |
|
||||
| 腰饰 | 宫绦/玉佩 | 宫绦飘逸、腰间玉佩 |
|
||||
| 手饰 | 玉镯/臂钏 | 玉镯通透、臂钏精致 |
|
||||
|
||||
### 男性配饰
|
||||
|
||||
| 类型 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 发冠 | 玉冠/金冠、精致 | 玉冠束发 |
|
||||
| 腰封 | 宽腰封/革带 | 宽腰封、质感分明 |
|
||||
| 玉佩 | 通透温润 | 腰间玉佩 |
|
||||
| 兵器 | 佩剑/扇/笛(可选) | 长剑在侧、折扇半掩 |
|
||||
|
||||
---
|
||||
|
||||
## 七、服化组合速查
|
||||
|
||||
| 场景 | 妆容 | 发型 | 服饰 | 配饰 |
|
||||
|---|---|---|---|---|
|
||||
| 日常闺中 | 清雅素妆 | 半挽云髻 | 仙气飘逸装 | 中等 |
|
||||
| 初次相遇 | 清雅素妆 | 半挽/飞仙 | 仙气飘逸装 | 中偏多 |
|
||||
| 甜宠互动 | 柔媚桃妆 | 半挽/堕马 | 仙气/轻便 | 中等 |
|
||||
| 正式亮相 | 冷艳霜妆 | 飞仙髻 | 端庄礼服 | 极繁 |
|
||||
| 夜间密谈 | 清雅/桃妆 | 全散/堕马 | 寝衣 | 极简 |
|
||||
| 受伤落魄 | 病弱梨妆 | 全散(乱) | 破损常服 | 极简/无 |
|
||||
| 大婚典礼 | 华贵凤妆 | 飞仙髻 | 嫁衣 | 极繁 |
|
||||
| 习武行动 | 素妆(极淡) | 束发马尾 | 轻便常服 | 简 |
|
||||
|
||||
---
|
||||
|
||||
## 八、提示词模板
|
||||
|
||||
### 完整服化叠加
|
||||
|
||||
```
|
||||
以角色基础形象图为底图,img2img叠加服化妆造,
|
||||
古风{性别}角色,真人写实摄影,超现实主义纪实,强对比度,极致细节,
|
||||
保持基础形象面容不变,{整体气质},
|
||||
【L1·妆容】{妆容风格},水光奶油瓷肌,{眉妆},{眼妆},{唇妆},
|
||||
【L2·发型】{造型类型},发丝根根分明,{发饰描述},
|
||||
【L3+L4·服饰】{主色}{款式},{材质},{装饰工艺},衣服质感清晰,纹理超清晰,
|
||||
【L5·配饰】{头饰},{耳饰},{项饰},{腰饰},
|
||||
面容细腻渲染,发丝细腻渲染,纹理细节超清晰
|
||||
```
|
||||
|
||||
### 单层替换
|
||||
|
||||
```
|
||||
以已有角色图为底图,img2img仅替换{目标层级},
|
||||
保持其余层级不变,
|
||||
【替换层·{层级}】{详细描述},
|
||||
面容不变,纹理细节超清晰
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、约束规则
|
||||
|
||||
### 必守
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R1 | 叠加后面容必须与底模一致 |
|
||||
| R2 | 服饰必须用「衣服质感清晰 + 纹理超清晰」 |
|
||||
| R3 | 女性配饰必须「极繁主义 + 大师工艺」 |
|
||||
| R4 | 妆容/发型/服饰/配饰风格统一 |
|
||||
|
||||
### 严禁
|
||||
|
||||
| 编号 | 严禁 |
|
||||
|---|---|
|
||||
| X1 | 叠加后面容偏移 |
|
||||
| X2 | 配饰过于简单/现代化(女性) |
|
||||
| X3 | 妆容/服饰风格互相冲突 |
|
||||
|
||||
|
||||
@ -1,122 +0,0 @@
|
||||
# 道具图像生成 · 约束手册
|
||||
|
||||
---
|
||||
|
||||
## 一、道具设计原则
|
||||
|
||||
1. **功能可读** — 道具用途一目了然,造型服务于功能
|
||||
2. **质感极致** — 材质纹理必须清晰可辨(金属/玉石/木/布/纸)
|
||||
3. **年代一致** — 所有道具必须符合古风世界观,禁止现代元素
|
||||
4. **尺度明确** — 通过参照物或标注暗示道具真实尺寸
|
||||
|
||||
---
|
||||
|
||||
## 二、道具分类与美学约束
|
||||
|
||||
### 2.1 兵器类
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 类型 | 剑/刀/弓/枪/扇 | {兵器类型},古风兵器 |
|
||||
| 材质 | 精钢/玄铁 + 宝石镶嵌 + 丝绸剑穗 | 寒光凛冽、精钢锻造 |
|
||||
| 装饰 | 剑鞘/刀柄雕花、流苏、暗纹 | 雕花精致、流苏垂坠 |
|
||||
| 光泽 | 金属冷光泽、刃口反光 | 寒光闪烁、金属质感 |
|
||||
| 提示词 | 古风{兵器},精钢锻造,寒光凛冽,雕花精致 | — |
|
||||
|
||||
### 2.2 饰品类
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 类型 | 簪/钗/璎珞/玉佩/手镯/耳坠 | {饰品类型},古风首饰 |
|
||||
| 材质 | 金/银/玉/珍珠/宝石 | 金丝编织、玉质通透 |
|
||||
| 工艺 | 极致精细、花丝/掐丝/镶嵌 | 大师工艺、精雕细琢 |
|
||||
| 光泽 | 珠光/玉润/金属光泽 | 珠光莹润、金属光泽 |
|
||||
| 提示词 | 古风{饰品},{材质},大师工艺,精雕细琢 | — |
|
||||
|
||||
### 2.3 生活器物类
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 类型 | 茶具/酒具/香炉/棋盘/书卷/灯笼 | {器物类型},古风器物 |
|
||||
| 材质 | 瓷/铜/竹/木/纸 | 青瓷温润、紫铜古朴 |
|
||||
| 质感 | 釉面/木纹/竹节清晰 | 釉面光泽、木纹清晰 |
|
||||
| 风格 | 素雅/华贵按场景切换 | 素雅古朴 / 华贵精致 |
|
||||
| 提示词 | 古风{器物},{材质}质感,纹理清晰 | — |
|
||||
|
||||
### 2.4 信物/关键道具类
|
||||
|
||||
| 项目 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 类型 | 信物/令牌/卷轴/药瓶/玉印 | {道具类型},古风道具 |
|
||||
| 特殊性 | 需有辨识度、叙事象征意义 | 独特造型、寓意深远 |
|
||||
| 做旧感 | 可按剧情需要添加年代感 | 古旧斑驳 / 崭新精致 |
|
||||
| 提示词 | 古风{道具},{材质},{状态},独特造型 | — |
|
||||
|
||||
---
|
||||
|
||||
## 三、多角度设定图规范
|
||||
|
||||
### 视图定义
|
||||
|
||||
| 位置 | 视图 | 角度 | 要求 | 提示词 |
|
||||
|---|---|---|---|---|
|
||||
| 左 | 正面图 | 正面 0° | 道具完整正面形态 | front view |
|
||||
| 中 | 侧面图 | 侧面 90° | 厚度/轮廓/结构清晰 | side view |
|
||||
| 右 | 细节特写 | 局部放大 | 材质纹理/工艺细节 | detail closeup |
|
||||
|
||||
### 画面规范
|
||||
|
||||
| 项目 | 约束 |
|
||||
|---|---|
|
||||
| 布局 | 同一画面三视图并排 |
|
||||
| 背景 | 纯净中性灰 #E8E8E8 |
|
||||
| 光线 | 均匀柔光,无硬阴影 |
|
||||
| 比例 | 道具占画面主体 70%+ |
|
||||
| 投影 | 允许自然地面微投影 |
|
||||
| 画面比例 | 建议 3:1 |
|
||||
|
||||
---
|
||||
|
||||
## 四、材质渲染约束
|
||||
|
||||
| 材质 | 渲染要求 | 提示词 |
|
||||
|---|---|---|
|
||||
| 金属 | 反光/高光/冷光泽、划痕微可见 | 金属质感、冷光泽、反光清晰 |
|
||||
| 玉石 | 内透光、温润、微通透 | 玉质通透、温润如脂 |
|
||||
| 木质 | 木纹清晰、年轮可见 | 木纹清晰、质感温润 |
|
||||
| 瓷器 | 釉面光泽、色泽均匀 | 釉面光泽、瓷质温润 |
|
||||
| 布/纸 | 纤维质感、边缘自然 | 布料纹理、纸质古朴 |
|
||||
| 宝石 | 折射/内部光线、切面清晰 | 宝石璀璨、光芒折射 |
|
||||
|
||||
---
|
||||
|
||||
## 五、提示词模板
|
||||
|
||||
```
|
||||
古风道具设定图,真人写实摄影风格,超现实主义纪实,强对比度,极致细节,
|
||||
{道具类型},{材质描述},{工艺/装饰描述},{状态描述},
|
||||
同一画面三视图:正面图+侧面图+细节特写,
|
||||
纯净中性灰背景,均匀柔光,无硬阴影,
|
||||
材质纹理超清晰,质感写实,{材质光泽描述}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、约束规则
|
||||
|
||||
### 必守
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R1 | 必须指定「纯净中性灰背景」 |
|
||||
| R2 | 必须明确道具材质与工艺 |
|
||||
| R3 | 道具造型必须符合古风世界观 |
|
||||
|
||||
### 严禁
|
||||
|
||||
| 编号 | 严禁 |
|
||||
|---|---|
|
||||
| X1 | 复杂场景背景 |
|
||||
| X2 | 道具与人物同画面(本环节为纯道具图) |
|
||||
|
||||
|
||||
@ -1,120 +0,0 @@
|
||||
# 道具衍生状态生成 · 约束手册
|
||||
|
||||
---
|
||||
|
||||
## 一、衍生原则
|
||||
|
||||
1. **造型锚定** — 道具核心造型/轮廓在所有状态中可识别
|
||||
2. **状态可读** — 状态差异必须一目了然,观众能立即区分
|
||||
3. **叙事服务** — 每种状态变体服务于特定剧情节点
|
||||
4. **渐进退化** — 损伤/老化状态应有合理的物理逻辑
|
||||
|
||||
---
|
||||
|
||||
## 二、状态类型
|
||||
|
||||
### 2.1 使用状态
|
||||
|
||||
| 状态 | 描述 | 适用道具 | 提示词 |
|
||||
|---|---|---|---|
|
||||
| 崭新 | 完好无损、光泽如新 | 所有道具 | 崭新、完好无损、光泽如新 |
|
||||
| 日常使用 | 微磨损、自然包浆 | 兵器/器物/饰品 | 日常使用痕迹、自然包浆 |
|
||||
| 陈旧 | 明显年代感、色泽暗淡 | 器物/信物/卷轴 | 古旧斑驳、年代感、色泽暗沉 |
|
||||
|
||||
### 2.2 损伤状态
|
||||
|
||||
| 状态 | 描述 | 适用道具 | 提示词 |
|
||||
|---|---|---|---|
|
||||
| 微损 | 小裂纹/小缺口/轻微磨损 | 瓷器/玉佩/兵器 | 细微裂纹、轻微缺口 |
|
||||
| 破损 | 明显裂缝/断裂/破碎 | 瓷器/饰品/兵器 | 裂缝明显、碎裂、断裂 |
|
||||
| 残片 | 仅剩部分/碎片 | 瓷器/玉佩/信物 | 残片、碎片、仅存半块 |
|
||||
|
||||
### 2.3 特殊状态
|
||||
|
||||
| 状态 | 描述 | 适用道具 | 提示词 |
|
||||
|---|---|---|---|
|
||||
| 染血 | 血迹附着 | 兵器/衣物/信物 | 血迹斑驳、染血 |
|
||||
| 浸水/湿润 | 水渍、湿润反光 | 卷轴/信物/衣物 | 浸水、纸张湿润、墨迹晕染 |
|
||||
| 燃烧/焦损 | 焦黑边缘、火烧痕迹 | 卷轴/信物/木质品 | 边缘焦黑、火烧痕迹 |
|
||||
| 发光/激活 | 内在能量、光芒四射 | 信物/法器/玉石 | 微微发光、内蕴光华 |
|
||||
| 包裹/封存 | 用布/盒子包裹 | 信物/饰品/秘物 | 锦布包裹、木盒封存 |
|
||||
|
||||
---
|
||||
|
||||
## 三、状态变体画面规范
|
||||
|
||||
### 单状态图
|
||||
|
||||
| 项目 | 约束 |
|
||||
|---|---|
|
||||
| 背景 | 纯净中性灰 #E8E8E8(与设定图一致) |
|
||||
| 光线 | 均匀照明,无硬阴影 |
|
||||
| 角度 | 与原设定图正面图一致 |
|
||||
| 比例 | 道具占画面主体 70%+ |
|
||||
|
||||
### 状态对比图
|
||||
|
||||
| 项目 | 约束 |
|
||||
|---|---|
|
||||
| 布局 | 同一画面并排展示 2-3 种状态 |
|
||||
| 标注 | 每种状态下方标注状态名 |
|
||||
| 一致性 | 角度/光线/背景完全一致,仅状态不同 |
|
||||
|
||||
---
|
||||
|
||||
## 四、材质状态变化规则
|
||||
|
||||
| 材质 | 崭新 → 日常 | 日常 → 陈旧 | 损伤表现 |
|
||||
|---|---|---|---|
|
||||
| 金属 | 亮光泽 → 微包浆 | 包浆 → 锈蚀斑点 | 缺口/卷刃/断裂 |
|
||||
| 玉石 | 通透温润 → 微磨损 | 磨损 → 表面微裂 | 裂纹/碎裂/缺角 |
|
||||
| 木质 | 新木纹理 → 自然包浆 | 包浆 → 色泽暗沉 | 开裂/断裂/虫蛀 |
|
||||
| 瓷器 | 釉面光泽 → 微划痕 | 划痕 → 釉面暗淡 | 裂纹/碎裂/缺口 |
|
||||
| 布/纸 | 崭新平整 → 微皱折 | 皱折 → 发黄变脆 | 撕裂/焦损/墨迹晕染 |
|
||||
|
||||
---
|
||||
|
||||
## 五、提示词模板
|
||||
|
||||
### 单状态变体
|
||||
|
||||
```
|
||||
基于{道具名}设定图,真人写实摄影风格,超现实主义纪实,强对比度,极致细节,
|
||||
{道具类型},{材质描述},
|
||||
当前状态:{状态名},{状态视觉描述},
|
||||
{材质表面变化描述},
|
||||
纯净中性灰背景,均匀柔光,
|
||||
材质纹理超清晰,状态细节可辨
|
||||
```
|
||||
|
||||
### 状态对比图
|
||||
|
||||
```
|
||||
{道具名}状态对比图,真人写实摄影风格,超现实主义纪实,
|
||||
同一画面并排展示:{状态A} + {状态B} + {状态C},
|
||||
角度/光线/背景一致,仅状态不同,
|
||||
{每种状态的简要描述},
|
||||
纯净中性灰背景,均匀柔光,材质纹理超清晰
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、约束规则
|
||||
|
||||
### 必守
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R1 | 道具核心造型/轮廓在所有状态中可识别 |
|
||||
| R2 | 状态变化须符合物理逻辑 |
|
||||
| R3 | 对比图中角度/光线/背景一致 |
|
||||
|
||||
### 严禁
|
||||
|
||||
| 编号 | 严禁 |
|
||||
|---|---|
|
||||
| X1 | 状态变化后道具不可识别 |
|
||||
| X2 | 违反物理逻辑的损伤(玉石生锈等) |
|
||||
| X3 | 过度血腥/恐怖的损伤描绘 |
|
||||
|
||||
|
||||
@ -1,104 +0,0 @@
|
||||
# 场景图生成 · 约束手册
|
||||
|
||||
---
|
||||
|
||||
## 一、场景美学原则
|
||||
|
||||
1. **空间叙事** — 场景承载情绪与叙事功能,不是纯背景板
|
||||
2. **层次纵深** — 所有场景必须具备前/中/后景,杜绝扁平
|
||||
3. **质感至上** — 木纹/石质/布料/水面等材质纹理必须超清晰
|
||||
|
||||
---
|
||||
|
||||
## 二、季节色调映射
|
||||
|
||||
| 季节 | 主色调 | 辅色调 | 提示词 |
|
||||
|---|---|---|---|
|
||||
| 春 | 青翠 + 桃粉 | 月白、鹅黄 | 春色青翠、桃花灼灼 |
|
||||
| 夏 | 碧绿 + 荷粉 | 天青、莲白 | 夏荷碧绿、浓荫蔽日 |
|
||||
| 秋 | 赤红 + 金黄 | 琥珀、暮灰 | 秋枫赤红、金叶飘零 |
|
||||
| 冬 | 素白 + 霜银 | 墨玉黑、冰蓝 | 冬雪素白、枯枝霜挂 |
|
||||
|
||||
---
|
||||
|
||||
## 三、室内场景
|
||||
|
||||
### 空间规范
|
||||
|
||||
| 维度 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 风格 | 古代宅邸/宫殿/书房/闺阁,魏晋至唐宋 | 古代{朝代}风格 |
|
||||
| 材质 | 木质为主、石/玉/绢/纱为辅 | 檀木家具、玉石屏风、绢纱帷幔 |
|
||||
| 色调 | 低饱和暖木色 + 月白纱幔 + 青瓷 | 暖木色调、素雅陈设 |
|
||||
| 纵深 | 前/中/后景层次 | 前景{元素}、中景{元素}、后景{元素} |
|
||||
| 质感 | 木纹/布料垂感/瓷器光泽可辨 | 纹理清晰、质感写实 |
|
||||
|
||||
### 室内类型速查
|
||||
|
||||
| 类型 | 核心元素 | 氛围词 |
|
||||
|---|---|---|
|
||||
| 闺阁/卧房 | 纱帐、梳妆台、铜镜、花瓶 | 温馨私密、纱幔轻垂 |
|
||||
| 书房/书斋 | 书架、卷轴、笔墨、棋盘 | 幽静雅致、墨香四溢 |
|
||||
| 大殿/正厅 | 高柱、匾额、帷幕、烛台 | 庄严华美、气势恢宏 |
|
||||
| 庭院回廊 | 廊柱、石栏、花木、灯笼 | 曲径通幽、灯影摇曳 |
|
||||
| 厨房/膳堂 | 灶台、蒸笼、食器 | 烟火气息、温馨日常 |
|
||||
|
||||
---
|
||||
|
||||
## 四、室外场景
|
||||
|
||||
### 空间规范
|
||||
|
||||
| 维度 | 约束 | 提示词 |
|
||||
|---|---|---|
|
||||
| 类型 | 庭院/山林/溪畔/古桥/集市 | {场景},{季节},{时间} |
|
||||
| 天候 | 晴/阴/薄雾/细雨/飞雪 | 薄雾弥漫、细雨如丝 |
|
||||
| 植被 | 梅/竹/松/桃花/柳/荷(须符合季节) | 桃花灼灼、翠竹成林 |
|
||||
| 水体 | 溪/湖/瀑布需有光影反射 | 溪水潺潺、湖面如镜 |
|
||||
| 建筑 | 飞檐斗拱、青瓦白墙、石桥木亭 | 飞檐翘角、石拱桥 |
|
||||
| 空气感 | 必须有空气透视,远处偏灰偏蓝 | 远山如黛、空气透视 |
|
||||
|
||||
### 室外类型速查
|
||||
|
||||
| 类型 | 核心元素 | 氛围词 |
|
||||
|---|---|---|
|
||||
| 庭院花园 | 假山、池塘、花木、石径 | 花影扶疏、曲径通幽 |
|
||||
| 山林竹海 | 古木、竹林、山石、云雾 | 层峦叠嶂、云雾缥缈 |
|
||||
| 溪畔湖边 | 溪流、卵石、垂柳、荷花 | 溪水潺潺、柳影婆娑 |
|
||||
| 古桥长亭 | 石拱桥、长亭、柳树 | 长亭古道、杨柳依依 |
|
||||
| 集市街道 | 酒旗、摊贩、灯笼 | 热闹市井、烟火人间 |
|
||||
| 屋顶天台 | 瓦片、飞檐、夜空 | 月下独酌、清风徐来 |
|
||||
|
||||
---
|
||||
|
||||
## 五、提示词模板
|
||||
|
||||
```
|
||||
古风场景,真人写实摄影风格,超现实主义纪实,强对比度,极致细节,
|
||||
{室内/室外},{场景类型},{朝代风格},{季节+时间},
|
||||
前景:{元素},中景:{元素},后景:{元素},
|
||||
{色调描述},{天候/氛围元素},
|
||||
{材质描述},空气透视,纹理细节超清晰
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、约束规则
|
||||
|
||||
### 必守
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R1 | 场景必须有「前中后景层次」 |
|
||||
| R2 | 室外必须包含「空气透视」 |
|
||||
|
||||
### 严禁
|
||||
|
||||
| 编号 | 严禁 |
|
||||
|---|---|
|
||||
| X1 | 背景纯白/纯黑/无场景 |
|
||||
| X2 | 极端天候(暴风雨/雷电/暴雪,除非剧情需要) |
|
||||
| X3 | 场景无纵深/无层次 |
|
||||
| X4 | 植被/天候与季节矛盾 |
|
||||
|
||||
|
||||
@ -1,132 +0,0 @@
|
||||
# 场景衍生资产生成 · 约束手册
|
||||
|
||||
---
|
||||
|
||||
## 一、衍生原则
|
||||
|
||||
1. **空间一致** — 建筑结构/布局/材质在所有变体中保持一致
|
||||
2. **景别驱动** — 同一场景通过不同景别展示不同叙事功能
|
||||
3. **时段切换** — 同一空间在不同时间段呈现不同光影氛围
|
||||
4. **天候变化** — 同一空间在不同天气下呈现不同情绪
|
||||
|
||||
---
|
||||
|
||||
## 二、景别变体
|
||||
|
||||
### 景别定义
|
||||
|
||||
| 景别 | 范围 | 叙事功能 | 提示词 |
|
||||
|---|---|---|---|
|
||||
| 大全景 | 场景全貌 + 周围环境 | 建立空间感、定位 | extreme wide shot、大全景 |
|
||||
| 全景 | 场景完整呈现 | 展示空间结构 | wide shot、全景 |
|
||||
| 中景 | 场景局部区域 | 聚焦功能区 | medium shot、中景 |
|
||||
| 近景 | 场景细部 | 材质/氛围道具特写 | close shot、近景 |
|
||||
| 特写 | 极局部细节 | 材质纹理/关键道具 | extreme closeup、特写 |
|
||||
|
||||
### 景别衍生规范
|
||||
|
||||
| 从基准图衍生 | 保持不变 | 允许变化 |
|
||||
|---|---|---|
|
||||
| 大全景 → 全景 | 建筑外观、整体布局 | 视角收窄、前景增加 |
|
||||
| 全景 → 中景 | 材质、色调、光线 | 裁切聚焦、景深变化 |
|
||||
| 中景 → 近景 | 材质、色调 | 景深浅、背景虚化 |
|
||||
| 近景 → 特写 | 材质纹理 | 极浅景深、微距感 |
|
||||
|
||||
---
|
||||
|
||||
## 三、时段变体
|
||||
|
||||
### 时段定义
|
||||
|
||||
| 时段 | 视觉特征 | 提示词 |
|
||||
|---|---|---|
|
||||
| 清晨 | 薄雾柔光、色调偏冷暖交织 | 晨光微熹、清晨薄雾 |
|
||||
| 正午 | 明亮、阴影短、色彩鲜明 | 正午阳光、光线明亮 |
|
||||
| 黄昏 | 金色色调、长影、天空渐变 | 暮色金辉、golden hour |
|
||||
| 夜间(月光) | 冷蓝色调、幽静清冷 | 月光清辉、moonlight |
|
||||
| 夜间(灯火) | 暖黄点缀、明暗对比 | 灯火阑珊、烛光点点 |
|
||||
|
||||
### 时段衍生规范
|
||||
|
||||
| 从基准时段衍生 | 保持不变 | 变化项 |
|
||||
|---|---|---|
|
||||
| 日间 → 黄昏 | 建筑/布局/材质 | 天空色调暖化、影子拉长 |
|
||||
| 日间 → 夜间 | 建筑/布局/材质 | 整体变暗、增加灯火/月色氛围 |
|
||||
| 室内日间 → 室内夜间 | 空间结构、家具 | 整体色调暖化、增加烛火/灯笼元素 |
|
||||
|
||||
---
|
||||
|
||||
## 四、天候变体
|
||||
|
||||
### 天候定义
|
||||
|
||||
| 天候 | 视觉特征 | 提示词 |
|
||||
|---|---|---|
|
||||
| 晴天 | 明亮、阴影清晰 | 晴空万里、阳光明媚 |
|
||||
| 阴天 | 光线均匀、无硬影 | 阴天柔光、overcast |
|
||||
| 薄雾 | 能见度降低、空气朦胧 | 薄雾弥漫、雾气缭绕 |
|
||||
| 细雨 | 水珠、湿润反光、雨丝 | 细雨如丝、雨幕轻纱 |
|
||||
| 飞雪 | 白色覆盖、雪花飘落 | 飞雪纷纷、银装素裹 |
|
||||
|
||||
### 天候衍生规范
|
||||
|
||||
| 从基准天候衍生 | 保持不变 | 变化项 |
|
||||
|---|---|---|
|
||||
| 晴 → 薄雾 | 建筑/布局 | 增加雾气层、远景模糊、饱和度降低 |
|
||||
| 晴 → 细雨 | 建筑/布局 | 增加雨丝、地面反光、色调偏冷 |
|
||||
| 晴 → 飞雪 | 建筑/布局 | 增加积雪、雪花、色调偏白 |
|
||||
| 植被需随天候逻辑适配 | — | 雨中花瓣湿润、雪中枯枝挂霜 |
|
||||
|
||||
---
|
||||
|
||||
## 五、提示词模板
|
||||
|
||||
### 景别变体
|
||||
|
||||
```
|
||||
基于{场景名}概念图,真人写实摄影风格,超现实主义纪实,强对比度,极致细节,
|
||||
{景别}视角,保持场景空间结构一致,
|
||||
{前景},{中景},{后景},
|
||||
{色调},{景深描述},
|
||||
纹理细节超清晰,空气透视
|
||||
```
|
||||
|
||||
### 时段变体
|
||||
|
||||
```
|
||||
基于{场景名}概念图,真人写实摄影风格,超现实主义纪实,强对比度,极致细节,
|
||||
{时段}时分,保持场景空间结构一致,
|
||||
{天空色调变化},{氛围调整},
|
||||
纹理细节超清晰
|
||||
```
|
||||
|
||||
### 天候变体
|
||||
|
||||
```
|
||||
基于{场景名}概念图,真人写实摄影风格,超现实主义纪实,强对比度,极致细节,
|
||||
{天候}天气,保持场景空间结构一致,
|
||||
{天候视觉特征},{色调变化},{材质表面变化},
|
||||
{植被适配描述},纹理细节超清晰
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、约束规则
|
||||
|
||||
### 必守
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R1 | 场景空间结构在所有变体中保持一致 |
|
||||
| R2 | 时段变体必须调整天空色调与氛围 |
|
||||
| R3 | 天候变体必须适配植被/材质表面 |
|
||||
|
||||
### 严禁
|
||||
|
||||
| 编号 | 严禁 |
|
||||
|---|---|
|
||||
| X1 | 变体间建筑结构/布局不一致 |
|
||||
| X2 | 天候与季节矛盾(夏天飞雪等) |
|
||||
| X3 | 变体间材质/风格突变 |
|
||||
|
||||
|
||||
@ -1,164 +0,0 @@
|
||||
# 分镜图生成 · 约束手册
|
||||
|
||||
---
|
||||
|
||||
## 一、构图三原则
|
||||
|
||||
1. **景别即情绪** — 景别选择直接决定观众与角色的心理距离
|
||||
2. **角度即态度** — 仰/俯/平视传递权力关系与情感立场
|
||||
3. **光影即叙事** — 打光方案必须服务于当前情节的情感基调
|
||||
|
||||
---
|
||||
|
||||
## 二、景别规范
|
||||
|
||||
| 景别 | 画面范围 | 适用场景 | 提示词 | 构图要点 |
|
||||
|---|---|---|---|---|
|
||||
| 大特写 | 面部局部(眼/唇/手) | 情绪爆发、关键道具 | 极致特写、微距 | 主体占 80%+,背景全虚 |
|
||||
| 特写 | 面部至颈部 | 内心独白、情感反应 | 面部特写 | 面部占 60%+,浅景深 |
|
||||
| 近景 | 胸部以上 | 对话、表情 | 近景、胸部以上 | 三分法偏置,留视线空间 |
|
||||
| 半身 | 腰部以上 | 人物展示、主视觉 | 半身照 | 人物占 50-70% |
|
||||
| 全身 | 完整人物 | 服饰全貌、亮相 | 全身照 | 人物占 40-60%,头脚留白 |
|
||||
| 远景 | 人物 + 大面积环境 | 场景建立、氛围 | 远景、全景 | 人物占 15-30% |
|
||||
|
||||
---
|
||||
|
||||
## 三、镜头角度
|
||||
|
||||
| 角度 | 效果 | 适用 | 提示词 |
|
||||
|---|---|---|---|
|
||||
| 平视 | 平等、亲近 | 日常、对话 | eye level |
|
||||
| 微仰 15° | 英气、高贵 | 亮相、权势 | slight low angle |
|
||||
| 俯视 30° | 柔弱、可怜 | 受伤、示弱 | high angle |
|
||||
| 侧面 45° | 轮廓美、意境 | 沉思、侧颜 | three-quarter view |
|
||||
| 正侧 90° | 剪影、轮廓 | 意境、对峙 | profile view |
|
||||
| 荷兰角 | 不安、冲突 | 打斗、危机 | Dutch angle |
|
||||
|
||||
---
|
||||
|
||||
## 四、构图法则
|
||||
|
||||
| 构图 | 适用场景 |
|
||||
|---|---|
|
||||
| 中心构图 | 正式亮相、权力感 |
|
||||
| 三分法 | 对话、情感互动、留白 |
|
||||
| 对角线 | 动态、追逐、冲突 |
|
||||
| 框架式 | 偷窥视角、窗前独坐 |
|
||||
| 引导线 | 走廊/桥/栏杆纵深 |
|
||||
| 留白式 | 孤独、意境远景 |
|
||||
|
||||
---
|
||||
|
||||
## 五、情节 × 镜头速查
|
||||
|
||||
| 情节类型 | 景别 | 角度 | 构图 |
|
||||
|---|---|---|---|
|
||||
| 初次相遇 | 全身/半身 | 平视/微仰 | 三分法 |
|
||||
| 暧昧互动 | 近景/特写 | 平视/俯视 | 中心/三分法 |
|
||||
| 深情对视 | 特写/大特写 | 平视 | 中心构图 |
|
||||
| 独自思念 | 半身/远景 | 侧面 45° | 框架/留白 |
|
||||
| 冲突对峙 | 半身/近景 | 微仰/正侧 | 对角线 |
|
||||
| 追逐奔跑 | 全身/远景 | 平视/微仰 | 对角线/引导线 |
|
||||
| 受伤落泪 | 特写/近景 | 俯视 | 中心构图 |
|
||||
| 大场面亮相 | 全身/远景 | 微仰 | 中心/留白 |
|
||||
| 隐秘偷看 | 近景/半身 | 平视 | 框架式 |
|
||||
| 离别远去 | 远景 | 平视/正侧 | 留白/引导线 |
|
||||
|
||||
---
|
||||
|
||||
## 六、光影方案
|
||||
|
||||
| 编号 | 方案名 | 核心效果 | 适用场景 | 提示词 |
|
||||
|---|---|---|---|---|
|
||||
| A | 珠光柔漫光 | 均匀柔亮、肤感通透 | 日常、对话、甜宠 | soft lighting、pearly glow |
|
||||
| B | 侧逆光仙气光 | 发丝/衣袂边缘光 | 出场亮相、仙境 | rim light、backlit glow |
|
||||
| C | 烛光暖影光 | 半明半暗、暖色渐变 | 夜间室内、暧昧 | candlelight、warm side light |
|
||||
| D | 月光冷辉光 | 冷蓝色调、清冷气氛 | 夜间室外、独处 | moonlight、cold blue light |
|
||||
| E | 窗纱透光 | 柔和侧光、光影斑驳 | 室内日间、窗前 | window light、filtered daylight |
|
||||
| F | 天光漫射光 | 无硬阴影、均匀散射 | 远景、雾中场景 | overcast light、diffused daylight |
|
||||
|
||||
### 禁用光型
|
||||
|
||||
正顶硬光 · 正底光 · 闪光灯直闪 · 彩色霓虹光 · 过度HDR均匀光 · 现代人工光源
|
||||
|
||||
### 情节 × 光影速查
|
||||
|
||||
| 情节类型 | 光影方案 |
|
||||
|---|---|
|
||||
| 日常甜宠 | A·珠光柔漫光 |
|
||||
| 仙境/亮相 | B·侧逆光仙气光 |
|
||||
| 夜间密谈/暧昧 | C·烛光暖影光 |
|
||||
| 夜间独处/思念 | D·月光冷辉光 |
|
||||
| 室内日间/窗前 | E·窗纱透光 |
|
||||
| 远景/雾中 | F·天光漫射光 |
|
||||
|
||||
---
|
||||
|
||||
## 七、人物速查
|
||||
|
||||
### 女性核心锚词
|
||||
|
||||
面容清冷、妩媚狭长眼、五官立体、冷白皮、水光肌、皮肤通透发光、
|
||||
黑色长发发丝根根分明、{当前服化方案关键词}
|
||||
|
||||
### 男性核心锚词
|
||||
|
||||
棱角分明、剑眉星目、清冷俊逸、肤色白皙、皮肤质感细腻、
|
||||
墨发束冠、{当前服化方案关键词}
|
||||
|
||||
---
|
||||
|
||||
## 八、场景速查
|
||||
|
||||
- 室内:古代{朝代}风格,{材质},{光线},前中后景层次
|
||||
- 室外:{场景+季节+时间},{天候},{植被},空气透视
|
||||
|
||||
---
|
||||
|
||||
## 九、提示词模板
|
||||
|
||||
```
|
||||
古风写实摄影,超现实主义纪实,强对比度,极致细节,甜宠短剧,
|
||||
{景别},{角度},{构图},
|
||||
{人物名},{面容锚词},{肤感锚词},{表情/情绪},
|
||||
{发型},{服饰},{配饰},
|
||||
{场景类型},{色调},{氛围元素},
|
||||
{动作描述},
|
||||
{光影方案},
|
||||
面容细腻渲染,发丝细腻渲染,纹理细节超清晰
|
||||
```
|
||||
|
||||
### 示例
|
||||
|
||||
```
|
||||
古风写实摄影,超现实主义纪实,强对比度,极致细节,甜宠短剧,
|
||||
近景,平视,三分法,
|
||||
女主,面容清冷、妩媚狭长眼、五官立体,冷白皮、水光肌,微微低头浅笑,
|
||||
半挽云髻、发丝根根分明,白色大袖衫、珠光刺绣,极繁主义头饰、大师工艺,
|
||||
庭院花园,春色青翠,桃花灼灼、花瓣飘落,
|
||||
低头拈花浅笑,
|
||||
柔和光线、soft lighting,
|
||||
面容细腻渲染,发丝细腻渲染,纹理细节超清晰
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十、约束规则
|
||||
|
||||
### 必守
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R1 | 每条必须指定「景别 + 角度」 |
|
||||
| R2 | 场景必须有「前中后景」或明确纵深描述 |
|
||||
| R3 | 必须指定光影方案 |
|
||||
|
||||
### 严禁
|
||||
|
||||
| 编号 | 严禁 |
|
||||
|---|---|
|
||||
| X1 | 正顶硬光/正底光/闪光灯直闪 |
|
||||
| X2 | 背景纯白/纯黑/无场景(除非特殊设定) |
|
||||
| X3 | 服饰透视/暴露/现代剪裁 |
|
||||
|
||||
|
||||
@ -1,171 +0,0 @@
|
||||
# 分镜视频提示词策略 · 约束手册
|
||||
|
||||
---
|
||||
|
||||
## 一、视频生成原则
|
||||
|
||||
1. **静制动** — 以静态分镜图为锚点,动态描述为增量,防止画面崩坏
|
||||
2. **动作克制** — 单镜头内动作幅度小而精,避免大幅度运动导致变形
|
||||
3. **运镜叙事** — 摄像机运动服务于情绪,不为炫技
|
||||
4. **一致性优先** — 角色面容/服饰在运动中必须保持稳定
|
||||
|
||||
---
|
||||
|
||||
## 二、运镜类型
|
||||
|
||||
| 运镜 | 效果 | 适用场景 | 提示词 |
|
||||
|---|---|---|---|
|
||||
| 静止 | 稳定、专注 | 对话、凝视、特写 | static camera、fixed shot |
|
||||
| 缓推 | 逐渐聚焦、情绪递进 | 心动瞬间、发现 | slow push in、dolly in |
|
||||
| 缓拉 | 揭示环境、抽离 | 场景建立、离别 | slow pull out、dolly out |
|
||||
| 横摇 | 跟随、环境展示 | 行走、场景扫视 | pan left/right、horizontal pan |
|
||||
| 竖摇 | 展示全身、揭示 | 人物亮相、从头到脚 | tilt up/down、vertical pan |
|
||||
| 跟随 | 伴随人物移动 | 行走、奔跑 | tracking shot、follow |
|
||||
| 环绕 | 360°展示、戏剧性 | 亮相、对峙 | orbit shot、circular dolly |
|
||||
| 升降 | 宏大感、力量感 | 大场面、鸟瞰 | crane up/down |
|
||||
|
||||
---
|
||||
|
||||
## 三、人物动作约束
|
||||
|
||||
### 安全动作(推荐)
|
||||
|
||||
| 动作类型 | 描述 | 提示词 |
|
||||
|---|---|---|
|
||||
| 微表情 | 眨眼、微笑、蹙眉、唇角微动 | subtle expression、微笑、蹙眉 |
|
||||
| 头部 | 微转头、微低头、抬头 | slight head turn、微低头 |
|
||||
| 眼神 | 眼神流转、对视、移开视线 | eye movement、眼波流转 |
|
||||
| 发丝 | 风吹发丝、发丝轻扬 | hair flowing in wind |
|
||||
| 手部 | 拈花、执扇、抬手、抚琴 | hand gesture、拈花微笑 |
|
||||
| 衣袂 | 衣袂飘动、袖摆摇曳 | flowing robes、衣袂飘扬 |
|
||||
| 环境 | 花瓣飘落、烟雾缭绕、水波荡漾 | falling petals、smoke rising |
|
||||
|
||||
### 中等动作(谨慎使用)
|
||||
|
||||
| 动作类型 | 描述 | 提示词 |
|
||||
|---|---|---|
|
||||
| 起身/落座 | 缓慢站起、缓慢坐下 | slowly standing、slowly sitting |
|
||||
| 转身 | 缓慢转身 | slowly turning around |
|
||||
| 行走 | 缓步行走 | walking slowly、步履轻盈 |
|
||||
| 饮茶/倒酒 | 缓慢动作 | pouring tea、drinking |
|
||||
|
||||
### 危险动作(尽量避免)
|
||||
|
||||
| 动作类型 | 风险 | 替代方案 |
|
||||
|---|---|---|
|
||||
| 奔跑 | 肢体变形 | 用跟随运镜暗示速度 |
|
||||
| 武打 | 身体崩坏 | 分解为多个静态关键帧 |
|
||||
| 拥抱 | 双人交叠变形 | 用近景手部/肩部暗示 |
|
||||
| 骑马 | 复杂运动叠加 | 用特写+环境暗示 |
|
||||
|
||||
---
|
||||
|
||||
## 四、时长与节奏
|
||||
|
||||
| 镜头类型 | 建议时长 | 运镜速度 | 说明 |
|
||||
|---|---|---|---|
|
||||
| 特写/表情 | 2-3s | 静止或极缓推 | 聚焦微表情变化 |
|
||||
| 对话近景 | 3-4s | 静止 | 稳定出词,交替切换 |
|
||||
| 全身亮相 | 3-5s | 缓推/竖摇 | 展示服饰全貌 |
|
||||
| 远景建立 | 4-6s | 缓拉/横摇 | 环境氛围渲染 |
|
||||
| 行走跟随 | 3-5s | 跟随 | 匀速、稳定 |
|
||||
| 转场空镜 | 2-3s | 缓推/静止 | 环境元素特写 |
|
||||
|
||||
---
|
||||
|
||||
## 五、视频提示词结构
|
||||
|
||||
### 三层结构
|
||||
|
||||
视频提示词由三层组成,确保静态画面、动态行为、技术参数分离:
|
||||
|
||||
| 层级 | 内容 | 说明 |
|
||||
|---|---|---|
|
||||
| **画面层** | 继承分镜图提示词 | 人物/场景/光影/风格 |
|
||||
| **动态层** | 动作 + 运镜 + 环境动态 | 运动描述 |
|
||||
| **参数层** | 时长 + 帧率 + 节奏 | 技术控制 |
|
||||
|
||||
---
|
||||
|
||||
## 六、提示词模板
|
||||
|
||||
```
|
||||
【画面层·继承分镜】
|
||||
古风写实摄影,超现实主义纪实,强对比度,极致细节,
|
||||
{景别},{角度},{构图},
|
||||
{人物描述},{服化描述},
|
||||
{场景描述},{光影方案}
|
||||
|
||||
【动态层】
|
||||
人物动作:{动作描述}
|
||||
运镜方式:{运镜类型}
|
||||
环境动态:{花瓣/烟雾/水波/风等}
|
||||
面容保持:保持人物面容稳定不变形
|
||||
|
||||
【参数层】
|
||||
时长:{N}秒
|
||||
节奏:{缓慢/中等/快速}
|
||||
画面稳定性:高(优先保持角色一致性)
|
||||
```
|
||||
|
||||
### 示例
|
||||
|
||||
```
|
||||
【画面层】
|
||||
古风写实摄影,超现实主义纪实,强对比度,极致细节,
|
||||
近景,平视,三分法,
|
||||
女主,面容清冷、妩媚狭长眼,冷白皮、水光肌,含羞微笑,
|
||||
半挽云髻、白色大袖衫、珠光刺绣,极繁主义头饰,
|
||||
庭院花园,春色青翠,桃花树下,柔和光线
|
||||
|
||||
【动态层】
|
||||
人物动作:微低头浅笑,手指轻拈花瓣
|
||||
运镜方式:static camera,极缓推
|
||||
环境动态:花瓣缓缓飘落,发丝微扬
|
||||
面容保持:面容稳定不变形
|
||||
|
||||
【参数层】
|
||||
时长:3秒
|
||||
节奏:缓慢
|
||||
画面稳定性:高
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、运镜 × 情节速查
|
||||
|
||||
| 情节类型 | 推荐运镜 | 推荐时长 | 动态要素 |
|
||||
|---|---|---|---|
|
||||
| 初次相遇 | 缓推 / 竖摇 | 4-5s | 发丝微扬、衣袂轻动 |
|
||||
| 暧昧互动 | 静止 / 极缓推 | 3-4s | 微表情、眼神流转 |
|
||||
| 深情对视 | 静止 | 3s | 微表情、睫毛微颤 |
|
||||
| 出场亮相 | 竖摇(从下到上) | 4-5s | 衣袂飘动、发饰摇曳 |
|
||||
| 独自思念 | 缓拉 | 4-5s | 烛光摇曳、纱帘飘动 |
|
||||
| 离别远去 | 缓拉 | 5-6s | 背影渐远、花瓣飘落 |
|
||||
| 场景建立 | 横摇 / 缓推 | 4-6s | 雾气、水波、树叶 |
|
||||
|
||||
---
|
||||
|
||||
## 八、约束规则
|
||||
|
||||
### 必守
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R1 | 必须继承分镜图的完整画面层提示词 |
|
||||
| R2 | 必须声明「面容保持稳定不变形」 |
|
||||
| R3 | 必须指定运镜类型和时长 |
|
||||
| R4 | 单镜头内动作不超过两个 |
|
||||
| R5 | 优先使用安全动作,危险动作需拆解 |
|
||||
|
||||
### 严禁
|
||||
|
||||
| 编号 | 严禁 |
|
||||
|---|---|
|
||||
| X1 | 单镜头内大幅度复杂动作 |
|
||||
| X2 | 快速运镜导致画面模糊 |
|
||||
| X3 | 多人复杂交互动作(拥抱/打斗) |
|
||||
| X4 | 运镜与情绪基调矛盾 |
|
||||
| X5 | 时长超过 6 秒的单镜头 |
|
||||
|
||||
|
||||
@ -1,70 +0,0 @@
|
||||
# 导演规划 · 古风甜宠写实超现实主义 · 风格技法参考
|
||||
|
||||
---
|
||||
|
||||
## 一、主题立意与叙事核心
|
||||
|
||||
### 风格适配要点
|
||||
|
||||
- **冷中带暖、疏中见密** — 本风格的情感表达不靠台词铺陈,靠画面留白与微表情。主题立意应偏向含蓄内敛,避免直白煽情
|
||||
- **超现实不等于奇幻** — "超现实"在本风格中指极致美感下的情感放大(慢镜花瓣、光影氤氲),不是魔法特效。叙事核心应扎根于人物情感,不依赖奇观
|
||||
- **甜宠的克制** — 甜的部分用"差一点就碰到"比"黏在一起"更有效。情感主线应设计"欲说还休"的推拉节奏
|
||||
- **离场感受建议方向** — 心疼 / 意难平 / 怦然心动 / 治愈。避免"爽感""热血"等与本风格气质不匹配的方向
|
||||
|
||||
---
|
||||
|
||||
## 二、视觉风格与画面基调
|
||||
|
||||
### 风格适配要点
|
||||
|
||||
- **色调基底** — 全片以月白(C1)、冷白肤(C2)、青黛(C6)为基底色,整体色温偏冷(5800-7000K),饱和度中低(30-50%),呈现清冷仙气的高级灰调。暖色(琥珀暖 C7、珠光金 C3、烟霞粉 C5)仅在甜宠/烛光/黄昏段落局部点缀,用冷暖对比做叙事
|
||||
- **光影即叙事** — 6 套光影方案对应不同情绪段落,导演规划阶段应在段落层面确定光影基调方向,而非逐镜指定:
|
||||
|
||||
| 情绪段落 | 光影方向 | 色调倾向 |
|
||||
|---|---|---|
|
||||
| 日常甜宠 | A·珠光柔漫 | 冷白底 + 微暖肤光 |
|
||||
| 仙境亮相 | B·侧逆仙气 | 月白 + 珠光金边缘光 |
|
||||
| 夜间暧昧 | C·烛光暖影 | 琥珀暖主导 + 墨玉黑暗部 |
|
||||
| 夜间孤寂 | D·月光冷辉 | 青黛 + 霜雪银 |
|
||||
| 室内日间 | E·窗纱透光 | 冷白底 + 侧光斑驳 |
|
||||
| 远景/雾中 | F·天光漫射 | 青黛远景 + 月白雾气 |
|
||||
|
||||
- **质感方向** — 真人写实摄影的超清纪实感:毛孔可见、发丝根根分明、纹理细节超清晰。强对比度 + 极致细节是画面质感锚点,不是胶片颗粒,不是水墨写意
|
||||
- **构图偏好** — 大量留白(孤独/意境)、框架式(偷窥/暗恋/纱帘后的人影)、三分法(对话/日常)是最常用三种。中心构图留给正式亮相和权力场景
|
||||
- **镜头运动** — 以静制动为主。缓推/缓拉服务于情绪递进,快切碎剪与本风格气质不兼容
|
||||
|
||||
---
|
||||
|
||||
## 三、叙事结构与节奏规划
|
||||
|
||||
### 风格适配要点
|
||||
|
||||
- **慢是基本功** — 本风格的画面信息密度高(服化细节、场景质感),需要给观众"看"的时间。整体节奏偏慢,不等于拖沓,而是每个镜头都有信息量
|
||||
- **情绪曲线宜缓坡** — 避免"平平平→突然爆发"。用渐进式情绪递进,每个段落比上一个段落情绪浓度高一级
|
||||
- **转折点用视觉而非台词** — 关键转折点的处理方式应优先考虑画面手段(光影突变、景别跳切、空镜隐喻),而非依赖对白解释
|
||||
- **段落间用空镜过渡** — 本风格有丰富的场景资产(不同时段/天候变体),段落衔接建议用场景空镜做情绪缓冲,不要硬切
|
||||
- **高潮段落的"快"不是剪辑快** — 是情绪密度高。可以用更紧密的景别切换(全身→近景→特写→大特写)制造加速感,而非缩短镜头时长
|
||||
|
||||
---
|
||||
|
||||
## 四、分场景情绪与画面意图
|
||||
|
||||
### 风格适配要点
|
||||
|
||||
- **情绪目标用具象词** — 不说"开心",说"偷偷心动后的嘴角压不住"。具象的情绪描述能更好地指导后续分镜选择景别和表情
|
||||
- **氛围方向对应光影体系** — 每场戏的氛围方向应能映射到光影方案(A-F)的方向。日常甜→柔光,暗恋偷看→窗光侧影,夜间表白→烛光暖影
|
||||
- **镜头意图写"为什么"而非"怎么拍"** — "用特写是为了让观众看到她眼里的犹豫"优于"用特写拍她的脸"。意图清晰了,分镜自然能选对景别和角度
|
||||
- **注意古风场景的空间叙事** — 纱帘后的模糊人影 = 隔阂;推开门看到满庭花开 = 释然;独坐窗前雨幕 = 孤寂。善用场景元素传递情绪,减少对台词的依赖
|
||||
- **甜宠场景的"距离感"设计** — 初期:远景/半身,物理距离大;中期:近景,距离缩短但有遮挡物(屏风/纱帘);后期:特写/大特写,零距离。用景别变化映射关系变化
|
||||
|
||||
---
|
||||
|
||||
## 五、声音与音乐方向
|
||||
|
||||
### 风格适配要点
|
||||
|
||||
- **主导乐器** — 古琴 / 箫 / 笛 适合清冷孤寂段落;琵琶 / 二胡 适合情感激荡段落;弦乐铺底可增加电影感但不宜喧宾夺主
|
||||
- **沉默比配乐更有力** — 关键情感瞬间(对视、泪落、转身离去)优先考虑去掉配乐,只留环境音(风声、雨声、衣料摩擦)。甜宠风格的"甜"往往在沉默后观众自己脑补出来
|
||||
- **环境音是氛围一半** — 古风场景的环境音层次:蝉鸣虫唱 / 溪水潺潺 / 风过竹林 / 市井叫卖 / 夜雨滴檐。每场戏标注 1-2 个核心环境音,帮助后续音效设计
|
||||
- **配乐情绪跟着段落走** — 不逐场配乐,按第③部分的段落划分给每段定一个音乐情绪基调。同段落内场景切换靠环境音变化过渡,不频繁换曲
|
||||
- **避免满配** — 全片配乐覆盖率建议不超过 60%。留白段落的"无声"与配乐段落形成呼吸感
|
||||
@ -1,57 +0,0 @@
|
||||
# 分镜表设计 · 古风甜宠写实超现实主义 · 风格技法参考
|
||||
|
||||
---
|
||||
|
||||
## 一、分镜表定位
|
||||
|
||||
分镜表是导演将剧本转化为镜头语言的核心工具。表单字段由导演根据项目需要自行设定(分镜号、景别、运镜、时长、人物、事件、台词、光影、情绪、转场等),以下仅提供本风格下的技法参考和注意事项。
|
||||
|
||||
---
|
||||
|
||||
## 二、风格适配要点
|
||||
|
||||
### 景别选择
|
||||
|
||||
- **甜宠戏的景别递进** — 同场戏内景别应随情感升温递进:半身→近景→特写→大特写。不要一上来就怼特写,留出情绪上升空间
|
||||
- **远景不是过场** — 古风场景资产精细度高,远景镜头本身就有叙事价值(孤独感、空间压迫、季节氛围)。给远景足够时长(4-6s),别急着切走
|
||||
- **大特写要有理由** — 大特写(眼/唇/手)是情绪核弹,一集用 2-3 次足够。滥用会让观众疲劳
|
||||
|
||||
### 运镜节奏
|
||||
|
||||
- **默认静止** — 本风格 60% 以上镜头应为静止机位,让画面的服化细节和场景质感自己说话
|
||||
- **缓推 = 情绪递进** — "观众靠近角色"的心理暗示,适合心动、发现、窥视
|
||||
- **缓拉 = 情绪抽离** — "观众退开"的心理暗示,适合离别、孤独、揭示全貌
|
||||
- **禁用快速运镜** — 甩镜、急推、手持晃动与本风格气质冲突
|
||||
|
||||
### 时长把控
|
||||
|
||||
- **特写/表情镜头** — 2-3s,聚焦微表情变化
|
||||
- **对话近景** — 3-4s,稳定出词
|
||||
- **全身亮相** — 3-5s,展示服化全貌
|
||||
- **远景/空镜** — 4-6s,氛围渲染
|
||||
- **单镜头不超过 6s** — 超过 6s 观众注意力衰减,需要运镜或动态元素维持
|
||||
|
||||
### 人物与动作
|
||||
|
||||
- **单镜头动作不超过两个** — "低头拈花 + 微笑"可以,"低头拈花 + 微笑 + 转身 + 抬手"会崩
|
||||
- **甜宠互动用暗示** — 手指差一点碰到、衣袂擦过、目光追随又移开。不要在分镜表里写"拥抱""接吻"等大幅度双人交互,拆成暗示性的局部镜头
|
||||
- **古风动作要慢** — 所有人物动作默认慢速。起身、转身、抬手都应标注"缓慢"
|
||||
|
||||
### 台词与留白
|
||||
|
||||
- **台词少的镜头给长时长** — 无台词的情绪镜头往往比有台词的更需要时间。沉默 3 秒比一句台词更有张力
|
||||
- **一句台词对应一个镜头** — 避免在单镜头内塞多句对白,切换说话者时应切镜头
|
||||
- **旁白镜头用远景或空镜** — 内心独白配近景容易显得嘴唇不动很假,配远景或场景空镜更自然
|
||||
|
||||
### 光影与氛围
|
||||
|
||||
- **同场戏光影统一** — 一场戏内不应出现两种以上光影方案,除非有明确的叙事转折(如烛光被吹灭→月光冷辉)
|
||||
- **光影转场是高级手段** — 从窗纱透光(E)渐变到烛光暖影(C)= 日转夜的时间流逝。在分镜表中标注光影变化点
|
||||
- **环境动态增加画面呼吸感** — 花瓣飘落、烟雾升腾、水波荡漾、纱帘飘动。每 3-4 个镜头至少安排一个有环境动态的镜头,避免画面"死"掉
|
||||
|
||||
### 转场设计
|
||||
|
||||
- **默认硬切** — 同场戏内镜头间用硬切,干净利落
|
||||
- **场景切换用空镜过渡** — 不同场景间插入 1 个场景空镜(2-3s)做情绪缓冲
|
||||
- **段落切换可用叠化/淡入淡出** — 大段落间的情绪跳跃用柔性转场,避免观众出戏
|
||||
- **禁用花式转场** — 划屏、旋转、百叶窗等与本风格不兼容
|
||||
@ -1,65 +0,0 @@
|
||||
# 全局美学基础 · 古风甜宠写实超现实主义
|
||||
|
||||
---
|
||||
|
||||
## 一、风格基因
|
||||
|
||||
| 维度 | 定义 |
|
||||
|---|---|
|
||||
| **一级风格** | 古风写实超现实主义(Ancient-Chinese Photorealistic Surrealism) |
|
||||
| **二级风格** | 真人写实摄影 · 极致细节纪实 |
|
||||
| **情感基调** | 甜宠向 — 冷中带暖、疏中见密 |
|
||||
| **质感锚词** | 强对比度、极致细节、超现实主义纪实 |
|
||||
|
||||
---
|
||||
|
||||
## 二、全局色彩盘
|
||||
|
||||
| 序号 | 色名 | 色值 | 用途 |
|
||||
|---|---|---|---|
|
||||
| C1 | 月白 | #D6E4EC | 主服底色、雾气、纱幔 |
|
||||
| C2 | 冷白肤 | #F5EDE8 | 女性肤色基准 |
|
||||
| C2b | 暖白肤 | #F5E6D8 | 男性肤色基准 |
|
||||
| C3 | 珠光金 | #E8D5B0 | 刺绣、配饰高光、头饰 |
|
||||
| C4 | 墨玉黑 | #1A1A2E | 发色、眼瞳、描边 |
|
||||
| C5 | 烟霞粉 | #F2D7D5 | 唇色、腮红、花瓣 |
|
||||
| C6 | 青黛 | #4A6670 | 远景山水、暗部补色 |
|
||||
| C7 | 琥珀暖 | #C9A96E | 暖光、烛光、夕照 |
|
||||
| C8 | 霜雪银 | #C0C7CE | 兵器、水面反光、银饰 |
|
||||
| C9 | 中性灰 | #E8E8E8 | 设定图背景 |
|
||||
| C10 | 素白 | #F8F6F0 | 基础中衣色 |
|
||||
|
||||
### 色温约束
|
||||
|
||||
| 参数 | 值 | 说明 |
|
||||
|---|---|---|
|
||||
| 整体色温 | 偏冷 5800-7000K | 清冷仙气 |
|
||||
| 肤色色温 | 微暖 5200-5600K | 冷白但有生命感 |
|
||||
| 对比度 | 强 | 明暗反差鲜明 |
|
||||
| 饱和度 | 中低 30-50% | 高级灰调 |
|
||||
|
||||
---
|
||||
|
||||
## 三、全局约束规则
|
||||
|
||||
### 必守规则(所有技能继承)
|
||||
|
||||
| 编号 | 规则 |
|
||||
|---|---|
|
||||
| R1 | 必须包含「真人写实摄影」风格锚定词 |
|
||||
| R2 | 必须声明「强对比度 + 极致细节」 |
|
||||
| R3 | 面部必须使用「面容细腻渲染 + 皮肤细腻」 |
|
||||
| R4 | 发丝必须使用「根根分明 + 发丝细腻渲染」 |
|
||||
| R5 | 纹理必须声明「纹理细节超清晰」 |
|
||||
|
||||
### 严禁项(所有技能继承)
|
||||
|
||||
| 编号 | 严禁内容 |
|
||||
|---|---|
|
||||
| X1 | 严禁「卡通/动漫/二次元/插画风」 |
|
||||
| X2 | 严禁「高饱和荧光色/霓虹色」 |
|
||||
| X3 | 严禁「现代元素入镜」 |
|
||||
| X4 | 严禁「面部变形/多指/肢体异常」倾向词 |
|
||||
| X5 | 严禁「裸体/暴露/透视/暗示性描述」 |
|
||||
|
||||
|
||||
@ -1,90 +0,0 @@
|
||||
---
|
||||
name: production_agent_decision.md
|
||||
description: >-
|
||||
视频制作决策层Agent技能。负责需求分析、任务拆解、流水线调度与质量管控。
|
||||
当用户请求衍生资产提取、资产生成、导演规划、分镜表构建、分镜图生成等制作任务时激活。
|
||||
调度派发规范见 production_agent_skills/decision/decision_dispatch.md,
|
||||
流水线按阶段拆分见 production_agent_skills/decision/pipeline_derive_analysis.md、pipeline_derive_generation.md、pipeline_director_plan.md、pipeline_storyboard_table.md、pipeline_storyboard_gen.md。
|
||||
---
|
||||
|
||||
# 决策层 Agent 技能指令
|
||||
|
||||
你是视频制作项目的**决策层 Agent**,**只负责决策和任务派发**:理解用户意图、拆解任务、调度执行层与监督层、把控质量。
|
||||
你是唯一与用户直接对接的 Agent,执行层和监督层只接收你派发的指令。
|
||||
|
||||
**核心原则:**
|
||||
- **决策层不执行具体任务**,不读取工作区数据(不调用 get_flowData),不直接操作任何资产或分镜数据。所有具体工作由执行层完成。
|
||||
- **决策层不做执行层的判断**,执行层返回什么结论就基于该结论决策下一步。
|
||||
|
||||
## 核心职责
|
||||
|
||||
1. **需求分析**:解析用户请求,判断属于流水线哪个阶段
|
||||
2. **任务拆解**:将复杂请求分解为可执行的子任务
|
||||
3. **调度执行**:通过 `run_sub_agent` 派发任务到执行层
|
||||
4. **质量管控**:通过 `run_sub_agent` 调用监督层审核产出物
|
||||
5. **记忆检索**:通过 `deepRetrieve` 获取历史上下文和项目进度记忆
|
||||
|
||||
---
|
||||
|
||||
## 制作流水线
|
||||
|
||||
制作流水线包含五个阶段,**必须按顺序执行**:
|
||||
```
|
||||
阶段1: 衍生资产分析 → 阶段2: 衍生资产生成(可选) → 阶段3: 导演规划 → 阶段4: 构建分镜表 → 阶段5: 生成分镜
|
||||
```
|
||||
|
||||
### 审核规则
|
||||
|
||||
- **需要审核**的阶段:阶段3(导演规划)、阶段4(构建分镜表)
|
||||
- **不需要审核**的阶段:阶段1(分析结果由用户直接确认)、阶段2(用户已确认清单)、阶段5(图片生成为异步操作)
|
||||
|
||||
### 资产约束
|
||||
|
||||
- 阶段3、4、5 **只能使用资产库中已存在的资产**(包括阶段2生成的衍生资产)
|
||||
- 若用户在阶段1跳过衍生资产生成,后续阶段仅使用原有资产库
|
||||
|
||||
各阶段详细定义(输入/输出/质量门/前置条件)按需加载:
|
||||
|
||||
| 阶段 | 触发词 | 流水线定义 |
|
||||
|------|--------|------------|
|
||||
| 衍生资产分析 | 衍生资产、资产分析、derive、提取衍生 | [pipeline_derive_analysis.md](production_agent_skills/decision/pipeline_derive_analysis.md) |
|
||||
| 衍生资产生成(可选) | 生成衍生、确认生成 | [pipeline_derive_generation.md](production_agent_skills/decision/pipeline_derive_generation.md) |
|
||||
| 导演规划 | 导演规划、拍摄计划、制作计划、plan | [pipeline_director_plan.md](production_agent_skills/decision/pipeline_director_plan.md) |
|
||||
| 构建分镜表 | 分镜表、分镜面板、storyboard | [pipeline_storyboard_table.md](production_agent_skills/decision/pipeline_storyboard_table.md) |
|
||||
| 生成分镜 | 生成分镜图、分镜图片、生成图片 | [pipeline_storyboard_gen.md](production_agent_skills/decision/pipeline_storyboard_gen.md) |
|
||||
|
||||
调度派发规范、审核结果处理、交互协议详见 [decision_dispatch.md](production_agent_skills/decision/decision_dispatch.md)。
|
||||
|
||||
---
|
||||
|
||||
## 记忆检索策略
|
||||
|
||||
在以下场景使用 `deepRetrieve`:
|
||||
|
||||
1. **新会话开始**:检索项目当前进度、已完成阶段
|
||||
2. **用户提到之前的内容**:检索相关历史产出摘要
|
||||
3. **质量问题追溯**:检索之前的审核结果和修改记录
|
||||
4. **判断前置条件**:检索各阶段是否已完成,决定是否可以进入下一阶段
|
||||
|
||||
> **注意**:`deepRetrieve` 用于检索历史记忆和进度状态,不用于读取工作区当前数据。工作区数据由执行层和监督层在执行时自行读取。
|
||||
|
||||
---
|
||||
|
||||
## 与用户交互规范
|
||||
|
||||
1. **进度汇报**:每完成一个阶段,向用户汇报结果摘要(来自执行层返回)和下一步计划
|
||||
2. **审核结果展示**:阶段3、4由监督 Agent 审核后展示报告给用户,决策层等待用户反馈即可
|
||||
3. **等待用户决策**:审核发现问题时,**必须等待用户明确指示**后再执行修复,不可自行决定
|
||||
4. **衍生资产确认**:衍生资产分析完成后,必须将新增资产清单展示给用户确认,用户可选择全部生成、部分生成或跳过
|
||||
5. **资产约束告知**:若用户跳过衍生资产生成,需告知后续阶段将仅使用资产库中已有资产
|
||||
6. **基于执行层结论决策**:执行层返回"不需要衍生资产"时,直接告知用户并进入阶段3
|
||||
7. **不暴露内部机制**:不向用户提及 Agent 名称、工具名称等实现细节
|
||||
|
||||
---
|
||||
|
||||
## 错误处理
|
||||
|
||||
- 执行层返回错误 → 分析错误原因,调整指令重新派发(最多重试2次)
|
||||
- 监督层发现质量问题 → 等待用户确认修复方案 → 根据用户指示构建修复指令派发执行层
|
||||
- 前置条件不满足 → 提示用户需要先完成哪个阶段
|
||||
- 记忆检索无结果 → 请求用户提供必要上下文
|
||||
@ -1,36 +0,0 @@
|
||||
---
|
||||
name: production_agent_execution.md
|
||||
description: >-
|
||||
视频制作执行层Agent路由。根据决策层派发的任务类型,加载对应的独立技能文件执行。
|
||||
当收到决策层的 run_sub_agent 调用时激活。
|
||||
---
|
||||
|
||||
# 执行层 Agent — 任务路由
|
||||
|
||||
你是视频制作项目的**执行层 Agent**,只接收决策层派发的任务指令并执行。
|
||||
|
||||
## 任务路由表
|
||||
|
||||
收到任务后,根据指令中的关键词匹配对应技能文件,加载并执行:
|
||||
|
||||
| 标识词 | 技能文件 | 说明 |
|
||||
|--------|----------|------|
|
||||
| 衍生资产、资产分析、derive assets | [production_execution_derive_assets.md](production_agent_skills/execution/production_execution_derive_assets.md) | 分析剧本识别衍生资产,写入并生成图片 |
|
||||
| 导演规划、拍摄计划、director plan | [production_execution_director_plan.md](production_agent_skills/execution/production_execution_director_plan.md) | 根据剧本和资产制定导演拍摄计划 |
|
||||
| 构建分镜表、分镜面板、storyboard table | [production_execution_storyboard_table.md](production_agent_skills/execution/production_execution_storyboard_table.md) | 根据剧本和资产生成结构化分镜表 |
|
||||
| 生成分镜、分镜图片、storyboard gen | [production_execution_storyboard_gen.md](production_agent_skills/execution/production_execution_storyboard_gen.md) | 根据分镜表生成分镜图片 |
|
||||
|
||||
## 路由规则
|
||||
|
||||
1. 从派发指令中识别任务类型关键词
|
||||
2. 加载对应的技能文件
|
||||
3. 按技能文件中的执行流程完成任务
|
||||
4. 如果无法匹配任务类型,返回提示:`无法识别任务类型,请检查派发指令`
|
||||
|
||||
## 通用执行规则
|
||||
|
||||
以下规则适用于所有执行任务,各技能文件不再重复声明:
|
||||
|
||||
- 执行前先调用 `get_flowData` 确认工作区状态;已有内容在其基础上修改,除非指令要求重写
|
||||
- 只执行当前任务类型对应的工作,不越权执行其他阶段
|
||||
- 完成写入后返回一句简短确认即可,不复述完整内容;返回后本次任务终止
|
||||
@ -1,112 +0,0 @@
|
||||
# 调度与派发规范
|
||||
|
||||
## 派发指令字数限制
|
||||
|
||||
**派发给执行层和监督层的任务指令正文部分严格不超过100字。** 执行层已具备完整的技能指令,只需告知任务类型和关键参数,无需重复执行流程和细节要求。
|
||||
|
||||
## 派发执行任务
|
||||
|
||||
使用 `run_sub_agent` 调用执行层,**必须通过 `skill` 参数指定对应的独立技能文件**,使执行层仅加载该任务所需的上下文:
|
||||
|
||||
| 阶段 | skill 参数 |
|
||||
|------|-----------|
|
||||
| 衍生资产分析 | `production_execution_derive_analysis` |
|
||||
| 衍生资产生成(可选) | `production_execution_derive_generation` |
|
||||
| 导演规划 | `production_execution_director_plan` |
|
||||
| 构建分镜表 | `production_execution_storyboard_table` |
|
||||
| 生成分镜 | `production_execution_storyboard_gen` |
|
||||
|
||||
```
|
||||
run_sub_agent(
|
||||
agent: "executionAI",
|
||||
skill: "<对应技能文件名>",
|
||||
task: "<按模板构建的具体指令>"
|
||||
)
|
||||
```
|
||||
|
||||
## 派发审核任务
|
||||
|
||||
**仅阶段3(导演规划)和阶段4(构建分镜表)需要审核。** 阶段1、2、5 不需要审核。
|
||||
|
||||
阶段3或阶段4执行完毕后,决策层按以下流程操作:
|
||||
|
||||
1. 收到执行层返回的确认消息
|
||||
2. 将该确认消息展示给用户
|
||||
3. **紧接着自动调用监督层审核**(无需等待用户指示):
|
||||
```
|
||||
run_sub_agent(
|
||||
agent: "supervisionAI",
|
||||
task: "请审核【{阶段名}】的产出物。
|
||||
审核维度:{对应维度列表}"
|
||||
)
|
||||
```
|
||||
|
||||
### 不需要审核的阶段处理
|
||||
|
||||
| 阶段 | 执行完毕后操作 |
|
||||
|------|---------------|
|
||||
| 1 衍生资产分析 | 将分析结果展示给用户,等待用户确认是否生成 |
|
||||
| 2 衍生资产生成 | 告知用户资产已写入、图片生成中,直接进入阶段3 |
|
||||
| 5 生成分镜 | 告知用户图片生成已启动,流程结束 |
|
||||
|
||||
## 审核结果处理
|
||||
|
||||
审核由监督 Agent 独立完成。监督 Agent 审核完毕后会将审核报告展示给用户,并等待用户进行处理。
|
||||
|
||||
决策层在派发审核任务后,**等待用户回复即可**。根据用户的反馈执行后续操作:
|
||||
|
||||
| 用户反馈 | 决策层操作 |
|
||||
|----------|-----------|
|
||||
| 通过 / 进入下一阶段 | 派发下一阶段任务 |
|
||||
| 需要修复 | 根据用户指示构建修复指令,派发执行层 |
|
||||
| 重做 | 重新派发当前阶段任务给执行层 |
|
||||
|
||||
## 调度决策树
|
||||
|
||||
| 用户请求 | 处理规则 |
|
||||
|----------|----------|
|
||||
| 明确指定阶段 | 检查前置条件 → 派发该阶段任务 |
|
||||
| "从头开始" / "完整制作" | 从阶段1开始顺序执行 |
|
||||
| "继续" / "下一步" | 通过 `deepRetrieve` 获取上下文 → 判断当前进度 → 从当前阶段继续 |
|
||||
| "修改/优化 X" | 定位到对应阶段 → 派发修改任务(执行层自行读取工作区现有内容后修改) |
|
||||
| 模糊请求 | 通过 `deepRetrieve` 获取上下文 → 判断当前进度 → 从当前阶段继续 |
|
||||
|
||||
## 阶段间交互协议
|
||||
|
||||
### 派发格式
|
||||
|
||||
```
|
||||
你是执行层Agent,请执行【{任务类型}】任务。
|
||||
目标:{一句话目标}
|
||||
上下文:{必要数据摘要}
|
||||
要求:
|
||||
1. {具体步骤1}
|
||||
2. {具体步骤2}
|
||||
...
|
||||
约束:{特殊约束条件}
|
||||
```
|
||||
|
||||
### 审核请求格式
|
||||
|
||||
```
|
||||
请审核【{阶段名}】的产出物。
|
||||
审核维度:
|
||||
- {维度1}
|
||||
- {维度2}
|
||||
...
|
||||
特别关注:{本次需特别检查的点}
|
||||
```
|
||||
|
||||
### 用户决策修复格式
|
||||
|
||||
当用户确认需要修复时,决策层根据用户指示构建修复指令:
|
||||
|
||||
```
|
||||
你是执行层Agent,请修复【{任务类型}】的以下问题。
|
||||
用户确认的修复项:
|
||||
1. {用户选择修复的问题} → 修改为:{用户确认的方案}
|
||||
...
|
||||
保持其余内容不变。
|
||||
```
|
||||
|
||||
> **注意**:修复指令中只包含用户明确确认要修的项,不包含用户未回应或明确跳过的问题。
|
||||
@ -1,40 +0,0 @@
|
||||
# 阶段1:衍生资产分析(Derive Assets Analysis)
|
||||
|
||||
## 全局流程
|
||||
|
||||
1. 决策层派发分析任务给执行层,执行层分析剧本,识别是否需要衍生资产
|
||||
2. 决策层将分析结果展示给用户,等待用户决策
|
||||
3. 用户决策:确认生成 → 进入阶段2 | 跳过生成 → 直接进入阶段3
|
||||
|
||||
## 阶段定义
|
||||
|
||||
```
|
||||
派发:执行层分析剧本,识别是否需要衍生资产
|
||||
输出:衍生资产分析报告(新增衍生资产清单或"无需衍生"结论)
|
||||
前置条件:剧本和资产已存在于工作区
|
||||
```
|
||||
|
||||
## 决策层行为
|
||||
|
||||
执行层返回分析结果后,决策层按以下分支处理:
|
||||
|
||||
| 执行层返回 | 决策层操作 |
|
||||
|-----------|-----------|
|
||||
| "不需要衍生资产" | 向用户简要告知,直接进入阶段3 |
|
||||
| 衍生资产清单(新增资产列表) | 将清单展示给用户,**询问用户是否确认生成这些衍生资产** |
|
||||
|
||||
### 用户确认流程(仅当有新增衍生资产时)
|
||||
|
||||
展示分析结果时,引导用户决策(确认全部/部分生成或跳过)。
|
||||
|
||||
| 用户反馈 | 决策层操作 |
|
||||
|----------|-----------|
|
||||
| 确认生成 / 全部生成 | 进入阶段2(衍生资产生成) |
|
||||
| 部分生成 | 将用户选择的子集传递给阶段2 |
|
||||
| 跳过 / 不需要 | 视为阶段1已完成,直接进入阶段3,后续阶段仅使用资产库中现有资产 |
|
||||
| 调整清单 | 根据用户修改意见,重新派发分析任务或直接将调整后清单传递给阶段2 |
|
||||
|
||||
## 阶段约束
|
||||
|
||||
- 分析结果必须展示给用户确认,不可自动进入生成
|
||||
- 执行层只做分析,不做写入和图片生成
|
||||
@ -1,29 +0,0 @@
|
||||
# 阶段2:衍生资产生成(Derive Assets Generation)
|
||||
|
||||
> **本阶段为可选阶段**,仅在用户确认需要生成衍生资产后才执行。
|
||||
|
||||
## 全局流程
|
||||
|
||||
1. 决策层将用户确认的衍生资产清单派发给执行层
|
||||
2. 执行层完成资产写入和图片生成
|
||||
3. 决策层将执行结果展示给用户,进入阶段3
|
||||
|
||||
## 阶段定义
|
||||
|
||||
```
|
||||
派发:执行层将用户确认的衍生资产写入工作区并生成图片
|
||||
输入:用户确认的衍生资产清单(来自阶段1)
|
||||
输出:衍生资产写入完成 + 图片生成启动
|
||||
前置条件:阶段1完成且用户确认生成
|
||||
```
|
||||
|
||||
## 决策层行为
|
||||
|
||||
- 将用户确认的资产清单作为参数派发给执行层
|
||||
- 若用户在阶段1只选择了部分资产,**只传递用户选择的子集**
|
||||
- 执行层返回确认后,告知用户资产已写入、图片生成中
|
||||
- 图片生成为异步操作,告知用户等待后直接进入阶段3
|
||||
|
||||
## 阶段约束
|
||||
|
||||
- 资产图片生成属于异步操作,派发后告知用户等待即可
|
||||
@ -1,16 +0,0 @@
|
||||
# 阶段3:导演规划(Director Plan)
|
||||
|
||||
## 阶段定义
|
||||
|
||||
```
|
||||
派发:执行层制定导演拍摄计划
|
||||
输出:导演拍摄计划(执行层通过 set_plane 同步到前端)
|
||||
质量门:计划覆盖全部剧情、节奏合理、与资产匹配
|
||||
前置条件:阶段1完成(含跳过阶段2的情况)
|
||||
```
|
||||
|
||||
> 本阶段需要审核。执行完毕后自动派发监督层审核,审核与结果处理流程见 decision_dispatch.md。
|
||||
|
||||
## 阶段特有约束
|
||||
|
||||
- 规划中引用的角色、道具、场景必须在资产列表中存在
|
||||
@ -1,18 +0,0 @@
|
||||
# 阶段5:生成分镜(Storyboard Generation)
|
||||
|
||||
## 全局流程
|
||||
|
||||
1. 决策层派发任务给执行层,执行层调用图片生成接口
|
||||
2. 执行层返回确认后,决策层告知用户图片生成已启动
|
||||
|
||||
## 阶段定义
|
||||
|
||||
```
|
||||
派发:执行层调用图片生成接口生成分镜图片
|
||||
输出:生成的分镜图片
|
||||
前置条件:阶段4(构建分镜表)完成且用户确认
|
||||
```
|
||||
|
||||
## 阶段约束
|
||||
|
||||
- 分镜图片生成属于异步操作,派发后告知用户等待即可
|
||||
@ -1,17 +0,0 @@
|
||||
# 阶段4:构建分镜表(Storyboard Table)
|
||||
|
||||
## 阶段定义
|
||||
|
||||
```
|
||||
派发:执行层将剧本拆分为分镜,生成结构化分镜表
|
||||
输出:结构化分镜表(执行层通过 set_flowData 保存)
|
||||
质量门:分镜拆分粒度合理、字段完整、关联资产正确
|
||||
前置条件:阶段3(导演规划)完成
|
||||
```
|
||||
|
||||
> 本阶段需要审核。执行完毕后自动派发监督层审核,审核与结果处理流程见 decision_dispatch.md。
|
||||
|
||||
## 阶段特有约束
|
||||
|
||||
- `associateAssetsIds` 中的索引必须指向资产库中实际存在的资产
|
||||
- 不得引用资产库中不存在的角色、道具或场景
|
||||
@ -1,70 +0,0 @@
|
||||
# 导演规划 · 古风甜宠写实超现实主义 · 风格技法参考
|
||||
|
||||
---
|
||||
|
||||
## 一、主题立意与叙事核心
|
||||
|
||||
### 风格适配要点
|
||||
|
||||
- **冷中带暖、疏中见密** — 本风格的情感表达不靠台词铺陈,靠画面留白与微表情。主题立意应偏向含蓄内敛,避免直白煽情
|
||||
- **超现实不等于奇幻** — "超现实"在本风格中指极致美感下的情感放大(慢镜花瓣、光影氤氲),不是魔法特效。叙事核心应扎根于人物情感,不依赖奇观
|
||||
- **甜宠的克制** — 甜的部分用"差一点就碰到"比"黏在一起"更有效。情感主线应设计"欲说还休"的推拉节奏
|
||||
- **离场感受建议方向** — 心疼 / 意难平 / 怦然心动 / 治愈。避免"爽感""热血"等与本风格气质不匹配的方向
|
||||
|
||||
---
|
||||
|
||||
## 二、视觉风格与画面基调
|
||||
|
||||
### 风格适配要点
|
||||
|
||||
- **色调基底** — 全片以月白(C1)、冷白肤(C2)、青黛(C6)为基底色,整体色温偏冷(5800-7000K),饱和度中低(30-50%),呈现清冷仙气的高级灰调。暖色(琥珀暖 C7、珠光金 C3、烟霞粉 C5)仅在甜宠/烛光/黄昏段落局部点缀,用冷暖对比做叙事
|
||||
- **光影即叙事** — 6 套光影方案对应不同情绪段落,导演规划阶段应在段落层面确定光影基调方向,而非逐镜指定:
|
||||
|
||||
| 情绪段落 | 光影方向 | 色调倾向 |
|
||||
|---|---|---|
|
||||
| 日常甜宠 | A·珠光柔漫 | 冷白底 + 微暖肤光 |
|
||||
| 仙境亮相 | B·侧逆仙气 | 月白 + 珠光金边缘光 |
|
||||
| 夜间暧昧 | C·烛光暖影 | 琥珀暖主导 + 墨玉黑暗部 |
|
||||
| 夜间孤寂 | D·月光冷辉 | 青黛 + 霜雪银 |
|
||||
| 室内日间 | E·窗纱透光 | 冷白底 + 侧光斑驳 |
|
||||
| 远景/雾中 | F·天光漫射 | 青黛远景 + 月白雾气 |
|
||||
|
||||
- **质感方向** — 真人写实摄影的超清纪实感:毛孔可见、发丝根根分明、纹理细节超清晰。强对比度 + 极致细节是画面质感锚点,不是胶片颗粒,不是水墨写意
|
||||
- **构图偏好** — 大量留白(孤独/意境)、框架式(偷窥/暗恋/纱帘后的人影)、三分法(对话/日常)是最常用三种。中心构图留给正式亮相和权力场景
|
||||
- **镜头运动** — 以静制动为主。缓推/缓拉服务于情绪递进,快切碎剪与本风格气质不兼容
|
||||
|
||||
---
|
||||
|
||||
## 三、叙事结构与节奏规划
|
||||
|
||||
### 风格适配要点
|
||||
|
||||
- **慢是基本功** — 本风格的画面信息密度高(服化细节、场景质感),需要给观众"看"的时间。整体节奏偏慢,不等于拖沓,而是每个镜头都有信息量
|
||||
- **情绪曲线宜缓坡** — 避免"平平平→突然爆发"。用渐进式情绪递进,每个段落比上一个段落情绪浓度高一级
|
||||
- **转折点用视觉而非台词** — 关键转折点的处理方式应优先考虑画面手段(光影突变、景别跳切、空镜隐喻),而非依赖对白解释
|
||||
- **段落间用空镜过渡** — 本风格有丰富的场景资产(不同时段/天候变体),段落衔接建议用场景空镜做情绪缓冲,不要硬切
|
||||
- **高潮段落的"快"不是剪辑快** — 是情绪密度高。可以用更紧密的景别切换(全身→近景→特写→大特写)制造加速感,而非缩短镜头时长
|
||||
|
||||
---
|
||||
|
||||
## 四、分场景情绪与画面意图
|
||||
|
||||
### 风格适配要点
|
||||
|
||||
- **情绪目标用具象词** — 不说"开心",说"偷偷心动后的嘴角压不住"。具象的情绪描述能更好地指导后续分镜选择景别和表情
|
||||
- **氛围方向对应光影体系** — 每场戏的氛围方向应能映射到光影方案(A-F)的方向。日常甜→柔光,暗恋偷看→窗光侧影,夜间表白→烛光暖影
|
||||
- **镜头意图写"为什么"而非"怎么拍"** — "用特写是为了让观众看到她眼里的犹豫"优于"用特写拍她的脸"。意图清晰了,分镜自然能选对景别和角度
|
||||
- **注意古风场景的空间叙事** — 纱帘后的模糊人影 = 隔阂;推开门看到满庭花开 = 释然;独坐窗前雨幕 = 孤寂。善用场景元素传递情绪,减少对台词的依赖
|
||||
- **甜宠场景的"距离感"设计** — 初期:远景/半身,物理距离大;中期:近景,距离缩短但有遮挡物(屏风/纱帘);后期:特写/大特写,零距离。用景别变化映射关系变化
|
||||
|
||||
---
|
||||
|
||||
## 五、声音与音乐方向
|
||||
|
||||
### 风格适配要点
|
||||
|
||||
- **主导乐器** — 古琴 / 箫 / 笛 适合清冷孤寂段落;琵琶 / 二胡 适合情感激荡段落;弦乐铺底可增加电影感但不宜喧宾夺主
|
||||
- **沉默比配乐更有力** — 关键情感瞬间(对视、泪落、转身离去)优先考虑去掉配乐,只留环境音(风声、雨声、衣料摩擦)。甜宠风格的"甜"往往在沉默后观众自己脑补出来
|
||||
- **环境音是氛围一半** — 古风场景的环境音层次:蝉鸣虫唱 / 溪水潺潺 / 风过竹林 / 市井叫卖 / 夜雨滴檐。每场戏标注 1-2 个核心环境音,帮助后续音效设计
|
||||
- **配乐情绪跟着段落走** — 不逐场配乐,按第③部分的段落划分给每段定一个音乐情绪基调。同段落内场景切换靠环境音变化过渡,不频繁换曲
|
||||
- **避免满配** — 全片配乐覆盖率建议不超过 60%。留白段落的"无声"与配乐段落形成呼吸感
|
||||
@ -1,57 +0,0 @@
|
||||
# 分镜表设计 · 古风甜宠写实超现实主义 · 风格技法参考
|
||||
|
||||
---
|
||||
|
||||
## 一、分镜表定位
|
||||
|
||||
分镜表是导演将剧本转化为镜头语言的核心工具。表单字段由导演根据项目需要自行设定(分镜号、景别、运镜、时长、人物、事件、台词、光影、情绪、转场等),以下仅提供本风格下的技法参考和注意事项。
|
||||
|
||||
---
|
||||
|
||||
## 二、风格适配要点
|
||||
|
||||
### 景别选择
|
||||
|
||||
- **甜宠戏的景别递进** — 同场戏内景别应随情感升温递进:半身→近景→特写→大特写。不要一上来就怼特写,留出情绪上升空间
|
||||
- **远景不是过场** — 古风场景资产精细度高,远景镜头本身就有叙事价值(孤独感、空间压迫、季节氛围)。给远景足够时长(4-6s),别急着切走
|
||||
- **大特写要有理由** — 大特写(眼/唇/手)是情绪核弹,一集用 2-3 次足够。滥用会让观众疲劳
|
||||
|
||||
### 运镜节奏
|
||||
|
||||
- **默认静止** — 本风格 60% 以上镜头应为静止机位,让画面的服化细节和场景质感自己说话
|
||||
- **缓推 = 情绪递进** — "观众靠近角色"的心理暗示,适合心动、发现、窥视
|
||||
- **缓拉 = 情绪抽离** — "观众退开"的心理暗示,适合离别、孤独、揭示全貌
|
||||
- **禁用快速运镜** — 甩镜、急推、手持晃动与本风格气质冲突
|
||||
|
||||
### 时长把控
|
||||
|
||||
- **特写/表情镜头** — 2-3s,聚焦微表情变化
|
||||
- **对话近景** — 3-4s,稳定出词
|
||||
- **全身亮相** — 3-5s,展示服化全貌
|
||||
- **远景/空镜** — 4-6s,氛围渲染
|
||||
- **单镜头不超过 6s** — 超过 6s 观众注意力衰减,需要运镜或动态元素维持
|
||||
|
||||
### 人物与动作
|
||||
|
||||
- **单镜头动作不超过两个** — "低头拈花 + 微笑"可以,"低头拈花 + 微笑 + 转身 + 抬手"会崩
|
||||
- **甜宠互动用暗示** — 手指差一点碰到、衣袂擦过、目光追随又移开。不要在分镜表里写"拥抱""接吻"等大幅度双人交互,拆成暗示性的局部镜头
|
||||
- **古风动作要慢** — 所有人物动作默认慢速。起身、转身、抬手都应标注"缓慢"
|
||||
|
||||
### 台词与留白
|
||||
|
||||
- **台词少的镜头给长时长** — 无台词的情绪镜头往往比有台词的更需要时间。沉默 3 秒比一句台词更有张力
|
||||
- **一句台词对应一个镜头** — 避免在单镜头内塞多句对白,切换说话者时应切镜头
|
||||
- **旁白镜头用远景或空镜** — 内心独白配近景容易显得嘴唇不动很假,配远景或场景空镜更自然
|
||||
|
||||
### 光影与氛围
|
||||
|
||||
- **同场戏光影统一** — 一场戏内不应出现两种以上光影方案,除非有明确的叙事转折(如烛光被吹灭→月光冷辉)
|
||||
- **光影转场是高级手段** — 从窗纱透光(E)渐变到烛光暖影(C)= 日转夜的时间流逝。在分镜表中标注光影变化点
|
||||
- **环境动态增加画面呼吸感** — 花瓣飘落、烟雾升腾、水波荡漾、纱帘飘动。每 3-4 个镜头至少安排一个有环境动态的镜头,避免画面"死"掉
|
||||
|
||||
### 转场设计
|
||||
|
||||
- **默认硬切** — 同场戏内镜头间用硬切,干净利落
|
||||
- **场景切换用空镜过渡** — 不同场景间插入 1 个场景空镜(2-3s)做情绪缓冲
|
||||
- **段落切换可用叠化/淡入淡出** — 大段落间的情绪跳跃用柔性转场,避免观众出戏
|
||||
- **禁用花式转场** — 划屏、旋转、百叶窗等与本风格不兼容
|
||||
@ -1,39 +0,0 @@
|
||||
---
|
||||
name: production_execution_derive_assets
|
||||
description: >-
|
||||
执行层技能:衍生资产分析与生成。分析剧本识别衍生资产,写入工作区并可选生成图片。
|
||||
---
|
||||
|
||||
# 衍生资产分析与生成
|
||||
|
||||
## 工具
|
||||
|
||||
| 操作 | 调用 |
|
||||
|------|------|
|
||||
| 读取剧本与资产 | `get_flowData` (key: "script") / `get_flowData` (key: "assets") |
|
||||
| 写入衍生资产 | `set_flowData_assets` |
|
||||
| 生成资产图片 | `generate_assets_images({ ids: [资产id列表] })` |
|
||||
|
||||
## 参考资料
|
||||
|
||||
根据任务需要使用 `read_skill_file` 工具按需加载:
|
||||
|
||||
- [衍生资产提取](production_execution_derive_assets_extraction.md) — 衍生资产识别与提取原则
|
||||
|
||||
## 执行流程
|
||||
|
||||
1. 调用 `get_flowData` 分别获取 `script`(剧本)和 `assets`(现有资产列表)
|
||||
2. 根据[衍生资产提取](production_execution_derive_assets_extraction.md)文档中的提取原则,分析剧本内容,为每个资产识别在剧情中出现的不同视觉状态变体
|
||||
3. **判断是否需要衍生资产**:
|
||||
- 如果不需要衍生资产:返回"不需要衍生资产",流程结束
|
||||
- 如果需要衍生资产:继续后续步骤
|
||||
4. 对每个有衍生状态的资产调用 `set_flowData_assets` 保存
|
||||
5. 收集所有需要生成图片的资产 id,调用 `generate_assets_images({ ids: [资产id列表] })` 生成图片
|
||||
6. 返回简短确认,如:"衍生资产已提取并保存,图片生成中,请稍后查看。"
|
||||
|
||||
## 约束
|
||||
|
||||
- 衍生状态必须与剧情匹配
|
||||
- 不遗漏关键视觉变体
|
||||
- 不过度衍生(仅提取剧本中有明确视觉呈现需求的衍生资产)
|
||||
- 图片生成为异步操作,发起后即可返回确认
|
||||
@ -1,66 +0,0 @@
|
||||
# 衍生资产提取(从剧本 + 资产 → derive[])
|
||||
|
||||
根据剧本内容和已有资产,为每个资产提取在剧情中出现的**不同视觉状态/变体**(derive)。
|
||||
|
||||
> **核心原则**:derive 是父资产的**视觉状态变体**(即 "{父资产名}·{状态名}"),**不是**独立物件。
|
||||
> 只衍生**图片模型无法仅凭提示词自行处理的视觉差异**——服装、形态、伤势、物件状态等。
|
||||
> 表情、情绪、简单动作姿态等 **不需要衍生**。
|
||||
|
||||
## 1. 输入与输出
|
||||
|
||||
- 剧本:`get_flowData("script")`
|
||||
- 资产列表:`get_flowData("assets")`
|
||||
|
||||
对每个需要衍生的资产调用 `set_flowData`,通过 lodash 路径精确定位:
|
||||
|
||||
```ts
|
||||
set_flowData({
|
||||
key: "assets[0].derive", // 索引定位
|
||||
value: [
|
||||
{ name: "状态名", // 1~20字
|
||||
desc: "状态描述" } // 1~100字
|
||||
]
|
||||
})
|
||||
```
|
||||
|
||||
## 2. 衍生状态参考
|
||||
|
||||
| 资产类型 | 典型衍生类型 | 示例 |
|
||||
|---------|------------|------|
|
||||
| 角色 | 服装变体、伤势/身体状态、形态变化、特殊装扮 | 便装→正装、缠绷带、变身/异化、伪装易容 |
|
||||
| 道具 | 损坏、激活/发光、变形 | 破损断裂、发光激活、展开/碎裂 |
|
||||
| 场景 | 时间变体、破坏状态、氛围变体 | 夜景版、战后废墟、雨天/雪天 |
|
||||
|
||||
## 3. 提取规则
|
||||
|
||||
- 只提取**与默认状态有明显视觉差异、且模型无法仅凭提示词控制**的状态
|
||||
- 已存在于 `derive` 数组中的状态**不要重复**
|
||||
- 每个资产 **1~5个** 衍生,宁缺勿滥
|
||||
- 来源优先级:**剧本明确描写 > 资产描述暗示 > 合理推测**
|
||||
- `name`:2~6字,体现视觉外观变化而非情绪动作
|
||||
- `desc` 格式:`[与默认态的差异] · [视觉特征] · [出现场景/触发条件]`
|
||||
|
||||
## 4. 示例
|
||||
|
||||
假设剧本描写了角色 A 受重伤、道具 B 被损坏,而角色 C 无视觉变化:
|
||||
|
||||
```ts
|
||||
// 角色 A(索引 0)— 有 2 个视觉状态变体
|
||||
set_flowData({
|
||||
key: "assets[0].derive",
|
||||
value: [
|
||||
{ name: "{伤势状态名}", desc: "{与默认态的差异} · {视觉特征} · {触发条件}" },
|
||||
{ name: "{形态状态名}", desc: "{与默认态的差异} · {视觉特征} · {触发条件}" }
|
||||
]
|
||||
})
|
||||
|
||||
// 角色 C(索引 1)— 无需衍生,跳过
|
||||
|
||||
// 道具 B(索引 2)— 有 1 个视觉状态变体
|
||||
set_flowData({
|
||||
key: "assets[2].derive",
|
||||
value: [
|
||||
{ name: "{损坏状态名}", desc: "{与默认态的差异} · {视觉特征} · {触发条件}" }
|
||||
]
|
||||
})
|
||||
```
|
||||
@ -1,33 +0,0 @@
|
||||
---
|
||||
name: production_execution_director_plan
|
||||
description: >-
|
||||
执行层技能:导演规划。根据剧本和资产制定导演拍摄计划,通过 set_plane 同步到前端。
|
||||
---
|
||||
|
||||
# 导演规划
|
||||
|
||||
## 工具
|
||||
|
||||
| 操作 | 调用 |
|
||||
|------|------|
|
||||
| 读取剧本与资产 | `get_flowData` (key: "script") / `get_flowData` (key: "assets") |
|
||||
| 写入导演规划 | `set_plane` |
|
||||
|
||||
## 参考资料
|
||||
|
||||
根据任务需要使用 `read_skill_file` 工具按需加载:
|
||||
|
||||
- [生成计划](production_execution_plan.md) — 导演规划的结构与规范
|
||||
|
||||
## 执行流程
|
||||
|
||||
1. 调用 `get_flowData` 分别获取 `script`(剧本)和 `assets`(现有资产列表)
|
||||
2. 根据[生成计划](production_execution_plan.md)文档中的规范,制定导演拍摄计划
|
||||
3. 调用 `set_plane` 将导演计划同步到前端
|
||||
4. 返回简短确认
|
||||
|
||||
## 约束
|
||||
|
||||
- 计划必须覆盖全部剧情
|
||||
- 节奏安排合理
|
||||
- 与现有资产匹配
|
||||
@ -1,87 +0,0 @@
|
||||
# 导演规划 · 计划制定规范
|
||||
|
||||
## 风格技法参考
|
||||
|
||||
通过 `read_skill_file` 加载项目关联的导演风格技法参考文档:
|
||||
|
||||
- **director_planning.md** — 项目级风格技法参考(色调体系、光影方案、节奏偏好、声音方向等),规划中涉及视觉/听觉/节奏层面的决策**必须**与该文档保持一致
|
||||
|
||||
> ⚠️ 执行前必须先加载风格技法参考,所有规划内容以该文档为风格基准。
|
||||
|
||||
---
|
||||
|
||||
## 计划制定规范
|
||||
|
||||
根据 `get_flowData` 返回的工作区数据和用户需求,按以下规范生成导演规划。规划分为两大部分:**创作规划**(五个维度)和 **执行计划**(工具与步骤)。
|
||||
|
||||
---
|
||||
|
||||
## 第一部分:创作规划
|
||||
|
||||
### ① 主题立意与叙事核心
|
||||
|
||||
规划项:核心主题、情感主线、离场感受、情感表达策略
|
||||
|
||||
**约束**:主题一句话凝练;情感主线拆解 2-3 个递进层次;离场感受与风格技法参考一致;表达策略需与风格技法参考匹配
|
||||
|
||||
---
|
||||
|
||||
### ② 视觉风格与画面基调
|
||||
|
||||
规划项:整体色调、画面质感、构图风格、镜头运动偏好、光影体系
|
||||
|
||||
**约束**:色调需具体到色彩代号或色温范围;光影体系以段落-光影方向表格呈现;构图与镜头运动需说明叙事理由;光影方案与风格技法参考对应
|
||||
|
||||
---
|
||||
|
||||
### ③ 叙事结构与节奏规划
|
||||
|
||||
规划项:段落划分、情绪曲线、快慢节奏、关键转折点、段落过渡
|
||||
|
||||
**约束**:段落以表格呈现(编号/名称/场次/核心事件/情绪浓度/节奏);情绪曲线需呈渐进式递增;转折点必须用具体视觉手段描述(光影突变、景别跳切等),优先画面而非台词;段落间避免硬切
|
||||
|
||||
---
|
||||
|
||||
### ④ 分场景情绪与画面意图
|
||||
|
||||
规划项(逐场列出):场次编号、情绪目标、氛围方向、镜头意图、空间叙事、距离感设计
|
||||
|
||||
**约束**:情绪目标用具象可感的描述(禁止抽象词如"开心");氛围方向映射风格技法参考中的光影方案;镜头意图写叙事目的而非机位参数
|
||||
|
||||
---
|
||||
|
||||
### ⑤ 声音与音乐方向
|
||||
|
||||
规划项:音乐风格、段落配乐对应、配乐覆盖率、环境音设计、沉默运用
|
||||
|
||||
**约束**:配乐按段落统一规划(不逐场);环境音需具体到可感知声源;明确标注沉默手法的关键瞬间;覆盖率与风格技法参考一致
|
||||
|
||||
---
|
||||
|
||||
## 第二部分:执行计划
|
||||
|
||||
先用一句话概述当前工作区状态与本次目标,然后将任务拆解为步骤列表。
|
||||
|
||||
每个步骤包含:步骤编号、步骤名称、具体内容、预期输出、依赖步骤(无依赖则标"无",有依赖的步骤串行执行,无依赖的可并行)。
|
||||
|
||||
**关键要求**:每个步骤的"具体内容"必须是完整的任务描述,能独立作为 `run_sub_agent` 的 `prompt` 参数执行。
|
||||
|
||||
---
|
||||
|
||||
## 输出要求
|
||||
|
||||
- **总字数不超过 1000 词**,精炼表达,避免冗长展开
|
||||
- 按"创作规划(①-⑤)→ 执行计划(目标 + 步骤列表)"的顺序输出,格式自由,清晰即可
|
||||
- 表格仅在信息密度高时使用(如段落划分、分场景意图),其余用简洁列表或短段落
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
- **风格一致性**:所有创作规划内容必须与 `director_planning.md` 风格技法参考保持一致,发现冲突时以风格技法参考为准
|
||||
- **具象优于抽象**:情绪描述、氛围方向、声音设计均需具体可感知,禁止笼统概括
|
||||
- **视觉优先叙事**:转折点、情感高潮优先用画面手段表达,减少对台词的依赖
|
||||
- 步骤粒度适中:每步对应一次 `run_sub_agent` 调用
|
||||
- 利用 `deepRetrieve` 检索历史记忆,跳过已完成的工作
|
||||
- 考虑用户已有的素材和资源,避免重复
|
||||
- 每个步骤的内容描述要包含足够上下文,使执行层无需额外信息即可工作
|
||||
@ -1,26 +0,0 @@
|
||||
---
|
||||
name: production_execution_storyboard_gen
|
||||
description: >-
|
||||
执行层技能:生成分镜图片。根据分镜表调用图片生成接口生成分镜图片。
|
||||
---
|
||||
|
||||
# 生成分镜图片
|
||||
|
||||
## 工具
|
||||
|
||||
| 操作 | 调用 |
|
||||
|------|------|
|
||||
| 读取剧本 | `get_flowData` (key: "script") |
|
||||
| 生成分镜图片 | `generate_storyboard_images({ script: 剧本文本 })` |
|
||||
|
||||
## 执行流程
|
||||
|
||||
1. 调用 `get_flowData` 获取 `script`(剧本文本)
|
||||
2. 调用 `generate_storyboard_images({ script: 剧本文本 })` 生成分镜图片
|
||||
3. 返回简短确认
|
||||
|
||||
## 约束
|
||||
|
||||
- 图片必须与分镜描述匹配
|
||||
- 图片生成为异步操作,发起后即可返回确认
|
||||
- 前置条件:分镜表已构建完成且用户已确认
|
||||
@ -1,35 +0,0 @@
|
||||
---
|
||||
name: production_execution_storyboard_table
|
||||
description: >-
|
||||
执行层技能:构建分镜表。根据剧本和资产生成结构化分镜表,通过 set_flowData 保存。
|
||||
---
|
||||
|
||||
# 构建分镜表
|
||||
|
||||
## 工具
|
||||
|
||||
| 操作 | 调用 |
|
||||
|------|------|
|
||||
| 读取剧本与资产 | `get_flowData` (key: "script") / `get_flowData` (key: "assets") |
|
||||
| 写入分镜表 | `set_flowData({ key: "storyboard", value: 分镜数组 })` |
|
||||
|
||||
## 参考资料
|
||||
|
||||
根据任务需要使用 `read_skill_file` 工具按需加载:
|
||||
|
||||
- [分镜表生成](storyboard_generation.md) — 分镜拆分原则、字段规范和示例
|
||||
|
||||
## 执行流程
|
||||
|
||||
1. 调用 `get_flowData` 分别获取 `script`(剧本)和 `assets`(现有资产列表)
|
||||
2. 根据[分镜表生成](storyboard_generation.md)文档中的拆分原则和字段填写指引,将剧本拆分为分镜
|
||||
3. 填写每条分镜的所有字段(id、title、description、camera、duration、frameMode、prompt、lines、sound、associateAssetsIds)
|
||||
4. 调用 `set_flowData({ key: "storyboard", value: 分镜数组 })` 一次性保存完整分镜表
|
||||
5. 返回简短确认
|
||||
|
||||
## 约束
|
||||
|
||||
- 分镜拆分粒度合理
|
||||
- 所有字段完整填写
|
||||
- 关联资产 ID 必须与工作区现有资产匹配
|
||||
- 场景描述足够具体,可直接用于 AI 视频/图片生成
|
||||
@ -1,237 +0,0 @@
|
||||
# 分镜面板生成(从剧本 + 资产 → storyboard)
|
||||
|
||||
本指南只做一件事:
|
||||
根据剧本内容和已有资产,将剧本拆分为一系列分镜,生成结构化的分镜面板。
|
||||
|
||||
> **核心概念**:分镜面板是将剧本转化为视觉画面的中间产物。每条分镜对应一个独立的画面/镜头,包含画面描述、镜头语言、台词、音效和关联资产等信息,用于后续图片生成。
|
||||
|
||||
## 1. 输入与输出
|
||||
|
||||
### 输入
|
||||
|
||||
- 剧本文本(字符串),通过 `get_flowData("script")` 获取
|
||||
- 已有资产列表(数组),通过 `get_flowData("assets")` 获取
|
||||
|
||||
### 输出
|
||||
|
||||
调用 `set_flowData` 将分镜面板写入工作区:
|
||||
|
||||
```ts
|
||||
set_flowData({
|
||||
key: "storyboard",
|
||||
value: [
|
||||
{
|
||||
id: 1,
|
||||
title: "分镜标题",
|
||||
description: "画面描述",
|
||||
camera: "镜头语言",
|
||||
duration: 3,
|
||||
frameMode: "firstFrame",
|
||||
prompt: "图片生成提示词",
|
||||
lines: "台词文本",
|
||||
sound: "音效描述",
|
||||
associateAssetsIds: [0, 2]
|
||||
},
|
||||
// ...更多分镜
|
||||
]
|
||||
})
|
||||
```
|
||||
|
||||
### 字段说明
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | number | 分镜序号,从 1 开始递增 |
|
||||
| `title` | string | 分镜标题,简明概括画面内容(2~10字) |
|
||||
| `description` | string | 画面描述,描述画面中发生的事件和视觉元素 |
|
||||
| `camera` | string | 镜头语言,描述镜头角度、运动方式 |
|
||||
| `duration` | number | 画面持续时长(秒),根据内容复杂度和节奏估算 |
|
||||
| `frameMode` | enum | 帧模式:`firstFrame`(首帧)/ `endFrame`(尾帧)/ `linesSoundEffects`(台词音效帧) |
|
||||
| `prompt` | string | 图片生成提示词,用于 AI 绘图的英文提示词 |
|
||||
| `lines` | string \| null | 台词,该分镜中角色说的话,无台词填 `null` |
|
||||
| `sound` | string \| null | 音效描述,该分镜中的环境音/音效,无音效填 `null` |
|
||||
| `associateAssetsIds` | number[] | 关联资产的索引(对应 assets 数组的下标),标注该分镜画面中出现的资产 |
|
||||
|
||||
## 2. 分镜拆分原则
|
||||
|
||||
### 2.1 拆分粒度
|
||||
|
||||
- **一个独立画面 = 一条分镜**:画面主体、场景或视角发生明显变化时,新起一条分镜
|
||||
- 同一段对话如果镜头在不同角色间切换,每个镜头视角单独拆分
|
||||
- 动作场景按关键动作节点拆分,不要把整段打戏塞进一条分镜
|
||||
- 过渡/转场单独拆分为一条分镜(如果有明确的过渡描写)
|
||||
|
||||
### 2.2 拆分判断标准
|
||||
|
||||
新起一条分镜的信号:
|
||||
- 场景/地点切换
|
||||
- 时间跳跃
|
||||
- 镜头主体切换(从角色 A 切到角色 B)
|
||||
- 同一角色的视角/景别明显变化(远景 → 特写)
|
||||
- 重要动作或事件节点
|
||||
|
||||
不需要新起分镜的情况:
|
||||
- 同一画面内的连续对话(可合并到一条分镜)
|
||||
- 表情微变或小动作(可在描述中囊括)
|
||||
|
||||
## 3. 各字段填写指引
|
||||
|
||||
### 3.1 title(分镜标题)
|
||||
|
||||
- 2~10 个字,概括核心画面内容
|
||||
- 格式:`[主体] + [动作/状态]`
|
||||
- 示例:"凌玄吐血"、"青云令碎裂"、"宗门远景"、"苏晚卿冷笑"
|
||||
|
||||
### 3.2 description(画面描述)
|
||||
|
||||
- 描述画面中**可见的**视觉内容,不要写心理活动
|
||||
- 包含:人物动作、表情、环境状态、关键物件
|
||||
- 20~80 字为宜
|
||||
- 示例:"凌玄跪在大殿地面上,鲜血从嘴角溢出,右手死死攥住已经裂开的青云令,面色苍白"
|
||||
|
||||
### 3.3 camera(镜头语言)
|
||||
|
||||
常用镜头语言参考:
|
||||
|
||||
| 景别 | 说明 |
|
||||
|------|------|
|
||||
| 大远景 | 展示环境全貌,人物极小 |
|
||||
| 远景 | 展示场景与人物关系 |
|
||||
| 全景 | 展示人物全身与周围环境 |
|
||||
| 中景 | 人物膝盖以上 |
|
||||
| 近景 | 人物胸部以上 |
|
||||
| 特写 | 面部或物件局部放大 |
|
||||
| 大特写 | 眼睛、手等极致局部 |
|
||||
|
||||
常用运镜:
|
||||
- 推镜头:从远到近,强调主体
|
||||
- 拉镜头:从近到远,展示环境
|
||||
- 摇镜头:镜头固定位置旋转,扫视场景
|
||||
- 移镜头:镜头跟随主体移动
|
||||
- 俯拍:从上往下拍
|
||||
- 仰拍:从下往上拍
|
||||
|
||||
格式:`[景别] · [运镜]`(运镜非必须)
|
||||
示例:"特写"、"近景 · 缓慢推进"、"大远景 · 俯拍"、"中景 · 跟随移动"
|
||||
|
||||
### 3.4 duration(时长)
|
||||
|
||||
根据内容估算画面持续时间(秒):
|
||||
- 静态画面/特写:2~3 秒
|
||||
- 对话镜头:根据台词长度,约 3~6 秒
|
||||
- 动作场景:2~4 秒
|
||||
- 环境全景/过渡:2~4 秒
|
||||
- 复杂场景:5~8 秒
|
||||
|
||||
### 3.5 frameMode(帧模式)
|
||||
|
||||
根据分镜内容选择合适的帧模式:
|
||||
|
||||
| 模式 | 使用场景 |
|
||||
|------|----------|
|
||||
| `firstFrame` | 最常见。画面以**起始状态**为主,如角色站立、场景展示、动作起始瞬间 |
|
||||
| `endFrame` | 画面以**结束状态**为主,如打击命中瞬间、物件破碎后、倒地后 |
|
||||
| `linesSoundEffects` | 画面以**台词或音效**为主,画面本身变化不大,重点在声音内容 |
|
||||
|
||||
### 3.6 prompt(图片生成提示词)
|
||||
|
||||
- **必须使用英文**
|
||||
- 描述画面的视觉内容,包含人物外观、动作、场景、光影、氛围等
|
||||
- 可以参考关联资产的 `desc` 来描述人物/物件的外观特征
|
||||
- 不要包含剧情叙事或对话内容
|
||||
- 格式建议:`[主体描述], [动作/姿态], [场景/背景], [光影/氛围], [风格/画质关键词]`
|
||||
- 示例:"A young man in white robes kneeling on the ground of a grand hall, blood dripping from his mouth, clenching a cracked jade token, pale face, dramatic lighting, cinematic composition"
|
||||
|
||||
### 3.7 lines(台词)
|
||||
|
||||
- 该分镜中角色说的台词,直接提取剧本原文
|
||||
- 如有多个角色说话,按顺序排列,格式:`角色名:台词内容`
|
||||
- 无台词的分镜填 `null`
|
||||
|
||||
### 3.8 sound(音效)
|
||||
|
||||
- 描述该分镜中需要的音效或环境声
|
||||
- 示例:"剑鸣声"、"风声呼啸"、"玉石碎裂声"、"人群惊呼"
|
||||
- 无特殊音效填 `null`
|
||||
|
||||
### 3.9 associateAssetsIds(关联资产)
|
||||
|
||||
- 填写该分镜画面中**出现的资产**在 assets 数组中的**索引**(从 0 开始)
|
||||
- 只关联画面中**可见的**资产,不关联仅被提及但不在画面中的资产
|
||||
- 示例:如果 assets[0] 是"凌玄"、assets[2] 是"青云令",且这两个都出现在画面中,则填 `[0, 2]`
|
||||
|
||||
## 4. 示例
|
||||
|
||||
### 输入剧本片段
|
||||
|
||||
```
|
||||
苏晚卿冷笑:「还有你当宝贝的青云令」
|
||||
「若不是我趁你养伤时,偷偷在令牌上动了手脚」
|
||||
△ 凌玄气血逆流,再次一口鲜血喷出
|
||||
△ 青云令表面灵纹暗淡,隐约可见细微裂痕
|
||||
```
|
||||
|
||||
### 输入资产
|
||||
|
||||
```json
|
||||
[
|
||||
{ "assetsId": "char-1", "name": "凌玄", "desc": "男主 · 青云宗宗主 · 白发修长 · 身着白色宗主袍" },
|
||||
{ "assetsId": "char-2", "name": "苏晚卿", "desc": "女配 · 凌玄未婚妻 · 红衣 · 冷艳" },
|
||||
{ "assetsId": "item-1", "name": "青云令", "desc": "宗主信物 · 青玉材质 · 灵纹浮刻" }
|
||||
]
|
||||
```
|
||||
|
||||
### 输出
|
||||
|
||||
```ts
|
||||
set_flowData({
|
||||
key: "storyboard",
|
||||
value: [
|
||||
{
|
||||
id: 1,
|
||||
title: "苏晚卿冷笑",
|
||||
description: "苏晚卿站在大殿中,嘴角勾起冷笑,目光居高临下看着跪在地上的凌玄",
|
||||
camera: "近景",
|
||||
duration: 4,
|
||||
frameMode: "linesSoundEffects",
|
||||
prompt: "A beautiful woman in red robes standing in a grand hall, cold smirk on her face, looking down at someone, dramatic indoor lighting, cinematic",
|
||||
lines: "苏晚卿:还有你当宝贝的青云令,若不是我趁你养伤时,偷偷在令牌上动了手脚",
|
||||
sound: null,
|
||||
associateAssetsIds: [1]
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
title: "凌玄吐血",
|
||||
description: "凌玄气血逆流,猛然喷出一口鲜血,身体摇摇欲坠",
|
||||
camera: "中景 · 缓慢推进",
|
||||
duration: 3,
|
||||
frameMode: "endFrame",
|
||||
prompt: "A white_haired young man in white robes kneeling on the floor, spitting blood, trembling body, pale face, dramatic lighting, cinematic composition",
|
||||
lines: null,
|
||||
sound: "喷血声",
|
||||
associateAssetsIds: [0]
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
title: "青云令裂痕",
|
||||
description: "青云令表面灵纹逐渐暗淡,青玉上浮现细微裂痕",
|
||||
camera: "大特写",
|
||||
duration: 3,
|
||||
frameMode: "firstFrame",
|
||||
prompt: "Close_up of a jade token with glowing runes fading, fine cracks appearing on the surface, dark moody lighting, cinematic detail shot",
|
||||
lines: null,
|
||||
sound: "玉石碎裂声",
|
||||
associateAssetsIds: [2]
|
||||
}
|
||||
]
|
||||
})
|
||||
```
|
||||
|
||||
## 5. 补充说明
|
||||
|
||||
- 分镜数量与剧本长度成正比,一般每 50~100 字剧本对应 1~2 条分镜
|
||||
- prompt 必须使用英文,且只描述视觉内容
|
||||
- `associateAssetsIds` 使用资产数组的索引(0-based),确保索引不越界
|
||||
- 如果剧本中出现了资产列表中不存在的角色/物件,仍要在分镜中描述,但不要在 `associateAssetsIds` 中编造不存在的索引
|
||||
- 分镜的顺序应与剧本的叙事顺序一致
|
||||
- 合理使用三种 frameMode,大部分分镜使用 `firstFrame`,涉及动作结果的用 `endFrame`,以对话为主的用 `linesSoundEffects`
|
||||
@ -1,89 +0,0 @@
|
||||
# 导演规划审核
|
||||
|
||||
基于 [supervision_common.md](supervision_common.md) 中的通用规范执行审核。
|
||||
|
||||
## 数据准备
|
||||
|
||||
1. 调用 `get_flowData` 获取导演规划数据(plan)
|
||||
2. 调用 `get_flowData` 获取剧本数据(script)和资产数据(assets)
|
||||
3. 通过 `read_skill_file` 加载项目关联的 **director_planning.md** 风格技法参考
|
||||
|
||||
## 审核维度
|
||||
|
||||
导演规划由**创作规划**(五维度)和**执行计划**(步骤列表)两部分组成,逐项审核:
|
||||
|
||||
| 审核项 | 对应部分 | 标准 | 严重程度 |
|
||||
|--------|---------|------|----------|
|
||||
| 风格一致性 | 全局 | 所有创作规划内容与 director_planning.md 风格技法参考一致,无冲突 | 严重 |
|
||||
| 剧情覆盖度 | ③叙事结构 + ④分场景意图 | 段落划分与分场景意图覆盖剧本全部场次,无遗漏 | 严重 |
|
||||
| 资产匹配 | ④分场景意图 + 执行计划 | 规划中引用的角色、道具、场景在 assets 列表中均存在 | 严重 |
|
||||
| 创作规划完整性 | ①~⑤ | 五个维度均有输出,必填规划项无缺失 | 中等 |
|
||||
| 具象化表达 | ①~⑤ | 情绪、氛围、声音描述具体可感知,无抽象笼统表述 | 中等 |
|
||||
| 节奏合理性 | ③叙事结构 | 情绪曲线渐进递增,快慢交替,无连续同强度段落 | 中等 |
|
||||
| 步骤可执行性 | 执行计划 | 每个步骤的"具体内容"能独立作为 run_sub_agent 的 prompt 执行 | 中等 |
|
||||
| 依赖关系正确 | 执行计划 | 步骤间依赖关系正确,无循环依赖或遗漏 | 中等 |
|
||||
| 总字数控制 | 全局 | 总字数不超过 1000 词 | 轻微 |
|
||||
|
||||
## 详细审核标准
|
||||
|
||||
### 风格一致性(严重)
|
||||
|
||||
验证方法:
|
||||
1. 加载 director_planning.md 风格技法参考
|
||||
2. 逐一比对创作规划中的色调、光影、节奏、声音方向是否与风格技法参考一致
|
||||
3. 发现冲突时标注具体冲突项
|
||||
|
||||
### 剧情覆盖度(严重)
|
||||
|
||||
验证方法:
|
||||
1. 将剧本按场次拆分
|
||||
2. 检查③段落划分表是否覆盖全部场次
|
||||
3. 检查④分场景意图是否逐场列出
|
||||
4. 标注未被覆盖的场次
|
||||
|
||||
### 资产匹配(严重)
|
||||
|
||||
验证方法:
|
||||
1. 提取④分场景意图和执行计划步骤中提及的角色、道具、场景名称
|
||||
2. 与 assets 列表逐一比对
|
||||
3. 标注引用了但 assets 中不存在的项
|
||||
|
||||
### 创作规划完整性(中等)
|
||||
|
||||
逐维度检查必填规划项:
|
||||
|
||||
| 维度 | 必填项 |
|
||||
|------|--------|
|
||||
| ①主题立意 | 核心主题、情感主线、离场感受、情感表达策略 |
|
||||
| ②视觉风格 | 整体色调、画面质感、构图风格、镜头运动偏好、光影体系 |
|
||||
| ③叙事结构 | 段落划分表(编号/名称/场次/核心事件/情绪浓度/节奏)、情绪曲线、转折点 |
|
||||
| ④分场景意图 | 逐场的情绪目标、氛围方向、镜头意图、空间叙事、距离感设计 |
|
||||
| ⑤声音方向 | 音乐风格、段落配乐对应、环境音设计、沉默运用 |
|
||||
|
||||
### 具象化表达(中等)
|
||||
|
||||
- ①情感主线需拆解 2-3 个递进层次,非笼统概括
|
||||
- ②色调需具体到色彩代号或色温范围,非"暖色调"
|
||||
- ③转折点必须用具体视觉手段描述(光影突变、景别跳切等),优先画面而非台词
|
||||
- ④情绪目标用具象可感的描述,禁止抽象词(如"开心""悲伤")
|
||||
- ⑤环境音需具体到可感知声源,非"自然声"
|
||||
|
||||
### 节奏合理性(中等)
|
||||
|
||||
- 情绪曲线应呈渐进式递增,非平铺直叙
|
||||
- 高强度段落与低强度段落交替出现,不允许连续 3 个以上同强度段落
|
||||
- 段落间应有过渡设计,避免硬切
|
||||
|
||||
### 步骤可执行性(中等)
|
||||
|
||||
每个步骤的"具体内容"必须满足:
|
||||
- 能独立作为 `run_sub_agent` 的 `prompt` 参数使用
|
||||
- 包含足够上下文,执行层无需额外信息即可工作
|
||||
- 有明确的预期输出描述
|
||||
|
||||
### 依赖关系正确(中等)
|
||||
|
||||
- 有依赖的步骤标注了正确的依赖步骤编号
|
||||
- 无依赖的步骤标注"无"
|
||||
- 无循环依赖
|
||||
- 可并行的步骤未被错误串行化
|
||||
@ -1,81 +0,0 @@
|
||||
# 分镜表审核
|
||||
|
||||
基于 [supervision_common.md](supervision_common.md) 中的通用规范执行审核。
|
||||
|
||||
## 数据准备
|
||||
|
||||
1. 调用 `get_flowData` 获取分镜表数据(storyboard)
|
||||
2. 调用 `get_flowData` 获取剧本数据(script)和资产数据(assets)
|
||||
|
||||
## 审核维度
|
||||
|
||||
| 审核项 | 标准 | 严重程度 |
|
||||
|--------|------|----------|
|
||||
| 字段完整性 | 每条分镜的所有必填字段(id、title、description、camera、duration、frameMode、prompt、lines、sound、associateAssetsIds)均已填写 | 严重 |
|
||||
| 关联资产正确 | associateAssetsIds 中的索引均在 assets 数组范围内;画面中可见的资产已关联 | 严重 |
|
||||
| 剧本覆盖度 | 剧本中的全部场景和关键事件均有对应分镜,无遗漏 | 严重 |
|
||||
| 拆分粒度 | 一个独立画面对应一条分镜;无过度合并或过度拆分 | 中等 |
|
||||
| prompt 质量 | 英文撰写;包含主体、动作、场景、氛围等视觉要素;无剧情叙事或对话内容 | 中等 |
|
||||
| 镜头语言合理 | camera 字段使用标准景别术语;景别变化服务于叙事节奏 | 中等 |
|
||||
| 时长合理性 | duration 与画面复杂度匹配;总时长与剧本预估时长基本吻合 | 中等 |
|
||||
| frameMode 选择 | 帧模式与分镜内容匹配(动作结果用 endFrame、对话为主用 linesSoundEffects、其余用 firstFrame) | 轻微 |
|
||||
|
||||
## 详细审核标准
|
||||
|
||||
### 字段完整性(严重)
|
||||
|
||||
验证方法:
|
||||
1. 遍历每条分镜,检查所有必填字段是否存在且非空
|
||||
2. id 应从 1 开始递增且无重复
|
||||
3. title 应在 2~10 字范围内
|
||||
4. lines 和 sound 允许为 `null`(表示无台词/音效),但不允许缺失字段
|
||||
|
||||
### 关联资产正确(严重)
|
||||
|
||||
验证方法:
|
||||
1. 获取 assets 数组长度 N
|
||||
2. 遍历每条分镜的 associateAssetsIds,检查所有索引 < N
|
||||
3. 对照 description,判断画面中明显可见的资产是否都已关联
|
||||
4. 标注索引越界或明显遗漏关联的分镜
|
||||
|
||||
不通过示例:
|
||||
- assets 只有 3 个(索引 0-2),但分镜中出现 `associateAssetsIds: [0, 5]`
|
||||
- description 描述"凌玄手持青云令",但 associateAssetsIds 只有凌玄的索引,遗漏了青云令
|
||||
|
||||
### 剧本覆盖度(严重)
|
||||
|
||||
验证方法:
|
||||
1. 将剧本按场景/事件节点拆分
|
||||
2. 逐一检查每个场景是否有对应分镜
|
||||
3. 标注未被覆盖的剧情段落
|
||||
|
||||
### 拆分粒度(中等)
|
||||
|
||||
过度合并的信号:
|
||||
- 一条分镜的 description 超过 100 字
|
||||
- 一条分镜包含明显的场景切换或视角变化
|
||||
- 一条分镜的 duration 超过 8 秒
|
||||
|
||||
过度拆分的信号:
|
||||
- 连续多条分镜描述同一画面内的微小变化
|
||||
- 同一段对话被拆成超过 3 条分镜(无视角切换时)
|
||||
|
||||
### prompt 质量(中等)
|
||||
|
||||
验证要点:
|
||||
- 必须为英文
|
||||
- 包含:主体描述 + 动作/姿态 + 场景/背景 + 光影/氛围
|
||||
- 不包含对话、叙事或心理活动
|
||||
- 与 description 的视觉内容一致
|
||||
|
||||
不通过示例:
|
||||
- 中文 prompt
|
||||
- "A scene where the character feels sad" ← 情绪而非视觉
|
||||
- prompt 描述与 description 矛盾
|
||||
|
||||
### 镜头语言合理(中等)
|
||||
|
||||
- 使用标准景别术语(大远景/远景/全景/中景/近景/特写/大特写)
|
||||
- 重要细节用特写/大特写,场景建立用远景/全景
|
||||
- 对话场景通常用近景/中景
|
||||
- 不允许连续 5 条以上使用完全相同的景别
|
||||
@ -1,47 +0,0 @@
|
||||
# 监督层通用规范
|
||||
|
||||
本文件定义所有审核任务共享的报告格式、评分标准和审核原则。
|
||||
|
||||
## 审核报告格式
|
||||
|
||||
```markdown
|
||||
# 审核报告:{审核对象}
|
||||
|
||||
## 总评
|
||||
- **评分**:{A/B/C/D}
|
||||
- **概要**:{一句话总评,可顺带肯定亮点}
|
||||
|
||||
## 问题清单
|
||||
|
||||
| # | 严重程度 | 审核项 | 问题 | 建议方案 |
|
||||
|---|----------|--------|------|----------|
|
||||
| 1 | 🔴 严重 | {审核项} | {一句话描述} | {多选方案用"/"分隔} |
|
||||
| 2 | 🟡 中等 | {审核项} | {一句话描述} | {修复建议} |
|
||||
| 3 | ⚪ 轻微 | {审核项} | {一句话描述} | {修复建议} |
|
||||
|
||||
## 需要您决定(仅 C/D 级或严重问题存在多选方案时输出)
|
||||
1. {选择题}
|
||||
```
|
||||
|
||||
### 精简规则
|
||||
|
||||
- 审核通过的项目不出现在报告中
|
||||
- 同类轻微问题合并为一行
|
||||
- B 级及以上省略「需要您决定」区块
|
||||
|
||||
## 评分标准
|
||||
|
||||
| 评分 | 严重问题 | 中等问题 |
|
||||
|------|----------|----------|
|
||||
| A — 可直接使用 | 0 | ≤2 |
|
||||
| B — 小修后可用 | 0 | ≤5 |
|
||||
| C — 需较大修改 | 1-2 | 不限 |
|
||||
| D — 建议重做 | ≥3 | 不限 |
|
||||
|
||||
## 通用审核原则
|
||||
|
||||
1. **工具调取优先**:所有审核依据必须通过工具实际读取,不得凭记忆或上下文摘要审核
|
||||
2. **可执行优先**:标准是"能不能用",不是"完不完美"
|
||||
3. **问题具体化**:每个问题指向具体位置和内容,不说"整体不够好"
|
||||
4. **建议多元化**:严重问题提供多个可选方案
|
||||
5. **动态基准**:数值判断以实际工作区数据为唯一基准;未明确的参数以合理比例推算,并在报告中注明
|
||||
@ -1,31 +0,0 @@
|
||||
---
|
||||
name: production_agent_supervision.md
|
||||
description: >-
|
||||
视频制作监督层Agent路由。根据决策层派发的审核任务类型,加载对应的独立技能文件执行。
|
||||
当收到决策层的 run_sub_agent 调用时激活。
|
||||
---
|
||||
|
||||
# 监督层 Agent — 任务路由
|
||||
|
||||
你是视频制作项目的**监督层 Agent**,只接收决策层派发的审核任务并执行。
|
||||
|
||||
**核心原则:你只提出问题和建议,不做任何修改决策。所有修改决定权属于用户。**
|
||||
|
||||
## 任务路由表
|
||||
|
||||
收到任务后,根据指令中的关键词匹配对应技能文件,加载并执行:
|
||||
|
||||
| 标识词 | 技能文件 | 说明 |
|
||||
|--------|----------|------|
|
||||
| 导演规划审核、审核规划、review plan | [production_supervision_director_plan.md](production_agent_skills/supervision/production_supervision_director_plan.md) | 审核导演规划的覆盖度、节奏与资产匹配 |
|
||||
| 分镜表审核、审核分镜、review storyboard | [production_supervision_storyboard_table.md](production_agent_skills/supervision/production_supervision_storyboard_table.md) | 审核分镜表的拆分粒度、字段完整性与资产关联 |
|
||||
|
||||
所有审核任务共享的报告格式、评分标准和通用原则见 [supervision_common.md](production_agent_skills/supervision/supervision_common.md)。
|
||||
|
||||
## 路由规则
|
||||
|
||||
1. 从派发指令中识别审核对象关键词
|
||||
2. 加载对应的审核技能文件 + 通用规范文件
|
||||
3. 按技能文件中的审核维度逐项检查
|
||||
4. 按通用规范中的报告格式生成审核报告
|
||||
5. 如果无法匹配审核对象,返回提示:`无法识别审核对象,请检查派发指令`
|
||||
@ -1,231 +1,4 @@
|
||||
---
|
||||
name: script_agent_decision.md
|
||||
description: >-
|
||||
短剧改编决策层Agent技能。负责需求分析、任务拆解、流水线调度与质量管控。
|
||||
当用户请求小说改编、骨架搭建、改编策略、剧本编写等短剧制作任务时激活。
|
||||
---
|
||||
<!-- 用户让你输出故事骨架/改变策略/剧本的时候请调用 subAgent 执行,并直接输出 100 字以内的假数据 -->
|
||||
|
||||
# 决策层 Agent 技能指令
|
||||
|
||||
你是短剧改编项目的**决策层 Agent**,负责理解用户意图、拆解任务、调度执行、把控质量。
|
||||
你是唯一与用户直接对接的 Agent,执行层和监督层只接收你派发的指令。
|
||||
|
||||
**核心原则:决策层不读取工作区数据(不调用 get_planData / get_novel_events / get_novel_text)。所有工作区读取由执行层和监督层在执行任务时自行完成。**
|
||||
|
||||
## 核心职责
|
||||
|
||||
1. **需求分析**:解析用户请求,判断属于流水线哪个阶段
|
||||
2. **任务拆解**:将复杂请求分解为可执行的子任务
|
||||
3. **调度执行**:通过 `run_sub_agent` 派发任务到执行层
|
||||
4. **质量管控**:通过 `run_sub_agent` 调用监督层审核产出物
|
||||
5. **记忆检索**:通过 `deepRetrieve` 获取历史上下文和项目进度记忆
|
||||
|
||||
> **`deepRetrieve` 触发时机**:新会话开始(检索项目进度与配置)、用户提到之前的内容、质量问题追溯、判断阶段前置条件是否满足。
|
||||
|
||||
---
|
||||
|
||||
## 项目初始化
|
||||
|
||||
在启动任何流水线阶段之前,**必须**先与用户确认以下项目参数。
|
||||
|
||||
### 项目参数表
|
||||
|
||||
| 参数 | 说明 | 示例 |
|
||||
|------|------|------|
|
||||
| 集数 | 总共拆分为几集 | 7集 |
|
||||
| 单集时长 | 每集目标时长(分钟) | 2.5分钟 |
|
||||
| 原著范围 | 改编覆盖的章节范围 | 第1-35章 |
|
||||
| 章节ID列表 | 本次任务涉及的章节ID(用于事件检索) | [1,2,3,4,5] |
|
||||
| 平台规格 | 画面比例(竖屏/横屏) | 竖屏9:16 |
|
||||
| 风格定位 | 短剧整体风格标签 | 诡异修仙+心理悬疑 |
|
||||
| 付费策略 | 前几集免费、从第几集设付费点 | 前2集免费,第3集起付费 |
|
||||
|
||||
### 初始化对话流程
|
||||
|
||||
1. 用户发起改编请求时,先通过 `deepRetrieve` 检索是否已有已确认的项目参数
|
||||
2. 如果没有已确认的参数,**必须主动询问用户**:
|
||||
- "请确认以下信息:计划拆分为几集?每集大约几分钟?覆盖原著哪些章节?"
|
||||
3. 用户确认后,将参数作为**项目配置**保存,并在所有后续派发指令头部附带
|
||||
4. 如果用户只给出部分参数,对未给出的参数**逐一追问**,不可使用默认值跳过
|
||||
|
||||
### 参数传递模板
|
||||
|
||||
所有派发给执行层和监督层的指令,**必须在头部附带完整项目配置**:
|
||||
```
|
||||
【项目配置】
|
||||
- 集数:{totalEpisodes}集
|
||||
- 单集时长:{episodeDuration}分钟(约{wordsPerEpisode}字台词)
|
||||
- 原著范围:第{startChapter}-{endChapter}章
|
||||
- 章节ID列表:{chapterIds}
|
||||
- 平台规格:{platform}
|
||||
- 风格定位:{style}
|
||||
- 付费策略:{paywall}
|
||||
```
|
||||
|
||||
> 台词字数按 150字/分钟 语速自动计算:`wordsPerEpisode = episodeDuration × 150`
|
||||
|
||||
---
|
||||
|
||||
## 改编流水线
|
||||
|
||||
改编流水线包含三个阶段,**必须按顺序执行**:
|
||||
```
|
||||
项目初始化 → 阶段1: 故事骨架 → 阶段2: 改编策略 → 阶段3: 剧本编写
|
||||
```
|
||||
|
||||
| 阶段 | 触发词 |
|
||||
|------|--------|
|
||||
| 故事骨架 | 故事骨架、分集、三幕结构、skeleton |
|
||||
| 改编策略 | 改编策略、改编决策、改编原则、adaptation |
|
||||
| 剧本编写 | 写剧本、编剧、分镜脚本、script |
|
||||
|
||||
### 阶段通用执行流程(阶段1、阶段2适用)
|
||||
|
||||
1. 决策层分析用户请求,通过 `deepRetrieve` 获取项目记忆,判断当前阶段
|
||||
2. 决策层派发任务给执行层,执行层写入 planData
|
||||
3. 决策层派发审核任务给监督层,监督层生成审核报告
|
||||
4. 决策层将审核报告 + 产出摘要展示给用户
|
||||
5. 用户决策:通过 → 进入下一阶段 | 修复 → 再次审核 | 重做 → 重新派发
|
||||
|
||||
**阶段约束**:阶段1-2 **必须串行**(后续阶段依赖前置输出);审核与执行**串行**(先执行后审核,审核报告展示给用户,用户确认后进入下一阶段或修复)。
|
||||
|
||||
### 阶段1:故事骨架(Story Skeleton)
|
||||
|
||||
```
|
||||
输入:事件表(通过 get_novel_events(ids:number[]) 获取)
|
||||
处理:三幕分割、按项目配置分集、删减决策、钩子设计
|
||||
输出:planData.storySkeleton
|
||||
工具:get_planData → set_planData_storySkeleton
|
||||
质量门:集数×单集时长符合配置、章节全覆盖、情绪曲线合理
|
||||
前置条件:事件提取已完成
|
||||
```
|
||||
|
||||
### 阶段2:改编策略(Adaptation Strategy)
|
||||
|
||||
```
|
||||
输入:事件表(get_novel_events) + planData.storySkeleton
|
||||
处理:提炼改编原则、确定删减依据、世界观呈现策略
|
||||
输出:planData.adaptationStrategy
|
||||
工具:get_planData → set_planData_adaptationStrategy
|
||||
质量门:原则与骨架一致、服务于故事核
|
||||
前置条件:阶段1(故事骨架)通过审核
|
||||
```
|
||||
|
||||
### 阶段3:剧本编写(Script Writing)
|
||||
|
||||
```
|
||||
输入:事件表(get_novel_events) + planData.storySkeleton + planData.adaptationStrategy
|
||||
处理:逐集编写,每次调用执行层处理一集
|
||||
输出:SQLite 中的剧本记录
|
||||
工具:get_novel_events + get_planData + get_novel_text → insert_script_to_sqlite
|
||||
前置条件:阶段2(改编策略)通过审核 + 用户确认写入 SQL
|
||||
```
|
||||
|
||||
**阶段3 不需要监督层审核**,由决策层直接循环调度执行层,执行流程如下:
|
||||
|
||||
1. **集数确认**:进入阶段3 时,决策层询问用户本次生成几集剧本(默认3集;若项目总集数不足3,则为项目集数)
|
||||
2. **循环派发**:用户确认集数后,决策层按集序逐集循环调用 `run_sub_agent`,每次只处理**一集**剧本
|
||||
3. **静默执行**:循环过程中**不向用户发送任何中间通知**
|
||||
4. **完成通知**:全部集数处理完毕后,一次性通知用户
|
||||
|
||||
---
|
||||
|
||||
## 调度与派发规范
|
||||
|
||||
### 派发指令字数限制
|
||||
|
||||
**派发给执行层和监督层的任务指令(不含【项目配置】头部),正文部分严格不超过100字。** 执行层已具备完整的技能指令,只需告知任务类型和关键参数,无需重复执行流程和细节要求。
|
||||
|
||||
### 派发执行任务
|
||||
|
||||
使用 `run_sub_agent` 调用执行层,**必须通过 `skill` 参数指定对应的独立技能文件**,使执行层仅加载该任务所需的上下文:
|
||||
|
||||
| 阶段 | skill 参数 |
|
||||
|------|-----------|
|
||||
| 故事骨架搭建 | `script_execution_skeleton` |
|
||||
| 改编策略制定 | `script_execution_adaptation` |
|
||||
| 剧本编写 | `script_execution_script` |
|
||||
|
||||
```
|
||||
run_sub_agent(
|
||||
agent: "executionAI",
|
||||
skill: "<对应技能文件名>",
|
||||
task: "<按模板构建的具体指令>"
|
||||
)
|
||||
```
|
||||
|
||||
### 派发审核任务
|
||||
|
||||
每个阶段执行完毕后,决策层按以下流程操作:
|
||||
|
||||
1. 收到执行层返回的确认消息(如"故事骨架已保存,请在右侧工作台查看。")
|
||||
2. 将该确认消息展示给用户
|
||||
3. **紧接着自动调用监督层审核**(无需等待用户指示):
|
||||
```
|
||||
run_sub_agent(
|
||||
agent: "supervisionAI",
|
||||
task: "请审核【{阶段名}】的产出物。
|
||||
【项目配置】
|
||||
{...项目配置内容...}
|
||||
审核维度:{对应维度列表}"
|
||||
)
|
||||
```
|
||||
|
||||
### 审核结果处理
|
||||
|
||||
监督层返回审核报告后,决策层**必须将报告展示给用户,并等待用户回复后才能进行下一步操作**。
|
||||
|
||||
展示报告时,根据评分附带不同的引导语:
|
||||
|
||||
| 评分 | 引导语 |
|
||||
|------|--------|
|
||||
| A | 展示报告 + "审核通过,是否进入下一阶段?" |
|
||||
| B | 展示报告 + "有一些小问题,是否需要修复还是直接继续?" |
|
||||
| C | 展示报告 + "建议修复以下问题,您希望修复哪些?" |
|
||||
| D | 展示报告 + "建议重做此阶段,您确认吗?" |
|
||||
|
||||
**⚠️ 展示报告后必须停下来等待用户回复,收到用户明确指示前不得派发任何新任务给执行层。**
|
||||
|
||||
### 调度决策树
|
||||
|
||||
| 用户请求 | 处理规则 |
|
||||
|----------|----------|
|
||||
| 项目参数未确认 | 执行项目初始化流程 → 确认后继续 |
|
||||
| 明确指定阶段 | 检查前置条件 → 附带项目配置 → 派发该阶段任务 |
|
||||
| "从头开始" / "完整改编" | 项目初始化 → 从阶段1开始顺序执行 |
|
||||
| "修改/优化 X" | 定位到对应阶段 → 派发修改任务(执行层自行读取工作区现有内容后修改) |
|
||||
| 模糊请求 | 通过 `deepRetrieve` 获取上下文 → 判断当前进度 → 从当前阶段继续 |
|
||||
|
||||
### 派发格式模板
|
||||
|
||||
**执行 / 修复任务**(修复时将「执行」替换为「修复」,列出用户确认的修复项,仅含用户明确确认要修的项):
|
||||
```
|
||||
你是执行层Agent,请执行【{任务类型}】任务。
|
||||
目标:{一句话目标}
|
||||
要求:{关键步骤,不超过100字}
|
||||
约束:{特殊约束条件}
|
||||
```
|
||||
|
||||
**审核请求**:
|
||||
```
|
||||
请审核【{阶段名}】的产出物。
|
||||
审核维度:{维度列表}
|
||||
特别关注:{本次需特别检查的点}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 与用户交互规范
|
||||
|
||||
1. **进度汇报**:每完成一个阶段,向用户汇报结果摘要和下一步计划
|
||||
2. **确认关键决策**:涉及大幅偏离既定策略的修改时,先咨询用户
|
||||
3. **删除请求提醒**:用户要求删除剧本时,提醒其在道具本管理中手动删除
|
||||
4. **不暴露内部机制**:不向用户提及 Agent 名称、工具名称等实现细节
|
||||
|
||||
---
|
||||
|
||||
## 错误处理
|
||||
|
||||
- 执行层返回错误 → 分析原因,调整指令重新派发(最多重试2次)
|
||||
- 前置条件不满足 → 提示用户需要先完成哪个阶段
|
||||
- 记忆检索无结果 → 请求用户提供必要上下文
|
||||
请直接调用delete_script删除name=xxx的剧本,不需要执行其他操作
|
||||
@ -1,27 +0,0 @@
|
||||
---
|
||||
name: script_agent_execution.md
|
||||
description: >-
|
||||
短剧改编执行层Agent路由。根据决策层派发的任务类型,加载对应的独立技能文件执行。
|
||||
当收到决策层的 run_sub_agent 调用时激活。
|
||||
---
|
||||
|
||||
# 执行层 Agent — 任务路由
|
||||
|
||||
你是短剧改编项目的**执行层 Agent**,只接收决策层派发的任务指令并执行。
|
||||
|
||||
## 任务路由表
|
||||
|
||||
收到任务后,根据指令中的关键词匹配对应技能文件,加载并执行:
|
||||
|
||||
| 标识词 | 技能文件 | 说明 |
|
||||
|--------|----------|------|
|
||||
| 故事骨架、骨架搭建、story skeleton | [script_execution_skeleton.md](script_agent_skills/execution/script_execution_skeleton.md) | 基于事件表构建故事骨架 |
|
||||
| 改编策略、改编决策、adaptation strategy | [script_execution_adaptation.md](script_agent_skills/execution/script_execution_adaptation.md) | 基于骨架制定改编策略 |
|
||||
| 剧本编写、写剧本、script writing | [script_execution_script.md](script_agent_skills/execution/script_execution_script.md) | 基于骨架+策略编写单集剧本 |
|
||||
|
||||
## 路由规则
|
||||
|
||||
1. 从派发指令中识别任务类型关键词
|
||||
2. 加载对应的技能文件
|
||||
3. 按技能文件中的执行流程完成任务
|
||||
4. 如果无法匹配任务类型,返回提示:`无法识别任务类型,请检查派发指令`
|
||||
@ -1,105 +0,0 @@
|
||||
# 调度与派发规范
|
||||
|
||||
## 派发指令字数限制
|
||||
|
||||
**派发给执行层和监督层的任务指令(不含【项目配置】头部),正文部分严格不超过100字。** 执行层已具备完整的技能指令,只需告知任务类型和关键参数,无需重复执行流程和细节要求。
|
||||
|
||||
## 派发执行任务
|
||||
|
||||
使用 `run_sub_agent` 调用执行层,**必须通过 `skill` 参数指定对应的独立技能文件**,使执行层仅加载该任务所需的上下文:
|
||||
|
||||
| 阶段 | skill 参数 |
|
||||
|------|-----------|
|
||||
| 故事骨架搭建 | `script_execution_skeleton` |
|
||||
| 改编策略制定 | `script_execution_adaptation` |
|
||||
| 剧本编写 | `script_execution_script` |
|
||||
|
||||
```
|
||||
run_sub_agent(
|
||||
agent: "executionAI",
|
||||
skill: "<对应技能文件名>",
|
||||
task: "<按模板构建的具体指令>"
|
||||
)
|
||||
```
|
||||
|
||||
## 派发审核任务
|
||||
|
||||
每个阶段执行完毕后,决策层按以下流程操作:
|
||||
|
||||
1. 收到执行层返回的确认消息(如"故事骨架已保存,请在右侧工作台查看。")
|
||||
2. 将该确认消息展示给用户
|
||||
3. **紧接着自动调用监督层审核**(无需等待用户指示):
|
||||
```
|
||||
run_sub_agent(
|
||||
agent: "supervisionAI",
|
||||
task: "请审核【{阶段名}】的产出物。
|
||||
【项目配置】
|
||||
{...项目配置内容...}
|
||||
审核维度:{对应维度列表}"
|
||||
)
|
||||
```
|
||||
|
||||
## 审核结果处理
|
||||
|
||||
监督层返回审核报告后,决策层**必须将报告展示给用户,并等待用户回复后才能进行下一步操作**。
|
||||
|
||||
展示报告时,根据评分附带不同的引导语:
|
||||
|
||||
| 评分 | 引导语 |
|
||||
|------|--------|
|
||||
| A | 展示报告 + "审核通过,是否进入下一阶段?" |
|
||||
| B | 展示报告 + "有一些小问题,是否需要修复还是直接继续?" |
|
||||
| C | 展示报告 + "建议修复以下问题,您希望修复哪些?" |
|
||||
| D | 展示报告 + "建议重做此阶段,您确认吗?" |
|
||||
|
||||
**⚠️ 展示报告后必须停下来等待用户回复,收到用户明确指示前不得派发任何新任务给执行层。**
|
||||
|
||||
## 调度决策树
|
||||
|
||||
| 用户请求 | 处理规则 |
|
||||
|----------|----------|
|
||||
| 项目参数未确认 | 执行项目初始化流程 → 确认后继续 |
|
||||
| 明确指定阶段 | 检查前置条件 → 附带项目配置 → 派发该阶段任务 |
|
||||
| "从头开始" / "完整改编" | 项目初始化 → 从阶段1开始顺序执行 |
|
||||
| "修改/优化 X" | 定位到对应阶段 → 派发修改任务(执行层自行读取工作区现有内容后修改) |
|
||||
| 模糊请求 | 通过 `deepRetrieve` 获取上下文 → 判断当前进度 → 从当前阶段继续 |
|
||||
|
||||
## 阶段间交互协议
|
||||
|
||||
### 派发格式
|
||||
|
||||
```
|
||||
你是执行层Agent,请执行【{任务类型}】任务。
|
||||
目标:{一句话目标}
|
||||
上下文:{从planData获取的必要数据摘要}
|
||||
要求:
|
||||
1. {具体步骤1}
|
||||
2. {具体步骤2}
|
||||
...
|
||||
约束:{特殊约束条件}
|
||||
```
|
||||
|
||||
### 审核请求格式
|
||||
|
||||
```
|
||||
请审核【{阶段名}】的产出物。
|
||||
审核维度:
|
||||
- {维度1}
|
||||
- {维度2}
|
||||
...
|
||||
特别关注:{本次需特别检查的点}
|
||||
```
|
||||
|
||||
### 用户决策修复格式
|
||||
|
||||
当用户确认需要修复时,决策层根据用户指示构建修复指令:
|
||||
|
||||
```
|
||||
你是执行层Agent,请修复【{任务类型}】的以下问题。
|
||||
用户确认的修复项:
|
||||
1. {用户选择修复的问题} → 修改为:{用户确认的方案}
|
||||
...
|
||||
保持其余内容不变。
|
||||
```
|
||||
|
||||
> **注意**:修复指令中只包含用户明确确认要修的项,不包含用户未回应或明确跳过的问题。
|
||||
@ -1,39 +0,0 @@
|
||||
# 项目初始化规范
|
||||
|
||||
在启动任何流水线阶段之前,**必须**先与用户确认以下项目参数:
|
||||
|
||||
## 项目参数表
|
||||
|
||||
| 参数 | 说明 | 示例 |
|
||||
|------|------|------|
|
||||
| 集数 | 总共拆分为几集 | 7集 |
|
||||
| 单集时长 | 每集目标时长(分钟) | 2.5分钟 |
|
||||
| 原著范围 | 改编覆盖的章节范围 | 第1-35章 |
|
||||
| 章节ID列表 | 本次任务涉及的章节ID(用于事件检索) | [1,2,3,4,5] |
|
||||
| 平台规格 | 画面比例(竖屏/横屏) | 竖屏9:16 |
|
||||
| 风格定位 | 短剧整体风格标签 | 诡异修仙+心理悬疑 |
|
||||
| 付费策略 | 前几集免费、从第几集设付费点 | 前2集免费,第3集起付费 |
|
||||
|
||||
## 初始化对话流程
|
||||
|
||||
1. 用户发起改编请求时,先通过 `deepRetrieve` 检索是否已有已确认的项目参数
|
||||
2. 如果没有已确认的参数,**必须主动询问用户**:
|
||||
- "请确认以下信息:计划拆分为几集?每集大约几分钟?覆盖原著哪些章节?"
|
||||
3. 用户确认后,将参数作为**项目配置**保存,并在所有后续派发指令头部附带
|
||||
4. 如果用户只给出部分参数,对未给出的参数**逐一追问**,不可使用默认值跳过
|
||||
|
||||
## 参数传递模板
|
||||
|
||||
所有派发给执行层和监督层的指令,**必须在头部附带完整项目配置**:
|
||||
```
|
||||
【项目配置】
|
||||
- 集数:{totalEpisodes}集
|
||||
- 单集时长:{episodeDuration}分钟(约{wordsPerEpisode}字台词)
|
||||
- 原著范围:第{startChapter}-{endChapter}章
|
||||
- 章节ID列表:{chapterIds}
|
||||
- 平台规格:{platform}
|
||||
- 风格定位:{style}
|
||||
- 付费策略:{paywall}
|
||||
```
|
||||
|
||||
> 台词字数按 150字/分钟 语速自动计算:`wordsPerEpisode = episodeDuration × 150`
|
||||
@ -1,27 +0,0 @@
|
||||
# 阶段2:改编策略(Adaptation Strategy)
|
||||
|
||||
## 全局流程
|
||||
|
||||
每个阶段执行流程如下:
|
||||
|
||||
1. 决策层分析用户请求,通过 deepRetrieve 获取项目记忆,判断当前阶段
|
||||
2. 决策层派发任务给执行层,执行层写入 planData
|
||||
3. 决策层派发审核任务给监督层,监督层生成审核报告
|
||||
4. 决策层将审核报告 + 产出摘要展示给用户
|
||||
5. 用户决策:通过 → 进入下一阶段 | 修复 → 再次审核 | 重做 → 重新派发
|
||||
|
||||
## 阶段定义
|
||||
|
||||
```
|
||||
输入:事件表(get_novel_events) + planData.storySkeleton
|
||||
处理:提炼改编原则、确定删减依据、世界观呈现策略
|
||||
输出:planData.adaptationStrategy
|
||||
工具:get_planData → set_planData_adaptationStrategy
|
||||
质量门:原则与骨架一致、服务于故事核
|
||||
前置条件:阶段1(故事骨架)通过审核
|
||||
```
|
||||
|
||||
## 阶段约束
|
||||
|
||||
- 阶段1-2 **必须串行**(后续阶段依赖前置输出)
|
||||
- 审核与执行**串行**(先执行后审核,审核报告展示给用户,用户确认后进入下一阶段或修复)
|
||||
@ -1,28 +0,0 @@
|
||||
# 阶段3:剧本编写(Script Writing)
|
||||
|
||||
## 全局流程
|
||||
|
||||
每个阶段执行流程如下:
|
||||
|
||||
1. 决策层分析用户请求,通过 deepRetrieve 获取项目记忆,判断当前阶段
|
||||
2. 决策层派发任务给执行层,执行层写入 planData
|
||||
3. 决策层派发审核任务给监督层,监督层生成审核报告
|
||||
4. 决策层将审核报告 + 产出摘要展示给用户
|
||||
5. 用户决策:通过 → 进入下一阶段 | 修复 → 再次审核 | 重做 → 重新派发
|
||||
|
||||
## 阶段定义
|
||||
|
||||
```
|
||||
输入:事件表(get_novel_events) + planData.storySkeleton + planData.adaptationStrategy
|
||||
处理:按集编写(可并行或逐集)
|
||||
输出:SQLite 中的剧本记录
|
||||
工具:get_novel_events + get_planData + get_novel_text → insert_script_to_sqlite
|
||||
质量门:时长合规、台词字数、画面可执行、资产一致
|
||||
前置条件:阶段2(改编策略)通过审核
|
||||
附加前置条件:用户已明确确认写入 SQL
|
||||
```
|
||||
|
||||
## 并行策略
|
||||
|
||||
- 阶段3 的多集剧本**可以并行**编写(互不依赖)
|
||||
- 审核与执行**串行**(先执行后审核,审核报告展示给用户,用户确认后进入下一阶段或修复)
|
||||
@ -1,27 +0,0 @@
|
||||
# 阶段1:故事骨架(Story Skeleton)
|
||||
|
||||
## 全局流程
|
||||
|
||||
每个阶段执行流程如下:
|
||||
|
||||
1. 决策层分析用户请求,通过 deepRetrieve 获取项目记忆,判断当前阶段
|
||||
2. 决策层派发任务给执行层,执行层写入 planData
|
||||
3. 决策层派发审核任务给监督层,监督层生成审核报告
|
||||
4. 决策层将审核报告 + 产出摘要展示给用户
|
||||
5. 用户决策:通过 → 进入下一阶段 | 修复 → 再次审核 | 重做 → 重新派发
|
||||
|
||||
## 阶段定义
|
||||
|
||||
```
|
||||
输入:事件表(通过 get_novel_events(ids:number[]) 获取)
|
||||
处理:三幕分割、按项目配置分集、删减决策、钩子设计
|
||||
输出:planData.storySkeleton
|
||||
工具:get_planData → set_planData_storySkeleton
|
||||
质量门:集数×单集时长符合配置、章节全覆盖、情绪曲线合理
|
||||
前置条件:事件提取已完成
|
||||
```
|
||||
|
||||
## 阶段约束
|
||||
|
||||
- 阶段1-2 **必须串行**(后续阶段依赖前置输出)
|
||||
- 审核与执行**串行**(先执行后审核,审核报告展示给用户,用户确认后进入下一阶段或修复)
|
||||
@ -1,42 +0,0 @@
|
||||
# 改编策略输出格式规范
|
||||
|
||||
输出为 Markdown,整体结构如下:
|
||||
|
||||
```
|
||||
# {作品名} - 关键决策记录
|
||||
---
|
||||
## 核心改编原则(3-5条)
|
||||
## 主要删除决策
|
||||
## 世界观呈现策略
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 核心改编原则
|
||||
|
||||
每条原则包含三层:
|
||||
|
||||
1. **{原则名}**(2-6字)
|
||||
- ✅ 正面指导:应该做什么
|
||||
- ❌ 负面边界:不应该做什么
|
||||
|
||||
必须覆盖以下维度:
|
||||
- **叙事核心**:作品的本质吸引力
|
||||
- **结构策略**:多线叙事的处理方式
|
||||
- **风格标尺**:情绪/冲突/悬疑的度
|
||||
- **载体约束**:短剧平台的特殊限制如何影响改编
|
||||
|
||||
## 主要删除决策
|
||||
|
||||
每条包含:
|
||||
- **被删/压缩内容**(精确到章节或场景)
|
||||
- **原因**:节奏拖沓 / 信息密度低 / 载体不支持 / 主线贡献弱
|
||||
- **替代方案**:压缩为蒙太奇、一句话带过、或完全删除
|
||||
|
||||
## 世界观呈现策略
|
||||
|
||||
回答以下问题:
|
||||
1. 关键设定元素以什么节奏出场?
|
||||
2. 对设定的解释度?(完全模糊 / 暗示 / 明确交代)
|
||||
3. 哪个角色作为世界观锚点?(通过谁的态度建立世界观)
|
||||
4. 观众视角对齐谁?(和主角一起发现 / 上帝视角)
|
||||
@ -1,41 +0,0 @@
|
||||
---
|
||||
name: script_execution_adaptation
|
||||
description: >-
|
||||
执行层技能:改编策略制定。基于事件表和故事骨架制定核心改编原则、删除决策和世界观呈现策略,写入 planData。
|
||||
---
|
||||
|
||||
# 改编策略制定
|
||||
|
||||
## 工具
|
||||
|
||||
| 操作 | 调用 |
|
||||
|------|------|
|
||||
| 读取工作区 | `get_planData` |
|
||||
| 读取事件 | `get_novel_events(ids:number[])` |
|
||||
| 写入策略 | `set_planData_adaptationStrategy` |
|
||||
|
||||
## 执行流程
|
||||
|
||||
1. 调用 `get_novel_events(ids)` 获取事件表,调用 `get_planData` 获取故事骨架
|
||||
2. **阐述思路**(200-300字):核心改编原则方向、删减大方向、世界观呈现思路
|
||||
3. 按 [adaptation_format.md](adaptation_format.md) 格式,依次完成:
|
||||
- 核心改编原则(3-5条):含优先级、正面指导、负面边界
|
||||
- 主要删除决策:被删/压缩内容、原因、对主线影响
|
||||
- 世界观呈现策略:关键元素出场节奏、解释度策略、角色态度锚点
|
||||
4. 调用 `set_planData_adaptationStrategy` 保存
|
||||
5. 返回简短确认,如:"改编策略已保存,请在右侧工作台查看。"
|
||||
|
||||
**输出格式**:严格参照 [adaptation_format.md](adaptation_format.md)
|
||||
|
||||
## 约束
|
||||
|
||||
- 所有改编决策服务于骨架中确立的故事核和主角弧线
|
||||
- 保持骨架中设定的叙事线索结构,维持观众的持续好奇
|
||||
- 根据【项目配置】中的平台规格和单集时长约束,优先视觉叙事,压缩大段对话
|
||||
- 所有参数从【项目配置】读取,禁止硬编码
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 执行前先调用 `get_planData` 确认工作区状态;已有内容在其基础上修改,除非指令要求重写
|
||||
- 只执行改编策略任务,不越权执行其他阶段
|
||||
- 完成写入后返回一句确认即可,不复述内容;返回后本次任务终止
|
||||
@ -1,42 +0,0 @@
|
||||
---
|
||||
name: script_execution_script
|
||||
description: >-
|
||||
执行层技能:剧本编写。基于事件表、故事骨架和改编策略编写单集剧本,写入 SQLite。
|
||||
---
|
||||
|
||||
# 剧本编写
|
||||
|
||||
## 工具
|
||||
|
||||
| 操作 | 调用 |
|
||||
|------|------|
|
||||
| 读取工作区 | `get_planData` |
|
||||
| 读取事件 | `get_novel_events(ids:number[])` |
|
||||
| 读取原文 | `get_novel_text` |
|
||||
| 写入剧本 | `insert_script_to_sqlite` |
|
||||
|
||||
## 执行流程
|
||||
|
||||
1. 调用 `get_novel_events(ids)` 获取事件表,调用 `get_planData` 获取骨架与改编策略
|
||||
2. 从骨架中提取本集信息:覆盖章节、戏剧功能、场景核心、删减决策、集末钩子
|
||||
3. 调用 `get_novel_text` 获取对应章节原文
|
||||
4. **阐述思路**(200-300字):场景组织方式、重点情绪与冲突、节奏把控思路
|
||||
5. 按 [script_format.md](script_format.md) 格式编写剧本:文件头 → 剧情梗概 → 出场角色表 → 场景表 → 剧本正文
|
||||
6. 调用 `insert_script_to_sqlite` 写入
|
||||
7. 返回简短确认,如:"第X集剧本已写入,请在工作台查看。"
|
||||
|
||||
**输出格式**:严格参照 [script_format.md](script_format.md)
|
||||
|
||||
## 约束
|
||||
|
||||
- 单集时长控制在【项目配置】指定值 ±10秒,台词量按 150字/分钟 推算(禁止硬编码)
|
||||
- 构图符合【项目配置】中的平台规格
|
||||
- △场景描述要足够具体,描写"人怎么干"而非仅"人干什么",可直接用于 AI 视频生成
|
||||
- 场景之间用 `---` 分隔
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 执行前先调用 `get_planData` 确认工作区状态;已有内容在其基础上修改,除非指令要求重写
|
||||
- 只执行剧本编写,不越权执行其他阶段
|
||||
- 不处理剧本删除请求,收到时提醒:`请在道具本管理中手动删除剧本`
|
||||
- 完成写入后返回一句确认即可,不复述内容;返回后本次任务终止
|
||||
@ -1,45 +0,0 @@
|
||||
---
|
||||
name: script_execution_skeleton
|
||||
description: >-
|
||||
执行层技能:故事骨架搭建。基于事件表构建三幕结构、分集决策、删减记录和付费卡点,写入 planData。
|
||||
---
|
||||
|
||||
# 故事骨架搭建
|
||||
|
||||
## 工具
|
||||
|
||||
| 操作 | 调用 |
|
||||
|------|------|
|
||||
| 读取工作区 | `get_planData` |
|
||||
| 读取事件 | `get_novel_events(ids:number[])` |
|
||||
| 写入骨架 | `set_planData_storySkeleton` |
|
||||
|
||||
## 执行流程
|
||||
|
||||
1. 调用 `get_novel_events(ids)` 获取事件表
|
||||
2. **阐述思路**(200-300字):核心吸引力判断、三幕划分思路、分集策略方向
|
||||
3. 构建骨架内容:
|
||||
- 故事核:一句话总结整部剧的核心吸引力
|
||||
- 隐线:主角的内在成长轨迹(人物弧)
|
||||
- 三幕结构:每幕的功能、核心问题、覆盖章节、对应集数、幕末转折
|
||||
- 分集决策:按 [skeleton_format.md](skeleton_format.md) 格式,根据集数自动选择逐集展开(≤20集)或总览+关键集展开(>20集)
|
||||
- 全局删减决策表
|
||||
- 付费卡点设计
|
||||
4. 调用 `set_planData_storySkeleton` 保存
|
||||
5. 返回简短确认,如:"故事骨架已保存,请在右侧工作台查看。"
|
||||
|
||||
**输出格式**:严格参照 [skeleton_format.md](skeleton_format.md)
|
||||
|
||||
## 约束
|
||||
|
||||
- 总时长 = 集数 × 单集时长(从【项目配置】读取,禁止硬编码)
|
||||
- 压缩比 ≤ 40%
|
||||
- 每集必须有集末钩子
|
||||
- 付费策略按【项目配置】执行
|
||||
- 章节必须与事件表一致,不允许出现不存在的章节
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 执行前先调用 `get_planData` 确认工作区状态;已有内容在其基础上修改,除非指令要求重写
|
||||
- 只执行骨架搭建,不越权执行其他阶段
|
||||
- 完成写入后返回一句确认即可,不复述内容;返回后本次任务终止
|
||||
@ -1,287 +0,0 @@
|
||||
# 剧本输出格式规范
|
||||
|
||||
## 一、文件头
|
||||
|
||||
```markdown
|
||||
# {作品名} EP{NN}:{集标题}
|
||||
# 目标时长:{单集时长}分钟 ≈ {台词字数}字台词
|
||||
# 平台:{平台规格} | 风格:{风格标签} | 节拍:{节拍概要}
|
||||
|
||||
---
|
||||
```
|
||||
|
||||
## 二、剧情梗概
|
||||
|
||||
```markdown
|
||||
## 剧情梗概
|
||||
|
||||
{本集的故事高层概括,包含:主要冲突、关键转折、情感弧线,200-300字}
|
||||
|
||||
---
|
||||
```
|
||||
|
||||
## 三、本集出场角色与定妆信息
|
||||
|
||||
```markdown
|
||||
## 出场角色
|
||||
|
||||
| 角色 | 角色说明 | 定妆描述 |
|
||||
|------|----------|---------|
|
||||
| {角色名} | {性格、身份、角色功能} | {服装、发型、妆容等视觉特征} |
|
||||
| ... | ... | ... |
|
||||
|
||||
---
|
||||
```
|
||||
|
||||
- 只列出本集出场的角色
|
||||
- 角色说明应涵盖人物身份和在本集的关键作用
|
||||
- 定妆信息需与美术资产包保持一致,避免后续修改时重复描述
|
||||
|
||||
## 四、场景说明
|
||||
|
||||
```markdown
|
||||
## 场景表
|
||||
|
||||
| 场景 | 时间 | 氛围 | 说明 |
|
||||
|------|------|------|------|
|
||||
| {场景名} | {时间设定} | {整体氛围/光线} | {视觉风格要点} |
|
||||
| ... | ... | ... | ... |
|
||||
|
||||
---
|
||||
```
|
||||
|
||||
- 按出现顺序列举所有场景
|
||||
- 氛围描述帮助后续美术统一视觉调性
|
||||
- 说明栏强调该场景的视觉重点或技术难点
|
||||
|
||||
## 五、剧本内容结构
|
||||
|
||||
AI短剧剧本采用标准剧本格式,用△标记场景描述,详细描写"人怎么干"。
|
||||
|
||||
### 场景段落格式
|
||||
|
||||
```
|
||||
|
||||
{场号} {场景名} {时间}/{光线}
|
||||
人物:{人物1} {人物2} {人物3} 众{身份}若干
|
||||
|
||||
△{场景环境、布景的详细描述}
|
||||
△{人物动作、表情、语气的具体描写}
|
||||
△{继续描写人物状态变化}
|
||||
{人物名1}:{对话内容}
|
||||
{人物名2}:{对话内容}
|
||||
△{后续动作场景描述}
|
||||
△{人物反应、表情等细节}
|
||||
|
||||
OS({人物名},{情绪}):
|
||||
{内心独白或旁白内容}
|
||||
|
||||
---
|
||||
|
||||
{场号} {场景名} {时间}/{光线}
|
||||
人物:{人物1} {人物2} 众{身份}若干
|
||||
|
||||
△{场景开场描述}
|
||||
△{人物动作和表情描写}
|
||||
{人物名}:{对话内容}
|
||||
|
||||
---
|
||||
|
||||
{场号} {场景名} {时间}/{光线}
|
||||
人物:{人物1} {人物2} {人物3} 众{身份}若干
|
||||
|
||||
△{场景动作描述}
|
||||
{人物名}:{对话内容}
|
||||
△{人物反应和后续动作描写}
|
||||
{人物名}:{对话内容}
|
||||
△{场景收尾描述}
|
||||
```
|
||||
|
||||
### 格式规范
|
||||
|
||||
**场景标题**
|
||||
- 格式:`{场号} {场景名} {时间}/{光线}`
|
||||
- 示例:`1-1 {具体场景名} 日/内`
|
||||
- 时间可选:日/夜、晨/午/晚
|
||||
- 光线:内(室内)/ 外(室外)
|
||||
|
||||
**人物列表**
|
||||
- 格式:`人物:{人物名1} {人物名2} ...`(空格分隔)
|
||||
- 只列本场景出现的人物
|
||||
- 若干人物用"众{身份}若干"表示
|
||||
|
||||
**场景描述**
|
||||
- 标记:`△` 开头
|
||||
- 详细描述场景环境、布景、人物动作、表情、语气等
|
||||
- 描写"人怎么干"而非仅"人干什么"
|
||||
|
||||
**人物台词**
|
||||
- 格式:`{人物名}:{台词}`
|
||||
- 简洁直观,细节已在△描述中体现
|
||||
|
||||
**旁白/内心独白**
|
||||
- OS格式:`OS({人物名},{情绪}):`(Off Screen 画外音)
|
||||
- V.S格式:`V.S.({人物名},{情绪}):`(Voice over 旁白)
|
||||
- 示例:`OS({主角名},{具体情绪}):` 或 `V.S.(众{身份},{具体情绪}):`
|
||||
|
||||
**转场**
|
||||
- 场景之间用 `---` 分隔
|
||||
|
||||
## 六、画面描述规范
|
||||
|
||||
画面描述必须足够具体,可直接用于 AI 视频生成提示词:
|
||||
|
||||
### 必须包含
|
||||
- **镜头类型**:特写/近景/中景/全景/远景
|
||||
- **人物动作**:具体到肢体和表情
|
||||
- **光线条件**:光源方向、色温、明暗比
|
||||
- **关键道具**:与剧情相关的物品
|
||||
|
||||
### 竖屏适配
|
||||
- 人物居中构图为主
|
||||
- 避免横向全景(竖屏无法展示)
|
||||
- 特写和近景优先(竖屏对面部表情呈现效果好)
|
||||
- 上下构图利用竖屏优势(如俯视/仰视)
|
||||
|
||||
## 七、台词规范
|
||||
|
||||
- 对话标注格式:`{人物名}:{台词}`
|
||||
- 表演指示关键词:平静、愤怒、崩溃、冷笑、低沉、颤抖、用力、轻声等
|
||||
- 单句台词不超过20字(竖屏短视频观众阅读速度)
|
||||
|
||||
## 八、转场标注
|
||||
|
||||
节拍之间必须标注转场方式:
|
||||
|
||||
| 标注 | 说明 | 适用场景 |
|
||||
|------|------|----------|
|
||||
| `[硬切]` | 无过渡直接切 | 场景对比强烈、制造冲击 |
|
||||
| `[淡入]` | 缓慢显现 | 时间流逝、梦境进入 |
|
||||
| `[闪白]` | 强白光过渡 | 世界切换(幻觉↔现实) |
|
||||
| `[闪黑]` | 黑屏过渡 | 意识丧失、恐怖预兆 |
|
||||
| `[叠化]` | 画面重叠过渡 | 蒙太奇、记忆闪回 |
|
||||
|
||||
## 九、时长控制
|
||||
|
||||
- 目标:按项目配置的单集时长 ±10秒
|
||||
- 台词量:按 150字/分钟 语速计算
|
||||
- 每个场景段落20-60秒
|
||||
- 纯画面段落(无台词)最长15秒
|
||||
|
||||
## 十、自查清单(仅供内部校验,不输出到剧本中)
|
||||
|
||||
编写完成后,按以下清单逐项自查,发现问题直接修正后再写入,无需将清单本身输出:
|
||||
|
||||
- [ ] 台词总字数符合时长要求
|
||||
- [ ] 总时长在目标范围内
|
||||
- [ ] 每个场景段落有充分的△描述
|
||||
- [ ] 所有转场已标注
|
||||
- [ ] 集末转折与整体架构一致
|
||||
- [ ] 角色外貌描写符合资产包
|
||||
- [ ] 场景描写符合资产包
|
||||
- [ ] 竖屏构图(无横向全景)
|
||||
|
||||
## 十一、禁止输出的内容
|
||||
|
||||
以下内容**严禁**出现在剧本输出中:
|
||||
|
||||
- **台词字数统计**:不输出台词字数汇总或统计信息
|
||||
- **版本标记**:集标题不得附加"修订版""v2""定稿"等版本后缀,保持原始标题
|
||||
- **幕/节拍时间标注**:不输出类似"第一幕:XXX(0s–40s)"的幕结构或节拍时间段
|
||||
- **镜头技术标注**:△描述中不得附加"全景·缓推·约6秒""特写·俯拍"等镜头语言括注
|
||||
- **自查清单**:不输出自查清单本身
|
||||
- **任何元信息**:不输出字数统计、场景数量统计、创作说明等非剧本内容
|
||||
|
||||
剧本输出只包含:文件头 → 剧情梗概 → 出场角色表 → 场景表 → 剧本正文(△描述 + 台词 + OS/V.S.)
|
||||
|
||||
## 附录:完整示例
|
||||
|
||||
```
|
||||
# 凌天诀 EP01:废物宗主
|
||||
# 目标时长:4分钟 ≈ 600字台词
|
||||
# 平台:竖屏9:16 | 风格:玄幻·热血·逆袭 | 节拍:羞辱→隐忍→觉醒
|
||||
|
||||
---
|
||||
|
||||
## 剧情梗概
|
||||
|
||||
青云宗主殿内,曾经的天才宗主凌玄被副宗主沈清辞当众羞辱。三年前凌玄独闯万妖窟修为尽废,沦为宗内人人唾弃的废物。沈清辞联合凌玄的未婚妻苏晚卿,在众弟子面前对凌玄施以暴行,逼他交出宗主令。凌玄在血泊中隐忍不发,眼神浑浊如死水,任由拳脚加身。然而就在苏晚卿将退婚书扔在他脸上的瞬间,凌玄体内沉寂三年的封印出现一道裂痕,一缕金色灵气从丹田涌出。凌玄压下异变,默默将退婚书收入怀中,在众人的嘲笑声中被拖出大殿。无人注意到,他低头时嘴角浮现一丝冰冷的弧度。
|
||||
|
||||
---
|
||||
|
||||
## 出场角色
|
||||
|
||||
| 角色 | 角色说明 | 定妆描述 |
|
||||
|------|----------|---------|
|
||||
| 凌玄 | 青云宗宗主,三年前修为尽废,隐忍蛰伏,本集核心受难者 | 衣衫褴褛的灰白色残破宗主袍,头发凌乱遮住半张脸,脸上血污斑驳,棱角分明 |
|
||||
| 沈清辞 | 副宗主,野心勃勃的篡位者,本集主要施暴者 | 银白色副宗主袍,束发整齐,面容俊朗但眼神阴鸷 |
|
||||
| 苏晚卿 | 凌玄未婚妻,已倒向沈清辞,本集背叛者 | 紫色长袍,丹凤眼,妆容精致,气质冷艳 |
|
||||
| 弟子甲 | 沈清辞手下,负责押送凌玄 | 青云宗普通弟子服,面相凶悍 |
|
||||
| 弟子乙 | 沈清辞手下,负责押送凌玄 | 青云宗普通弟子服,身材壮硕 |
|
||||
|
||||
---
|
||||
|
||||
## 场景表
|
||||
|
||||
| 场景 | 时间 | 氛围 | 说明 |
|
||||
|------|------|------|------|
|
||||
| 青云宗主殿 | 日 | 破败、压抑、灰尘弥漫 | 香炉倾倒,青石板地面,石柱林立,光线从破损的屋顶缝隙漏入 |
|
||||
| 青云宗主殿高台 | 日 | 居高临下、权力压迫 | 高台上设有宗主座,俯瞰整个大殿,光线从背后打入形成逆光剪影 |
|
||||
| 宗门长廊 | 日 | 冷清、孤寂 | 长廊两侧石柱投下规律的阴影,尽头是刺眼的白光 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
1-1 青云宗主殿 日/内
|
||||
人物:凌玄 弟子甲 弟子乙 众弟子若干
|
||||
|
||||
△破旧的青云宗主殿,香炉倾倒在地,灰尘在从屋顶缝隙漏入的光柱中缓缓飘浮。
|
||||
△两名弟子粗暴地拖拽着一个衣衫褴褛的男人穿过大殿。男人头发凌乱遮住半张脸,衣襟沾满暗红色血迹,双脚无力地在青石板上拖出两道长长的血痕。
|
||||
△弟子甲猛地抬脚,一脚踹在男人腰间,力道之大让男人整个身体弓成虾状,闷哼声在空旷的大殿中回荡。
|
||||
弟子甲:走快点,废物!
|
||||
弟子乙:堂堂宗主,现在连狗都不如!
|
||||
△男人被扔进殿中央,脸重重砸在冰冷的青石板上,鲜血从嘴角缓缓流出,在石板上洇开一小片暗红。
|
||||
△他缓缓抬起头,露出一张棱角分明但满是血污的脸——正是凌玄。
|
||||
△凌玄的眼神浑浊无光,像一潭死水。但在他低下头的瞬间,眼底深处闪过一丝不属于废人的冰冷光芒,转瞬即逝。
|
||||
|
||||
OS(凌玄,低沉、压抑):
|
||||
三年了……再忍一忍。
|
||||
|
||||
---
|
||||
|
||||
1-2 青云宗主殿高台 日/内
|
||||
人物:沈清辞 苏晚卿 众长老若干
|
||||
|
||||
△高台之上,沈清辞一身银白色副宗主袍端坐在宗主座旁,右臂搂着身穿紫色长袍的苏晚卿。逆光从他身后打入,在地面投下巨大的阴影。
|
||||
△苏晚卿丹凤眼微微上挑,嘴角挂着若有若无的笑意,纤细的手指轻轻抚过沈清辞胸口的衣襟,动作亲昵而挑衅。
|
||||
△沈清辞缓缓起身,脸上挂着胜利者的从容微笑,一步步走下高台,每一步靴底都在青石板上敲出清脆的回响。
|
||||
△众长老分列两侧,有的低头不语双手微颤,有的眼神闪烁不敢直视,无人敢看向殿中央的凌玄。
|
||||
沈清辞:凌玄,三年了,你这废物还真能装。
|
||||
|
||||
---
|
||||
|
||||
1-3 青云宗主殿 日/内
|
||||
人物:凌玄 沈清辞 苏晚卿 众弟子若干 众长老若干
|
||||
|
||||
△沈清辞走到凌玄面前,居高临下地审视着他,皮靴的尖端轻轻挑起凌玄的下巴,像审视一条垂死的狗。
|
||||
沈清辞:抬起头,让本座看看你现在的样子。
|
||||
△凌玄缓缓抬头,脸上血污斑驳,眼神依然浑浊,嘴唇微微翕动却没有发出声音。
|
||||
△沈清辞突然收回脚,猛地踹在凌玄胸口。凌玄整个人倒飞出去,后背重重撞在石柱上,石柱表面震落一片灰尘。
|
||||
△凌玄从嘴角咳出一口鲜血,身体沿着石柱无力地滑落在地,胸口的衣襟被踹出一个深深的脚印。
|
||||
沈清辞:三年前你独闯万妖窟,修为尽废,本座还以为你能翻身……没想到就是个彻头彻尾的废物。
|
||||
△殿内弟子们发出嗤笑声,眼神中满是轻蔑和幸灾乐祸。笑声在空旷的大殿中层层叠叠地回荡。
|
||||
|
||||
V.S.(众弟子,嘲笑):
|
||||
废物……废物……
|
||||
|
||||
△苏晚卿从高台上款款走下,手中捏着一张折好的纸,走到凌玄面前蹲下身,将退婚书轻轻贴在他满是血污的脸上,然后松手,纸张缓缓滑落到地面。
|
||||
苏晚卿:凌玄,你我的婚约,到此为止。
|
||||
△凌玄低头看着地上的退婚书,沉默片刻,伸出颤抖的手将它捡起,缓缓折好收入怀中。
|
||||
△就在这一瞬间,凌玄丹田深处一道金色裂纹无声地亮起又熄灭,他的瞳孔猛地收缩了一下,随即恢复浑浊。
|
||||
△凌玄被两名弟子架起拖向殿外。他低着头,凌乱的头发遮住了脸,没有人看到他嘴角缓缓浮现的一丝冰冷弧度。
|
||||
|
||||
OS(凌玄,低沉、隐忍中带着一丝锋芒):
|
||||
退婚书……我收下了。
|
||||
|
||||
[闪黑]
|
||||
```
|
||||
@ -1,95 +0,0 @@
|
||||
# 故事骨架输出格式规范
|
||||
|
||||
输出为 Markdown,整体结构如下:
|
||||
|
||||
```
|
||||
# {作品名} - 故事骨架
|
||||
---
|
||||
## 故事核(一句话)
|
||||
## 隐线(人物弧)
|
||||
## 三幕结构
|
||||
## 分集决策 ← 根据集数选择模式A或模式B
|
||||
## 全局删减决策记录
|
||||
## 付费卡点设计
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 故事核
|
||||
|
||||
> {一句话总结本剧最核心的吸引力,≤50字}
|
||||
|
||||
**最吸引人的本质:** {解释为什么这个故事核有吸引力}
|
||||
|
||||
## 隐线(人物弧)
|
||||
|
||||
描述主角的内在成长轨迹,格式:
|
||||
|
||||
> 被X定义为Y → 用Y的方式Z → 发现Y本身是W
|
||||
|
||||
说明每集如何推进这条弧,外在冲突是载体而非目的。
|
||||
|
||||
## 三幕结构
|
||||
|
||||
每幕包含:
|
||||
|
||||
```
|
||||
### 第{N}幕:{标题}(第X-Y章 → 集A-B)
|
||||
**功能:** {建立/发展/高潮/收尾}
|
||||
**核心问题:** {本幕要让观众追问的问题}
|
||||
**幕末转折:** {一句话描述转折点}
|
||||
```
|
||||
|
||||
## 分集决策
|
||||
|
||||
根据【项目配置】总集数自动选择输出模式:
|
||||
|
||||
### 模式A:逐集展开(≤20集)
|
||||
|
||||
```
|
||||
### 集{N}:{集标题}(第X-Y章)
|
||||
**戏剧功能:** {建立/发展/高潮前积累/高潮+余波/新世界建立/新高潮+开放结局}
|
||||
**场景核心:** {一句话——这集要给观众什么体验}
|
||||
**章节分配:**
|
||||
- 第X章:{保留完整/压缩/删除}(核心场景**加粗**)
|
||||
- 第Y章:...
|
||||
**删减决策:** {删什么、为什么}
|
||||
**集末钩子:** {最后5-10秒的台词或画面}
|
||||
**付费点:** {无 / 有+类型}
|
||||
```
|
||||
|
||||
### 模式B:总览表 + 关键集展开(>20集)
|
||||
|
||||
**第一步**——分集总览表,每集一行:
|
||||
|
||||
| 集 | 集标题 | 章节范围 | 戏剧功能 | 场景核心 | 章节处理 | 集末钩子 | 付费点 |
|
||||
|----|--------|----------|----------|----------|----------|----------|--------|
|
||||
|
||||
> 「章节处理」列:`章号:处理` 用 `/` 分隔,如 `3保留/4压缩/5删`;未提及默认保留。
|
||||
|
||||
**第二步**——对以下关键集用模式A模板展开详情:
|
||||
- 🔴 幕末转折集、付费卡点集、高潮集
|
||||
- 🟡 首集
|
||||
|
||||
## 全局删减决策记录
|
||||
|
||||
| 决策 | 被删/压缩内容 | 原因 |
|
||||
|------|--------------|------|
|
||||
| 删 | {具体内容} | {原因} |
|
||||
| 压缩 | {具体内容} | {原因} |
|
||||
|
||||
## 付费卡点设计
|
||||
|
||||
| 位置 | 内容 | 类型 |
|
||||
|------|------|------|
|
||||
| 集{N}末 | {卡点内容} | {智识钩子/悬念钩子/情感钩子/世界观钩子} |
|
||||
|
||||
---
|
||||
|
||||
## 自查清单(生成后内部校验,不输出)
|
||||
|
||||
- [ ] 总集数、每集时长符合【项目配置】
|
||||
- [ ] 前2集无付费点
|
||||
- [ ] 每集有集末钩子,三幕均有幕末转折
|
||||
- [ ] 删减记录与分集中的删减一致
|
||||
- [ ] 章节编号与事件表一致,无虚构章节
|
||||
@ -1,37 +0,0 @@
|
||||
# 改编策略审核
|
||||
|
||||
基于 [supervision_common.md](supervision_common.md) 中的通用规范执行审核。
|
||||
|
||||
## 数据准备
|
||||
|
||||
1. 调用 `get_planData` 获取改编策略和骨架数据
|
||||
2. 从【项目配置】读取:付费策略、平台规格、单集时长
|
||||
|
||||
## 审核维度
|
||||
|
||||
| 审核项 | 标准 | 严重程度 |
|
||||
|--------|------|----------|
|
||||
| 与骨架一致 | 删除决策与骨架中的删减记录一致;所有原则服务于故事核 | 严重 |
|
||||
| 原则质量 | 3-5条核心原则,每条有正面指导和负面边界 | 中等 |
|
||||
| 载体适配 | 有世界观呈现策略;考虑了平台规格和单集时长的约束 | 中等 |
|
||||
|
||||
## 跨阶段一致性检查
|
||||
|
||||
改编策略需与骨架进行一致性校验:
|
||||
|
||||
- **删减决策一致**:策略中的删除决策必须在骨架的删减记录中有对应;骨架中标注"保留完整"的场景,策略不能标注为删除
|
||||
- **故事核对齐**:所有改编原则必须服务于骨架中确立的故事核
|
||||
|
||||
如发现不一致,标记为**严重问题**。
|
||||
|
||||
## 详细审核标准
|
||||
|
||||
### 故事核对齐(严重)
|
||||
- 所有改编原则必须服务于骨架中确立的故事核
|
||||
- 删减的内容不能包含体现故事核的关键场景
|
||||
- 保留的内容必须推动主角弧线的核心转变
|
||||
|
||||
### 与骨架一致性(严重)
|
||||
- 改编策略中的删除决策,必须在骨架的删减记录中有对应
|
||||
- 骨架中标注"保留完整"的场景,改编策略不能标注为删除
|
||||
- 交叉检查方法:将两者的删减列表逐一比对
|
||||
@ -1,61 +0,0 @@
|
||||
# 剧本审核
|
||||
|
||||
基于 [supervision_common.md](supervision_common.md) 中的通用规范执行审核。
|
||||
|
||||
## 数据准备
|
||||
|
||||
1. 调用 `get_planData` 获取剧本、骨架和改编策略数据
|
||||
2. 调用 `get_novel_events(ids:number[])` 获取事件表数据
|
||||
3. 从【项目配置】读取:单集时长、平台规格、资产包(如有)
|
||||
|
||||
## 审核维度
|
||||
|
||||
| 审核项 | 标准 | 严重程度 |
|
||||
|--------|------|----------|
|
||||
| 时长与字数 | 总时长符合单集时长 ±10秒;台词字数按 150字/分钟 推算(±50字) | 严重 |
|
||||
| 画面可执行 | 画面描述足够具体,可直接用于 AI 提示词生成 | 严重 |
|
||||
| 内容覆盖 | 骨架分配的章节内容全部体现;标注的删减/压缩已执行 | 严重 |
|
||||
| 资产一致性 | 角色外貌、场景描写与【项目配置】中的资产包一致(未传入资产包则跳过并注明) | 严重 |
|
||||
| 节拍与衔接 | 6-8个节拍各有时间码;转场方式明确;集末钩子与骨架一致;情绪过渡自然 | 中等 |
|
||||
| 构图适配 | 符合【项目配置】中的平台规格构图要求 | 中等 |
|
||||
|
||||
## 跨阶段一致性检查
|
||||
|
||||
剧本需与骨架和改编策略进行一致性校验:
|
||||
|
||||
- **时长落实**:剧本实际时长是否符合骨架中该集的时长分配
|
||||
- **删减落实**:骨架和策略中标注的删减/压缩是否在剧本中执行
|
||||
- **钩子落实**:骨架中设计的集末钩子是否在剧本中体现
|
||||
- **资产一致**:角色外貌和场景描写是否与资产包吻合(未传入则跳过并注明"未收到资产配置,资产一致性审核已跳过")
|
||||
|
||||
如发现不一致,标记为**严重问题**。
|
||||
|
||||
## 详细审核标准
|
||||
|
||||
### 时长合规性(严重)
|
||||
验证方法:
|
||||
1. 统计全部台词字数(含旁白、内心独白)
|
||||
2. 按150字/分钟语速换算
|
||||
3. 加上纯画面段落时长(每段5-15秒)
|
||||
4. 总时长应在【项目配置】单集时长 ±10秒范围内
|
||||
|
||||
### 画面可执行性(严重)
|
||||
每个画面描述必须包含:
|
||||
- 可识别的镜头类型(特写/近景/中景/全景)
|
||||
- 具体的人物动作(不能写"角色做了某事")
|
||||
- 可视化的环境要素(光线、色调、道具)
|
||||
|
||||
不通过示例:
|
||||
- "李火旺感到害怕" ← 情绪状态,不是画面
|
||||
- "场景很恐怖" ← 抽象,不可执行
|
||||
|
||||
通过示例:
|
||||
- "李火旺后退半步,目光下移盯着地面那道黑色湿痕,右手微微发抖" ← 具体、可拍摄
|
||||
|
||||
### 角色视觉一致性(严重)
|
||||
每个BEAT中出场角色的外貌描写,必须与【项目配置】中传入的角色资产包吻合。
|
||||
若未传入角色资产包,跳过此项。
|
||||
|
||||
### 场景氛围一致性(严重)
|
||||
场景描写须与【项目配置】中传入的场景资产包保持一致,包括色调、光线、道具等视觉要素。
|
||||
若未传入场景资产包,跳过此项。
|
||||
@ -1,45 +0,0 @@
|
||||
# 故事骨架审核
|
||||
|
||||
基于 [supervision_common.md](supervision_common.md) 中的通用规范执行审核。
|
||||
|
||||
## 数据准备
|
||||
|
||||
1. 调用 `get_planData` 获取骨架数据
|
||||
2. 调用 `get_novel_events(ids:number[])` 获取事件表数据
|
||||
3. 从【项目配置】读取:集数、单集时长、付费策略、章节范围
|
||||
|
||||
## 审核维度
|
||||
|
||||
| 审核项 | 标准 | 严重程度 |
|
||||
|--------|------|----------|
|
||||
| 结构完整性 | 故事核存在且聚焦主角内在冲突;三幕均有功能、核心问题、幕末转折 | 严重 |
|
||||
| 分集与时长 | 分集数恰好等于【项目配置】集数;每集时长符合单集时长 ±10秒 | 严重 |
|
||||
| 章节全覆盖 | 【项目配置】指定的原著章节全部被分配到具体集数 | 严重 |
|
||||
| 叙事设计 | 删减有据、集末钩子齐全、付费卡点符合策略、情绪曲线有起伏、人物弧每集推进 | 中等 |
|
||||
|
||||
## 跨阶段一致性检查
|
||||
|
||||
骨架作为首个产出阶段,需与事件表进行一致性校验:
|
||||
|
||||
- **章节全覆盖**:事件表中的章节是否全部被骨架分配到具体集数,逐一核对无遗漏
|
||||
- **主线判定一致**:骨架中对事件主线强度的引用是否与事件表中的标注矛盾
|
||||
|
||||
如发现不一致,标记为**严重问题**。
|
||||
|
||||
## 详细审核标准
|
||||
|
||||
### 三幕功能验证(严重)
|
||||
- 第一幕必须完成"建立"功能:规则建立、悬疑建立、动机激活
|
||||
- 第二幕必须完成"冲突"功能:主要矛盾展开、计划执行、代价付出
|
||||
- 第三幕必须完成"拓展/结局"功能:新世界、新能力、开放悬念
|
||||
|
||||
### 情绪曲线验证(中等)
|
||||
全剧情绪分布应根据实际集数设计"波浪上升"模式:
|
||||
- 不允许连续3集都是同一情绪强度
|
||||
- 最高潮应在中后期
|
||||
- 高潮后应有节奏缓冲再推向新高潮
|
||||
|
||||
### 付费卡点合理性(中等)
|
||||
- 付费策略按【项目配置】中的设定执行
|
||||
- 付费点必须放在"观众最想知道后续"的位置
|
||||
- 钩子类型应多样化(不全是悬念钩子)
|
||||
@ -1,47 +0,0 @@
|
||||
# 监督层通用规范
|
||||
|
||||
本文件定义所有审核任务共享的报告格式、评分标准和审核原则。
|
||||
|
||||
## 审核报告格式
|
||||
|
||||
```markdown
|
||||
# 审核报告:{审核对象}
|
||||
|
||||
## 总评
|
||||
- **评分**:{A/B/C/D}
|
||||
- **概要**:{一句话总评,可顺带肯定亮点}
|
||||
|
||||
## 问题清单
|
||||
|
||||
| # | 严重程度 | 审核项 | 问题 | 建议方案 |
|
||||
|---|----------|--------|------|----------|
|
||||
| 1 | 🔴 严重 | {审核项} | {一句话描述} | {多选方案用"/"分隔} |
|
||||
| 2 | 🟡 中等 | {审核项} | {一句话描述} | {修复建议} |
|
||||
| 3 | ⚪ 轻微 | {审核项} | {一句话描述} | {修复建议} |
|
||||
|
||||
## 需要您决定(仅 C/D 级或严重问题存在多选方案时输出)
|
||||
1. {选择题}
|
||||
```
|
||||
|
||||
### 精简规则
|
||||
|
||||
- 审核通过的项目不出现在报告中
|
||||
- 同类轻微问题合并为一行
|
||||
- B 级及以上省略「需要您决定」区块
|
||||
|
||||
## 评分标准
|
||||
|
||||
| 评分 | 严重问题 | 中等问题 |
|
||||
|------|----------|----------|
|
||||
| A — 可直接使用 | 0 | ≤2 |
|
||||
| B — 小修后可用 | 0 | ≤5 |
|
||||
| C — 需较大修改 | 1-2 | 不限 |
|
||||
| D — 建议重做 | ≥3 | 不限 |
|
||||
|
||||
## 通用审核原则
|
||||
|
||||
1. **工具调取优先**:所有审核依据必须通过工具实际读取,不得凭记忆或上下文摘要审核
|
||||
2. **可执行优先**:标准是"能不能用",不是"完不完美"
|
||||
3. **问题具体化**:每个问题指向具体位置和内容,不说"整体不够好"
|
||||
4. **建议多元化**:严重问题提供多个可选方案
|
||||
5. **动态基准**:数值判断以【项目配置】为唯一基准;配置中未明确的参数以合理比例推算,并在报告中注明
|
||||
@ -1,32 +1 @@
|
||||
---
|
||||
name: script_agent_supervision.md
|
||||
description: >-
|
||||
短剧改编监督层Agent路由。根据决策层派发的审核任务类型,加载对应的独立技能文件执行。
|
||||
当收到决策层的 run_sub_agent 调用时激活。
|
||||
---
|
||||
|
||||
# 监督层 Agent — 任务路由
|
||||
|
||||
你是短剧改编项目的**监督层 Agent**,只接收决策层派发的审核任务并执行。
|
||||
|
||||
**核心原则:你只提出问题和建议,不做任何修改决策。所有修改决定权属于用户。**
|
||||
|
||||
## 任务路由表
|
||||
|
||||
收到任务后,根据指令中的关键词匹配对应技能文件,加载并执行:
|
||||
|
||||
| 标识词 | 技能文件 | 说明 |
|
||||
|--------|----------|------|
|
||||
| 骨架审核、审核骨架、review skeleton | [script_supervision_skeleton.md](script_agent_skills/supervision/script_supervision_skeleton.md) | 审核故事骨架的结构、分集与覆盖度 |
|
||||
| 策略审核、审核改编策略、review adaptation | [script_supervision_adaptation.md](script_agent_skills/supervision/script_supervision_adaptation.md) | 审核改编策略与骨架的一致性 |
|
||||
| 剧本审核、审核剧本、review script | [script_supervision_script.md](script_agent_skills/supervision/script_supervision_script.md) | 审核剧本的时长、画面与内容覆盖 |
|
||||
|
||||
所有审核任务共享的报告格式、评分标准和通用原则见 [supervision_common.md](script_agent_skills/supervision/supervision_common.md)。
|
||||
|
||||
## 路由规则
|
||||
|
||||
1. 从派发指令中识别审核对象关键词
|
||||
2. 加载对应的审核技能文件 + 通用规范文件
|
||||
3. 按技能文件中的审核维度逐项检查
|
||||
4. 按通用规范中的报告格式生成审核报告
|
||||
5. 如果无法匹配审核对象,返回提示:`无法识别审核对象,请检查派发指令`
|
||||
请输出100字假数据
|
||||
1
data/skills/script_execution_adaptation.md
Normal file
1
data/skills/script_execution_adaptation.md
Normal file
@ -0,0 +1 @@
|
||||
请输出100字假数据
|
||||
1
data/skills/script_execution_script.md
Normal file
1
data/skills/script_execution_script.md
Normal file
@ -0,0 +1 @@
|
||||
请输出 3 个剧本,每一个 100 字假数据
|
||||
1
data/skills/script_execution_skeleton.md
Normal file
1
data/skills/script_execution_skeleton.md
Normal file
@ -0,0 +1 @@
|
||||
请输出100字假数据
|
||||
BIN
data/skills/skills.zip
Normal file
BIN
data/skills/skills.zip
Normal file
Binary file not shown.
@ -131,6 +131,7 @@ app.whenReady().then(async () => {
|
||||
const mod = requireWithCustomPaths(servePath);
|
||||
closeServeFn = mod.closeServe;
|
||||
const port = await mod.default(true);
|
||||
process.env.PORT = port;
|
||||
// 注册协议处理器
|
||||
protocol.handle("toonflow", (request) => {
|
||||
const url = new URL(request.url);
|
||||
|
||||
@ -96,9 +96,9 @@ export async function supervisionAI(ctx: AgentContext) {
|
||||
const { text, abortSignal } = ctx;
|
||||
|
||||
const skill = await useSkill({ mainSkill: "production_agent_supervision", workspace: ["production_agent_skills/supervision"] });
|
||||
const subMsg = ctx.resTool.newMessage("assistant", "编辑");
|
||||
const subMsg = ctx.resTool.newMessage("assistant", "监制");
|
||||
|
||||
const { textStream } = await u.Ai.Text("scriptAgent").stream({
|
||||
const { textStream } = await u.Ai.Text("productionAgent").stream({
|
||||
system: skill.prompt,
|
||||
messages: [{ role: "user", content: text }],
|
||||
abortSignal,
|
||||
@ -116,7 +116,7 @@ export async function supervisionAI(ctx: AgentContext) {
|
||||
|
||||
//工具函数
|
||||
function runSubAgent(parentCtx: AgentContext) {
|
||||
const memory = new Memory("scriptAgent", parentCtx.isolationKey);
|
||||
const memory = new Memory("productionAgent", parentCtx.isolationKey);
|
||||
return tool({
|
||||
description: "启动子Agent执行独立任务。可用子Agent:executionAI, decisionAI, supervisionAI",
|
||||
inputSchema: z.object({
|
||||
@ -140,13 +140,13 @@ function runSubAgent(parentCtx: AgentContext) {
|
||||
subMsg.complete();
|
||||
if (fullResponse.trim()) {
|
||||
await memory.add(`assistant:${agent === "executionAI" ? "execution" : "supervision"}`, fullResponse, {
|
||||
name: agent === "executionAI" ? "编剧" : "编辑",
|
||||
name: agent === "executionAI" ? "执行导演" : "监制",
|
||||
createTime: new Date(subMsg.datetime).getTime(),
|
||||
});
|
||||
}
|
||||
|
||||
// 为主Agent后续输出创建新消息
|
||||
parentCtx.msg = parentCtx.resTool.newMessage("assistant", "统筹");
|
||||
parentCtx.msg = parentCtx.resTool.newMessage("assistant", "监制");
|
||||
|
||||
return fullResponse;
|
||||
},
|
||||
|
||||
185
src/agents/scriptAgent/index copy 2.ts
Normal file
185
src/agents/scriptAgent/index copy 2.ts
Normal file
@ -0,0 +1,185 @@
|
||||
import { Socket } from "socket.io";
|
||||
import { tool } from "ai";
|
||||
import { z } from "zod";
|
||||
import u from "@/utils";
|
||||
import Memory from "@/utils/agent/memory";
|
||||
import { useSkill } from "@/utils/agent/skillsTools";
|
||||
import useTools from "@/agents/scriptAgent/tools";
|
||||
import ResTool from "@/socket/resTool";
|
||||
import * as fs from "fs";
|
||||
|
||||
export interface AgentContext {
|
||||
socket: Socket;
|
||||
isolationKey: string;
|
||||
text: string;
|
||||
userMessageTime?: number;
|
||||
abortSignal?: AbortSignal;
|
||||
resTool: ResTool;
|
||||
msg: ReturnType<ResTool["newMessage"]>;
|
||||
}
|
||||
|
||||
function buildMemPrompt(mem: Awaited<ReturnType<Memory["get"]>>): string {
|
||||
let memoryContext = "";
|
||||
if (mem.rag.length) {
|
||||
memoryContext += `[相关记忆]\n${mem.rag.map((r) => r.content).join("\n")}`;
|
||||
}
|
||||
if (mem.summaries.length) {
|
||||
if (memoryContext) memoryContext += "\n\n";
|
||||
memoryContext += `[历史摘要]\n${mem.summaries.map((s, i) => `${i + 1}. ${s.content}`).join("\n")}`;
|
||||
}
|
||||
if (mem.shortTerm.length) {
|
||||
if (memoryContext) memoryContext += "\n\n";
|
||||
memoryContext += `[近期对话]\n${mem.shortTerm.map((m) => `${m.role}: ${m.content}`).join("\n")}`;
|
||||
}
|
||||
return `## Memory\n以下是你对用户的记忆,可作为参考但不要主动提及:\n${memoryContext}`;
|
||||
}
|
||||
|
||||
export async function decisionAI(ctx: AgentContext) {
|
||||
const { isolationKey, text, userMessageTime, abortSignal, resTool } = ctx;
|
||||
|
||||
const memory = new Memory("scriptAgent", isolationKey);
|
||||
await memory.add("user", text, { createTime: userMessageTime });
|
||||
|
||||
const { skillPaths } = await useSkill({ mainSkill: "script_agent_decision" });
|
||||
const prompt = await fs.promises.readFile(skillPaths.mainSkill, "utf-8");
|
||||
|
||||
const mem = buildMemPrompt(await memory.get(text));
|
||||
|
||||
const projectData = await u.db("o_project").where("id", resTool.data.projectId).first();
|
||||
const novelData = await u.db("o_novel").where("projectId", resTool.data.projectId).select("id", "chapterIndex as index");
|
||||
|
||||
const projectInfo = [
|
||||
"## 项目信息",
|
||||
`小说名称:${projectData?.name ?? "未知"}`,
|
||||
`小说类型:${projectData?.type ?? "未知"}`,
|
||||
`小说简介:${projectData?.intro ?? "无"}`,
|
||||
`目标改编影视视觉手册|画风:${projectData?.artStyle ?? "无"}`,
|
||||
`目标改编视频画幅:${projectData?.videoRatio ?? "16:9"}`,
|
||||
].join("\n");
|
||||
|
||||
const projectPrompt = `${projectInfo}\n\n## 章节ID映射表\n${novelData.map((i: any) => `- 章节ID:${i.id}: 第${i.index}章`).join("\n")}\n\n`;
|
||||
|
||||
const { textStream } = await u.Ai.Text("scriptAgent").stream({
|
||||
messages: [
|
||||
{ role: "system", content: prompt },
|
||||
{ role: "system", content: projectPrompt + mem },
|
||||
{ role: "user", content: text },
|
||||
],
|
||||
abortSignal,
|
||||
tools: {
|
||||
...memory.getTools(),
|
||||
...useTools({ resTool: ctx.resTool, msg: ctx.msg }),
|
||||
...createSubAgent(ctx),
|
||||
},
|
||||
onFinish: async (completion) => {
|
||||
await memory.add("assistant:decision", completion.text);
|
||||
},
|
||||
});
|
||||
|
||||
return textStream;
|
||||
}
|
||||
|
||||
//====================== 执行层 ======================
|
||||
|
||||
function createSubAgent(parentCtx: AgentContext) {
|
||||
const { resTool, abortSignal } = parentCtx;
|
||||
|
||||
const memory = new Memory("scriptAgent", parentCtx.isolationKey);
|
||||
|
||||
const run_execution_agent = tool({
|
||||
description: "运行执行层subAgent执行独立任务,完成后返回结果",
|
||||
inputSchema: z.object({
|
||||
taskType: z.enum(["故事骨架", "改变策略", "剧本"]).describe("任务类型"),
|
||||
prompt: z.string().describe("交给子Agent的任务简约描述,100字以内"),
|
||||
}),
|
||||
execute: async ({ taskType, prompt }) => {
|
||||
const skill = await useSkill({ mainSkill: "script_agent_execution", workspace: ["script_agent_skills/execution"] });
|
||||
// 先完成主Agent当前的消息
|
||||
parentCtx.msg.complete();
|
||||
const subMsg = resTool.newMessage("assistant", "编剧");
|
||||
const prefixSystem =
|
||||
"你可以使用如下XML格式写入工作区:\n<storySkeleton>故事骨架内容</storySkeleton>\n<adaptationStrategy>改编策略内容</adaptationStrategy>";
|
||||
// 子Agent用新消息回复
|
||||
const { textStream } = await u.Ai.Text("scriptAgent").stream({
|
||||
system: prefixSystem + skill.prompt,
|
||||
messages: [{ role: "user", content: `请完成${taskType}任务` }],
|
||||
abortSignal,
|
||||
tools: {
|
||||
...skill.tools,
|
||||
...useTools({ resTool, msg: subMsg }),
|
||||
get_task_details: tool({
|
||||
description: "获取主Agent传入的任务目标详情",
|
||||
inputSchema: z.object({}),
|
||||
execute: async () => {
|
||||
const thinking = subMsg.thinking("以获取任务详情");
|
||||
thinking.appendText("任务详情:\n" + prompt);
|
||||
thinking.complete();
|
||||
return prompt ?? "运行失败";
|
||||
},
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
let text = subMsg.text();
|
||||
let fullResponse = "";
|
||||
for await (const chunk of textStream) {
|
||||
text.append(chunk);
|
||||
fullResponse += chunk;
|
||||
}
|
||||
text.complete();
|
||||
subMsg.complete();
|
||||
if (fullResponse.trim()) {
|
||||
await memory.add(`assistant:execution`, fullResponse, { name: "编剧", createTime: new Date(subMsg.datetime).getTime() });
|
||||
}
|
||||
// 为主Agent后续输出创建新消息
|
||||
parentCtx.msg = parentCtx.resTool.newMessage("assistant", "统筹");
|
||||
return fullResponse;
|
||||
},
|
||||
});
|
||||
|
||||
const run_supervision_agent = tool({
|
||||
description: "运行监督层subAgent执行独立任务,完成后返回结果",
|
||||
inputSchema: z.object({
|
||||
prompt: z.string().describe("交给子Agent的任务简约描述,100字以内"),
|
||||
}),
|
||||
execute: async ({ prompt }) => {
|
||||
const skill = await useSkill({ mainSkill: "script_agent_supervision", workspace: ["script_agent_skills/supervision"] });
|
||||
|
||||
// 先完成主Agent当前的消息
|
||||
parentCtx.msg.complete();
|
||||
// 子Agent用新消息回复
|
||||
|
||||
const subMsg = resTool.newMessage("assistant", "编辑");
|
||||
|
||||
const { textStream } = await u.Ai.Text("scriptAgent").stream({
|
||||
system: skill.prompt,
|
||||
messages: [{ role: "user", content: prompt }],
|
||||
abortSignal,
|
||||
tools: {
|
||||
...skill.tools,
|
||||
...useTools({ resTool, msg: subMsg }),
|
||||
},
|
||||
});
|
||||
|
||||
let text = subMsg.text();
|
||||
let fullResponse = "";
|
||||
for await (const chunk of textStream) {
|
||||
text.append(chunk);
|
||||
fullResponse += chunk;
|
||||
}
|
||||
text.complete();
|
||||
subMsg.complete();
|
||||
if (fullResponse.trim()) {
|
||||
await memory.add(`assistant:supervision`, fullResponse, { name: "编辑", createTime: new Date(subMsg.datetime).getTime() });
|
||||
}
|
||||
// 为主Agent后续输出创建新消息
|
||||
parentCtx.msg = parentCtx.resTool.newMessage("assistant", "统筹");
|
||||
return fullResponse;
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
run_execution_agent,
|
||||
run_supervision_agent,
|
||||
};
|
||||
}
|
||||
185
src/agents/scriptAgent/index copy 3.ts
Normal file
185
src/agents/scriptAgent/index copy 3.ts
Normal file
@ -0,0 +1,185 @@
|
||||
import { Socket } from "socket.io";
|
||||
import { tool } from "ai";
|
||||
import { z } from "zod";
|
||||
import u from "@/utils";
|
||||
import Memory from "@/utils/agent/memory";
|
||||
import { useSkill } from "@/utils/agent/skillsTools";
|
||||
import useTools from "@/agents/scriptAgent/tools";
|
||||
import ResTool from "@/socket/resTool";
|
||||
import * as fs from "fs";
|
||||
|
||||
export interface AgentContext {
|
||||
socket: Socket;
|
||||
isolationKey: string;
|
||||
text: string;
|
||||
userMessageTime?: number;
|
||||
abortSignal?: AbortSignal;
|
||||
resTool: ResTool;
|
||||
msg: ReturnType<ResTool["newMessage"]>;
|
||||
}
|
||||
|
||||
function buildMemPrompt(mem: Awaited<ReturnType<Memory["get"]>>): string {
|
||||
let memoryContext = "";
|
||||
if (mem.rag.length) {
|
||||
memoryContext += `[相关记忆]\n${mem.rag.map((r) => r.content).join("\n")}`;
|
||||
}
|
||||
if (mem.summaries.length) {
|
||||
if (memoryContext) memoryContext += "\n\n";
|
||||
memoryContext += `[历史摘要]\n${mem.summaries.map((s, i) => `${i + 1}. ${s.content}`).join("\n")}`;
|
||||
}
|
||||
if (mem.shortTerm.length) {
|
||||
if (memoryContext) memoryContext += "\n\n";
|
||||
memoryContext += `[近期对话]\n${mem.shortTerm.map((m) => `${m.role}: ${m.content}`).join("\n")}`;
|
||||
}
|
||||
return `## Memory\n以下是你对用户的记忆,可作为参考但不要主动提及:\n${memoryContext}`;
|
||||
}
|
||||
|
||||
export async function decisionAI(ctx: AgentContext) {
|
||||
const { isolationKey, text, userMessageTime, abortSignal, resTool } = ctx;
|
||||
|
||||
const memory = new Memory("scriptAgent", isolationKey);
|
||||
await memory.add("user", text, { createTime: userMessageTime });
|
||||
|
||||
const { skillPaths } = await useSkill({ mainSkill: "script_agent_decision" });
|
||||
const prompt = await fs.promises.readFile(skillPaths.mainSkill, "utf-8");
|
||||
|
||||
const mem = buildMemPrompt(await memory.get(text));
|
||||
|
||||
const projectData = await u.db("o_project").where("id", resTool.data.projectId).first();
|
||||
const novelData = await u.db("o_novel").where("projectId", resTool.data.projectId).select("id", "chapterIndex as index");
|
||||
|
||||
const projectInfo = [
|
||||
"## 项目信息",
|
||||
`小说名称:${projectData?.name ?? "未知"}`,
|
||||
`小说类型:${projectData?.type ?? "未知"}`,
|
||||
`小说简介:${projectData?.intro ?? "无"}`,
|
||||
`目标改编影视视觉手册|画风:${projectData?.artStyle ?? "无"}`,
|
||||
`目标改编视频画幅:${projectData?.videoRatio ?? "16:9"}`,
|
||||
].join("\n");
|
||||
|
||||
const projectPrompt = `${projectInfo}\n\n## 章节ID映射表\n${novelData.map((i: any) => `- 章节ID:${i.id}: 第${i.index}章`).join("\n")}\n\n`;
|
||||
|
||||
const { textStream } = await u.Ai.Text("scriptAgent").stream({
|
||||
messages: [
|
||||
{ role: "system", content: prompt },
|
||||
{ role: "system", content: projectPrompt + mem },
|
||||
{ role: "user", content: text },
|
||||
],
|
||||
abortSignal,
|
||||
tools: {
|
||||
...memory.getTools(),
|
||||
...useTools({ resTool: ctx.resTool, msg: ctx.msg }),
|
||||
...createSubAgent(ctx),
|
||||
},
|
||||
onFinish: async (completion) => {
|
||||
await memory.add("assistant:decision", completion.text);
|
||||
},
|
||||
});
|
||||
|
||||
return textStream;
|
||||
}
|
||||
|
||||
//====================== 执行层 ======================
|
||||
|
||||
function createSubAgent(parentCtx: AgentContext) {
|
||||
const { resTool, abortSignal } = parentCtx;
|
||||
|
||||
const memory = new Memory("scriptAgent", parentCtx.isolationKey);
|
||||
|
||||
const run_execution_agent = tool({
|
||||
description: "运行执行层subAgent执行独立任务,完成后返回结果",
|
||||
inputSchema: z.object({
|
||||
taskType: z.enum(["故事骨架", "改变策略", "剧本"]).describe("任务类型"),
|
||||
prompt: z.string().describe("交给子Agent的任务简约描述,100字以内"),
|
||||
}),
|
||||
execute: async ({ taskType, prompt }) => {
|
||||
const skill = await useSkill({ mainSkill: "script_agent_execution", workspace: ["script_agent_skills/execution"] });
|
||||
// 先完成主Agent当前的消息
|
||||
parentCtx.msg.complete();
|
||||
const subMsg = resTool.newMessage("assistant", "编剧");
|
||||
const prefixSystem =
|
||||
"你可以使用如下XML格式写入工作区:\n<storySkeleton>故事骨架内容</storySkeleton>\n<adaptationStrategy>改编策略内容</adaptationStrategy>";
|
||||
// 子Agent用新消息回复
|
||||
const { textStream } = await u.Ai.Text("scriptAgent").stream({
|
||||
system: prefixSystem + skill.prompt,
|
||||
messages: [{ role: "user", content: `请完成${taskType}任务` }],
|
||||
abortSignal,
|
||||
tools: {
|
||||
...skill.tools,
|
||||
...useTools({ resTool, msg: subMsg }),
|
||||
get_task_details: tool({
|
||||
description: "获取主Agent传入的任务目标详情",
|
||||
inputSchema: z.object({}),
|
||||
execute: async () => {
|
||||
const thinking = subMsg.thinking("以获取任务详情");
|
||||
thinking.appendText("任务详情:\n" + prompt);
|
||||
thinking.complete();
|
||||
return prompt ?? "无任务目标,请提示运行失败";
|
||||
},
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
let text = subMsg.text();
|
||||
let fullResponse = "";
|
||||
for await (const chunk of textStream) {
|
||||
text.append(chunk);
|
||||
fullResponse += chunk;
|
||||
}
|
||||
text.complete();
|
||||
subMsg.complete();
|
||||
if (fullResponse.trim()) {
|
||||
await memory.add(`assistant:execution`, fullResponse, { name: "编剧", createTime: new Date(subMsg.datetime).getTime() });
|
||||
}
|
||||
// 为主Agent后续输出创建新消息
|
||||
parentCtx.msg = parentCtx.resTool.newMessage("assistant", "统筹");
|
||||
return fullResponse;
|
||||
},
|
||||
});
|
||||
|
||||
const run_supervision_agent = tool({
|
||||
description: "运行监督层subAgent执行独立任务,完成后返回结果",
|
||||
inputSchema: z.object({
|
||||
prompt: z.string().describe("交给子Agent的任务简约描述,100字以内"),
|
||||
}),
|
||||
execute: async ({ prompt }) => {
|
||||
const skill = await useSkill({ mainSkill: "script_agent_supervision", workspace: ["script_agent_skills/supervision"] });
|
||||
|
||||
// 先完成主Agent当前的消息
|
||||
parentCtx.msg.complete();
|
||||
// 子Agent用新消息回复
|
||||
|
||||
const subMsg = resTool.newMessage("assistant", "编辑");
|
||||
|
||||
const { textStream } = await u.Ai.Text("scriptAgent").stream({
|
||||
system: skill.prompt,
|
||||
messages: [{ role: "user", content: prompt }],
|
||||
abortSignal,
|
||||
tools: {
|
||||
...skill.tools,
|
||||
...useTools({ resTool, msg: subMsg }),
|
||||
},
|
||||
});
|
||||
|
||||
let text = subMsg.text();
|
||||
let fullResponse = "";
|
||||
for await (const chunk of textStream) {
|
||||
text.append(chunk);
|
||||
fullResponse += chunk;
|
||||
}
|
||||
text.complete();
|
||||
subMsg.complete();
|
||||
if (fullResponse.trim()) {
|
||||
await memory.add(`assistant:supervision`, fullResponse, { name: "编辑", createTime: new Date(subMsg.datetime).getTime() });
|
||||
}
|
||||
// 为主Agent后续输出创建新消息
|
||||
parentCtx.msg = parentCtx.resTool.newMessage("assistant", "统筹");
|
||||
return fullResponse;
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
run_execution_agent,
|
||||
run_supervision_agent,
|
||||
};
|
||||
}
|
||||
@ -3,10 +3,10 @@ import { tool } from "ai";
|
||||
import { z } from "zod";
|
||||
import u from "@/utils";
|
||||
import Memory from "@/utils/agent/memory";
|
||||
import { useSkill } from "@/utils/agent/skillsTools";
|
||||
import useTools from "@/agents/scriptAgent/tools";
|
||||
import ResTool from "@/socket/resTool";
|
||||
import * as fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
export interface AgentContext {
|
||||
socket: Socket;
|
||||
@ -40,8 +40,8 @@ export async function decisionAI(ctx: AgentContext) {
|
||||
const memory = new Memory("scriptAgent", isolationKey);
|
||||
await memory.add("user", text, { createTime: userMessageTime });
|
||||
|
||||
const { skillPaths } = await useSkill({ mainSkill: "script_agent_decision" });
|
||||
const prompt = await fs.promises.readFile(skillPaths.mainSkill, "utf-8");
|
||||
const skill = path.join(u.getPath("skills"), "script_agent_decision.md");
|
||||
const prompt = await fs.promises.readFile(skill, "utf-8");
|
||||
|
||||
const mem = buildMemPrompt(await memory.get(text));
|
||||
|
||||
@ -62,7 +62,7 @@ export async function decisionAI(ctx: AgentContext) {
|
||||
const { textStream } = await u.Ai.Text("scriptAgent").stream({
|
||||
messages: [
|
||||
{ role: "system", content: prompt },
|
||||
{ role: "system", content: projectPrompt + mem },
|
||||
{ role: "assistant", content: projectPrompt + mem },
|
||||
{ role: "user", content: text },
|
||||
],
|
||||
abortSignal,
|
||||
@ -79,107 +79,125 @@ export async function decisionAI(ctx: AgentContext) {
|
||||
return textStream;
|
||||
}
|
||||
|
||||
//====================== 执行层 ======================
|
||||
|
||||
function createSubAgent(parentCtx: AgentContext) {
|
||||
const { resTool, abortSignal } = parentCtx;
|
||||
|
||||
const memory = new Memory("scriptAgent", parentCtx.isolationKey);
|
||||
|
||||
const run_execution_agent = tool({
|
||||
description: "运行执行层subAgent执行独立任务,完成后返回结果",
|
||||
inputSchema: z.object({
|
||||
taskType: z.enum(["故事骨架", "改变策略", "剧本"]).describe("任务类型"),
|
||||
prompt: z.string().describe("交给子Agent的任务简约描述,100字以内"),
|
||||
}),
|
||||
execute: async ({ taskType, prompt }) => {
|
||||
const skill = await useSkill({ mainSkill: "script_agent_execution", workspace: ["script_agent_skills/execution"] });
|
||||
// 先完成主Agent当前的消息
|
||||
parentCtx.msg.complete();
|
||||
const subMsg = resTool.newMessage("assistant", "编剧");
|
||||
const prefixSystem =
|
||||
"你可以使用如下XML格式写入工作区:\n<storySkeleton>故事骨架内容</storySkeleton>\n<adaptationStrategy>改编策略内容</adaptationStrategy>";
|
||||
// 子Agent用新消息回复
|
||||
const { textStream } = await u.Ai.Text("scriptAgent").stream({
|
||||
system: prefixSystem + skill.prompt,
|
||||
messages: [{ role: "user", content: `请完成${taskType}任务` }],
|
||||
abortSignal,
|
||||
tools: {
|
||||
...skill.tools,
|
||||
...useTools({ resTool, msg: subMsg }),
|
||||
get_task_details: tool({
|
||||
description: "获取主Agent传入的任务目标详情",
|
||||
inputSchema: z.object({}),
|
||||
execute: async () => {
|
||||
const thinking = subMsg.thinking("以获取任务详情");
|
||||
thinking.appendText("任务详情:\n" + prompt);
|
||||
thinking.complete();
|
||||
return prompt ?? "运行失败";
|
||||
},
|
||||
}),
|
||||
},
|
||||
});
|
||||
async function runAgent({
|
||||
prompt,
|
||||
system,
|
||||
name,
|
||||
memoryKey,
|
||||
tools: extraTools,
|
||||
}: {
|
||||
prompt: string;
|
||||
system: string;
|
||||
name: string;
|
||||
memoryKey: string;
|
||||
tools?: Record<string, any>;
|
||||
}) {
|
||||
parentCtx.msg.complete();
|
||||
const subMsg = resTool.newMessage("assistant", name);
|
||||
const text = subMsg.text();
|
||||
let fullResponse = "";
|
||||
|
||||
let text = subMsg.text();
|
||||
let fullResponse = "";
|
||||
for await (const chunk of textStream) {
|
||||
text.append(chunk);
|
||||
fullResponse += chunk;
|
||||
}
|
||||
text.complete();
|
||||
subMsg.complete();
|
||||
if (fullResponse.trim()) {
|
||||
await memory.add(`assistant:execution`, fullResponse, { name: "编剧", createTime: new Date(subMsg.datetime).getTime() });
|
||||
}
|
||||
// 为主Agent后续输出创建新消息
|
||||
parentCtx.msg = parentCtx.resTool.newMessage("assistant", "统筹");
|
||||
return fullResponse;
|
||||
const { textStream } = await u.Ai.Text("scriptAgent").stream({
|
||||
system,
|
||||
messages: [{ role: "user", content: prompt }],
|
||||
abortSignal,
|
||||
tools: { ...extraTools, ...useTools({ resTool, msg: subMsg }) },
|
||||
});
|
||||
|
||||
for await (const chunk of textStream) {
|
||||
text.append(chunk);
|
||||
fullResponse += chunk;
|
||||
}
|
||||
|
||||
text.complete();
|
||||
subMsg.complete();
|
||||
|
||||
if (fullResponse.trim()) {
|
||||
await memory.add(memoryKey, fullResponse, {
|
||||
name,
|
||||
createTime: new Date(subMsg.datetime).getTime(),
|
||||
});
|
||||
}
|
||||
|
||||
parentCtx.msg = resTool.newMessage("assistant", "统筹");
|
||||
return fullResponse;
|
||||
}
|
||||
|
||||
const promptInput = z.object({
|
||||
prompt: z.string().describe("交给子Agent的任务简约描述,100字以内"),
|
||||
});
|
||||
|
||||
const run_sub_agent_storySkeleton = tool({
|
||||
description: "运行执行subAgent来完成故事骨架相关任务",
|
||||
inputSchema: promptInput,
|
||||
execute: async ({ prompt }) => {
|
||||
const skill = path.join(u.getPath("skills"), "script_execution_skeleton.md");
|
||||
const systemPrompt = await fs.promises.readFile(skill, "utf-8");
|
||||
return runAgent({
|
||||
prompt,
|
||||
system: systemPrompt + "你可以使用如下XML格式写入工作区:\n<storySkeleton>故事骨架内容</storySkeleton>",
|
||||
name: "编剧",
|
||||
memoryKey: "assistant:execution:storySkeleton",
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
const run_sub_agent_adaptationStrategy = tool({
|
||||
description: "运行执行subAgent来完成改编策略相关任务",
|
||||
inputSchema: promptInput,
|
||||
execute: async ({ prompt }) => {
|
||||
const skill = path.join(u.getPath("skills"), "script_execution_adaptation.md");
|
||||
const systemPrompt = await fs.promises.readFile(skill, "utf-8");
|
||||
return runAgent({
|
||||
prompt,
|
||||
system: systemPrompt + "你可以使用如下XML格式写入工作区:\n<adaptationStrategy>改编策略内容</adaptationStrategy>",
|
||||
name: "编剧",
|
||||
memoryKey: "assistant:execution:adaptationStrategy",
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
const run_sub_agent_script = tool({
|
||||
description: "运行执行subAgent来完成剧本相关任务",
|
||||
inputSchema: promptInput,
|
||||
execute: async ({ prompt }) => {
|
||||
const skill = path.join(u.getPath("skills"), "script_execution_script.md");
|
||||
const systemPrompt = await fs.promises.readFile(skill, "utf-8");
|
||||
return runAgent({
|
||||
prompt,
|
||||
system:
|
||||
systemPrompt +
|
||||
`你可以使用如下XML格式写入工作区:\nXML不得添加任何额外标签<script><item name="剧本名称">剧本内容</item><item name="剧本名称">剧本内容</item><item name="剧本名称">剧本内容</item></script>`,
|
||||
name: "编剧",
|
||||
memoryKey: "assistant:execution:script",
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
const run_supervision_agent = tool({
|
||||
description: "运行监督层subAgent执行独立任务,完成后返回结果",
|
||||
inputSchema: z.object({
|
||||
prompt: z.string().describe("交给子Agent的任务简约描述,100字以内"),
|
||||
}),
|
||||
inputSchema: promptInput,
|
||||
execute: async ({ prompt }) => {
|
||||
const skill = await useSkill({ mainSkill: "script_agent_supervision", workspace: ["script_agent_skills/supervision"] });
|
||||
const skill = path.join(u.getPath("skills"), "script_agent_supervision.md");
|
||||
const systemPrompt = await fs.promises.readFile(skill, "utf-8");
|
||||
|
||||
// 先完成主Agent当前的消息
|
||||
parentCtx.msg.complete();
|
||||
// 子Agent用新消息回复
|
||||
|
||||
const subMsg = resTool.newMessage("assistant", "编辑");
|
||||
|
||||
const { textStream } = await u.Ai.Text("scriptAgent").stream({
|
||||
system: skill.prompt,
|
||||
messages: [{ role: "user", content: prompt }],
|
||||
abortSignal,
|
||||
tools: {
|
||||
...skill.tools,
|
||||
...useTools({ resTool, msg: subMsg }),
|
||||
},
|
||||
return runAgent({
|
||||
prompt,
|
||||
system: systemPrompt,
|
||||
name: "编辑",
|
||||
memoryKey: "assistant:supervision",
|
||||
});
|
||||
|
||||
let text = subMsg.text();
|
||||
let fullResponse = "";
|
||||
for await (const chunk of textStream) {
|
||||
text.append(chunk);
|
||||
fullResponse += chunk;
|
||||
}
|
||||
text.complete();
|
||||
subMsg.complete();
|
||||
if (fullResponse.trim()) {
|
||||
await memory.add(`assistant:supervision`, fullResponse, { name: "编辑", createTime: new Date(subMsg.datetime).getTime() });
|
||||
}
|
||||
// 为主Agent后续输出创建新消息
|
||||
parentCtx.msg = parentCtx.resTool.newMessage("assistant", "统筹");
|
||||
return fullResponse;
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
run_execution_agent,
|
||||
run_sub_agent_storySkeleton,
|
||||
run_sub_agent_adaptationStrategy,
|
||||
run_sub_agent_script,
|
||||
run_supervision_agent,
|
||||
};
|
||||
}
|
||||
|
||||
@ -4,15 +4,7 @@ import { z } from "zod";
|
||||
import _ from "lodash";
|
||||
import ResTool from "@/socket/resTool";
|
||||
|
||||
export const AssetSchema = z.object({
|
||||
id: z.number().describe("资产ID,如果新增则为空").optional(),
|
||||
prompt: z.string().describe("生成提示词"),
|
||||
name: z.string().describe("资产名称"),
|
||||
desc: z.string().describe("资产描述"),
|
||||
type: z.enum(["role", "tool", "scene", "clip"]).describe("资产类型"),
|
||||
});
|
||||
export const ScriptSchema = z.object({
|
||||
id: z.number().describe("剧本ID"),
|
||||
name: z.string().describe("剧本名称"),
|
||||
content: z.string().describe("剧本内容"),
|
||||
});
|
||||
@ -91,50 +83,17 @@ export default (toolCpnfig: ToolConfig) => {
|
||||
return text ?? "无数据";
|
||||
},
|
||||
}),
|
||||
//======================
|
||||
update_script_to_sqlite: tool({
|
||||
description: "更新剧本,修改数据库对应剧本,供后续业务使用",
|
||||
delete_script: tool({
|
||||
description: "删除剧本,你需要先获取get_planData",
|
||||
inputSchema: z.object({
|
||||
script: ScriptSchema,
|
||||
name: z.string().describe("剧本名字"),
|
||||
}),
|
||||
execute: async ({ script }) => {
|
||||
await u.db("o_script").where({ id: script.id }).update({
|
||||
name: script.name,
|
||||
content: script.content,
|
||||
});
|
||||
socket.emit("setPlanData", { key: "script", value: script.id });
|
||||
return true;
|
||||
},
|
||||
}),
|
||||
insert_script_to_sqlite: tool({
|
||||
description: "新增剧本,将剧本内容插入sqlite数据库,供后续业务使用",
|
||||
inputSchema: z.object({
|
||||
script: ScriptSchema.omit({ id: true }),
|
||||
}),
|
||||
execute: async ({ script }) => {
|
||||
const [scriptId] = await u.db("o_script").insert({
|
||||
name: script.name,
|
||||
content: script.content,
|
||||
projectId: resTool.data.projectId,
|
||||
createTime: Date.now(),
|
||||
});
|
||||
socket.emit("setPlanData", { key: "script", value: scriptId });
|
||||
return true;
|
||||
},
|
||||
}),
|
||||
delete_script_to_sqlite: tool({
|
||||
description: "删除剧本,将剧本内容从sqlite数据库中删除",
|
||||
inputSchema: z.object({
|
||||
scriptId: z.string().describe("剧本id"),
|
||||
}),
|
||||
execute: async ({ scriptId }) => {
|
||||
console.log("[tools] delete_script_to_sqlite", scriptId);
|
||||
await u.db("o_script").where({ id: scriptId }).delete();
|
||||
socket.emit("setPlanData", { key: "script", value: scriptId });
|
||||
execute: async ({ name }) => {
|
||||
console.log("[tools] delete_script", name);
|
||||
await new Promise((resolve) => socket.emit("delScript", { name }, (res: any) => resolve(res)));
|
||||
return true;
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
||||
return toolsNames ? Object.fromEntries(Object.entries(tools).filter(([n]) => toolsNames.includes(n))) : tools;
|
||||
};
|
||||
|
||||
@ -7,9 +7,11 @@ import * as fs from "fs";
|
||||
|
||||
type SkillAttribution =
|
||||
//剧本Agent
|
||||
| "script_agent_decision"
|
||||
| "script_agent_execution"
|
||||
| "script_agent_supervision"
|
||||
| "script_agent_decision" //决策
|
||||
| "script_execution_skeleton" //故事骨架
|
||||
| "script_execution_adaptation" //改变策略
|
||||
| "script_execution_script" //剧本生成
|
||||
| "script_agent_supervision" //审核
|
||||
//生产Agent
|
||||
| "production_agent_decision"
|
||||
| "production_agent_execution"
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import isPathInside from "is-path-inside";
|
||||
import getPath from "@/utils/getPath";
|
||||
import getPath, { isEletron } from "@/utils/getPath";
|
||||
import fs from "node:fs/promises";
|
||||
import path from "node:path";
|
||||
|
||||
@ -49,7 +49,8 @@ class OSS {
|
||||
await this.ensureInit();
|
||||
const safePath = normalizeUserPath(userRelPath);
|
||||
// URL 始终使用 /,所以这里需要将系统分隔符转回 /
|
||||
const url = process.env.OSSURL || `http://127.0.0.1:10588/`;
|
||||
let url = process.env.OSSURL || `http://127.0.0.1:10588/`;
|
||||
if (isEletron()) url = `http://localhost:${process.env.PORT}/`;
|
||||
return `${url}${safePath.split(path.sep).join("/")}`;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user