cerevox 3.7.4 → 3.8.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.
@@ -10,29 +10,15 @@
10
10
  2. 严格遵守指令和纪律
11
11
  * 严格执行纪律:确保百分百按照用户需求执行标准工作流程
12
12
  * 视频创作工作是非常严谨之工作,改动必须最小化,决不允许擅自发挥
13
- * 修改生成的任何 json 配置文件时,尽量通过**写代码**的方式进行修改,避免手动编辑
14
- * 部分配置文件有定义 schema,如`storyboard.json`、`draft_content.json`,创建和修改时务必先获取 schema 并严格遵守其规范
13
+ * 修改生成的任何 json 配置文件时,尽量通过**写代码**的方式进行修改,避免手动编辑破坏格式
15
14
  3. 保持上下文信息的有效性
16
15
  * 任何一次对话,确保已召回规则上下文,规则上下文可通过`retrieve-rules-context`工具召回,任何对话开启前如有需要优先调用该接口,也可以在每次对话都主动调用。
17
16
  * 在任务执行过程中,执行创建或修改 storyboard.json 或 draft_content.json 时,也应再次通过`retrieve-rules-context`重新找回最新的规则上下文,再次确保当前任务的执行准确无误。
18
17
  4. 内容一致性
19
18
  *`generate-image`生成分镜图片素材时,应严格按照 storyboard.json 中分镜场景的 start_frame、end_frame(如有) 字段描述
20
19
  *`generate-video`或`generate-video-by-ref`生成分镜视频素材时,应严格按照 storyboard.json 中分镜场景的 video_prompt 字段描述
21
- * 如生成配音
22
- * 务必保证 storyboard.json 中的 voice_id 与配音音色准确匹配,如果是配音前通过搜索选择的音色ID,务必在 storyboard.json 中及时更新
23
- * 务必保证生成配音(tts)的文本内容与 storyboard.json 中 script(或dialog) 字段的文本内容完全一致,如需调整内容,请同时更新 storyboard 中的内容
24
- * 务必保证 storyboard.json 与 draft_content.json 中的内容相对应,任何修改都必须同步更新二者
25
- * 务必保证素材与 draft_content.json 中的引用一致
26
- * 务必保证draft_content.json 中的时间轴与素材的时间轴完全一致(素材准确时长在生成过程中已自动实时记录在 media_logs.json 文件中)
27
- * 务必保证 draft_content.json 中的字幕与 storyboard.json 中的字幕(场景script或dialog字段)的文本内容完全一致
28
20
  5. 质量保证
29
- * storyboard.json 内容检查
30
- * 起始帧 start_frame 务必正确完整地融合stage_atmosphere各属性,且用单引号标记图中要绘制的CJK文字。
31
- * video_prompt 务必正确融合stage_atmosphere的camera描述的运镜方式。
32
- * 若用户需求中明确包含“自动优化分镜”,则必须在创建 storyboard.json 后立即调用`do-storyboard-optimization`工具优化 storyboard.json
33
21
  * is_continuous 为 true 的场景,生成视频时,务必采用连续分镜
34
- * 字幕优化
35
- * 在保证字幕文本内容与 storyboard.json 中的 script(或dialog) 字段的文本内容完全一致的前提下,应根据 tts 返回的`captions.utterances`字段对字幕的显示进行优化,将过长的字幕分段显示,在 draft_content.json 中使用分段字幕,captions 的内容在 media_logs.json 中可查询到。
36
22
 
37
23
  ## 标准工作流程
38
24
 
@@ -43,11 +29,10 @@
43
29
  3. 根据用户需求补充规则上下文(重要‼️)→创建或修改 .trae/rules/custom_rules.md 将用户的需求补充进去
44
30
  4. 需求分析与规划→分析用户需求,制定执行计划
45
31
  5. 收集相关资料(可选)→如有需要,使用搜索工具收集相关资料
46
- 6. 素材准备,根据`retrieve-rules-context`召回的规则上下文,构建 storyboard.json 以备成必要的素材(如视频、音频、图片等)
47
- 7. 如有需要或用户明确指定“自动优化分镜”,你在创建 storyboard.json 后,应立即调用`do-storyboard-optimization`工具优化 storyboard.json
48
- 8. 素材生成阶段,按素材类型(音频、图片、视频)分别依次生成,每次生成前,务必核查【素材生成规则】。
49
- 9. 检查 media_logs.json 确定素材时间轴→生成 draft_content.json→执行渲染→`compile-and-run`输出成品并自动下载到本地
50
- 10. 关闭项目→`project-close`
32
+ 6. 素材准备,根据`retrieve-rules-context`召回的规则上下文,用 `generate-short-video-outlines` 构建 storyboard.json 以备成必要的素材(如视频、音频、图片等)
33
+ 7. 素材生成阶段,按素材类型(图片、视频、BGM)分别依次生成,每次生成前,务必核查【素材生成规则】。
34
+ 8. 素材生成完毕后,通过 `audio-video-sync` 将音、视频内容合成一个完整的视频文件。
35
+ 9. 关闭项目→`project-close`
51
36
 
52
37
  ### 修改
53
38
 
@@ -55,9 +40,9 @@
55
40
  2. 根据用户意图召回规则上下文→`retrieve-rules-context`
56
41
  3. 判断当前处于什么阶段→制定执行计划
57
42
  4. 根据用户需求补充规则上下文(重要‼️)→修改 .trae/rules/custom_rules.md 将用户的需求变更补充进去
58
- 5. 更新素材→根据`retrieve-rules-context`召回的规则上下文,按需更新 storyboard.json、draft_content.json 等文件的内容和相关素材。
43
+ 5. 更新素材→根据`retrieve-rules-context`召回的规则上下文,按需更新 storyboard.json 等文件的内容和相关素材。
59
44
  - 修改素材(指音频、视频、图片)时,除非用户指定覆盖原文件,否则保留原文件,变更文件名生成新文件(比如 sc01_bg_new.png)。
60
- 6. 使用修改后的 draft_content.json 执行渲染→`compile-and-run`输出成品并自动下载到本地
45
+ 6. 使用修改后的素材重新执行`audio-video-sync`输出成品并自动下载到本地
61
46
  7. 关闭项目→`project-close`
62
47
 
63
48
  ## 项目结构与规范
@@ -65,7 +50,7 @@
65
50
  ```
66
51
  projects/<id>/
67
52
  ├─ materials/ # 素材文件
68
- ├─ output/ # 渲染输出
53
+ ├─ output/ # 成品输出(可选)
69
54
  ├─ storyboard.json # 创意脚本
70
55
  └─ draft_content.json # 技术规范
71
56
  ```
@@ -76,7 +61,6 @@ projects/<id>/
76
61
  - 分辨率:**只有用户明确指定时才使用720x1280和1280x720之外的分辨率**,禁止擅自使用其他分辨率
77
62
  - 字幕样式:
78
63
  * 默认字体:`"Noto Sans CJK SC"`
79
- * 字体大小:中文竖屏40、横屏60,英文竖屏28、横屏40
80
64
 
81
65
  ## 素材生成规则
82
66
 
@@ -85,9 +69,7 @@ projects/<id>/
85
69
  2. **字段优先级**:
86
70
  - 生成起始帧图片:严格按照`start_frame`字段描述
87
71
  - 生成视频:严格按照`video_prompt`字段描述
88
- - 生成配音:严格按照`script`或`dialog`字段描述
89
- 3. **禁止信息混淆**:不得将角色总体特征、起始帧状态、视频过程变化等不同概念混淆使用
90
- 4. **零容忍擅自发挥**:任何偏离storyboard.json具体字段描述的行为都属于擅自发挥,必须严格避免
72
+ 3. **零容忍擅自发挥**:任何偏离storyboard.json具体字段描述的行为都属于擅自发挥,必须严格避免
91
73
 
92
74
  ## JSON 文件一致性与质量规则
93
75
 
@@ -96,190 +78,14 @@ projects/<id>/
96
78
 
97
79
  ### storyboard.json
98
80
 
99
- 1. 一致性:生成和修改前先获取 schema
100
- 2. storyboard.json 中的 start_frame、end_frame 分别对应视频生成`generate-video`的首帧和尾帧
101
- 3. storyboard.json 中的 video_prompt 对应视频生成`generate-video`的 prompt
102
- 4. storyboard.json 中的 script 对应场景台词,对应场景语音生成`generate-scene-tts`,如多人台词则使用`dialog`数组:`[{name, script}]`
103
-
104
- #### storyboard.json 示例:
105
-
106
- ```json
107
- {
108
- "audience": "目标受众",
109
- "creative_guideline": "创意风格指导",
110
- "orientation": "视频方向(portrait/landscape)",
111
- "main_characters": [ // 主要角色(可选),如有则设置
112
- {
113
- "name": "角色1",
114
- "gender": "性别",
115
- "age": "年龄",
116
- "appearance": "外貌描述",
117
- "clothing": "服装描述",
118
- "personality": "性格描述",
119
- "reference_image": "角色参考图" // 可选,详细描述角色外观的参考图
120
- }
121
- ],
122
- "reference_objects": [ // 可选,如有参考物品,需设置
123
- {
124
- "name": "物品或背景名",
125
- "image": "物品或背景图片",
126
- "type": "object"|"background",
127
- "description": "物品或背景描述"
128
- }
129
- ],
130
- "scenes": [
131
- {
132
- "id": "scene_01",
133
- "audio_mode": "vo_sync"|"dialog"|"silent", // vo_sync 为同步配音,dialog 为对话台词,silent 为无配音
134
- "duration": <场景时长,单位秒>,
135
- "script": "场景台词内容,⚠️如果是对话台词,不要包含角色名,配音要严格根据台词进行",
136
- "voice_id": "场景台词音色",
137
- "lipsync": true|false, // 布尔值,默认false,若用户希望对该场景台词进行唇形同步,则设为true
138
- "stage_atmosphere": {
139
- "style": "舞台风格", // ⚠️ 极其重要!务必融合进 start_frame
140
- "characters": [ // 舞台角色,必须是具体参与出演的某个确定的人或动物或其他角色(可选),匹配 main_characters,如有则设置
141
- {
142
- "name": "角色名",
143
- "gender": "性别",
144
- "age": "年龄", // 儿童、少年、青年、中年、老年
145
- "features": "角色特征(外貌、面部表情,动作)",
146
- "clothing": "角色当前服饰妆造",
147
- "apply_reference_image": true|false // 布尔值,默认false,只有场景确定出现此角色且该角色占据主要部分才设为true
148
- }
149
- ],
150
- "stage_environment": "舞台环境",
151
- "lighting": "舞台灯光",
152
- "mood": "舞台氛围",
153
- "camera": "相机位置"
154
- },
155
- "highlight_frame": "当前场景中的关键描述,也就是最终效果最想要表达的内容,通常由用户需求或者AI根据用户需求设计给出,⚠️务必融合stage_atmosphere各属性,包括style、characters、stage_environment、lighting、mood、camera(决定照片拍摄角度,非常重要)以及characters中的各个属性应全部融合到图中",
156
- "onscreen_movement": "当前场景中的运动,视频通常由场景运动最终达到 highlight_frame 状态",
157
- "video_prompt": "根据onscreen_movement优化后的图生视频中文提示词,通常表达主体+运动,背景+运动,镜头+运动,氛围+风格,镜头符合stage_atmosphere的camera,如场景类型是references,需确保描述已包含相关main_characters和所有reference_objects中的物品或背景",
158
- "is_continuous": true|false, // 布尔值,默认false,若用户不希望当前场景和下一次场景之间切换镜头,或用户希望场景之间有连续的变化(比如人物在场景中移动),则设为true
159
- "video_type": "references"|"start_frame"|"start_end_frame", // 枚举类型,start_frame用首帧生成视频,连续镜头或者包含end_frame则用首尾帧生成视频,如果不用首位帧图片用参考图生成视频则设为references
160
- "use_video_model": "vidu", // 使用的视频生成模型
161
- "references": ["角色1", "物品A", "背景a"], // 引用的参考角色、物品或背景,必须是main_characters中的人物或reference_objects中的物品或背景
162
- "start_frame": "video_type为references时不生成此字段,否则根据highlight_frame和onscreen_movement倒推首帧,也就是当前场景起始的画面,⚠️务必融合stage_atmosphere各属性,包括style、characters、stage_environment、lighting、mood、camera(决定照片拍摄角度,非常重要)以及characters中的各个属性应全部融合到图中,图中如包含CJK文字,用单引号标记",
163
- }
164
- ]
165
- }
166
- ```
167
-
168
- ### draft_content.json
169
-
170
- 1. 一致性:生成和修改前先获取 schema
171
- 2. 必需字段:version, project, settings, assets, timeline, export
172
- 3. assets 路径规范:素材路径指向materials/
173
- 4. 时间轴对齐:draft_content.json 生成时,所有时间轴参数(startMs、durationMs、endMs)必须严格根据各素材的实际 duration、durationMs 创建,时间单位:毫秒(Ms后缀)
174
- 5. 视频时长必须为整秒数,配音、音效等可以精确到毫秒,如同步配音(mode: vo_sync),视频时长应为 ceil(配音时长) 秒数
175
- 6. 对齐实际文件原则:timeline 中的每个 clip 时长默认与对应素材文件的实际时长对齐
176
- 7. 对齐视频原则:所有 tracks 时间轴都必须与视频时长保持一致
177
- 8. 转场滤镜时间轴独立性:如定义了转场滤镜,不管是transitionIn还是transitionOut,转场滤镜的时间不影响视频的实际时长(依然和assets中素材的时长保持一致),只影响视觉过渡效果
178
-
179
- ## 重要规范
180
-
181
- #### draft_content 属性说明
182
-
183
- - version: 项目版本
184
- - project: 项目元数据(name, id)
185
- - settings: 视频设置(fps, resolution, pixelFormat, sampleRate, channels, timebase)
186
- - assets: 素材数组(所有图片、视频、音频文件引用)
187
- - timeline: 时间线轨道(tracks数组,包含video/audio/subtitle轨道)
188
- - subtitles: 字幕数组
189
- - export: 导出配置
190
-
191
- #### draft_content 示例
192
-
193
- ```json
194
- {
195
- "version": "1.0",
196
- "project": {
197
- "name": "Sample Video Project",
198
- "id": "project-001"
199
- },
200
- "settings": {
201
- "fps": 30,
202
- "resolution": { "width": <视频宽度>, "height": <视频高度> },
203
- "pixelFormat": "yuv420p",
204
- "sampleRate": 48000,
205
- "channels": 2,
206
- "timebase": "1/1000"
207
- },
208
- "assets": [
209
- {
210
- "id": "video-001",
211
- "type": "video",
212
- "uri": "materials/sc01_motion.mp4",
213
- "durationMs": <配音真实时长向上取整秒>
214
- },
215
- {
216
- "id": "audio-001",
217
- "type": "audio",
218
- "uri": "materials/sc01_vo.mp3",
219
- "durationMs": <配音真实时长(毫秒)>
220
- }
221
- ],
222
- "timeline": {
223
- "tracks": [
224
- {
225
- "id": "video-track-1",
226
- "type": "video",
227
- "clips": [
228
- {
229
- "id": "clip-001",
230
- "assetId": "video-001",
231
- "startMs": 0,
232
- "inMs": 0,
233
- "durationMs": <视频时长>
234
- }
235
- ]
236
- }
237
- ]
238
- },
239
- "subtitles": [
240
- {
241
- "id": "subtitle-001",
242
- "text": "健康的身体本身就是一座坚固的'堡垒'。",
243
- "syncStrategy": "与storyboard完全一致",
244
- "startMs": 0,
245
- "endMs": 8000,
246
- "style": {
247
- "fontFamily": "Noto Sans CJK SC",
248
- "fontSize": 40,
249
- "bold": true,
250
- "color": "#FFFFFF",
251
- "outlineColor": "#000000",
252
- "outlineWidth": 2,
253
- "align": "center",
254
- "verticalAlign": "bottom",
255
- "position": {
256
- "x": 0.5,
257
- "y": 0.85
258
- }
259
- }
260
- }
261
- ],
262
- "export": {
263
- "container": "mp4",
264
- "videoCodec": "libx264",
265
- "audioCodec": "aac"
266
- }
267
- }
268
- ```
269
-
270
- ---
81
+ 1. storyboard.json 中的 start_frame、end_frame 分别对应视频生成`generate-video`的首帧和尾帧
82
+ 2. storyboard.json 中的 video_prompt 对应视频生成`generate-video`的 prompt
271
83
 
272
84
  ## 技巧及术语
273
85
 
274
86
  1. 生成视频的几种方式
275
- - 首帧图生视频(默认采用):先根据 start_frame 生成首帧图片如 sc01_start.png,然后用该图片作为视频的第一帧,以 video_prompt 的提示词用`generate-image`生成视频
276
- - 首尾帧生视频:先根据 start_frame 生成首帧图片如 sc01_start.png,再根据 end_frame 生成尾帧图片如 sc01_end.png,用这两张图片作为视频的首尾帧,以 video_prompt 的提示词用`generate-image`生成视频
277
- - 参考图生视频:根据分镜的参考图片(可选,并且如有,需确保预先生成),将 storyboard 中当前 scene 的 video_type 设为 references,不生成 start_frame,直接以 video_prompt 的提示词用`generate-image-by-ref`生成视频
278
- - 连续镜头:如果用户不希望当前场景和下一次场景之间切换镜头,或用户希望场景之间有连续的变化(比如人物在场景中移动),storyboard 中对应 scene 的`is_continuous`字段将为`true`。此时将下一场景的首帧图片作为当前场景的尾帧(end_frame)参数,以 video_prompt 的提示词用`generate-image`生成当前场景的视频
279
-
280
- 2. 一镜到底:当用户说采用“一镜到底”时,应当生成所有场景首帧图片再开始生成视频,每个视频都使用连续镜头。
281
-
282
- 3. 镜头自然延伸:和“一镜到底”不同的连续画面技术,当用户说“镜头自然延伸”时,应当在生成视频时,设置saveLastFrameAs参数,将其返回的图片作为下一场景的首帧图片。
87
+ - 首帧图生视频(默认采用):先根据 start_frame 生成首帧图片如 sc01_start.png,然后用该图片作为视频的第一帧,以 video_prompt 的提示词用`generate-video`生成视频
88
+ - 首尾帧生视频:先根据 start_frame 生成首帧图片如 sc01_start.png,再根据 end_frame 生成尾帧图片如 sc01_end.png,用这两张图片作为视频的首尾帧,以 video_prompt 的提示词用`generate-video`生成视频
283
89
 
284
90
  ## 工具优先级
285
91
 
@@ -1 +1 @@
1
- {"version":3,"file":"zerocut.d.ts","sourceRoot":"","sources":["../../../src/mcp/servers/zerocut.ts"],"names":[],"mappings":";AAitLA,wBAAsB,GAAG,kBAKxB"}
1
+ {"version":3,"file":"zerocut.d.ts","sourceRoot":"","sources":["../../../src/mcp/servers/zerocut.ts"],"names":[],"mappings":";AAiwLA,wBAAsB,GAAG,kBAKxB"}
@@ -600,13 +600,14 @@ server.registerTool('retrieve-rules-context', {
600
600
  name: rule.name,
601
601
  trigger: rule.trigger,
602
602
  }));
603
- const chooseRulePrompt = `
604
- 请分析用户具体指令,匹配可用规则中的trigger,选择最合适的规则。
603
+ const chooseRulePrompt = `当前ZeroCut版本:${constants_1.VERSION}
604
+
605
+ 请分析用户具体指令,匹配可用规则中的trigger,选择最合适的规则。
605
606
 
606
- ## 可用规则:
607
- ${JSON.stringify(rulesList, null, 2)}
607
+ ## 可用规则:
608
+ ${JSON.stringify(rulesList, null, 2)}
608
609
 
609
- 请返回一个 JSON 字符串,包含用户意图对应的规则名称。格式为:{"rule_name": "规则名称"}
610
+ 请返回一个 JSON 字符串,包含用户意图对应的规则名称。格式为:{"rule_name": "规则名称"}
610
611
  `;
611
612
  const schema = {
612
613
  name: 'choose_rule',
@@ -1544,7 +1545,9 @@ server.registerTool('generate-short-video-outlines', {
1544
1545
  title: 'Generate Short Video Outlines',
1545
1546
  description: `根据用户描述生成短视频的大纲`,
1546
1547
  inputSchema: {
1547
- prompt: zod_1.z.string().describe('用户描述'),
1548
+ prompt: zod_1.z
1549
+ .string()
1550
+ .describe('用户描述,⚠️你只需要如实转述用户描述,无需自行分析整理或创作,本工具会智能创作'),
1548
1551
  voiceType: zod_1.z
1549
1552
  .enum(['slient', 'voiceover', 'dialogue'])
1550
1553
  .optional()
@@ -1732,7 +1735,7 @@ server.registerTool('generate-video', {
1732
1735
  .number()
1733
1736
  .min(0)
1734
1737
  .max(30)
1735
- .describe('The duration of the video. 一般与 tts 配音音频时长向上取整秒(ceil)一致,或者与 timeline_analysis 中确定的歌曲片段时长一致'),
1738
+ .describe('The duration of the video. 可以传0,此时会根据视频提示词内容自动确定时长'),
1736
1739
  end_frame: zod_1.z
1737
1740
  .string()
1738
1741
  .optional()
@@ -1760,9 +1763,6 @@ server.registerTool('generate-video', {
1760
1763
  if (!start_frame && !isZeroModel) {
1761
1764
  return createErrorResponse('start_frame 不能为空', 'generate-video');
1762
1765
  }
1763
- if (type !== 'pro' && duration === 0) {
1764
- return createErrorResponse('非 pro 模型的视频时长不能为 0', 'generate-video');
1765
- }
1766
1766
  if (!isZeroModel && duration > 16) {
1767
1767
  return createErrorResponse('非 zero 系列模型的视频仅支持 16 秒以下时长', 'generate-video');
1768
1768
  }
@@ -1800,6 +1800,10 @@ server.registerTool('generate-video', {
1800
1800
  if (scene.is_continuous && !end_frame) {
1801
1801
  return createErrorResponse('连续场景必须指定end_frame参数,如果用户明确指出不需要遵守,请将skipConsistencyCheck设置为true后再次调用', 'generate-video');
1802
1802
  }
1803
+ if (scene.video_duration != null &&
1804
+ duration !== scene.video_duration) {
1805
+ return createErrorResponse(`视频时长必须严格遵照storyboard的设定,用户指定的时长为 ${duration} 秒,而 storyboard 中建议的时长为 ${scene.video_duration} 秒。如果用户明确指出不需要遵守,请将skipConsistencyCheck设置为true后再次调用`, 'generate-video');
1806
+ }
1803
1807
  // 检查 use_video_model 与 type 参数的一致性
1804
1808
  if (scene.use_video_model &&
1805
1809
  type &&
@@ -1909,6 +1913,42 @@ server.registerTool('generate-video', {
1909
1913
  console.error('Failed to optimize prompt:', error);
1910
1914
  }
1911
1915
  }
1916
+ if (type !== 'pro' && duration === 0) {
1917
+ const durationPrompt = `根据用户提供的视频提示词内容为视频确定时长,规则为:
1918
+
1919
+ - 分镜视频时长应根据场景表现需要而设定,范围在1~16秒
1920
+ - 设置的原则:
1921
+ 1) 如有人物对话或画外音,根据声音按略缓慢语速估算时长,并在不超过16秒的前提下,留有25%左右的buffer(即视频时长比音频估算时长稍长25%)
1922
+ 2) 如无人物对话或画外音,根据场景表现视觉需要设定时长
1923
+
1924
+ ## 返回
1925
+
1926
+ 只返回一个整数(0~16秒),表示视频时长,不返回其他任何内容。
1927
+ `;
1928
+ const payload = {
1929
+ model: 'Doubao-Seed-1.6',
1930
+ messages: [
1931
+ {
1932
+ role: 'system',
1933
+ content: durationPrompt,
1934
+ },
1935
+ {
1936
+ role: 'user',
1937
+ content: `视频提示词:\n\n${prompt.trim()}`,
1938
+ },
1939
+ ],
1940
+ };
1941
+ console.log(JSON.stringify(payload, null, 2));
1942
+ const completion = await ai.getCompletions(payload);
1943
+ const result = completion.choices[0]?.message?.content;
1944
+ if (!result) {
1945
+ throw new Error('No response from AI model');
1946
+ }
1947
+ duration = parseInt(result.trim(), 10);
1948
+ if (isNaN(duration) || duration < 1 || duration > 16) {
1949
+ throw new Error('Invalid duration from AI model');
1950
+ }
1951
+ }
1912
1952
  if (type === 'kenburns') {
1913
1953
  // 实现 getImageSize 函数
1914
1954
  async function getImageSize(imageUri) {
@@ -4255,34 +4295,44 @@ server.registerTool('run-ffmpeg-command', {
4255
4295
  return createErrorResponse(error, 'run-ffmpeg-command');
4256
4296
  }
4257
4297
  });
4258
- server.registerTool('do-storyboard-optimization', {
4259
- title: 'Do Storyboard Optimization',
4260
- description: 'Get storyboard optimization guidelines and action instructions.',
4261
- inputSchema: {},
4262
- }, async () => {
4263
- try {
4264
- // 调用 do-storyboard-optimization 工具时,设置 checkStoryboardFlag 为 true
4265
- checkStoryboardFlag = true;
4266
- const guidelinePath = (0, node_path_1.resolve)(__dirname, './prompts/actions/storyboard_optimization.md');
4267
- const storyboardOptimizationGuidelines = await (0, promises_1.readFile)(guidelinePath, 'utf-8');
4268
- return {
4269
- content: [
4270
- {
4271
- type: 'text',
4272
- text: JSON.stringify({
4273
- content: {
4274
- guideline: storyboardOptimizationGuidelines,
4275
- action: '你应当根据guideline优化storyboard.json',
4276
- },
4277
- }),
4278
- },
4279
- ],
4280
- };
4281
- }
4282
- catch (error) {
4283
- return createErrorResponse(error, 'do-storyboard-optimization');
4284
- }
4285
- });
4298
+ // server.registerTool(
4299
+ // 'do-storyboard-optimization',
4300
+ // {
4301
+ // title: 'Do Storyboard Optimization',
4302
+ // description:
4303
+ // 'Get storyboard optimization guidelines and action instructions.',
4304
+ // inputSchema: {},
4305
+ // },
4306
+ // async () => {
4307
+ // try {
4308
+ // // 调用 do-storyboard-optimization 工具时,设置 checkStoryboardFlag 为 true
4309
+ // checkStoryboardFlag = true;
4310
+ // const guidelinePath = resolve(
4311
+ // __dirname,
4312
+ // './prompts/actions/storyboard_optimization.md'
4313
+ // );
4314
+ // const storyboardOptimizationGuidelines = await readFile(
4315
+ // guidelinePath,
4316
+ // 'utf-8'
4317
+ // );
4318
+ // return {
4319
+ // content: [
4320
+ // {
4321
+ // type: 'text' as const,
4322
+ // text: JSON.stringify({
4323
+ // content: {
4324
+ // guideline: storyboardOptimizationGuidelines,
4325
+ // action: '你应当根据guideline优化storyboard.json',
4326
+ // },
4327
+ // }),
4328
+ // },
4329
+ // ],
4330
+ // };
4331
+ // } catch (error) {
4332
+ // return createErrorResponse(error, 'do-storyboard-optimization');
4333
+ // }
4334
+ // }
4335
+ // );
4286
4336
  server.registerTool('search-context', {
4287
4337
  title: 'Search Context',
4288
4338
  description: 'Search the context.',