freebeat-mcp 0.1.3 → 0.1.4
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/CHANGELOG.md +7 -0
- package/README.md +16 -3
- package/dist/capabilities/media/tools/edit-image.js +28 -3
- package/dist/capabilities/media/tools/edit-image.js.map +1 -1
- package/dist/capabilities/media/tools/generate-image.js +23 -3
- package/dist/capabilities/media/tools/generate-image.js.map +1 -1
- package/dist/capabilities/media/tools/generate-video.d.ts +1 -1
- package/dist/capabilities/media/tools/generate-video.js +82 -16
- package/dist/capabilities/media/tools/generate-video.js.map +1 -1
- package/dist/capabilities/media/tools/shared.js +7 -0
- package/dist/capabilities/media/tools/shared.js.map +1 -1
- package/dist/core/model-catalog.d.ts +35 -1
- package/dist/core/model-catalog.js +634 -64
- package/dist/core/model-catalog.js.map +1 -1
- package/dist/services/freebeat-api.d.ts +31 -3
- package/dist/services/freebeat-api.js +19 -3
- package/dist/services/freebeat-api.js.map +1 -1
- package/dist/utils/file.d.ts +1 -0
- package/dist/utils/file.js +55 -0
- package/dist/utils/file.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,13 @@ The format is based on Keep a Changelog, and this project follows Semantic Versi
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.1.4] - 2026-07-10
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- Synced Open RPC generative media support with `freebeat-cli`: expanded model catalog, explicit image options, Qwen edit defaults, video generation modes, watermark, style, and multi-clip controls.
|
|
13
|
+
- Synced GPT-Image 1.5 pricing compatibility defaults: model `70` now sends `quality=medium` and `resolution=1024x1024` for image generation and editing when omitted.
|
|
14
|
+
- Synced latest CLI media catalog constraints: GPT-Image 1.5 resolution allowlist, no `kling-o3-pro` reference mode, and temporarily hidden `wan-v2.6-video`.
|
|
15
|
+
|
|
9
16
|
## [0.1.3] - 2026-06-18
|
|
10
17
|
|
|
11
18
|
### Added
|
package/README.md
CHANGED
|
@@ -206,6 +206,7 @@ Parameters:
|
|
|
206
206
|
- `model` required, using either a numeric `model_id` or API model key from `list_models`
|
|
207
207
|
|
|
208
208
|
Use this before video generation to confirm required `duration`, `resolution`, supported `aspect_ratio`, and whether `generate_audio` is supported.
|
|
209
|
+
For video models, help also lists supported generation modes (`text`, `image`, `transition`, `reference`) and duration values by resolution when the local catalog has that detail.
|
|
209
210
|
|
|
210
211
|
### `generate_image`
|
|
211
212
|
|
|
@@ -225,9 +226,11 @@ Parameters:
|
|
|
225
226
|
- `size` optional
|
|
226
227
|
- `resolution` optional
|
|
227
228
|
- `quality` optional
|
|
229
|
+
- `output_format` optional, for supported models such as `png`, `jpeg`, or `webp`
|
|
230
|
+
- `custom_resolution` optional, only accepted for models that support custom pixel dimensions
|
|
228
231
|
- `count` optional, default `1`
|
|
229
232
|
|
|
230
|
-
For GPT-Image 2 (`model_id` `108`), the MCP server sends `quality: "medium"` and `resolution: "1024x1024"` by default when omitted. If `resolution` is omitted but `size` is provided, that `size` is also sent as `resolution` for compatibility.
|
|
233
|
+
For GPT-Image 1.5 (`model_id` `70`) and GPT-Image 2 (`model_id` `108`), the MCP server sends `quality: "medium"` and `resolution: "1024x1024"` by default when omitted. GPT-Image 1.5 currently accepts `resolution` values `1024x1024`, `1536x1024`, and `1024x1536`; GPT-Image 2 exposes its broader list through `get_model_help`. If `resolution` is omitted but `size` is provided, that `size` is also sent as `resolution` for compatibility.
|
|
231
234
|
|
|
232
235
|
### `edit_image`
|
|
233
236
|
|
|
@@ -246,13 +249,18 @@ Parameters:
|
|
|
246
249
|
- `model` required, from `list_models`
|
|
247
250
|
- `image` required, a single image URL
|
|
248
251
|
- `prompt` required, trimmed length must be `1` to `2000`
|
|
252
|
+
- `size` optional
|
|
249
253
|
- `resolution` optional
|
|
250
254
|
- `quality` optional
|
|
255
|
+
- `output_format` optional
|
|
256
|
+
- `custom_resolution` optional
|
|
251
257
|
- `count` optional, default `1`
|
|
252
258
|
|
|
259
|
+
For Qwen Image Edit (`model_id` `76`), the MCP server sends `quality: "medium"`, `resolution: "1024x1024"`, and `customResolution: 1` by default for pricing compatibility.
|
|
260
|
+
|
|
253
261
|
### `generate_video`
|
|
254
262
|
|
|
255
|
-
Create an async Open RPC
|
|
263
|
+
Create an async Open RPC video generation batch.
|
|
256
264
|
|
|
257
265
|
Recommended flow:
|
|
258
266
|
|
|
@@ -265,12 +273,17 @@ Parameters:
|
|
|
265
273
|
|
|
266
274
|
- `model` required, from `list_models`
|
|
267
275
|
- `prompt` required, trimmed length must be `1` to `2000`
|
|
276
|
+
- `generation_type` optional, default `text`; supported values are `text`, `image`, `transition`, and `reference`
|
|
277
|
+
- `images` required for non-text modes: exactly one for `image`, exactly two for `transition`, at least one for `reference`; entries may be image URLs or local image paths
|
|
268
278
|
- `duration` required when the selected model declares supported durations
|
|
269
279
|
- `resolution` required when the selected model declares supported resolutions
|
|
270
280
|
- `aspect_ratio` optional, validated when the selected model declares supported ratios
|
|
281
|
+
- `style` optional, only accepted for models that declare styles
|
|
271
282
|
- `generate_audio` optional, only accepted for models that support generated audio
|
|
283
|
+
- `multi_clip` optional, only accepted for models that support multi-clip generation
|
|
284
|
+
- `watermark` optional, default `false`; Open RPC video requests send `watermark: 0` unless set
|
|
272
285
|
|
|
273
|
-
Video model constraints are validated locally before a request is sent.
|
|
286
|
+
Video model constraints are validated locally before a request is sent. Local images used for video generation must be at least `300x300` and are uploaded automatically. `wan-v2.6-video` is not exposed until its downstream reference image mapping is fixed; `kling-o3-pro` currently exposes `text`, `image`, and `transition`, but not `reference`.
|
|
274
287
|
|
|
275
288
|
### `get_task_status`
|
|
276
289
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { resolveImageQuality, resolveImageResolution, resolveModelForCommand, } from "../../../core/model-catalog.js";
|
|
2
|
+
import { resolveCustomResolutionValue, resolveImageQuality, resolveImageResolution, resolveModelForCommand, validateImageCatalogConstraints, } from "../../../core/model-catalog.js";
|
|
3
3
|
import { normalizeGenerationPrompt } from "../../../core/prompt.js";
|
|
4
4
|
import { formatToolError, jsonContent } from "../../../core/response.js";
|
|
5
5
|
import { batchCreateOutputSchema, normalizeBatchCreate } from "./shared.js";
|
|
@@ -16,6 +16,10 @@ export function registerEditImageTool(server, client) {
|
|
|
16
16
|
.min(1, "prompt must not be empty or whitespace only")
|
|
17
17
|
.max(2000, "prompt must be at most 2000 characters after trimming")
|
|
18
18
|
.describe("Image edit prompt."),
|
|
19
|
+
size: z
|
|
20
|
+
.string()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Image size or aspect ratio for supported edit models."),
|
|
19
23
|
resolution: z
|
|
20
24
|
.string()
|
|
21
25
|
.optional()
|
|
@@ -24,11 +28,29 @@ export function registerEditImageTool(server, client) {
|
|
|
24
28
|
.string()
|
|
25
29
|
.optional()
|
|
26
30
|
.describe("Image quality for supported models. GPT-Image 2 supports low, medium, high."),
|
|
31
|
+
output_format: z
|
|
32
|
+
.string()
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("Image output format for supported models, for example png or webp."),
|
|
35
|
+
custom_resolution: z
|
|
36
|
+
.boolean()
|
|
37
|
+
.optional()
|
|
38
|
+
.default(false)
|
|
39
|
+
.describe("Use custom image resolution when the selected model supports it."),
|
|
27
40
|
count: z.number().int().positive().optional().default(1).describe("Number of edits."),
|
|
28
41
|
},
|
|
29
|
-
}, async ({ model, image, prompt, resolution, quality, count }) => {
|
|
42
|
+
}, async ({ model, image, prompt, size, resolution, quality, output_format, custom_resolution, count, }) => {
|
|
30
43
|
try {
|
|
31
44
|
const resolvedModel = resolveModelForCommand("image_edit", model);
|
|
45
|
+
const resolvedResolution = resolveImageResolution(resolvedModel, resolution, size);
|
|
46
|
+
validateImageCatalogConstraints(resolvedModel, {
|
|
47
|
+
size,
|
|
48
|
+
resolution: resolvedResolution,
|
|
49
|
+
quality,
|
|
50
|
+
outputFormat: output_format,
|
|
51
|
+
count,
|
|
52
|
+
customResolution: custom_resolution,
|
|
53
|
+
});
|
|
32
54
|
const response = await client.createImageBatch({
|
|
33
55
|
items: [
|
|
34
56
|
{
|
|
@@ -37,8 +59,11 @@ export function registerEditImageTool(server, client) {
|
|
|
37
59
|
generationType: 8,
|
|
38
60
|
prompt: normalizeGenerationPrompt(prompt),
|
|
39
61
|
images: [image],
|
|
40
|
-
|
|
62
|
+
size,
|
|
63
|
+
resolution: resolvedResolution,
|
|
64
|
+
customResolution: resolveCustomResolutionValue(resolvedModel, Boolean(custom_resolution)),
|
|
41
65
|
quality: resolveImageQuality(resolvedModel, quality),
|
|
66
|
+
outputFormat: output_format,
|
|
42
67
|
count,
|
|
43
68
|
},
|
|
44
69
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-image.js","sourceRoot":"","sources":["../../../../src/capabilities/media/tools/edit-image.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"edit-image.js","sourceRoot":"","sources":["../../../../src/capabilities/media/tools/edit-image.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { resolveImageQuality, resolveImageResolution, resolveModelForCommand, } from "../../../core/model-catalog.js";
|
|
2
|
+
import { resolveCustomResolutionValue, resolveImageQuality, resolveImageResolution, resolveModelForCommand, validateImageCatalogConstraints, } from "../../../core/model-catalog.js";
|
|
3
3
|
import { normalizeGenerationPrompt } from "../../../core/prompt.js";
|
|
4
4
|
import { formatToolError, jsonContent } from "../../../core/response.js";
|
|
5
5
|
import { batchCreateOutputSchema, normalizeBatchCreate } from "./shared.js";
|
|
@@ -24,11 +24,29 @@ export function registerGenerateImageTool(server, client) {
|
|
|
24
24
|
.string()
|
|
25
25
|
.optional()
|
|
26
26
|
.describe("Image quality for supported models. GPT-Image 2 supports low, medium, high."),
|
|
27
|
+
output_format: z
|
|
28
|
+
.string()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Image output format for supported models, for example png or webp."),
|
|
31
|
+
custom_resolution: z
|
|
32
|
+
.boolean()
|
|
33
|
+
.optional()
|
|
34
|
+
.default(false)
|
|
35
|
+
.describe("Use custom image resolution when the selected model supports it."),
|
|
27
36
|
count: z.number().int().positive().optional().default(1).describe("Number of images."),
|
|
28
37
|
},
|
|
29
|
-
}, async ({ model, prompt, size, resolution, quality, count }) => {
|
|
38
|
+
}, async ({ model, prompt, size, resolution, quality, output_format, custom_resolution, count }) => {
|
|
30
39
|
try {
|
|
31
40
|
const resolvedModel = resolveModelForCommand("image_generate", model);
|
|
41
|
+
const resolvedResolution = resolveImageResolution(resolvedModel, resolution, size);
|
|
42
|
+
validateImageCatalogConstraints(resolvedModel, {
|
|
43
|
+
size,
|
|
44
|
+
resolution: resolvedResolution,
|
|
45
|
+
quality,
|
|
46
|
+
outputFormat: output_format,
|
|
47
|
+
count,
|
|
48
|
+
customResolution: custom_resolution,
|
|
49
|
+
});
|
|
32
50
|
const response = await client.createImageBatch({
|
|
33
51
|
items: [
|
|
34
52
|
{
|
|
@@ -37,8 +55,10 @@ export function registerGenerateImageTool(server, client) {
|
|
|
37
55
|
generationType: 6,
|
|
38
56
|
prompt: normalizeGenerationPrompt(prompt),
|
|
39
57
|
size,
|
|
40
|
-
resolution:
|
|
58
|
+
resolution: resolvedResolution,
|
|
59
|
+
customResolution: resolveCustomResolutionValue(resolvedModel, Boolean(custom_resolution)),
|
|
41
60
|
quality: resolveImageQuality(resolvedModel, quality),
|
|
61
|
+
outputFormat: output_format,
|
|
42
62
|
count,
|
|
43
63
|
},
|
|
44
64
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-image.js","sourceRoot":"","sources":["../../../../src/capabilities/media/tools/generate-image.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"generate-image.js","sourceRoot":"","sources":["../../../../src/capabilities/media/tools/generate-image.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import { FreebeatApiClient } from "../../../services/freebeat-api.js";
|
|
3
|
-
export declare function registerGenerateVideoTool(server: McpServer, client: Pick<FreebeatApiClient, "createVideoBatch">): void;
|
|
3
|
+
export declare function registerGenerateVideoTool(server: McpServer, client: Pick<FreebeatApiClient, "createVideoBatch" | "createUploadUrl" | "uploadToPreSignedUrl">): void;
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { resolveGenerateAudioValue, resolveModelForCommand, validateVideoGenerateOptions, } from "../../../core/model-catalog.js";
|
|
2
|
+
import { resolveGenerateAudioValue, resolveModelForCommand, resolveVideoAspectRatio, resolveVideoExtraParams, resolveVideoGenerationType, validateVideoGenerateOptions, } from "../../../core/model-catalog.js";
|
|
3
3
|
import { normalizeGenerationPrompt } from "../../../core/prompt.js";
|
|
4
4
|
import { formatToolError, jsonContent } from "../../../core/response.js";
|
|
5
|
+
import { UploadService } from "../../../services/upload-service.js";
|
|
6
|
+
import { detectImageMimeType, validateImageFile, validateImageMinimumDimensions, } from "../../../utils/file.js";
|
|
5
7
|
import { batchCreateOutputSchema, normalizeBatchCreate } from "./shared.js";
|
|
6
8
|
export function registerGenerateVideoTool(server, client) {
|
|
9
|
+
const uploadService = new UploadService(client);
|
|
7
10
|
server.registerTool("generate_video", {
|
|
8
|
-
description: "Create an Open RPC
|
|
11
|
+
description: "Create an Open RPC video batch. Supports text, image, transition, and reference generation when the selected model supports them. Recommended flow: list_models(type=video) -> get_model_help -> generate_video -> get_task_status using the returned batch_id.",
|
|
9
12
|
outputSchema: batchCreateOutputSchema,
|
|
10
13
|
inputSchema: {
|
|
11
14
|
model: z.string().min(1).describe("Video model id or API model key."),
|
|
@@ -15,38 +18,70 @@ export function registerGenerateVideoTool(server, client) {
|
|
|
15
18
|
.min(1, "prompt must not be empty or whitespace only")
|
|
16
19
|
.max(2000, "prompt must be at most 2000 characters after trimming")
|
|
17
20
|
.describe("Video generation prompt."),
|
|
21
|
+
generation_type: z
|
|
22
|
+
.string()
|
|
23
|
+
.optional()
|
|
24
|
+
.default("text")
|
|
25
|
+
.describe("Generation type: text, image, transition, or reference."),
|
|
26
|
+
images: z
|
|
27
|
+
.array(z.string())
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("Image URLs or local image paths for image, transition, or reference generation."),
|
|
18
30
|
duration: z.number().int().positive().optional().describe("Video duration in seconds."),
|
|
19
31
|
resolution: z.string().optional().describe("Video resolution, for example 720p."),
|
|
20
32
|
aspect_ratio: z.string().optional().describe("Video aspect ratio, for example 16:9."),
|
|
33
|
+
style: z.string().optional().describe("Video style when supported by the selected model."),
|
|
21
34
|
generate_audio: z
|
|
22
35
|
.boolean()
|
|
23
36
|
.optional()
|
|
24
37
|
.default(false)
|
|
25
38
|
.describe("Generate video audio when the selected model supports it."),
|
|
39
|
+
multi_clip: z
|
|
40
|
+
.boolean()
|
|
41
|
+
.optional()
|
|
42
|
+
.default(false)
|
|
43
|
+
.describe("Generate multiple clips when the selected model supports it."),
|
|
44
|
+
watermark: z
|
|
45
|
+
.boolean()
|
|
46
|
+
.optional()
|
|
47
|
+
.default(false)
|
|
48
|
+
.describe("Include a watermark when needed by the target account or environment."),
|
|
26
49
|
},
|
|
27
|
-
}, async ({ model, prompt, duration, resolution, aspect_ratio, generate_audio }) => {
|
|
50
|
+
}, async ({ model, prompt, generation_type, images, duration, resolution, aspect_ratio, style, generate_audio, multi_clip, watermark, }) => {
|
|
28
51
|
try {
|
|
29
52
|
const resolvedModel = resolveModelForCommand("video_generate", model);
|
|
53
|
+
const generationType = resolveVideoGenerationType(resolvedModel, generation_type ?? "text");
|
|
54
|
+
const imageInputs = images ?? [];
|
|
30
55
|
validateVideoGenerateOptions(resolvedModel, {
|
|
31
56
|
duration,
|
|
32
57
|
resolution,
|
|
33
58
|
aspectRatio: aspect_ratio,
|
|
59
|
+
style,
|
|
34
60
|
generateAudio: generate_audio,
|
|
35
|
-
|
|
61
|
+
multiClip: multi_clip,
|
|
62
|
+
}, generationType, imageInputs);
|
|
63
|
+
const resolvedImages = await resolveVideoImageInputs(uploadService, imageInputs, generationType);
|
|
64
|
+
const aspectRatio = resolveVideoAspectRatio(resolvedModel, aspect_ratio, generationType);
|
|
36
65
|
const audio = resolveGenerateAudioValue(resolvedModel, Boolean(generate_audio));
|
|
66
|
+
const videoBatchItem = {
|
|
67
|
+
modelId: String(resolvedModel.modelId),
|
|
68
|
+
generationType,
|
|
69
|
+
prompt: normalizeGenerationPrompt(prompt),
|
|
70
|
+
images: resolvedImages,
|
|
71
|
+
duration,
|
|
72
|
+
resolution,
|
|
73
|
+
aspectRatio,
|
|
74
|
+
style,
|
|
75
|
+
audio,
|
|
76
|
+
generateAudio: audio,
|
|
77
|
+
watermark: watermark ? 1 : 0,
|
|
78
|
+
};
|
|
79
|
+
const extraParams = resolveVideoExtraParams(resolvedModel, Boolean(multi_clip));
|
|
80
|
+
if (extraParams) {
|
|
81
|
+
videoBatchItem.extraParams = extraParams;
|
|
82
|
+
}
|
|
37
83
|
const response = await client.createVideoBatch({
|
|
38
|
-
items: [
|
|
39
|
-
{
|
|
40
|
-
modelId: String(resolvedModel.modelId),
|
|
41
|
-
generationType: 1,
|
|
42
|
-
prompt: normalizeGenerationPrompt(prompt),
|
|
43
|
-
duration,
|
|
44
|
-
resolution,
|
|
45
|
-
aspectRatio: aspect_ratio,
|
|
46
|
-
audio,
|
|
47
|
-
generateAudio: audio,
|
|
48
|
-
},
|
|
49
|
-
],
|
|
84
|
+
items: [videoBatchItem],
|
|
50
85
|
});
|
|
51
86
|
return jsonContent(normalizeBatchCreate(response, "Video generation"));
|
|
52
87
|
}
|
|
@@ -55,4 +90,35 @@ export function registerGenerateVideoTool(server, client) {
|
|
|
55
90
|
}
|
|
56
91
|
});
|
|
57
92
|
}
|
|
93
|
+
async function resolveVideoImageInputs(uploadService, inputs, generationType) {
|
|
94
|
+
if (generationType === 1) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
const resolved = [];
|
|
98
|
+
for (const [index, input] of inputs.entries()) {
|
|
99
|
+
if (isProbablyUrl(input)) {
|
|
100
|
+
resolved.push(input);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
validateImageFile(input);
|
|
104
|
+
validateImageMinimumDimensions(input, 300, 300);
|
|
105
|
+
const uploadedUrl = await uploadService.uploadLocalFile({
|
|
106
|
+
filePath: input,
|
|
107
|
+
keyPrefix: "agent/character",
|
|
108
|
+
contentType: detectImageMimeType(input),
|
|
109
|
+
keySuffix: String(index),
|
|
110
|
+
});
|
|
111
|
+
resolved.push(uploadedUrl);
|
|
112
|
+
}
|
|
113
|
+
return resolved;
|
|
114
|
+
}
|
|
115
|
+
function isProbablyUrl(value) {
|
|
116
|
+
try {
|
|
117
|
+
const url = new URL(value);
|
|
118
|
+
return url.protocol === "http:" || url.protocol === "https:";
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
58
124
|
//# sourceMappingURL=generate-video.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-video.js","sourceRoot":"","sources":["../../../../src/capabilities/media/tools/generate-video.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAEzE,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"generate-video.js","sourceRoot":"","sources":["../../../../src/capabilities/media/tools/generate-video.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,12 +57,19 @@ export function normalizeModel(model) {
|
|
|
57
57
|
description: model.description,
|
|
58
58
|
constraints: {
|
|
59
59
|
aspect_ratios: model.constraints.aspectRatios,
|
|
60
|
+
sizes: model.constraints.sizes,
|
|
60
61
|
resolutions: model.constraints.resolutions,
|
|
61
62
|
durations: model.constraints.durations,
|
|
62
63
|
styles: model.constraints.styles,
|
|
64
|
+
qualities: model.constraints.qualities,
|
|
65
|
+
output_formats: model.constraints.outputFormats,
|
|
66
|
+
counts: model.constraints.counts,
|
|
67
|
+
custom_resolution: model.constraints.customResolution,
|
|
63
68
|
generate_audio: model.constraints.generateAudio,
|
|
64
69
|
credits: model.constraints.credits,
|
|
70
|
+
generation_options: model.constraints.generationOptions,
|
|
65
71
|
credit_options: model.constraints.creditOptions,
|
|
72
|
+
video_parameters: model.constraints.videoParameters,
|
|
66
73
|
},
|
|
67
74
|
};
|
|
68
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/capabilities/media/tools/shared.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/capabilities/media/tools/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,17 +14,35 @@ export interface StaticModelCatalogItem {
|
|
|
14
14
|
description?: string;
|
|
15
15
|
constraints: {
|
|
16
16
|
aspectRatios: string[];
|
|
17
|
+
sizes: string[];
|
|
17
18
|
resolutions: string[];
|
|
18
19
|
durations: number[];
|
|
19
20
|
styles: string[];
|
|
21
|
+
qualities: string[];
|
|
22
|
+
outputFormats: string[];
|
|
23
|
+
counts: number[];
|
|
24
|
+
customResolution: boolean;
|
|
20
25
|
generateAudio: number[];
|
|
21
26
|
credits: number[];
|
|
27
|
+
generationOptions: Array<{
|
|
28
|
+
generationType: number;
|
|
29
|
+
aspectRatios: string[];
|
|
30
|
+
resolutions: string[];
|
|
31
|
+
durationOptions: Array<{
|
|
32
|
+
resolution?: string;
|
|
33
|
+
durations: number[];
|
|
34
|
+
}>;
|
|
35
|
+
}>;
|
|
22
36
|
creditOptions: Array<{
|
|
23
37
|
resolution?: string;
|
|
24
38
|
duration?: number;
|
|
25
39
|
credits?: number;
|
|
26
40
|
creditSec?: number;
|
|
27
41
|
}>;
|
|
42
|
+
videoParameters: {
|
|
43
|
+
multiClip: boolean;
|
|
44
|
+
watermark: boolean;
|
|
45
|
+
};
|
|
28
46
|
};
|
|
29
47
|
}
|
|
30
48
|
type CatalogResolver = {
|
|
@@ -36,13 +54,29 @@ export declare function listModels(kind: ModelKind): StaticModelCatalogItem[];
|
|
|
36
54
|
export declare function getModelHelp(modelInput: string): string;
|
|
37
55
|
export declare function resolveModelForCommand(command: ModelCommand, modelInput: string): StaticModelCatalogItem;
|
|
38
56
|
export declare function createModelResolver(catalog: StaticModelCatalogItem[]): CatalogResolver;
|
|
57
|
+
export declare function validateImageCatalogConstraints(model: StaticModelCatalogItem, options: {
|
|
58
|
+
size?: string;
|
|
59
|
+
resolution?: string;
|
|
60
|
+
quality?: string;
|
|
61
|
+
outputFormat?: string;
|
|
62
|
+
count?: number;
|
|
63
|
+
customResolution?: boolean;
|
|
64
|
+
}): void;
|
|
39
65
|
export declare function validateVideoGenerateOptions(model: StaticModelCatalogItem, options: {
|
|
40
66
|
duration?: number;
|
|
41
67
|
resolution?: string;
|
|
42
68
|
aspectRatio?: string;
|
|
69
|
+
style?: string;
|
|
43
70
|
generateAudio?: boolean;
|
|
44
|
-
|
|
71
|
+
multiClip?: boolean;
|
|
72
|
+
}, generationType?: number, imageInputs?: string[]): void;
|
|
73
|
+
export declare function resolveVideoAspectRatio(model: StaticModelCatalogItem, aspectRatio: string | undefined, generationType: number): string | undefined;
|
|
74
|
+
export declare function resolveVideoGenerationType(model: StaticModelCatalogItem, value: string): 0 | 1 | 2 | 3;
|
|
45
75
|
export declare function resolveGenerateAudioValue(model: StaticModelCatalogItem, shouldGenerateAudio: boolean): 0 | 1 | undefined;
|
|
76
|
+
export declare function resolveVideoExtraParams(model: StaticModelCatalogItem, shouldGenerateMultiClip: boolean): {
|
|
77
|
+
generateMultiClip?: boolean;
|
|
78
|
+
} | undefined;
|
|
46
79
|
export declare function resolveImageQuality(model: StaticModelCatalogItem, quality?: string): string | undefined;
|
|
47
80
|
export declare function resolveImageResolution(model: StaticModelCatalogItem, resolution?: string, size?: string): string | undefined;
|
|
81
|
+
export declare function resolveCustomResolutionValue(model: StaticModelCatalogItem, shouldUseCustomResolution: boolean): 1 | undefined;
|
|
48
82
|
export {};
|