@infimind/video-mcp-cli 1.0.11 → 1.0.13
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.
- package/README.md +83 -28
- package/dist/auth/credentialWriter.js +85 -0
- package/dist/auth/exchange.js +67 -0
- package/dist/auth/installationId.js +36 -0
- package/dist/auth/login.js +77 -0
- package/dist/auth/logout.js +34 -0
- package/dist/auth/loopback.js +155 -0
- package/dist/auth/paths.js +30 -0
- package/dist/auth/pkce.js +11 -0
- package/dist/auth/profile.js +15 -0
- package/dist/auth/redact.js +63 -0
- package/dist/auth/status.js +35 -0
- package/dist/creativeTools.js +585 -0
- package/dist/index.js +139 -39
- package/dist/server.js +900 -211
- package/dist/videoRules.js +102 -20
- package/package.json +35 -8
- package/dist/index.d.ts +0 -2
- package/dist/server.d.ts +0 -11
- package/dist/videoRules.d.ts +0 -49
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
const createAnnotations = {
|
|
2
|
+
readOnlyHint: false,
|
|
3
|
+
destructiveHint: false,
|
|
4
|
+
idempotentHint: false,
|
|
5
|
+
openWorldHint: true,
|
|
6
|
+
};
|
|
7
|
+
const statusAnnotations = {
|
|
8
|
+
readOnlyHint: true,
|
|
9
|
+
destructiveHint: false,
|
|
10
|
+
idempotentHint: true,
|
|
11
|
+
openWorldHint: false,
|
|
12
|
+
};
|
|
13
|
+
const nullableString = (title, description) => ({
|
|
14
|
+
type: ["string", "null"],
|
|
15
|
+
title,
|
|
16
|
+
description,
|
|
17
|
+
});
|
|
18
|
+
const nullableBoolean = (title, description) => ({
|
|
19
|
+
type: ["boolean", "null"],
|
|
20
|
+
title,
|
|
21
|
+
description,
|
|
22
|
+
});
|
|
23
|
+
const nullableNumber = (title, description) => ({
|
|
24
|
+
type: ["number", "null"],
|
|
25
|
+
title,
|
|
26
|
+
description,
|
|
27
|
+
});
|
|
28
|
+
const structuredErrorProperties = {
|
|
29
|
+
errorCode: nullableString("错误代码", "处理失败时的机器可读错误代码;未失败时为空。"),
|
|
30
|
+
errorCategory: nullableString("错误分类", "处理失败时的错误类别;未失败时为空。"),
|
|
31
|
+
retryable: nullableBoolean("是否可重试", "表示处理失败后是否建议重新创建任务;未失败时为空。"),
|
|
32
|
+
errorMessage: nullableString("错误信息", "处理失败时的可读原因;未失败时为空。"),
|
|
33
|
+
};
|
|
34
|
+
export const MCP_CREATIVE_TOOLS = [
|
|
35
|
+
{
|
|
36
|
+
name: "create_motion_video_remake_task",
|
|
37
|
+
title: "生成人物动作模仿视频",
|
|
38
|
+
description: "根据人物图片和动作参考视频创建人物动作模仿或人物替换任务,素材可使用本地文件路径或公网 URL,并可使用 dryRun 预检素材和估算积分。本工具返回 taskId,不直接返回最终视频;创建后请调用 get_motion_video_remake_status 并原样传入 taskId,轮询生成进度和结果。",
|
|
39
|
+
annotations: createAnnotations,
|
|
40
|
+
inputSchema: {
|
|
41
|
+
type: "object",
|
|
42
|
+
title: "人物动作模仿参数",
|
|
43
|
+
description: "创建人物动作模仿或人物替换视频任务所需的参考素材和生成配置。",
|
|
44
|
+
properties: {
|
|
45
|
+
sourceImage: {
|
|
46
|
+
type: "string",
|
|
47
|
+
title: "人物参考图片",
|
|
48
|
+
description: "必填。包含目标人物的本地 JPG/PNG 图片路径或公网 URL。",
|
|
49
|
+
},
|
|
50
|
+
referenceVideo: {
|
|
51
|
+
type: "string",
|
|
52
|
+
title: "动作参考视频",
|
|
53
|
+
description: "必填。包含需要模仿动作的本地 MP4 视频路径或公网 URL。",
|
|
54
|
+
},
|
|
55
|
+
mode: {
|
|
56
|
+
type: "string",
|
|
57
|
+
title: "模仿模式",
|
|
58
|
+
enum: ["move", "mix"],
|
|
59
|
+
default: "move",
|
|
60
|
+
description: "可选。move=让图片人物模仿参考动作,mix=用图片人物替换参考视频中的人物;默认 move。",
|
|
61
|
+
},
|
|
62
|
+
quality: {
|
|
63
|
+
type: "string",
|
|
64
|
+
title: "生成质量",
|
|
65
|
+
enum: ["std", "pro"],
|
|
66
|
+
default: "std",
|
|
67
|
+
description: "可选。std=标准质量,pro=更高质量;默认 std。",
|
|
68
|
+
},
|
|
69
|
+
count: {
|
|
70
|
+
type: "integer",
|
|
71
|
+
title: "生成数量",
|
|
72
|
+
minimum: 1,
|
|
73
|
+
maximum: 10,
|
|
74
|
+
default: 1,
|
|
75
|
+
description: "可选。需要生成的视频数量,范围 1–10,默认 1。",
|
|
76
|
+
},
|
|
77
|
+
referenceVideoDurationSeconds: {
|
|
78
|
+
type: "number",
|
|
79
|
+
title: "参考视频时长",
|
|
80
|
+
exclusiveMinimum: 0,
|
|
81
|
+
maximum: 30,
|
|
82
|
+
description: "可选。仅在 dryRun 预检时用于估算积分,单位为秒,须大于 0 且不超过 30;正式创建时由服务检测素材时长。",
|
|
83
|
+
},
|
|
84
|
+
dryRun: {
|
|
85
|
+
type: "boolean",
|
|
86
|
+
title: "仅预检",
|
|
87
|
+
default: false,
|
|
88
|
+
description: "可选。设为 true 时仅校验素材,并在提供 referenceVideoDurationSeconds 时估算积分,不创建任务且不扣费;默认 false。",
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
required: ["sourceImage", "referenceVideo"],
|
|
92
|
+
additionalProperties: false,
|
|
93
|
+
},
|
|
94
|
+
outputSchema: {
|
|
95
|
+
type: "object",
|
|
96
|
+
title: "动作模仿任务创建结果",
|
|
97
|
+
description: "返回任务标识、生成配置、积分信息和后续查询提示;预检或失败时部分字段可能为空或不返回。",
|
|
98
|
+
properties: {
|
|
99
|
+
success: {
|
|
100
|
+
type: "boolean",
|
|
101
|
+
title: "是否成功",
|
|
102
|
+
description: "表示任务创建或预检请求是否成功。",
|
|
103
|
+
},
|
|
104
|
+
dryRun: {
|
|
105
|
+
type: "boolean",
|
|
106
|
+
title: "是否仅预检",
|
|
107
|
+
description: "表示本次请求是否只进行了预检而未创建任务。",
|
|
108
|
+
},
|
|
109
|
+
taskId: {
|
|
110
|
+
type: "number",
|
|
111
|
+
title: "任务 ID",
|
|
112
|
+
description: "创建成功后返回的动作模仿任务 ID;dryRun 或失败时可能不返回,请用于调用 get_motion_video_remake_status。",
|
|
113
|
+
},
|
|
114
|
+
mode: {
|
|
115
|
+
type: "string",
|
|
116
|
+
title: "模仿模式",
|
|
117
|
+
description: "本次任务实际使用的模仿模式。",
|
|
118
|
+
},
|
|
119
|
+
quality: {
|
|
120
|
+
type: "string",
|
|
121
|
+
title: "生成质量",
|
|
122
|
+
description: "本次任务实际使用的生成质量。",
|
|
123
|
+
},
|
|
124
|
+
count: {
|
|
125
|
+
type: "number",
|
|
126
|
+
title: "生成数量",
|
|
127
|
+
description: "本次任务计划生成的视频数量。",
|
|
128
|
+
},
|
|
129
|
+
detectedDurationSeconds: nullableNumber("检测视频时长", "服务检测到的参考视频时长,单位为秒;预检或尚未检测时可能为空。"),
|
|
130
|
+
durationHintSeconds: nullableNumber("提示视频时长", "dryRun 请求提供的参考视频时长,单位为秒;未提供时为空。"),
|
|
131
|
+
creditsPerVideo: nullableNumber("单个视频积分", "预计生成单个视频所需的积分;无法估算时为空。"),
|
|
132
|
+
estimatedCredits: nullableNumber("预估总积分", "预计完成全部视频所需的积分;无法估算时为空。"),
|
|
133
|
+
estimateSource: {
|
|
134
|
+
type: "string",
|
|
135
|
+
title: "估算依据",
|
|
136
|
+
description: "积分估算依据:server_validated=服务检测素材,duration_hint=采用时长提示,unavailable=暂时无法估算。",
|
|
137
|
+
enum: ["server_validated", "duration_hint", "unavailable"],
|
|
138
|
+
},
|
|
139
|
+
creditsDeducted: {
|
|
140
|
+
type: "number",
|
|
141
|
+
title: "已扣积分",
|
|
142
|
+
description: "本次请求实际扣除的积分;dryRun 时为 0。",
|
|
143
|
+
},
|
|
144
|
+
remainingCredits: {
|
|
145
|
+
type: "number",
|
|
146
|
+
title: "剩余积分",
|
|
147
|
+
description: "请求处理后的账户剩余积分。",
|
|
148
|
+
},
|
|
149
|
+
validationWarnings: {
|
|
150
|
+
type: "array",
|
|
151
|
+
title: "预检警告",
|
|
152
|
+
description: "参数或素材预检产生的非阻断性提示列表。",
|
|
153
|
+
items: {
|
|
154
|
+
type: "string",
|
|
155
|
+
title: "预检警告项",
|
|
156
|
+
description: "一条需要关注但不阻断请求的预检提示。",
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
statusHint: {
|
|
160
|
+
type: "string",
|
|
161
|
+
title: "后续操作提示",
|
|
162
|
+
description: "提示是否应使用 taskId 调用 get_motion_video_remake_status 查询任务进度。",
|
|
163
|
+
},
|
|
164
|
+
code: {
|
|
165
|
+
type: "string",
|
|
166
|
+
title: "错误代码",
|
|
167
|
+
description: "请求失败时返回的机器可读错误代码,成功时可能不返回。",
|
|
168
|
+
},
|
|
169
|
+
message: {
|
|
170
|
+
type: "string",
|
|
171
|
+
title: "结果消息",
|
|
172
|
+
description: "请求结果或失败原因的可读说明。",
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
required: ["success"],
|
|
176
|
+
additionalProperties: false,
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
name: "get_motion_video_remake_status",
|
|
181
|
+
title: "查询动作模仿视频结果",
|
|
182
|
+
description: "根据 create_motion_video_remake_task 返回的 taskId 查询人物动作模仿视频的进度、视频链接和失败原因。任务未完成时请间隔一段时间后使用同一 taskId 再次调用。",
|
|
183
|
+
annotations: statusAnnotations,
|
|
184
|
+
inputSchema: {
|
|
185
|
+
type: "object",
|
|
186
|
+
title: "动作模仿任务查询参数",
|
|
187
|
+
description: "指定需要查询的人物动作模仿任务。",
|
|
188
|
+
properties: {
|
|
189
|
+
taskId: {
|
|
190
|
+
type: "integer",
|
|
191
|
+
title: "任务 ID",
|
|
192
|
+
description: "必填。由 create_motion_video_remake_task 返回的任务 ID,请原样传入并用于后续轮询。",
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
required: ["taskId"],
|
|
196
|
+
additionalProperties: false,
|
|
197
|
+
},
|
|
198
|
+
outputSchema: {
|
|
199
|
+
type: "object",
|
|
200
|
+
title: "动作模仿视频状态与结果",
|
|
201
|
+
description: "返回任务进度、视频结果和错误信息;任务未完成时结果链接和完成时间可能为空。",
|
|
202
|
+
properties: {
|
|
203
|
+
success: {
|
|
204
|
+
type: "boolean",
|
|
205
|
+
title: "是否成功",
|
|
206
|
+
description: "表示查询请求是否成功。",
|
|
207
|
+
},
|
|
208
|
+
taskId: {
|
|
209
|
+
type: "number",
|
|
210
|
+
title: "任务 ID",
|
|
211
|
+
description: "当前查询的动作模仿任务 ID。",
|
|
212
|
+
},
|
|
213
|
+
status: {
|
|
214
|
+
type: "string",
|
|
215
|
+
title: "任务状态",
|
|
216
|
+
description: "任务当前的处理状态;未完成时应稍后继续查询。",
|
|
217
|
+
},
|
|
218
|
+
progress: {
|
|
219
|
+
type: "number",
|
|
220
|
+
title: "总体进度",
|
|
221
|
+
description: "任务总体处理进度,通常为 0–100 的数值。",
|
|
222
|
+
},
|
|
223
|
+
mode: {
|
|
224
|
+
type: "string",
|
|
225
|
+
title: "模仿模式",
|
|
226
|
+
description: "任务使用的模仿模式。",
|
|
227
|
+
},
|
|
228
|
+
quality: {
|
|
229
|
+
type: "string",
|
|
230
|
+
title: "生成质量",
|
|
231
|
+
description: "任务使用的生成质量。",
|
|
232
|
+
},
|
|
233
|
+
count: {
|
|
234
|
+
type: "number",
|
|
235
|
+
title: "视频数量",
|
|
236
|
+
description: "任务计划生成的视频数量。",
|
|
237
|
+
},
|
|
238
|
+
videoDuration: {
|
|
239
|
+
type: "number",
|
|
240
|
+
title: "参考视频时长",
|
|
241
|
+
description: "参考动作视频的时长,单位为秒。",
|
|
242
|
+
},
|
|
243
|
+
createdAt: {
|
|
244
|
+
type: ["string", "null"],
|
|
245
|
+
title: "创建时间",
|
|
246
|
+
description: "任务创建时间;不可用时为空。",
|
|
247
|
+
},
|
|
248
|
+
completedAt: {
|
|
249
|
+
type: ["string", "null"],
|
|
250
|
+
title: "完成时间",
|
|
251
|
+
description: "任务完成时间;未完成时为空。",
|
|
252
|
+
},
|
|
253
|
+
...structuredErrorProperties,
|
|
254
|
+
results: {
|
|
255
|
+
type: "array",
|
|
256
|
+
title: "视频结果列表",
|
|
257
|
+
description: "每个待生成视频的状态、访问链接和错误信息。",
|
|
258
|
+
items: {
|
|
259
|
+
type: "object",
|
|
260
|
+
title: "动作模仿视频结果",
|
|
261
|
+
description: "一个动作模仿视频的处理状态、访问链接、时间和错误信息。",
|
|
262
|
+
properties: {
|
|
263
|
+
resultId: {
|
|
264
|
+
type: "number",
|
|
265
|
+
title: "视频结果 ID",
|
|
266
|
+
description: "该视频结果在任务中的唯一标识。",
|
|
267
|
+
},
|
|
268
|
+
status: {
|
|
269
|
+
type: "string",
|
|
270
|
+
title: "视频状态",
|
|
271
|
+
description: "该视频当前的生成状态。",
|
|
272
|
+
},
|
|
273
|
+
videoUrl: nullableString("视频 URL", "生成完成后的视频访问 URL;未完成或失败时为空。"),
|
|
274
|
+
thumbnailUrl: nullableString("缩略图 URL", "视频缩略图访问 URL;尚未生成时为空。"),
|
|
275
|
+
createdAt: nullableString("创建时间", "该视频结果的创建时间;不可用时为空。"),
|
|
276
|
+
completedAt: nullableString("完成时间", "该视频的完成时间;未完成时为空。"),
|
|
277
|
+
...structuredErrorProperties,
|
|
278
|
+
},
|
|
279
|
+
required: ["resultId", "status"],
|
|
280
|
+
additionalProperties: false,
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
code: {
|
|
284
|
+
type: "string",
|
|
285
|
+
title: "查询错误代码",
|
|
286
|
+
description: "查询请求失败时返回的机器可读错误代码,成功时可能不返回。",
|
|
287
|
+
},
|
|
288
|
+
message: {
|
|
289
|
+
type: "string",
|
|
290
|
+
title: "查询消息",
|
|
291
|
+
description: "查询结果或失败原因的可读说明。",
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
required: ["success"],
|
|
295
|
+
additionalProperties: false,
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
name: "create_ecommerce_storyboard_task",
|
|
300
|
+
title: "生成电商视频分镜",
|
|
301
|
+
description: "根据商品信息生成剧情、逐镜描述、镜头提示词和分镜插图,可使用本地商品图片或公网 URL,也可通过 dryRun 预检并估算积分;本工具不直接生成最终视频。本工具返回 taskId,创建后请调用 get_ecommerce_storyboard_status 并原样传入 taskId,轮询分镜进度和结果。",
|
|
302
|
+
annotations: createAnnotations,
|
|
303
|
+
inputSchema: {
|
|
304
|
+
type: "object",
|
|
305
|
+
title: "电商视频分镜参数",
|
|
306
|
+
description: "创建电商视频分镜任务所需的商品信息和内容配置。",
|
|
307
|
+
properties: {
|
|
308
|
+
productName: {
|
|
309
|
+
type: "string",
|
|
310
|
+
title: "商品名称",
|
|
311
|
+
description: "必填。需要创作电商视频分镜的商品名称。",
|
|
312
|
+
},
|
|
313
|
+
productDescription: {
|
|
314
|
+
type: "string",
|
|
315
|
+
title: "商品描述",
|
|
316
|
+
description: "必填。描述商品功能、核心卖点、使用场景和希望强调的信息。",
|
|
317
|
+
},
|
|
318
|
+
targetAudience: {
|
|
319
|
+
type: "string",
|
|
320
|
+
title: "目标受众",
|
|
321
|
+
description: "可选。视频希望触达的人群特征,用于调整剧情和表达方式。",
|
|
322
|
+
},
|
|
323
|
+
videoStyle: {
|
|
324
|
+
type: "string",
|
|
325
|
+
title: "视频风格",
|
|
326
|
+
description: "可选。期望的视觉、叙事或营销风格。",
|
|
327
|
+
},
|
|
328
|
+
productImage: {
|
|
329
|
+
type: "string",
|
|
330
|
+
title: "商品图片",
|
|
331
|
+
description: "可选。展示商品的本地 JPG/PNG/WebP 图片路径或公网 URL。",
|
|
332
|
+
},
|
|
333
|
+
targetDuration: {
|
|
334
|
+
type: "integer",
|
|
335
|
+
title: "目标时长",
|
|
336
|
+
enum: [30, 60, 90, 120],
|
|
337
|
+
default: 60,
|
|
338
|
+
description: "可选。计划成片的目标时长,单位为秒,可选 30、60、90 或 120,默认 60。",
|
|
339
|
+
},
|
|
340
|
+
language: {
|
|
341
|
+
type: "string",
|
|
342
|
+
title: "内容输出语言",
|
|
343
|
+
enum: ["zh-CN", "en"],
|
|
344
|
+
default: "zh-CN",
|
|
345
|
+
description: "可选。剧情、镜头描述和提示词的输出语言;zh-CN=简体中文,en=英文,默认 zh-CN。",
|
|
346
|
+
},
|
|
347
|
+
orientation: {
|
|
348
|
+
type: "string",
|
|
349
|
+
title: "画面方向",
|
|
350
|
+
enum: ["horizontal", "vertical"],
|
|
351
|
+
default: "horizontal",
|
|
352
|
+
description: "可选。horizontal=横屏,vertical=竖屏;默认 horizontal。",
|
|
353
|
+
},
|
|
354
|
+
dryRun: {
|
|
355
|
+
type: "boolean",
|
|
356
|
+
title: "仅预检",
|
|
357
|
+
default: false,
|
|
358
|
+
description: "可选。设为 true 时仅校验参数并预估 2 积分,不创建任务且不扣费;默认 false。",
|
|
359
|
+
},
|
|
360
|
+
},
|
|
361
|
+
required: ["productName", "productDescription"],
|
|
362
|
+
additionalProperties: false,
|
|
363
|
+
},
|
|
364
|
+
outputSchema: {
|
|
365
|
+
type: "object",
|
|
366
|
+
title: "电商分镜任务创建结果",
|
|
367
|
+
description: "返回任务标识、积分信息和后续查询提示;预检或失败时部分字段可能不返回。",
|
|
368
|
+
properties: {
|
|
369
|
+
success: {
|
|
370
|
+
type: "boolean",
|
|
371
|
+
title: "是否成功",
|
|
372
|
+
description: "表示任务创建或预检请求是否成功。",
|
|
373
|
+
},
|
|
374
|
+
dryRun: {
|
|
375
|
+
type: "boolean",
|
|
376
|
+
title: "是否仅预检",
|
|
377
|
+
description: "表示本次请求是否只进行了预检而未创建任务。",
|
|
378
|
+
},
|
|
379
|
+
taskId: {
|
|
380
|
+
type: "number",
|
|
381
|
+
title: "任务 ID",
|
|
382
|
+
description: "创建成功后返回的电商分镜任务 ID;dryRun 或失败时可能不返回,请用于调用 get_ecommerce_storyboard_status。",
|
|
383
|
+
},
|
|
384
|
+
estimatedCredits: {
|
|
385
|
+
type: "number",
|
|
386
|
+
title: "预估积分",
|
|
387
|
+
description: "完成本次分镜任务预计需要的积分。",
|
|
388
|
+
},
|
|
389
|
+
creditsDeducted: {
|
|
390
|
+
type: "number",
|
|
391
|
+
title: "已扣积分",
|
|
392
|
+
description: "本次请求实际扣除的积分;dryRun 时为 0。",
|
|
393
|
+
},
|
|
394
|
+
remainingCredits: {
|
|
395
|
+
type: "number",
|
|
396
|
+
title: "剩余积分",
|
|
397
|
+
description: "请求处理后的账户剩余积分。",
|
|
398
|
+
},
|
|
399
|
+
validationWarnings: {
|
|
400
|
+
type: "array",
|
|
401
|
+
title: "预检警告",
|
|
402
|
+
description: "参数或素材预检产生的非阻断性提示列表。",
|
|
403
|
+
items: {
|
|
404
|
+
type: "string",
|
|
405
|
+
title: "预检警告项",
|
|
406
|
+
description: "一条需要关注但不阻断请求的预检提示。",
|
|
407
|
+
},
|
|
408
|
+
},
|
|
409
|
+
statusHint: {
|
|
410
|
+
type: "string",
|
|
411
|
+
title: "后续操作提示",
|
|
412
|
+
description: "提示是否应使用 taskId 调用 get_ecommerce_storyboard_status 查询分镜进度。",
|
|
413
|
+
},
|
|
414
|
+
code: {
|
|
415
|
+
type: "string",
|
|
416
|
+
title: "错误代码",
|
|
417
|
+
description: "请求失败时返回的机器可读错误代码,成功时可能不返回。",
|
|
418
|
+
},
|
|
419
|
+
message: {
|
|
420
|
+
type: "string",
|
|
421
|
+
title: "结果消息",
|
|
422
|
+
description: "请求结果或失败原因的可读说明。",
|
|
423
|
+
},
|
|
424
|
+
},
|
|
425
|
+
required: ["success"],
|
|
426
|
+
additionalProperties: false,
|
|
427
|
+
},
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
name: "get_ecommerce_storyboard_status",
|
|
431
|
+
title: "查询电商视频分镜结果",
|
|
432
|
+
description: "根据 create_ecommerce_storyboard_task 返回的 taskId 查询电商视频分镜的处理进度、剧情、逐镜描述、镜头提示词和分镜插图。任务未完成时请间隔一段时间后使用同一 taskId 再次调用。",
|
|
433
|
+
annotations: statusAnnotations,
|
|
434
|
+
inputSchema: {
|
|
435
|
+
type: "object",
|
|
436
|
+
title: "电商分镜任务查询参数",
|
|
437
|
+
description: "指定需要查询的电商视频分镜任务。",
|
|
438
|
+
properties: {
|
|
439
|
+
taskId: {
|
|
440
|
+
type: "integer",
|
|
441
|
+
title: "任务 ID",
|
|
442
|
+
description: "必填。由 create_ecommerce_storyboard_task 返回的任务 ID,请原样传入并用于后续轮询。",
|
|
443
|
+
},
|
|
444
|
+
},
|
|
445
|
+
required: ["taskId"],
|
|
446
|
+
additionalProperties: false,
|
|
447
|
+
},
|
|
448
|
+
outputSchema: {
|
|
449
|
+
type: "object",
|
|
450
|
+
title: "电商视频分镜状态与结果",
|
|
451
|
+
description: "返回分镜任务进度、剧情、逐镜内容、插图和错误信息;任务未完成时内容可能为空。",
|
|
452
|
+
properties: {
|
|
453
|
+
success: {
|
|
454
|
+
type: "boolean",
|
|
455
|
+
title: "是否成功",
|
|
456
|
+
description: "表示查询请求是否成功。",
|
|
457
|
+
},
|
|
458
|
+
taskId: {
|
|
459
|
+
type: "number",
|
|
460
|
+
title: "任务 ID",
|
|
461
|
+
description: "当前查询的电商分镜任务 ID。",
|
|
462
|
+
},
|
|
463
|
+
status: {
|
|
464
|
+
type: "string",
|
|
465
|
+
title: "任务状态",
|
|
466
|
+
description: "分镜任务当前的处理状态;未完成时应稍后继续查询。",
|
|
467
|
+
},
|
|
468
|
+
progress: {
|
|
469
|
+
type: "number",
|
|
470
|
+
title: "总体进度",
|
|
471
|
+
description: "任务总体处理进度,通常为 0–100 的数值。",
|
|
472
|
+
},
|
|
473
|
+
fullStory: {
|
|
474
|
+
type: ["string", "null"],
|
|
475
|
+
title: "完整剧情",
|
|
476
|
+
description: "根据商品信息生成的完整视频剧情;任务未完成时为空。",
|
|
477
|
+
},
|
|
478
|
+
targetDuration: {
|
|
479
|
+
type: "number",
|
|
480
|
+
title: "目标时长",
|
|
481
|
+
description: "计划成片的目标时长,单位为秒。",
|
|
482
|
+
},
|
|
483
|
+
language: {
|
|
484
|
+
type: "string",
|
|
485
|
+
title: "内容输出语言",
|
|
486
|
+
description: "剧情、镜头描述和提示词使用的语言。",
|
|
487
|
+
},
|
|
488
|
+
orientation: {
|
|
489
|
+
type: "string",
|
|
490
|
+
title: "画面方向",
|
|
491
|
+
description: "分镜采用的横屏或竖屏方向。",
|
|
492
|
+
},
|
|
493
|
+
createdAt: {
|
|
494
|
+
type: ["string", "null"],
|
|
495
|
+
title: "创建时间",
|
|
496
|
+
description: "任务创建时间;不可用时为空。",
|
|
497
|
+
},
|
|
498
|
+
completedAt: {
|
|
499
|
+
type: ["string", "null"],
|
|
500
|
+
title: "完成时间",
|
|
501
|
+
description: "任务完成时间;未完成时为空。",
|
|
502
|
+
},
|
|
503
|
+
scenes: {
|
|
504
|
+
type: "array",
|
|
505
|
+
title: "分镜列表",
|
|
506
|
+
description: "按场景顺序返回的逐镜内容和插图生成状态。",
|
|
507
|
+
items: {
|
|
508
|
+
type: "object",
|
|
509
|
+
title: "分镜场景",
|
|
510
|
+
description: "一个分镜场景的描述、时长、生成提示词、插图和错误信息。",
|
|
511
|
+
properties: {
|
|
512
|
+
sceneIndex: {
|
|
513
|
+
type: "number",
|
|
514
|
+
title: "场景序号",
|
|
515
|
+
description: "该分镜场景在完整剧情中的顺序编号。",
|
|
516
|
+
},
|
|
517
|
+
description: {
|
|
518
|
+
type: "string",
|
|
519
|
+
title: "场景描述",
|
|
520
|
+
description: "该场景的画面内容、人物动作和叙事说明。",
|
|
521
|
+
},
|
|
522
|
+
duration: {
|
|
523
|
+
type: "number",
|
|
524
|
+
title: "场景时长",
|
|
525
|
+
description: "该场景建议持续的时间,单位为秒。",
|
|
526
|
+
},
|
|
527
|
+
prompt: {
|
|
528
|
+
type: "string",
|
|
529
|
+
title: "镜头提示词",
|
|
530
|
+
description: "用于后续生成该场景画面的提示词。",
|
|
531
|
+
},
|
|
532
|
+
sketchImageUrl: nullableString("分镜插图 URL", "该场景分镜插图的访问 URL;插图未完成或失败时为空。"),
|
|
533
|
+
imageGenerationStatus: {
|
|
534
|
+
type: "string",
|
|
535
|
+
title: "插图生成状态",
|
|
536
|
+
description: "该场景分镜插图当前的生成状态。",
|
|
537
|
+
},
|
|
538
|
+
...structuredErrorProperties,
|
|
539
|
+
},
|
|
540
|
+
required: [
|
|
541
|
+
"sceneIndex",
|
|
542
|
+
"description",
|
|
543
|
+
"duration",
|
|
544
|
+
"prompt",
|
|
545
|
+
"imageGenerationStatus",
|
|
546
|
+
],
|
|
547
|
+
additionalProperties: false,
|
|
548
|
+
},
|
|
549
|
+
},
|
|
550
|
+
errorMessage: {
|
|
551
|
+
type: ["string", "null"],
|
|
552
|
+
title: "任务错误信息",
|
|
553
|
+
description: "分镜任务失败时的可读原因;未失败时为空。",
|
|
554
|
+
},
|
|
555
|
+
errorCode: {
|
|
556
|
+
type: ["string", "null"],
|
|
557
|
+
title: "任务错误代码",
|
|
558
|
+
description: "分镜任务失败时的机器可读错误代码;未失败时为空。",
|
|
559
|
+
},
|
|
560
|
+
errorCategory: {
|
|
561
|
+
type: ["string", "null"],
|
|
562
|
+
title: "任务错误分类",
|
|
563
|
+
description: "分镜任务失败时的错误类别;未失败时为空。",
|
|
564
|
+
},
|
|
565
|
+
retryable: {
|
|
566
|
+
type: ["boolean", "null"],
|
|
567
|
+
title: "任务是否可重试",
|
|
568
|
+
description: "表示任务失败后是否建议重新创建;未失败时为空。",
|
|
569
|
+
},
|
|
570
|
+
code: {
|
|
571
|
+
type: "string",
|
|
572
|
+
title: "查询错误代码",
|
|
573
|
+
description: "查询请求失败时返回的机器可读错误代码,成功时可能不返回。",
|
|
574
|
+
},
|
|
575
|
+
message: {
|
|
576
|
+
type: "string",
|
|
577
|
+
title: "查询消息",
|
|
578
|
+
description: "查询结果或失败原因的可读说明。",
|
|
579
|
+
},
|
|
580
|
+
},
|
|
581
|
+
required: ["success"],
|
|
582
|
+
additionalProperties: false,
|
|
583
|
+
},
|
|
584
|
+
},
|
|
585
|
+
];
|