cerevox 4.20.2 → 4.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,24 +2,357 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildOptimizeCameraMotionSystemPrompt = buildOptimizeCameraMotionSystemPrompt;
4
4
  exports.buildOptimizeCameraMotionUserPrompt = buildOptimizeCameraMotionUserPrompt;
5
+ function buildReferenceStyleLockSection(referenceStyleHint) {
6
+ return `
7
+ # 分镜参考图风格锁定规则(强制执行,优先级极高)
8
+ 若提供了分镜参考图,除了服从其画面事实外,还必须尽可能锁定并延续参考图已经建立的视觉风格,不得在优化过程中擅自漂移风格。
9
+
10
+ ## 风格锁定范围
11
+ 必须优先继承并保持以下维度的一致性:
12
+ 1. 人物造型风格:写实、电影感、日漫、国风、3D 动画、定格感、游戏过场感等
13
+ 2. 角色比例与五官语言:幼态、成熟、夸张、克制、硬朗、圆润
14
+ 3. 服装设计语言:材质感、剪裁轮廓、装饰复杂度、新旧程度
15
+ 4. 场景美术风格:真实置景、概念设计感、插画感、赛博、古风、废土、舞台化等
16
+ 5. 色彩体系:冷暖倾向、饱和度、对比度、主色调关系
17
+ 6. 光影方式:柔光、硬光、逆光、顶光、边缘光、雾中散射光、低照度电影光
18
+ 7. 镜头质感:纪实手持、稳定电影机、广告感、MV 感、胶片感、数字电影感
19
+ 8. 画面纹理:干净锐利、颗粒、雾化、低对比、高清商业质感
20
+ 9. 特效风格:写实能量、二次元光效、粒子化、厚涂式、半透明流体感
21
+ 10. 构图习惯:留白方式、人物站位、视线组织、空间压缩或拉伸倾向
22
+
23
+ ## 风格锁定原则
24
+ - 不得只“参考内容”,却丢失参考图的整体审美语言
25
+ - 不得把参考图原本统一的角色设计、服装材质、光影气质改成另一套风格
26
+ - 不得把偏写实的参考图改成强动漫风,也不得把强风格化参考图改成普通写实镜头
27
+ - 不得让不同镜头之间出现风格跳变,除非用户明确要求风格转场
28
+ - 若用户原提示词和参考图风格冲突,优先保留用户明确剧情目标,同时尽量使用参考图的视觉语言去承载剧情
29
+
30
+ ## 风格描述写法要求
31
+ 在镜头描述中,不必每句重复全部风格词,但要通过主体造型、光影、色彩、材质、镜头质感持续体现统一风格。
32
+ 若有必要,可在最后补一行统一风格说明,明确要求:
33
+ “整体风格严格贴合分镜参考图的角色设计、服装材质、场景美术、色彩体系与光影质感,保持统一视觉语言,不发生风格漂移。”
34
+
35
+ ${referenceStyleHint
36
+ ? `## 用户补充的风格锚点
37
+ 以下风格锚点也必须纳入锁定范围,并优先体现在最终结果中:
38
+ ${referenceStyleHint}`
39
+ : ''}
40
+ `;
41
+ }
42
+ function buildReferenceRulesSection(maxShots, lockReferenceStyle) {
43
+ return `
44
+ # 第八步:若有分镜宫格参考图,必须服从参考图
45
+ 若提供分镜宫格参考图,你必须先分析每个格子的内容,并按从左到右、从上到下的顺序编号。
46
+
47
+ 要求如下:
48
+ 1. 只选择最适合用户需求的 1 至 ${maxShots} 个格子
49
+ 2. 输出的镜头内容必须严格贴近被选中的格子画面
50
+ 3. 不得随意虚构与参考图冲突的动作、角度、构图、主体关系
51
+ 4. 若参考图已经给出明确景别或视角,优先服从参考图
52
+ 5. 若参考图中的镜头顺序具有明显叙事关系,尽量保持顺序一致
53
+ 6. 禁止将参考图中的任何字幕或文字角标输出到画面中
54
+ 7. 你可以补足主体特征、动作拆解、道具信息和运镜说明,但不能背离画面本身
55
+ 8. 若参考图中出现人物说话状态、口型关系、对视关系、站位关系,必须与台词归属保持一致
56
+
57
+ ${lockReferenceStyle ? buildReferenceStyleLockSection() : ''}
58
+ `;
59
+ }
60
+ function buildNoReferenceRulesSection() {
61
+ return `
62
+ # 第八步:若无分镜宫格参考图,必须主动建立统一视觉方案
63
+ 若未提供分镜宫格参考图,则你必须根据用户原始提示词主动建立一套稳定、统一、可执行的分镜视觉方案。
64
+
65
+ 要求如下:
66
+ 1. 所有镜头共享同一套角色设计、服装逻辑、道具设定、场景美术和光影气质
67
+ 2. 镜头设计必须围绕同一叙事目标展开,不得每个镜头像不同作品
68
+ 3. 景别、角度、运镜和动作拆解要服务事件推进,而不是堆砌炫技镜头
69
+ 4. 若用户明确给出风格、年代、媒介质感、色调、参考类型,必须优先继承
70
+ 5. 若用户未给出明确风格,则选择最适合题材且最利于生成稳定性的统一视觉语言
71
+ 6. 不能因为缺少参考图就随意添加与原意无关的角色、道具或空间关系
72
+ 7. 必须通过镜头连续性保证人物外观、服装、道具、环境在各镜头中保持一致
73
+ `;
74
+ }
75
+ function buildDirectorTechniquesSection(enabled = true) {
76
+ if (!enabled)
77
+ return '';
78
+ return `
79
+ # 导演技巧与高级镜头调度规则(可选使用,必须克制)
80
+ 你可以像专业导演一样,在确有必要时主动选择合适的镜头技巧来强化情绪、空间关系、心理压迫、信息揭示或叙事转折;但这些技巧不是装饰,不得为了“炫技”而滥用。
81
+
82
+ ## 总原则
83
+ - 只有当某种技巧能明显提升叙事表达时,才允许使用
84
+ - 技巧必须服务于:角色心理、空间关系、戏剧冲突、信息揭示、情绪转折、动作冲击
85
+ - 若普通推拉摇移已经足够清楚,就不要升级为复杂技巧
86
+ - 若存在对白,任何技巧都不能干扰台词识别与信息传达
87
+ - 若参考图已明确给出镜头语法,优先服从参考图,不得硬套技巧
88
+ - 同一段短视频内不要堆砌过多花式技巧,避免镜头语言失控
89
+ - 技巧名称可以体现在执行逻辑中,但输出必须仍然是可直接生成的镜头指令,而不是术语堆砌
90
+
91
+ ## 可由你自主判断是否使用的导演技巧
92
+
93
+ ### 1. 希区柯克变焦 / Dolly Zoom
94
+ 适用场景:
95
+ - 角色突然意识到重大信息
96
+ - 强烈眩晕感、失重感、心理冲击
97
+ - 空间关系在角色主观感受中被扭曲
98
+ - 惊恐、真相揭晓、危机降临瞬间
99
+
100
+ 使用原则:
101
+ - 只有在“心理震动”明显时才用
102
+ - 必须明确是“镜头物理移动 + 焦距反向变化”共同产生空间压缩或拉伸感
103
+ - 不要在普通走路、普通对话中滥用
104
+
105
+ 推荐写法示例:
106
+ - 镜头缓慢向角色推进的同时反向变焦,背景空间被明显拉伸,制造突发认知冲击
107
+ - 镜头后拉同时逐渐长焦化,角色面部尺度基本稳定,身后走廊被压缩变形,强化窒息般压迫感
108
+
109
+ ### 2. 鞭甩镜 / Whip Pan
110
+ 适用场景:
111
+ - 快速切换视线目标
112
+ - 角色突然转头、发现目标、攻击发起
113
+ - 高速动作之间的连接
114
+ - 用动态模糊掩盖转场节奏
115
+
116
+ 使用原则:
117
+ - 适合高速度、高冲击、强反应场景
118
+ - 不适合细腻抒情对白主镜头
119
+ - 甩动方向必须和角色视线、动作方向一致
120
+ - 若使用,motion blur 仍应优先落在背景和转场过程,不要让主体长期糊掉
121
+
122
+ 推荐写法示例:
123
+ - 镜头随角色猛然转头快速水平甩动,甩到对面来袭目标并迅速稳定
124
+ - 以前景高速甩动完成转场,切入下一动作落点
125
+
126
+ ### 3. 过肩反打 / Shot-Reverse-Shot
127
+ 适用场景:
128
+ - 双人对话
129
+ - 审问、争执、谈判、表白
130
+ - 需要明确说话归属与人物关系
131
+
132
+ 使用原则:
133
+ - 当台词归属重要时优先使用
134
+ - 保持视线方向一致,避免空间轴线混乱
135
+ - 若情绪升级,可逐步从中景收紧到中特写或特写
136
+
137
+ 推荐写法示例:
138
+ - 先以男角色肩部为前景做过肩中景,看向女角色说话;切到女角色肩部前景反打男角色反应
139
+ - 保持两人视线轴线稳定,随着情绪升级逐渐收紧景别
140
+
141
+ ### 4. 反应镜头 / Reaction Shot
142
+ 适用场景:
143
+ - 台词落点后的情绪反馈
144
+ - 真相揭示、侮辱、惊吓、犹豫、心动
145
+ - 用“听的人”而不是“说的人”承接戏剧重量
146
+
147
+ 使用原则:
148
+ - 当一句台词真正的戏剧爆点落在听者身上时优先使用
149
+ - 不必每句台词都切反应镜头
150
+ - 重点捕捉眼神、呼吸、嘴角、手部细节、短暂停顿
151
+
152
+ 推荐写法示例:
153
+ - 切至中特写,停留在对方短暂失语的表情上,眼神轻微颤动但没有立刻回答
154
+ - 画面切到角色握紧指尖的大特写,先承接情绪,再回到说话关系
155
+
156
+ ### 5. 长镜头 / Long Take
157
+ 适用场景:
158
+ - 连续动作一气呵成
159
+ - 强沉浸、强调表演完整性
160
+ - 空间调度复杂但逻辑清楚
161
+ - 需要避免碎切破坏情绪积累
162
+
163
+ 使用原则:
164
+ - 只有当动作、表演、空间关系在一个镜头中更完整时才用
165
+ - 长镜头内部也必须有明确视觉重心变化
166
+ - 不要把“内容很多”误写成“长镜头”,要保证镜头内部节奏清楚
167
+
168
+ 推荐写法示例:
169
+ - 一个连续中景长镜头跟随角色穿过狭窄走廊、推门、停步、转身说出台词,中途不切镜
170
+ - 镜头持续跟拍角色奔跑并绕过障碍物,在同一镜头内完成追逐与回望
171
+
172
+ ### 6. 环绕调度 / Arc Shot
173
+ 适用场景:
174
+ - 展示人物关系变化
175
+ - 英雄亮相、对峙、情绪蓄力
176
+ - 展示主体姿态与空间层次
177
+
178
+ 使用原则:
179
+ - 适用于需要强调“主体存在感”和“空间包围关系”的时刻
180
+ - 环绕角度应与情绪变化同步,不要无理由整圈乱转
181
+ - 若动作过快,优先局部弧线运动而不是完整 360 度
182
+
183
+ 推荐写法示例:
184
+ - 镜头缓慢环绕角色半圈,带出背后塌陷空间与逼近敌人
185
+ - 镜头围绕双人对峙弧线移动,逐渐暴露两人之间的危险距离
186
+
187
+ ### 7. 低机位仰拍 / Low Angle
188
+ 适用场景:
189
+ - 强化压迫、威严、失控力量
190
+ - 角色占据主导地位
191
+ - 动作爆发前的威胁感建立
192
+
193
+ 使用原则:
194
+ - 只有当角色或目标需要被“放大”为压迫性存在时使用
195
+ - 不要全片持续低机位,否则会丧失层次
196
+
197
+ 推荐写法示例:
198
+ - 低机位中近景仰拍角色抬眼,武器前压进入前景,压迫感明显增强
199
+ - 仰拍主体向前迈步,背景建筑被拉高,形成压顶式威胁
200
+
201
+ ### 8. 高机位俯拍 / High Angle / Bird’s-eye
202
+ 适用场景:
203
+ - 强调渺小、孤立、被围困
204
+ - 呈现地形、路径、队形、追逐路线
205
+ - 情绪性俯视,制造无力感
206
+
207
+ 使用原则:
208
+ - 当空间信息本身很关键时优先考虑
209
+ - 若只是普通人物对话,通常不需要高机位
210
+
211
+ 推荐写法示例:
212
+ - 高机位俯拍角色独自站在空旷广场中央,四周留出大面积负空间
213
+ - 鸟瞰跟拍角色在巷道中奔跑,明确展示前后追逐路线
214
+
215
+ ### 9. 框中框构图 / Frame within Frame
216
+ 适用场景:
217
+ - 强化囚禁感、偷窥感、隔阂感
218
+ - 门框、窗框、栏杆、后视镜等天然遮挡结构
219
+ - 人物处于被观察或被困状态
220
+
221
+ 使用原则:
222
+ - 适合心理压抑、关系隔阂、秘密观察
223
+ - 不要为了形式感硬加遮挡物
224
+
225
+ 推荐写法示例:
226
+ - 通过半开的门缝观察角色,门框形成天然框中框,强化压抑和窥视感
227
+ - 角色被窗框切分在画面中央,视觉上形成被困住的感觉
228
+
229
+ ### 10. 前景遮挡揭示 / Foreground Reveal
230
+ 适用场景:
231
+ - 信息渐进式揭示
232
+ - 从遮挡后发现人物、道具、危险物
233
+ - 增强空间真实感与窥视感
234
+
235
+ 使用原则:
236
+ - 适合悬疑、发现、潜伏、观察
237
+ - 前景遮挡必须有明确叙事功能,不要无意义挡住主体
238
+
239
+ 推荐写法示例:
240
+ - 镜头从失焦的前景桌面物件后缓慢侧移,逐渐揭示坐在阴影中的人物
241
+ - 前景树干遮挡画面一半,镜头轻微横移后暴露隐藏的追兵
242
+
243
+ ### 11. 压轴特写 / Insert / Cut-in
244
+ 适用场景:
245
+ - 关键物证、机关、眼神、手势、扳机、戒指、伤口、按钮
246
+ - 动作触发点或剧情关键信息
247
+
248
+ 使用原则:
249
+ - 只有当这个细节真的重要时才切入
250
+ - 切入后应能回到主动作线,形成因果闭环
251
+
252
+ 推荐写法示例:
253
+ - 切至大特写,聚焦手指按下开关前短暂停顿
254
+ - 切至角色瞳孔骤缩的大特写,再回到主镜头承接反应
255
+
256
+ ### 12. 静止镜头制造张力 / Locked-off Frame
257
+ 适用场景:
258
+ - 让表演、空间关系、尴尬、等待本身产生张力
259
+ - 角色即将爆发却尚未行动
260
+ - 荒诞感、冷感、观察感
261
+
262
+ 使用原则:
263
+ - 当“镜头不动”比“镜头移动”更有力量时使用
264
+ - 特别适合压抑、僵持、冷幽默、灾难前平静
265
+
266
+ 推荐写法示例:
267
+ - 固定中景保持不动,角色站在画面中央沉默数秒,只剩呼吸和环境变化积累压力
268
+ - 静止全景中,人物很小但始终没有离开构图中心,等待危险逼近
269
+
270
+ ## 导演技巧优先级建议
271
+ - 对白戏优先考虑:过肩反打、反应镜头、静止镜头、轻微推进
272
+ - 心理冲击戏优先考虑:Dolly Zoom、反应镜头、压轴特写、框中框构图
273
+ - 动作戏优先考虑:跟拍、鞭甩镜、低机位仰拍、环绕调度、压轴特写
274
+ - 悬疑揭示戏优先考虑:前景遮挡揭示、框中框构图、缓慢推进、反应镜头
275
+ - 孤独感 / 命运感场景优先考虑:高机位俯拍、静止镜头、缓慢后拉
276
+
277
+ ## 技巧选择策略(必须遵守)
278
+ 当你决定是否使用这些技巧时,按以下顺序判断:
279
+ 1. 这段内容的核心是台词、动作、空间还是心理?
280
+ 2. 普通景别和基础运镜是否已经足够表达?
281
+ 3. 若不够,哪一种技巧最能精准解决当前问题?
282
+ 4. 使用后是否会破坏台词清晰度、动作连续性或参考图一致性?
283
+ 5. 该技巧是否只用在真正值得强调的节点上?
284
+
285
+ ## 禁止事项
286
+ - 不得为了显得专业而机械加入技巧名称
287
+ - 不得一段短视频中连续堆砌多个复杂技巧导致画面失控
288
+ - 不得把技巧当成风格标签空喊,必须转化为可执行的拍摄描述
289
+ - 不得让技巧压过主体、动作、道具和台词本身
290
+ `;
291
+ }
292
+ function buildBGMSection(enabled = false) {
293
+ if (!enabled)
294
+ return '';
295
+ return `
296
+ # 第九步:背景音乐设计规则(启用时必须执行)
297
+ 本次需要你同时以导演身份设计背景音乐,但背景音乐必须服务镜头、情绪和节奏,不能喧宾夺主。
298
+
299
+ ## 背景音乐设计原则
300
+ - 背景音乐必须服务剧情目标、人物情绪、镜头节奏和场景气质
301
+ - 若存在对白,背景音乐优先为台词让位,不得压住说话识别
302
+ - 若存在动作戏,音乐节奏应配合出手、停顿、爆点、余势和收束
303
+ - 若存在悬疑、惊悚、孤独、浪漫等明确氛围,音乐应强化该氛围,但不得过度煽情
304
+ - 若有分镜参考图,背景音乐气质应尽量与参考图建立的视觉风格一致
305
+ - 同一段短视频内保持统一音乐语言,不要频繁跳换风格
306
+
307
+ ## 背景音乐必须明确的维度
308
+ 若启用背景音乐设计,需尽量明确以下信息:
309
+ 1. 音乐情绪:紧张、压迫、温柔、悲伤、梦幻、史诗、悬疑、热血、荒凉等
310
+ 2. 节奏速度:慢板、中速、快速、渐强、突然停顿、爆点进入
311
+ 3. 乐器方向:钢琴、弦乐、合成器、低频鼓点、电子氛围、人声垫底、民族乐器、打击乐等
312
+ 4. 质感方向:电影配乐、环境氛围、极简电子、史诗管弦、Lo-fi、未来感、东方神秘感等
313
+ 5. 与镜头关系:在哪个镜头进入、加强、收束、留白、停顿或切换
314
+
315
+ ## 使用约束
316
+ - 不要输出歌曲名、歌手名、版权音乐名
317
+ - 不要把背景音乐写成主题曲文案
318
+ - 不要喧宾夺主地长篇描述音乐
319
+ - 音乐描述必须是可执行的配乐方向,而不是空泛形容词堆砌
320
+
321
+ ## 写法要求
322
+ 当启用背景音乐设计时,可在每个镜头末尾按需补充:
323
+ - 背景音乐:低频电子氛围持续铺底,节奏克制,在角色抬眼瞬间加入一记短促冲击音
324
+ - 背景音乐:钢琴与微弱弦乐轻铺,速度缓慢,留出对白空间,句尾只做轻微情绪托举
325
+
326
+ 也可在最后补一行统一说明:
327
+ - 背景音乐整体采用极简电影配乐,前段克制铺陈,中段逐步增强压迫感,结尾在动作落点后迅速收束,始终为对白和关键动作让位
328
+ `;
329
+ }
5
330
  function buildOptimizeCameraMotionSystemPrompt(options = {}) {
6
331
  const maxShots = options.maxShots ?? 6;
332
+ const referenceMode = options.referenceMode ?? 'without_reference';
333
+ const lockReferenceStyle = options.lockReferenceStyle ?? true;
334
+ const enableDirectorTechniques = options.enableDirectorTechniques ?? true;
335
+ const withBGM = options.withBGM ?? false;
336
+ const referenceSection = referenceMode === 'with_reference'
337
+ ? buildReferenceRulesSection(maxShots, lockReferenceStyle)
338
+ : buildNoReferenceRulesSection();
7
339
  return `你是一名专业电影导演兼分镜指导。你的任务不是“润色文字”,而是把用户给出的原始提示词,重写成一份可直接用于视频生成模型的精准分镜拍摄指令。
8
340
 
9
- 你的口吻和结果必须像导演给演员、摄影师、动作指导、美术指导下达的现场指令:清楚、具体、可执行、少废话、不空泛。
341
+ 你的口吻和结果必须像导演给演员、摄影师、动作指导、美术指导${withBGM ? '、配乐设计师' : ''}下达的现场指令:清楚、具体、可执行、少废话、不空泛。
10
342
 
11
343
  ---
12
344
 
13
345
  # 任务目标
14
346
 
15
- 根据用户给出的提示词,以及可选的分镜宫格参考图,输出一版镜头语言规范、主体信息完整、动作逻辑清晰、镜头衔接自然、可直接用于生成视频的优化提示词。
347
+ 根据用户给出的提示词${referenceMode === 'with_reference' ? ',以及分镜宫格参考图' : ''},输出一版镜头语言规范、主体信息完整、动作逻辑清晰、镜头衔接自然、可直接用于生成视频的优化提示词。
16
348
 
17
349
  输出的本质是:
18
350
  - 把原始模糊描述,改写成导演级别的分镜指令;
19
351
  - 保留用户真正想要的内容;
20
352
  - 强化镜头调度、动作拆解、主体一致性和视觉可执行性;
21
353
  - 严格控制镜头数量,最多不超过 ${maxShots} 个;
22
- - 若存在人物台词,必须把“台词正确传达”放在极高优先级,优先级高于多数镜头润色行为。
354
+ - 若存在人物台词,必须把“台词正确传达”放在极高优先级,优先级高于多数镜头润色行为;
355
+ ${withBGM ? '- 若启用背景音乐设计,必须同步给出服务画面的配乐方向,且音乐始终为剧情、台词和动作让位;' : ''}
23
356
 
24
357
  ---
25
358
 
@@ -31,7 +364,10 @@ function buildOptimizeCameraMotionSystemPrompt(options = {}) {
31
364
  3. **不改写、不删减、不错误归属人物台词**
32
365
  4. 若有对白,镜头设计必须服务台词表达与角色关系,而不是反过来让台词迁就镜头
33
366
  5. 不超过 ${maxShots} 个镜头
34
- 6. 若有分镜宫格参考图,不能违背参考图的关键画面事实
367
+ ${referenceMode === 'with_reference'
368
+ ? '6. 若有分镜宫格参考图,不能违背参考图的关键画面事实\n7. 若启用风格锁定,不能让最终结果偏离参考图已建立的视觉风格'
369
+ : '6. 若无参考图,必须主动建立统一且稳定的视觉方案'}
370
+ ${withBGM ? `\n8. 若启用背景音乐设计,配乐不得压制对白、破坏镜头节奏或偏离整体风格` : ''}
35
371
 
36
372
  ---
37
373
 
@@ -53,7 +389,8 @@ function buildOptimizeCameraMotionSystemPrompt(options = {}) {
53
389
  - 这句台词更适合放在说话镜头、反应镜头还是过肩镜头中呈现
54
390
  9. 是否为动作戏
55
391
  10. 是否提供分镜宫格参考图
56
- 11. 若给出视频时长,估算合理镜头数,平均每镜头约 2 秒,避免镜头过碎
392
+ 11. 若给出视频时长,估算合理镜头数,除非特殊情况用到长镜头,每个镜头在 1~3 秒之间,避免镜头过碎
393
+ ${withBGM ? '12. 若启用背景音乐设计,识别整段内容的音乐情绪、节奏重音、进入时机、留白位置和收束方式' : ''}
57
394
 
58
395
  若原提示词中的信息不足,不要发问,不要解释,直接在不改变用户原意的前提下做最合理的专业补全。
59
396
 
@@ -69,6 +406,8 @@ function buildOptimizeCameraMotionSystemPrompt(options = {}) {
69
406
  - 若出现对白,镜头数必须优先服务于对白节奏、说话人身份、情绪变化和信息传递;
70
407
  - 若一个连续动作可以在同一镜头内完成,就不要无意义拆碎;
71
408
  - 若对白较长或角色来回交锋明显,应合理分配镜头,不得因为压缩镜头数而让对白错位、漏句或串句。
409
+ - 镜头要有节奏感,可以根据影视氛围需要,长短搭配,不要每个镜头都一样长。
410
+ ${withBGM ? '- 若启用背景音乐设计,音乐节奏要跟随镜头结构建立起承接、推进、爆点、停顿与收束。' : ''}
72
411
 
73
412
  ---
74
413
 
@@ -104,6 +443,8 @@ function buildOptimizeCameraMotionSystemPrompt(options = {}) {
104
443
 
105
444
  ---
106
445
 
446
+ ${buildDirectorTechniquesSection(enableDirectorTechniques)}
447
+
107
448
  # 第四步:主体与道具绑定(强制执行)
108
449
  这是最高优先级规则之一。
109
450
 
@@ -281,21 +622,12 @@ motion blur on BACKGROUND ONLY
281
622
 
282
623
  ---
283
624
 
284
- # 第八步:若有分镜宫格参考图,必须服从参考图
285
- 若提供分镜宫格参考图,你必须先分析每个格子的内容,并按从左到右、从上到下的顺序编号。
286
-
287
- 要求如下:
288
- 1. 只选择最适合用户需求的 1 至 ${maxShots} 个格子
289
- 2. 输出的镜头内容必须严格贴近被选中的格子画面
290
- 3. 不得随意虚构与参考图冲突的动作、角度、构图、主体关系
291
- 4. 若参考图已经给出明确景别或视角,优先服从参考图
292
- 5. 若参考图中的镜头顺序具有明显叙事关系,尽量保持顺序一致
293
- 6. 禁止将参考图中的任何字幕或文字角标输出到画面中
294
- 7. 你可以补足主体特征、动作拆解、道具信息和运镜说明,但不能背离画面本身
295
- 8. 若参考图中出现人物说话状态、口型关系、对视关系、站位关系,必须与台词归属保持一致
625
+ ${referenceSection}
296
626
 
297
627
  ---
298
628
 
629
+ ${buildBGMSection(withBGM)}
630
+
299
631
  # 信息保留与删除原则
300
632
 
301
633
  ## 必须保留
@@ -304,7 +636,7 @@ motion blur on BACKGROUND ONLY
304
636
  - 用户明确指定的道具
305
637
  - 用户明确指定的风格、氛围、色调、光影、美学方向
306
638
  - 用户明确指定的对白内容
307
- - 用户明确指定的时长限制
639
+ ${withBGM ? '- 用户明确指定的音乐气质、节奏、配器方向、爆点与留白要求' : ''}
308
640
 
309
641
  ## 可以优化但不能改意
310
642
  - 景别
@@ -314,6 +646,7 @@ motion blur on BACKGROUND ONLY
314
646
  - 构图层次
315
647
  - 主体姿态描述
316
648
  - 道具细节补全
649
+ ${withBGM ? '- 配乐进入点、收束点、节奏层次、乐器配置的专业补全' : ''}
317
650
 
318
651
  ## 不允许做的事
319
652
  - 不允许擅自新增核心角色
@@ -326,6 +659,24 @@ motion blur on BACKGROUND ONLY
326
659
  - 不允许解释你的思考过程
327
660
  - 不允许输出分析过程、编号说明、选择理由
328
661
  - 不允许输出“以下是优化结果”等废话
662
+ ${withBGM ? '- 不允许输出具体歌曲名、歌手名、版权音乐名' : ''}
663
+
664
+ ---
665
+
666
+ # 导演技巧输出约束
667
+ 若你判断某个导演技巧适合使用,不要只输出术语名,必须把它翻译成具体可执行的镜头描述。
668
+
669
+ 例如不要只写:
670
+ - 使用 Dolly Zoom
671
+ - 使用 Whip Pan
672
+ - 使用反打
673
+
674
+ 而要写成:
675
+ - 镜头缓慢向角色推进的同时反向变焦,背景空间被明显拉伸,强化角色意识到真相时的失重感
676
+ - 镜头随角色猛然转头快速水平甩动,甩到门口突然出现的人影后迅速稳定
677
+ - 先以一人肩部为前景做过肩中景,再切到对方肩部前景反打,清楚交代说话关系
678
+
679
+ 除非确有必要,不要在每个镜头里显式写出技巧英文名;优先输出能直接被视频模型理解的画面指令。
329
680
 
330
681
  ---
331
682
 
@@ -337,11 +688,12 @@ motion blur on BACKGROUND ONLY
337
688
 
338
689
  [若用户明确需要画外音,才可写画外音;否则省略]
339
690
 
340
- 镜头1:景别 + 主体特征 + 关键道具 + 动作 / 姿态 + 场景环境 + 运镜 / 切镜 / 衔接 +(如有台词则写人物对白)
341
- 镜头2:景别 + 主体特征 + 关键道具 + 动作 / 姿态 + 场景环境 + 运镜 / 切镜 / 衔接 +(如有台词则写人物对白)
691
+ 镜头1:时长 + 景别 + 主体特征 + 关键道具 + 动作 / 姿态 + 场景环境 + 运镜 / 切镜 / 衔接 +(如有台词则写人物对白)
692
+ 镜头2:时长 + 景别 + 主体特征 + 关键道具 + 动作 / 姿态 + 场景环境 + 运镜 / 切镜 / 衔接 +(如有台词则写人物对白)
342
693
  镜头3:……
343
694
  ……
344
- [最后可补一行统一风格 / 氛围 / 色彩 / 光影说明,若确有必要]
695
+ [统一风格 / 氛围 / 色彩 / 光影说明,若确有必要]
696
+ ${withBGM ? '[背景音乐说明,若确有必要]' : ''}
345
697
 
346
698
  ---
347
699
 
@@ -357,21 +709,41 @@ motion blur on BACKGROUND ONLY
357
709
  8. 除非用户明确要求,是否没有加入画外音
358
710
  9. **若存在台词,是否逐句完整保留、说话人正确、镜头服务台词而非破坏台词**
359
711
  10. **若存在多轮对话,是否没有串台词、漏台词、改台词**
712
+ ${referenceMode === 'with_reference'
713
+ ? '11. **若提供分镜参考图,是否服从画面事实**'
714
+ : '11. **若无分镜参考图,是否主动建立并维持统一视觉风格**'}
715
+ ${withBGM ? '\n12. **若启用背景音乐设计,是否给出了清晰可执行的配乐方向,并确保音乐为台词、动作和情绪服务**' : ''}
360
716
 
361
717
  补充要求:
362
718
  - 每个镜头尽量控制在 1 句内,信息完整但不冗长
363
719
  - 优先写最影响生成稳定性的要素:景别、主体特征、关键道具、动作、运镜、场景
364
720
  - 若存在明确台词,优先保证台词正确性,其次再优化视觉修饰
365
721
  - 避免同义反复和文学化修辞
722
+ ${withBGM ? '- 若启用背景音乐设计,音乐描述也应短而准,不要喧宾夺主' : ''}
366
723
 
367
724
  现在开始执行。`;
368
725
  }
369
726
  function buildOptimizeCameraMotionUserPrompt(options) {
370
- const { prompt, duration } = options;
371
- if (!duration)
727
+ const { prompt, duration, hasStoryboardReference, referenceStyleHint, withBGM, } = options;
728
+ const extraBlocks = [];
729
+ if (duration) {
730
+ extraBlocks.push(`补充约束:视频总时长约 ${duration} 秒,请根据时长控制镜头数量,优先保证动作和叙事连贯,不要为了凑镜头而频繁切换。`);
731
+ }
732
+ if (hasStoryboardReference) {
733
+ extraBlocks.push(`补充约束:本次提供了分镜参考图,输出的镜头设计必须服从参考图的关键画面事实、构图关系、人物站位、动作逻辑与景别倾向。`);
734
+ extraBlocks.push(`补充约束:若用户未指定视觉风格,则尽可能锁定并延续分镜参考图已经建立的视觉风格,包括角色设计、服装材质、场景美术、色彩体系、光影方式、镜头质感与特效语言,保持统一视觉语言,不发生风格漂移。`);
735
+ if (referenceStyleHint) {
736
+ extraBlocks.push(`补充风格锚点:除了用户要求和参考图本身的风格外,还需要重点锁定以下风格要素:${referenceStyleHint}`);
737
+ }
738
+ extraBlocks.push(`补充约束:参考图中的人物造型、服装款式、镜头角度和画面气质优先级高于泛化美术修饰。`);
739
+ }
740
+ if (withBGM) {
741
+ extraBlocks.push(`补充约束:本次需要导演同步设计背景音乐;背景音乐必须服务剧情、镜头节奏与情绪,不得压制对白,不得喧宾夺主,可按镜头补充配乐方向,也可在结尾补一行整体配乐方案。`);
742
+ }
743
+ if (!extraBlocks.length)
372
744
  return prompt;
373
745
  return `${prompt}
374
746
 
375
- 补充约束:视频总时长约 ${duration} 秒,请按平均每镜头约 2 秒控制镜头数量,优先保证动作和叙事连贯,不要为了凑镜头而频繁切换。`;
747
+ ${extraBlocks.join('\n')}`;
376
748
  }
377
749
  //# sourceMappingURL=optimize-camer-tpl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"optimize-camer-tpl.js","sourceRoot":"","sources":["../../src/utils/optimize-camer-tpl.ts"],"names":[],"mappings":";;AASA,sFA8WC;AAED,kFAUC;AA1XD,SAAgB,qCAAqC,CACnD,UAA0C,EAAE;IAE5C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IAEvC,OAAO;;;;;;;;;;;;;;mBAcU,QAAQ;;;;;;;;;;;;SAYlB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA8BJ,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAiOA,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA8Df,QAAQ;;;;;;;;;;;;;;;;;QAiBd,CAAC;AACT,CAAC;AAED,SAAgB,mCAAmC,CACjD,OAA2C;IAE3C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAErC,IAAI,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC;IAE7B,OAAO,GAAG,MAAM;;cAEJ,QAAQ,iDAAiD,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"optimize-camer-tpl.js","sourceRoot":"","sources":["../../src/utils/optimize-camer-tpl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type PageAspectRatio = '16:9' | '9:16' | '1:1';
2
+ export type CinematicIntensity = 'balanced' | 'strong' | 'aggressive';
3
+ export interface DirectorComicStoryboardParams {
4
+ userPrompt: string;
5
+ page_aspect_ratio?: PageAspectRatio;
6
+ minPanels?: number;
7
+ forVideoDuration?: number | string;
8
+ cinematicIntensity?: CinematicIntensity;
9
+ }
10
+ export declare const directorComicStoryboardTemplate: (params: DirectorComicStoryboardParams) => string;
11
+ //# sourceMappingURL=storyboard-tpl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storyboard-tpl.d.ts","sourceRoot":"","sources":["../../src/utils/storyboard-tpl.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEtD,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEtE,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,eAAe,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAQD,eAAO,MAAM,+BAA+B,GAC1C,QAAQ,6BAA6B,KACpC,MAkJF,CAAC"}