@seawork/server 1.0.12 → 1.0.13-rc.2
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/dist/server/server/sac/generate.d.ts.map +1 -1
- package/dist/server/server/sac/generate.js.map +1 -1
- package/dist/server/server/sac/providers/alibaba.js +231 -249
- package/dist/server/server/sac/providers/alibaba.js.map +1 -1
- package/dist/server/server/sac/providers/audio.js +16 -19
- package/dist/server/server/sac/providers/audio.js.map +1 -1
- package/dist/server/server/sac/providers/kling.js +157 -184
- package/dist/server/server/sac/providers/kling.js.map +1 -1
- package/dist/server/server/sac/providers/nano.js +7 -9
- package/dist/server/server/sac/providers/nano.js.map +1 -1
- package/dist/server/server/sac/providers/pixverse.js +436 -425
- package/dist/server/server/sac/providers/pixverse.js.map +1 -1
- package/dist/server/server/sac/providers/seaart.d.ts.map +1 -1
- package/dist/server/server/sac/providers/seaart.js +6 -10
- package/dist/server/server/sac/providers/seaart.js.map +1 -1
- package/dist/server/server/sac/providers/store.d.ts +1 -1
- package/dist/server/server/sac/providers/tencent-3d.js +59 -57
- package/dist/server/server/sac/providers/tencent-3d.js.map +1 -1
- package/dist/server/server/sac/providers/tencent-image.js +39 -38
- package/dist/server/server/sac/providers/tencent-image.js.map +1 -1
- package/dist/server/server/sac/providers/tencent-video.js +58 -57
- package/dist/server/server/sac/providers/tencent-video.js.map +1 -1
- package/dist/server/server/sac/providers/tripo3d.js +135 -136
- package/dist/server/server/sac/providers/tripo3d.js.map +1 -1
- package/dist/server/server/sac/providers/vidu.js +470 -467
- package/dist/server/server/sac/providers/vidu.js.map +1 -1
- package/dist/server/server/sac/providers/volces-3d.js +30 -32
- package/dist/server/server/sac/providers/volces-3d.js.map +1 -1
- package/dist/server/server/sac/providers/volces-video.js +87 -83
- package/dist/server/server/sac/providers/volces-video.js.map +1 -1
- package/dist/server/server/sac/providers/volces.d.ts.map +1 -1
- package/dist/server/server/sac/providers/volces.js +44 -42
- package/dist/server/server/sac/providers/volces.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
import { SACError as CLIError, ExitCode } from "../errors.js";
|
|
2
2
|
import { registerProvider } from "./store.js";
|
|
3
|
-
const Q1_T2V_MODELS = [
|
|
4
|
-
const Q2_T2V_MODELS = [
|
|
5
|
-
const Q3_T2V_MODELS = [
|
|
6
|
-
const Q1_I2V_MODELS = [
|
|
7
|
-
const V20_I2V_MODELS = [
|
|
8
|
-
const Q3_I2V_MODELS = [
|
|
9
|
-
const START_END_MODELS = [
|
|
10
|
-
const REFERENCE_MODELS = [
|
|
11
|
-
const MIX_REFERENCE_MODELS = [
|
|
12
|
-
const TEMPLATE_MODELS = [
|
|
13
|
-
const AD_ONE_CLICK_MODELS = [
|
|
14
|
-
const ONE_CLICK_MV_MODELS = [
|
|
15
|
-
const TRENDING_REPLICATE_MODELS = [
|
|
3
|
+
const Q1_T2V_MODELS = ["vidu_q1"];
|
|
4
|
+
const Q2_T2V_MODELS = ["vidu_q2"];
|
|
5
|
+
const Q3_T2V_MODELS = ["vidu_q3_pro", "vidu_q3_turbo"];
|
|
6
|
+
const Q1_I2V_MODELS = ["vidu_q1_i2v"];
|
|
7
|
+
const V20_I2V_MODELS = ["vidu_20_i2v"];
|
|
8
|
+
const Q3_I2V_MODELS = ["vidu_q3_pro_i2v", "vidu_q3_turbo_i2v"];
|
|
9
|
+
const START_END_MODELS = ["vidu_q3_pro_start_end", "vidu_q3_turbo_start_end"];
|
|
10
|
+
const REFERENCE_MODELS = ["vidu_q3_reference"];
|
|
11
|
+
const MIX_REFERENCE_MODELS = ["vidu_q3_mix_reference"];
|
|
12
|
+
const TEMPLATE_MODELS = ["vidu_template", "vidu_template_v2"];
|
|
13
|
+
const AD_ONE_CLICK_MODELS = ["vidu_ad_one_click"];
|
|
14
|
+
const ONE_CLICK_MV_MODELS = ["vidu_one_click_mv"];
|
|
15
|
+
const TRENDING_REPLICATE_MODELS = ["vidu_trending_replicate"];
|
|
16
16
|
const TEMPLATE_NAMES = new Set([
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
"turn_into_zombie",
|
|
18
|
+
"head_to_balloon",
|
|
19
|
+
"wednesdays_vibe",
|
|
20
|
+
"covered_liquid_metal",
|
|
21
21
|
]);
|
|
22
|
-
const Q1_STYLES = new Set([
|
|
23
|
-
const Q1_ASPECT_RATIOS = new Set([
|
|
24
|
-
const Q2_Q3_ASPECT_RATIOS = new Set([
|
|
25
|
-
const Q3_REFERENCE_ASPECT_RATIOS = new Set([
|
|
26
|
-
const ONE_CLICK_ASPECT_RATIOS = new Set([
|
|
27
|
-
const AD_ASPECT_RATIOS = new Set([
|
|
28
|
-
const MOVEMENT_AMPLITUDES = new Set([
|
|
29
|
-
const Q2_RESOLUTIONS = new Set([
|
|
30
|
-
const Q3_T2V_RESOLUTIONS = new Set([
|
|
31
|
-
const Q3_I2V_RESOLUTIONS = new Set([
|
|
32
|
-
const Q3_START_END_RESOLUTIONS = new Set([
|
|
33
|
-
const Q3_REFERENCE_RESOLUTIONS = new Set([
|
|
34
|
-
const Q3_MIX_RESOLUTIONS = new Set([
|
|
35
|
-
const V20_I2V_RESOLUTIONS = new Set([
|
|
36
|
-
const ONE_CLICK_RESOLUTIONS = new Set([
|
|
37
|
-
const AD_LANGUAGES = new Set([
|
|
22
|
+
const Q1_STYLES = new Set(["general", "anime"]);
|
|
23
|
+
const Q1_ASPECT_RATIOS = new Set(["16:9", "9:16", "1:1"]);
|
|
24
|
+
const Q2_Q3_ASPECT_RATIOS = new Set(["16:9", "9:16", "3:4", "4:3", "1:1"]);
|
|
25
|
+
const Q3_REFERENCE_ASPECT_RATIOS = new Set(["1:1", "9:16", "16:9", "3:4", "4:3", "auto"]);
|
|
26
|
+
const ONE_CLICK_ASPECT_RATIOS = new Set(["1:1", "16:9", "9:16", "4:3", "3:4"]);
|
|
27
|
+
const AD_ASPECT_RATIOS = new Set(["1:1", "16:9", "9:16"]);
|
|
28
|
+
const MOVEMENT_AMPLITUDES = new Set(["auto", "small", "medium", "large"]);
|
|
29
|
+
const Q2_RESOLUTIONS = new Set(["540p", "720p", "1080p"]);
|
|
30
|
+
const Q3_T2V_RESOLUTIONS = new Set(["360p", "540p", "720p", "1080p"]);
|
|
31
|
+
const Q3_I2V_RESOLUTIONS = new Set(["360p", "540p", "720p", "1080p", "2K"]);
|
|
32
|
+
const Q3_START_END_RESOLUTIONS = new Set(["540p", "720p", "1080p"]);
|
|
33
|
+
const Q3_REFERENCE_RESOLUTIONS = new Set(["360p", "540p", "720p", "1080p"]);
|
|
34
|
+
const Q3_MIX_RESOLUTIONS = new Set(["720p", "1080p"]);
|
|
35
|
+
const V20_I2V_RESOLUTIONS = new Set(["360p", "720p", "1080p"]);
|
|
36
|
+
const ONE_CLICK_RESOLUTIONS = new Set(["540p", "720p", "1080p"]);
|
|
37
|
+
const AD_LANGUAGES = new Set(["zh", "en"]);
|
|
38
38
|
function buildEnvelope(model, params) {
|
|
39
39
|
return {
|
|
40
40
|
model,
|
|
@@ -45,15 +45,15 @@ function buildEnvelope(model, params) {
|
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
47
|
function maybeString(value) {
|
|
48
|
-
if (typeof value !==
|
|
48
|
+
if (typeof value !== "string" || value.length === 0)
|
|
49
49
|
return undefined;
|
|
50
50
|
return value;
|
|
51
51
|
}
|
|
52
52
|
function maybeStringArray(value) {
|
|
53
53
|
if (Array.isArray(value)) {
|
|
54
|
-
return value.filter((item) => typeof item ===
|
|
54
|
+
return value.filter((item) => typeof item === "string" && item.length > 0);
|
|
55
55
|
}
|
|
56
|
-
if (typeof value ===
|
|
56
|
+
if (typeof value === "string" && value.length > 0)
|
|
57
57
|
return [value];
|
|
58
58
|
return [];
|
|
59
59
|
}
|
|
@@ -65,7 +65,7 @@ function assertUnsupported(model, value, flagName, hint) {
|
|
|
65
65
|
function parseInteger(model, value, flagName, options = {}) {
|
|
66
66
|
if (value === undefined)
|
|
67
67
|
return undefined;
|
|
68
|
-
if (typeof value !==
|
|
68
|
+
if (typeof value !== "number" || Number.isNaN(value) || !Number.isInteger(value)) {
|
|
69
69
|
throw new CLIError(`Model "${model}" requires --${flagName} to be an integer.`, ExitCode.USAGE);
|
|
70
70
|
}
|
|
71
71
|
if (options.min !== undefined && value < options.min) {
|
|
@@ -79,7 +79,7 @@ function parseInteger(model, value, flagName, options = {}) {
|
|
|
79
79
|
function parseNumber(model, value, flagName, options = {}) {
|
|
80
80
|
if (value === undefined)
|
|
81
81
|
return undefined;
|
|
82
|
-
if (typeof value !==
|
|
82
|
+
if (typeof value !== "number" || Number.isNaN(value)) {
|
|
83
83
|
throw new CLIError(`Model "${model}" requires --${flagName} to be a number.`, ExitCode.USAGE);
|
|
84
84
|
}
|
|
85
85
|
if (options.min !== undefined && value < options.min) {
|
|
@@ -93,15 +93,15 @@ function parseNumber(model, value, flagName, options = {}) {
|
|
|
93
93
|
function parseEnum(model, value, flagName, allowed) {
|
|
94
94
|
if (value === undefined)
|
|
95
95
|
return undefined;
|
|
96
|
-
if (typeof value !==
|
|
97
|
-
throw new CLIError(`Model "${model}" requires --${flagName} to be one of: ${Array.from(allowed).join(
|
|
96
|
+
if (typeof value !== "string" || !allowed.has(value)) {
|
|
97
|
+
throw new CLIError(`Model "${model}" requires --${flagName} to be one of: ${Array.from(allowed).join(", ")}.`, ExitCode.USAGE);
|
|
98
98
|
}
|
|
99
99
|
return value;
|
|
100
100
|
}
|
|
101
101
|
function parseJsonObject(model, value, flagName) {
|
|
102
102
|
if (value === undefined)
|
|
103
103
|
return undefined;
|
|
104
|
-
if (typeof value !==
|
|
104
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
105
105
|
throw new CLIError(`Model "${model}" requires --${flagName} to be a non-empty JSON object string.`, ExitCode.USAGE);
|
|
106
106
|
}
|
|
107
107
|
let parsed;
|
|
@@ -111,7 +111,7 @@ function parseJsonObject(model, value, flagName) {
|
|
|
111
111
|
catch {
|
|
112
112
|
throw new CLIError(`Model "${model}" requires --${flagName} to be valid JSON.`, ExitCode.USAGE);
|
|
113
113
|
}
|
|
114
|
-
if (!parsed || Array.isArray(parsed) || typeof parsed !==
|
|
114
|
+
if (!parsed || Array.isArray(parsed) || typeof parsed !== "object") {
|
|
115
115
|
throw new CLIError(`Model "${model}" requires --${flagName} to be a JSON object.`, ExitCode.USAGE);
|
|
116
116
|
}
|
|
117
117
|
return parsed;
|
|
@@ -123,21 +123,21 @@ function collectImages(flags) {
|
|
|
123
123
|
}
|
|
124
124
|
function collectImageSet(model, flags, options = { min: 1, max: 7 }) {
|
|
125
125
|
if (!options.allowImageTail) {
|
|
126
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
126
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
127
127
|
}
|
|
128
128
|
const images = collectImages(flags);
|
|
129
129
|
if (images.length < options.min || images.length > options.max) {
|
|
130
130
|
const expected = options.min === options.max ? `${options.min}` : `${options.min}-${options.max}`;
|
|
131
|
-
throw new CLIError(`Model "${model}" requires ${expected} input image${options.max === 1 ?
|
|
131
|
+
throw new CLIError(`Model "${model}" requires ${expected} input image${options.max === 1 ? "" : "s"} via --image-url/--image-urls.`, ExitCode.USAGE);
|
|
132
132
|
}
|
|
133
133
|
return images;
|
|
134
134
|
}
|
|
135
135
|
function requireSingleImage(model, flags) {
|
|
136
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
136
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
137
137
|
return collectImageSet(model, flags, { min: 1, max: 1 });
|
|
138
138
|
}
|
|
139
139
|
function requireStartEndImages(model, flags) {
|
|
140
|
-
assertUnsupported(model, flags.imageUrls,
|
|
140
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
141
141
|
const first = maybeString(flags.imageUrl);
|
|
142
142
|
const last = maybeString(flags.imageTailUrl);
|
|
143
143
|
if (!first || !last) {
|
|
@@ -153,194 +153,197 @@ function requireVideoUrl(model, flags) {
|
|
|
153
153
|
return videoUrl;
|
|
154
154
|
}
|
|
155
155
|
function rejectReservedSounds(model, flags) {
|
|
156
|
-
assertUnsupported(model, flags.sounds,
|
|
156
|
+
assertUnsupported(model, flags.sounds, "sounds", `Model "${model}" does not currently support --sounds; the upstream field is reserved.`);
|
|
157
157
|
}
|
|
158
158
|
function applyViduCommonUnsupported(model, flags) {
|
|
159
|
-
assertUnsupported(model, flags.short,
|
|
160
|
-
assertUnsupported(model, flags.size,
|
|
161
|
-
assertUnsupported(model, flags.fps,
|
|
162
|
-
assertUnsupported(model, flags.frames,
|
|
163
|
-
assertUnsupported(model, flags.serviceTier,
|
|
164
|
-
assertUnsupported(model, flags.expiresAfter,
|
|
165
|
-
assertUnsupported(model, flags.externalTaskId,
|
|
166
|
-
assertUnsupported(model, flags.elementIds,
|
|
167
|
-
assertUnsupported(model, flags.effectScene,
|
|
168
|
-
assertUnsupported(model, flags.characterOrientation,
|
|
169
|
-
assertUnsupported(model, flags.keepOriginalSound,
|
|
170
|
-
assertUnsupported(model, flags.videoReferType,
|
|
171
|
-
assertUnsupported(model, flags.lipsyncMode,
|
|
172
|
-
assertUnsupported(model, flags.cameraFixed,
|
|
173
|
-
assertUnsupported(model, flags.returnLastFrame,
|
|
174
|
-
assertUnsupported(model, flags.draft,
|
|
175
|
-
assertUnsupported(model, flags.referenceUrls,
|
|
176
|
-
assertUnsupported(model, flags.videoId,
|
|
177
|
-
assertUnsupported(model, flags.draftTaskId,
|
|
178
|
-
assertUnsupported(model, flags.maskUrls,
|
|
179
|
-
assertUnsupported(model, flags.mode,
|
|
180
|
-
assertUnsupported(model, flags.shotType,
|
|
181
|
-
assertUnsupported(model, flags.multiShot,
|
|
182
|
-
assertUnsupported(model, flags.negativePrompt,
|
|
183
|
-
assertUnsupported(model, flags.cfgScale,
|
|
184
|
-
assertUnsupported(model, flags.videoQuality,
|
|
185
|
-
assertUnsupported(model, flags.peFastMode,
|
|
186
|
-
assertUnsupported(model, flags.audioId,
|
|
187
|
-
assertUnsupported(model, flags.voiceLanguage,
|
|
188
|
-
assertUnsupported(model, flags.voiceSpeed,
|
|
189
|
-
assertUnsupported(model, flags.sound,
|
|
190
|
-
assertUnsupported(model, flags.bitrate,
|
|
191
|
-
assertUnsupported(model, flags.extensionType,
|
|
192
|
-
assertUnsupported(model, flags.templateId,
|
|
193
|
-
assertUnsupported(model, flags.reqKey,
|
|
194
|
-
assertUnsupported(model, flags.subReqKey,
|
|
159
|
+
assertUnsupported(model, flags.short, "short");
|
|
160
|
+
assertUnsupported(model, flags.size, "size");
|
|
161
|
+
assertUnsupported(model, flags.fps, "fps");
|
|
162
|
+
assertUnsupported(model, flags.frames, "frames");
|
|
163
|
+
assertUnsupported(model, flags.serviceTier, "service-tier");
|
|
164
|
+
assertUnsupported(model, flags.expiresAfter, "expires-after");
|
|
165
|
+
assertUnsupported(model, flags.externalTaskId, "external-task-id");
|
|
166
|
+
assertUnsupported(model, flags.elementIds, "element-ids");
|
|
167
|
+
assertUnsupported(model, flags.effectScene, "effect-scene");
|
|
168
|
+
assertUnsupported(model, flags.characterOrientation, "character-orientation");
|
|
169
|
+
assertUnsupported(model, flags.keepOriginalSound, "keep-original-sound");
|
|
170
|
+
assertUnsupported(model, flags.videoReferType, "video-refer-type");
|
|
171
|
+
assertUnsupported(model, flags.lipsyncMode, "lipsync-mode");
|
|
172
|
+
assertUnsupported(model, flags.cameraFixed, "camera-fixed");
|
|
173
|
+
assertUnsupported(model, flags.returnLastFrame, "return-last-frame");
|
|
174
|
+
assertUnsupported(model, flags.draft, "draft");
|
|
175
|
+
assertUnsupported(model, flags.referenceUrls, "reference-urls");
|
|
176
|
+
assertUnsupported(model, flags.videoId, "video-id");
|
|
177
|
+
assertUnsupported(model, flags.draftTaskId, "draft-task-id");
|
|
178
|
+
assertUnsupported(model, flags.maskUrls, "mask-urls");
|
|
179
|
+
assertUnsupported(model, flags.mode, "mode");
|
|
180
|
+
assertUnsupported(model, flags.shotType, "shot-type");
|
|
181
|
+
assertUnsupported(model, flags.multiShot, "multi-shot");
|
|
182
|
+
assertUnsupported(model, flags.negativePrompt, "negative-prompt");
|
|
183
|
+
assertUnsupported(model, flags.cfgScale, "cfg-scale");
|
|
184
|
+
assertUnsupported(model, flags.videoQuality, "video-quality");
|
|
185
|
+
assertUnsupported(model, flags.peFastMode, "pe-fast-mode");
|
|
186
|
+
assertUnsupported(model, flags.audioId, "audio-id");
|
|
187
|
+
assertUnsupported(model, flags.voiceLanguage, "voice-language");
|
|
188
|
+
assertUnsupported(model, flags.voiceSpeed, "voice-speed");
|
|
189
|
+
assertUnsupported(model, flags.sound, "sound");
|
|
190
|
+
assertUnsupported(model, flags.bitrate, "bitrate");
|
|
191
|
+
assertUnsupported(model, flags.extensionType, "extension-type");
|
|
192
|
+
assertUnsupported(model, flags.templateId, "template-id");
|
|
193
|
+
assertUnsupported(model, flags.reqKey, "req-key");
|
|
194
|
+
assertUnsupported(model, flags.subReqKey, "sub-req-key");
|
|
195
195
|
}
|
|
196
196
|
function applyViduBasicParams(model, flags, options) {
|
|
197
197
|
const params = {};
|
|
198
198
|
if (options.duration) {
|
|
199
|
-
const duration = parseInteger(model, flags.duration,
|
|
199
|
+
const duration = parseInteger(model, flags.duration, "duration", {
|
|
200
200
|
min: options.duration.min,
|
|
201
201
|
max: options.duration.max,
|
|
202
202
|
});
|
|
203
203
|
if (duration !== undefined) {
|
|
204
204
|
if (options.duration.allowed && !options.duration.allowed.includes(duration)) {
|
|
205
|
-
throw new CLIError(`Model "${model}" requires --duration to be one of: ${options.duration.allowed.join(
|
|
205
|
+
throw new CLIError(`Model "${model}" requires --duration to be one of: ${options.duration.allowed.join(", ")}.`, ExitCode.USAGE);
|
|
206
206
|
}
|
|
207
|
-
params[
|
|
207
|
+
params["duration"] = duration;
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
210
|
else {
|
|
211
|
-
assertUnsupported(model, flags.duration,
|
|
211
|
+
assertUnsupported(model, flags.duration, "duration");
|
|
212
212
|
}
|
|
213
213
|
if (options.resolution) {
|
|
214
|
-
const resolution = parseEnum(model, flags.resolution,
|
|
214
|
+
const resolution = parseEnum(model, flags.resolution, "resolution", options.resolution);
|
|
215
215
|
if (resolution)
|
|
216
|
-
params[
|
|
216
|
+
params["resolution"] = resolution;
|
|
217
217
|
}
|
|
218
218
|
else {
|
|
219
|
-
assertUnsupported(model, flags.resolution,
|
|
219
|
+
assertUnsupported(model, flags.resolution, "resolution");
|
|
220
220
|
}
|
|
221
221
|
if (flags.seed !== undefined) {
|
|
222
|
-
const seed = parseInteger(model, flags.seed,
|
|
222
|
+
const seed = parseInteger(model, flags.seed, "seed");
|
|
223
223
|
if (seed !== undefined)
|
|
224
|
-
params[
|
|
224
|
+
params["seed"] = seed;
|
|
225
225
|
}
|
|
226
226
|
if (options.aspectRatio) {
|
|
227
|
-
const aspectRatio = parseEnum(model, flags.aspectRatio,
|
|
227
|
+
const aspectRatio = parseEnum(model, flags.aspectRatio, "aspect-ratio", options.aspectRatio);
|
|
228
228
|
if (aspectRatio)
|
|
229
|
-
params[
|
|
229
|
+
params["aspect_ratio"] = aspectRatio;
|
|
230
230
|
}
|
|
231
231
|
else {
|
|
232
|
-
assertUnsupported(model, flags.aspectRatio,
|
|
232
|
+
assertUnsupported(model, flags.aspectRatio, "aspect-ratio");
|
|
233
233
|
}
|
|
234
234
|
if (options.movementAmplitude) {
|
|
235
|
-
const movementAmplitude = parseEnum(model, flags.movementAmplitude,
|
|
235
|
+
const movementAmplitude = parseEnum(model, flags.movementAmplitude, "movement-amplitude", MOVEMENT_AMPLITUDES);
|
|
236
236
|
if (movementAmplitude)
|
|
237
|
-
params[
|
|
237
|
+
params["movement_amplitude"] = movementAmplitude;
|
|
238
238
|
}
|
|
239
239
|
else {
|
|
240
|
-
assertUnsupported(model, flags.movementAmplitude,
|
|
240
|
+
assertUnsupported(model, flags.movementAmplitude, "movement-amplitude");
|
|
241
241
|
}
|
|
242
242
|
if (options.bgm) {
|
|
243
243
|
if (flags.bgm !== undefined)
|
|
244
|
-
params[
|
|
244
|
+
params["bgm"] = flags.bgm;
|
|
245
245
|
}
|
|
246
246
|
else {
|
|
247
|
-
assertUnsupported(model, flags.bgm,
|
|
247
|
+
assertUnsupported(model, flags.bgm, "bgm");
|
|
248
248
|
}
|
|
249
249
|
if (options.audio) {
|
|
250
250
|
if (flags.audio !== undefined)
|
|
251
|
-
params[
|
|
251
|
+
params["audio"] = flags.audio;
|
|
252
252
|
}
|
|
253
253
|
else {
|
|
254
|
-
assertUnsupported(model, flags.audio,
|
|
254
|
+
assertUnsupported(model, flags.audio, "audio");
|
|
255
255
|
}
|
|
256
256
|
if (options.payload) {
|
|
257
257
|
const payload = maybeString(flags.payload);
|
|
258
258
|
if (payload)
|
|
259
|
-
params[
|
|
259
|
+
params["payload"] = payload;
|
|
260
260
|
}
|
|
261
261
|
else {
|
|
262
|
-
assertUnsupported(model, flags.payload,
|
|
262
|
+
assertUnsupported(model, flags.payload, "payload");
|
|
263
263
|
}
|
|
264
264
|
if (options.callbackUrl) {
|
|
265
265
|
const callbackUrl = maybeString(flags.callbackUrl);
|
|
266
266
|
if (callbackUrl)
|
|
267
|
-
params[
|
|
267
|
+
params["callback_url"] = callbackUrl;
|
|
268
268
|
}
|
|
269
269
|
else {
|
|
270
|
-
assertUnsupported(model, flags.callbackUrl,
|
|
270
|
+
assertUnsupported(model, flags.callbackUrl, "callback-url");
|
|
271
271
|
}
|
|
272
272
|
if (options.offPeak) {
|
|
273
273
|
if (flags.offPeak !== undefined)
|
|
274
|
-
params[
|
|
274
|
+
params["off_peak"] = flags.offPeak;
|
|
275
275
|
}
|
|
276
276
|
else {
|
|
277
|
-
assertUnsupported(model, flags.offPeak,
|
|
277
|
+
assertUnsupported(model, flags.offPeak, "off-peak");
|
|
278
278
|
}
|
|
279
279
|
if (options.watermark) {
|
|
280
280
|
if (flags.watermark !== undefined)
|
|
281
|
-
params[
|
|
281
|
+
params["watermark"] = flags.watermark;
|
|
282
282
|
}
|
|
283
283
|
else {
|
|
284
|
-
assertUnsupported(model, flags.watermark,
|
|
284
|
+
assertUnsupported(model, flags.watermark, "watermark");
|
|
285
285
|
}
|
|
286
286
|
if (options.watermarkPosition) {
|
|
287
|
-
const watermarkPosition = parseInteger(model, flags.watermarkPosition,
|
|
287
|
+
const watermarkPosition = parseInteger(model, flags.watermarkPosition, "watermark-position", {
|
|
288
|
+
min: 1,
|
|
289
|
+
max: 4,
|
|
290
|
+
});
|
|
288
291
|
if (watermarkPosition !== undefined)
|
|
289
|
-
params[
|
|
292
|
+
params["wm_position"] = watermarkPosition;
|
|
290
293
|
}
|
|
291
294
|
else {
|
|
292
|
-
assertUnsupported(model, flags.watermarkPosition,
|
|
295
|
+
assertUnsupported(model, flags.watermarkPosition, "watermark-position");
|
|
293
296
|
}
|
|
294
297
|
if (options.watermarkUrl) {
|
|
295
298
|
const watermarkUrl = maybeString(flags.watermarkUrl);
|
|
296
299
|
if (watermarkUrl)
|
|
297
|
-
params[
|
|
300
|
+
params["wm_url"] = watermarkUrl;
|
|
298
301
|
}
|
|
299
302
|
else {
|
|
300
|
-
assertUnsupported(model, flags.watermarkUrl,
|
|
303
|
+
assertUnsupported(model, flags.watermarkUrl, "watermark-url");
|
|
301
304
|
}
|
|
302
305
|
if (options.metaData) {
|
|
303
306
|
const metaData = maybeString(flags.metaData);
|
|
304
307
|
if (metaData)
|
|
305
|
-
params[
|
|
308
|
+
params["meta_data"] = metaData;
|
|
306
309
|
}
|
|
307
310
|
else {
|
|
308
|
-
assertUnsupported(model, flags.metaData,
|
|
311
|
+
assertUnsupported(model, flags.metaData, "meta-data");
|
|
309
312
|
}
|
|
310
313
|
if (options.style) {
|
|
311
|
-
const style = parseEnum(model, flags.style,
|
|
314
|
+
const style = parseEnum(model, flags.style, "style", options.style);
|
|
312
315
|
if (style)
|
|
313
|
-
params[
|
|
316
|
+
params["style"] = style;
|
|
314
317
|
}
|
|
315
318
|
else {
|
|
316
|
-
assertUnsupported(model, flags.style,
|
|
319
|
+
assertUnsupported(model, flags.style, "style");
|
|
317
320
|
}
|
|
318
321
|
return params;
|
|
319
322
|
}
|
|
320
323
|
registerProvider({
|
|
321
|
-
provider:
|
|
322
|
-
category:
|
|
324
|
+
provider: "vidu",
|
|
325
|
+
category: "video",
|
|
323
326
|
models: Q1_T2V_MODELS,
|
|
324
327
|
buildBody(model, prompt, flags) {
|
|
325
328
|
applyViduCommonUnsupported(model, flags);
|
|
326
|
-
assertUnsupported(model, flags.imageUrl,
|
|
327
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
328
|
-
assertUnsupported(model, flags.imageUrls,
|
|
329
|
-
assertUnsupported(model, flags.videoUrl,
|
|
330
|
-
assertUnsupported(model, flags.audioUrl,
|
|
331
|
-
assertUnsupported(model, flags.sounds,
|
|
332
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
333
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
334
|
-
assertUnsupported(model, flags.template,
|
|
335
|
-
assertUnsupported(model, flags.templateParams,
|
|
336
|
-
assertUnsupported(model, flags.language,
|
|
337
|
-
assertUnsupported(model, flags.creative,
|
|
338
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
339
|
-
assertUnsupported(model, flags.removeAudio,
|
|
340
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
341
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
342
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
343
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
329
|
+
assertUnsupported(model, flags.imageUrl, "image-url");
|
|
330
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
331
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
332
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
333
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
334
|
+
assertUnsupported(model, flags.sounds, "sounds");
|
|
335
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
336
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
337
|
+
assertUnsupported(model, flags.template, "template");
|
|
338
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
339
|
+
assertUnsupported(model, flags.language, "language");
|
|
340
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
341
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
342
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
343
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
344
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
345
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
346
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
344
347
|
const params = applyViduBasicParams(model, flags, {
|
|
345
348
|
aspectRatio: Q1_ASPECT_RATIOS,
|
|
346
349
|
movementAmplitude: true,
|
|
@@ -349,34 +352,34 @@ registerProvider({
|
|
|
349
352
|
callbackUrl: true,
|
|
350
353
|
style: Q1_STYLES,
|
|
351
354
|
});
|
|
352
|
-
params[
|
|
355
|
+
params["prompt"] = prompt;
|
|
353
356
|
return buildEnvelope(model, params);
|
|
354
357
|
},
|
|
355
358
|
});
|
|
356
359
|
registerProvider({
|
|
357
|
-
provider:
|
|
358
|
-
category:
|
|
360
|
+
provider: "vidu",
|
|
361
|
+
category: "video",
|
|
359
362
|
models: Q2_T2V_MODELS,
|
|
360
363
|
buildBody(model, prompt, flags) {
|
|
361
364
|
applyViduCommonUnsupported(model, flags);
|
|
362
|
-
assertUnsupported(model, flags.imageUrl,
|
|
363
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
364
|
-
assertUnsupported(model, flags.imageUrls,
|
|
365
|
-
assertUnsupported(model, flags.videoUrl,
|
|
366
|
-
assertUnsupported(model, flags.audioUrl,
|
|
367
|
-
assertUnsupported(model, flags.sounds,
|
|
368
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
369
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
370
|
-
assertUnsupported(model, flags.template,
|
|
371
|
-
assertUnsupported(model, flags.templateParams,
|
|
372
|
-
assertUnsupported(model, flags.language,
|
|
373
|
-
assertUnsupported(model, flags.creative,
|
|
374
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
375
|
-
assertUnsupported(model, flags.removeAudio,
|
|
376
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
377
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
378
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
379
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
365
|
+
assertUnsupported(model, flags.imageUrl, "image-url");
|
|
366
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
367
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
368
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
369
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
370
|
+
assertUnsupported(model, flags.sounds, "sounds");
|
|
371
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
372
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
373
|
+
assertUnsupported(model, flags.template, "template");
|
|
374
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
375
|
+
assertUnsupported(model, flags.language, "language");
|
|
376
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
377
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
378
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
379
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
380
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
381
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
382
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
380
383
|
const params = applyViduBasicParams(model, flags, {
|
|
381
384
|
duration: { min: 1, max: 10 },
|
|
382
385
|
resolution: Q2_RESOLUTIONS,
|
|
@@ -386,34 +389,34 @@ registerProvider({
|
|
|
386
389
|
callbackUrl: true,
|
|
387
390
|
offPeak: true,
|
|
388
391
|
});
|
|
389
|
-
params[
|
|
392
|
+
params["prompt"] = prompt;
|
|
390
393
|
return buildEnvelope(model, params);
|
|
391
394
|
},
|
|
392
395
|
});
|
|
393
396
|
registerProvider({
|
|
394
|
-
provider:
|
|
395
|
-
category:
|
|
397
|
+
provider: "vidu",
|
|
398
|
+
category: "video",
|
|
396
399
|
models: Q3_T2V_MODELS,
|
|
397
400
|
buildBody(model, prompt, flags) {
|
|
398
401
|
applyViduCommonUnsupported(model, flags);
|
|
399
|
-
assertUnsupported(model, flags.imageUrl,
|
|
400
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
401
|
-
assertUnsupported(model, flags.imageUrls,
|
|
402
|
-
assertUnsupported(model, flags.videoUrl,
|
|
403
|
-
assertUnsupported(model, flags.audioUrl,
|
|
402
|
+
assertUnsupported(model, flags.imageUrl, "image-url");
|
|
403
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
404
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
405
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
406
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
404
407
|
rejectReservedSounds(model, flags);
|
|
405
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
406
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
407
|
-
assertUnsupported(model, flags.template,
|
|
408
|
-
assertUnsupported(model, flags.templateParams,
|
|
409
|
-
assertUnsupported(model, flags.language,
|
|
410
|
-
assertUnsupported(model, flags.creative,
|
|
411
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
412
|
-
assertUnsupported(model, flags.removeAudio,
|
|
413
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
414
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
415
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
416
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
408
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
409
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
410
|
+
assertUnsupported(model, flags.template, "template");
|
|
411
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
412
|
+
assertUnsupported(model, flags.language, "language");
|
|
413
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
414
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
415
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
416
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
417
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
418
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
419
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
417
420
|
const params = applyViduBasicParams(model, flags, {
|
|
418
421
|
duration: { min: 1, max: 16 },
|
|
419
422
|
resolution: Q3_T2V_RESOLUTIONS,
|
|
@@ -429,28 +432,28 @@ registerProvider({
|
|
|
429
432
|
watermarkUrl: true,
|
|
430
433
|
metaData: true,
|
|
431
434
|
});
|
|
432
|
-
params[
|
|
435
|
+
params["prompt"] = prompt;
|
|
433
436
|
return buildEnvelope(model, params);
|
|
434
437
|
},
|
|
435
438
|
});
|
|
436
439
|
function buildQ3I2VBody(model, prompt, flags) {
|
|
437
440
|
applyViduCommonUnsupported(model, flags);
|
|
438
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
439
|
-
assertUnsupported(model, flags.imageUrls,
|
|
440
|
-
assertUnsupported(model, flags.videoUrl,
|
|
441
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
442
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
443
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
441
444
|
rejectReservedSounds(model, flags);
|
|
442
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
443
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
444
|
-
assertUnsupported(model, flags.template,
|
|
445
|
-
assertUnsupported(model, flags.templateParams,
|
|
446
|
-
assertUnsupported(model, flags.language,
|
|
447
|
-
assertUnsupported(model, flags.creative,
|
|
448
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
449
|
-
assertUnsupported(model, flags.removeAudio,
|
|
450
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
451
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
452
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
453
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
445
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
446
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
447
|
+
assertUnsupported(model, flags.template, "template");
|
|
448
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
449
|
+
assertUnsupported(model, flags.language, "language");
|
|
450
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
451
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
452
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
453
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
454
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
455
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
456
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
454
457
|
const params = applyViduBasicParams(model, flags, {
|
|
455
458
|
duration: { min: 1, max: 16 },
|
|
456
459
|
resolution: Q3_I2V_RESOLUTIONS,
|
|
@@ -465,20 +468,20 @@ function buildQ3I2VBody(model, prompt, flags) {
|
|
|
465
468
|
watermarkUrl: true,
|
|
466
469
|
metaData: true,
|
|
467
470
|
});
|
|
468
|
-
params[
|
|
471
|
+
params["images"] = requireSingleImage(model, flags);
|
|
469
472
|
if (prompt.length > 0)
|
|
470
|
-
params[
|
|
473
|
+
params["prompt"] = prompt;
|
|
471
474
|
const audioUrl = maybeString(flags.audioUrl);
|
|
472
475
|
if (audioUrl)
|
|
473
|
-
params[
|
|
476
|
+
params["audio_url"] = audioUrl;
|
|
474
477
|
const voiceId = maybeString(flags.voiceId);
|
|
475
478
|
if (voiceId)
|
|
476
|
-
params[
|
|
479
|
+
params["voice_id"] = voiceId;
|
|
477
480
|
return buildEnvelope(model, params);
|
|
478
481
|
}
|
|
479
482
|
registerProvider({
|
|
480
|
-
provider:
|
|
481
|
-
category:
|
|
483
|
+
provider: "vidu",
|
|
484
|
+
category: "video",
|
|
482
485
|
models: Q3_I2V_MODELS,
|
|
483
486
|
requiresPrompt() {
|
|
484
487
|
return false;
|
|
@@ -486,35 +489,35 @@ registerProvider({
|
|
|
486
489
|
buildBody: buildQ3I2VBody,
|
|
487
490
|
});
|
|
488
491
|
registerProvider({
|
|
489
|
-
provider:
|
|
490
|
-
category:
|
|
492
|
+
provider: "vidu",
|
|
493
|
+
category: "video",
|
|
491
494
|
models: Q1_I2V_MODELS,
|
|
492
495
|
requiresPrompt() {
|
|
493
496
|
return false;
|
|
494
497
|
},
|
|
495
498
|
buildBody(model, prompt, flags) {
|
|
496
499
|
applyViduCommonUnsupported(model, flags);
|
|
497
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
498
|
-
assertUnsupported(model, flags.imageUrls,
|
|
499
|
-
assertUnsupported(model, flags.videoUrl,
|
|
500
|
-
assertUnsupported(model, flags.audioUrl,
|
|
501
|
-
assertUnsupported(model, flags.sounds,
|
|
502
|
-
assertUnsupported(model, flags.offPeak,
|
|
503
|
-
assertUnsupported(model, flags.watermark,
|
|
504
|
-
assertUnsupported(model, flags.watermarkPosition,
|
|
505
|
-
assertUnsupported(model, flags.watermarkUrl,
|
|
506
|
-
assertUnsupported(model, flags.metaData,
|
|
507
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
508
|
-
assertUnsupported(model, flags.template,
|
|
509
|
-
assertUnsupported(model, flags.templateParams,
|
|
510
|
-
assertUnsupported(model, flags.language,
|
|
511
|
-
assertUnsupported(model, flags.creative,
|
|
512
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
513
|
-
assertUnsupported(model, flags.removeAudio,
|
|
514
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
515
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
516
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
517
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
500
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
501
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
502
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
503
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
504
|
+
assertUnsupported(model, flags.sounds, "sounds");
|
|
505
|
+
assertUnsupported(model, flags.offPeak, "off-peak");
|
|
506
|
+
assertUnsupported(model, flags.watermark, "watermark");
|
|
507
|
+
assertUnsupported(model, flags.watermarkPosition, "watermark-position");
|
|
508
|
+
assertUnsupported(model, flags.watermarkUrl, "watermark-url");
|
|
509
|
+
assertUnsupported(model, flags.metaData, "meta-data");
|
|
510
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
511
|
+
assertUnsupported(model, flags.template, "template");
|
|
512
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
513
|
+
assertUnsupported(model, flags.language, "language");
|
|
514
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
515
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
516
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
517
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
518
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
519
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
520
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
518
521
|
if (flags.recommendPrompt && prompt.length > 0) {
|
|
519
522
|
throw new CLIError(`Model "${model}" does not allow --prompt together with --recommend-prompt.`, ExitCode.USAGE);
|
|
520
523
|
}
|
|
@@ -525,44 +528,44 @@ registerProvider({
|
|
|
525
528
|
payload: true,
|
|
526
529
|
callbackUrl: true,
|
|
527
530
|
});
|
|
528
|
-
params[
|
|
531
|
+
params["images"] = requireSingleImage(model, flags);
|
|
529
532
|
if (prompt.length > 0)
|
|
530
|
-
params[
|
|
533
|
+
params["prompt"] = prompt;
|
|
531
534
|
if (flags.recommendPrompt)
|
|
532
|
-
params[
|
|
535
|
+
params["is_rec"] = true;
|
|
533
536
|
return buildEnvelope(model, params);
|
|
534
537
|
},
|
|
535
538
|
});
|
|
536
539
|
registerProvider({
|
|
537
|
-
provider:
|
|
538
|
-
category:
|
|
540
|
+
provider: "vidu",
|
|
541
|
+
category: "video",
|
|
539
542
|
models: V20_I2V_MODELS,
|
|
540
543
|
requiresPrompt() {
|
|
541
544
|
return false;
|
|
542
545
|
},
|
|
543
546
|
buildBody(model, prompt, flags) {
|
|
544
547
|
applyViduCommonUnsupported(model, flags);
|
|
545
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
546
|
-
assertUnsupported(model, flags.imageUrls,
|
|
547
|
-
assertUnsupported(model, flags.videoUrl,
|
|
548
|
-
assertUnsupported(model, flags.audioUrl,
|
|
549
|
-
assertUnsupported(model, flags.sounds,
|
|
550
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
551
|
-
assertUnsupported(model, flags.watermark,
|
|
552
|
-
assertUnsupported(model, flags.watermarkPosition,
|
|
553
|
-
assertUnsupported(model, flags.watermarkUrl,
|
|
554
|
-
assertUnsupported(model, flags.metaData,
|
|
555
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
556
|
-
assertUnsupported(model, flags.template,
|
|
557
|
-
assertUnsupported(model, flags.templateParams,
|
|
558
|
-
assertUnsupported(model, flags.language,
|
|
559
|
-
assertUnsupported(model, flags.creative,
|
|
560
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
561
|
-
assertUnsupported(model, flags.removeAudio,
|
|
562
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
563
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
564
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
565
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
548
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
549
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
550
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
551
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
552
|
+
assertUnsupported(model, flags.sounds, "sounds");
|
|
553
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
554
|
+
assertUnsupported(model, flags.watermark, "watermark");
|
|
555
|
+
assertUnsupported(model, flags.watermarkPosition, "watermark-position");
|
|
556
|
+
assertUnsupported(model, flags.watermarkUrl, "watermark-url");
|
|
557
|
+
assertUnsupported(model, flags.metaData, "meta-data");
|
|
558
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
559
|
+
assertUnsupported(model, flags.template, "template");
|
|
560
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
561
|
+
assertUnsupported(model, flags.language, "language");
|
|
562
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
563
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
564
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
565
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
566
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
567
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
568
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
566
569
|
const params = applyViduBasicParams(model, flags, {
|
|
567
570
|
duration: { allowed: [4, 8] },
|
|
568
571
|
resolution: V20_I2V_RESOLUTIONS,
|
|
@@ -571,43 +574,43 @@ registerProvider({
|
|
|
571
574
|
callbackUrl: true,
|
|
572
575
|
offPeak: true,
|
|
573
576
|
});
|
|
574
|
-
params[
|
|
577
|
+
params["images"] = requireSingleImage(model, flags);
|
|
575
578
|
if (prompt.length > 0)
|
|
576
|
-
params[
|
|
579
|
+
params["prompt"] = prompt;
|
|
577
580
|
return buildEnvelope(model, params);
|
|
578
581
|
},
|
|
579
582
|
});
|
|
580
583
|
registerProvider({
|
|
581
|
-
provider:
|
|
582
|
-
category:
|
|
584
|
+
provider: "vidu",
|
|
585
|
+
category: "video",
|
|
583
586
|
models: START_END_MODELS,
|
|
584
587
|
requiresPrompt() {
|
|
585
588
|
return false;
|
|
586
589
|
},
|
|
587
590
|
buildBody(model, prompt, flags) {
|
|
588
591
|
applyViduCommonUnsupported(model, flags);
|
|
589
|
-
assertUnsupported(model, flags.sounds,
|
|
590
|
-
assertUnsupported(model, flags.payload,
|
|
591
|
-
assertUnsupported(model, flags.callbackUrl,
|
|
592
|
-
assertUnsupported(model, flags.watermark,
|
|
593
|
-
assertUnsupported(model, flags.watermarkPosition,
|
|
594
|
-
assertUnsupported(model, flags.watermarkUrl,
|
|
595
|
-
assertUnsupported(model, flags.metaData,
|
|
596
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
597
|
-
assertUnsupported(model, flags.template,
|
|
598
|
-
assertUnsupported(model, flags.templateParams,
|
|
599
|
-
assertUnsupported(model, flags.language,
|
|
600
|
-
assertUnsupported(model, flags.creative,
|
|
601
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
602
|
-
assertUnsupported(model, flags.removeAudio,
|
|
603
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
604
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
605
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
606
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
607
|
-
assertUnsupported(model, flags.videoUrl,
|
|
608
|
-
assertUnsupported(model, flags.audioUrl,
|
|
609
|
-
if (model ===
|
|
610
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
592
|
+
assertUnsupported(model, flags.sounds, "sounds");
|
|
593
|
+
assertUnsupported(model, flags.payload, "payload");
|
|
594
|
+
assertUnsupported(model, flags.callbackUrl, "callback-url");
|
|
595
|
+
assertUnsupported(model, flags.watermark, "watermark");
|
|
596
|
+
assertUnsupported(model, flags.watermarkPosition, "watermark-position");
|
|
597
|
+
assertUnsupported(model, flags.watermarkUrl, "watermark-url");
|
|
598
|
+
assertUnsupported(model, flags.metaData, "meta-data");
|
|
599
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
600
|
+
assertUnsupported(model, flags.template, "template");
|
|
601
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
602
|
+
assertUnsupported(model, flags.language, "language");
|
|
603
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
604
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
605
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
606
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
607
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
608
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
609
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
610
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
611
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
612
|
+
if (model === "vidu_q3_pro_start_end") {
|
|
613
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
611
614
|
}
|
|
612
615
|
else if (flags.recommendPrompt && prompt.length > 0) {
|
|
613
616
|
throw new CLIError(`Model "${model}" does not allow --prompt together with --recommend-prompt.`, ExitCode.USAGE);
|
|
@@ -620,36 +623,36 @@ registerProvider({
|
|
|
620
623
|
audio: true,
|
|
621
624
|
offPeak: true,
|
|
622
625
|
});
|
|
623
|
-
params[
|
|
626
|
+
params["images"] = requireStartEndImages(model, flags);
|
|
624
627
|
if (prompt.length > 0)
|
|
625
|
-
params[
|
|
628
|
+
params["prompt"] = prompt;
|
|
626
629
|
if (flags.recommendPrompt)
|
|
627
|
-
params[
|
|
630
|
+
params["is_rec"] = true;
|
|
628
631
|
return buildEnvelope(model, params);
|
|
629
632
|
},
|
|
630
633
|
});
|
|
631
634
|
registerProvider({
|
|
632
|
-
provider:
|
|
633
|
-
category:
|
|
635
|
+
provider: "vidu",
|
|
636
|
+
category: "video",
|
|
634
637
|
models: REFERENCE_MODELS,
|
|
635
638
|
buildBody(model, prompt, flags) {
|
|
636
639
|
applyViduCommonUnsupported(model, flags);
|
|
637
640
|
rejectReservedSounds(model, flags);
|
|
638
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
639
|
-
assertUnsupported(model, flags.videoUrl,
|
|
640
|
-
assertUnsupported(model, flags.audioUrl,
|
|
641
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
642
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
643
|
-
assertUnsupported(model, flags.template,
|
|
644
|
-
assertUnsupported(model, flags.templateParams,
|
|
645
|
-
assertUnsupported(model, flags.language,
|
|
646
|
-
assertUnsupported(model, flags.creative,
|
|
647
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
648
|
-
assertUnsupported(model, flags.removeAudio,
|
|
649
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
650
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
651
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
652
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
641
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
642
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
643
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
644
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
645
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
646
|
+
assertUnsupported(model, flags.template, "template");
|
|
647
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
648
|
+
assertUnsupported(model, flags.language, "language");
|
|
649
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
650
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
651
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
652
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
653
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
654
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
655
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
653
656
|
const params = applyViduBasicParams(model, flags, {
|
|
654
657
|
duration: { min: 3, max: 16 },
|
|
655
658
|
resolution: Q3_REFERENCE_RESOLUTIONS,
|
|
@@ -664,31 +667,31 @@ registerProvider({
|
|
|
664
667
|
watermarkUrl: true,
|
|
665
668
|
metaData: true,
|
|
666
669
|
});
|
|
667
|
-
assertUnsupported(model, flags.movementAmplitude,
|
|
670
|
+
assertUnsupported(model, flags.movementAmplitude, "movement-amplitude");
|
|
668
671
|
const images = collectImages(flags);
|
|
669
672
|
if (images.length > 0)
|
|
670
|
-
params[
|
|
671
|
-
params[
|
|
673
|
+
params["images"] = images;
|
|
674
|
+
params["prompt"] = prompt;
|
|
672
675
|
return buildEnvelope(model, params);
|
|
673
676
|
},
|
|
674
677
|
});
|
|
675
678
|
registerProvider({
|
|
676
|
-
provider:
|
|
677
|
-
category:
|
|
679
|
+
provider: "vidu",
|
|
680
|
+
category: "video",
|
|
678
681
|
models: MIX_REFERENCE_MODELS,
|
|
679
682
|
buildBody(model, prompt, flags) {
|
|
680
683
|
applyViduCommonUnsupported(model, flags);
|
|
681
684
|
rejectReservedSounds(model, flags);
|
|
682
|
-
assertUnsupported(model, flags.template,
|
|
683
|
-
assertUnsupported(model, flags.templateParams,
|
|
684
|
-
assertUnsupported(model, flags.language,
|
|
685
|
-
assertUnsupported(model, flags.creative,
|
|
686
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
687
|
-
assertUnsupported(model, flags.removeAudio,
|
|
688
|
-
assertUnsupported(model, flags.videoUrl,
|
|
689
|
-
assertUnsupported(model, flags.audioUrl,
|
|
690
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
691
|
-
assertUnsupported(model, flags.movementAmplitude,
|
|
685
|
+
assertUnsupported(model, flags.template, "template");
|
|
686
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
687
|
+
assertUnsupported(model, flags.language, "language");
|
|
688
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
689
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
690
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
691
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
692
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
693
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
694
|
+
assertUnsupported(model, flags.movementAmplitude, "movement-amplitude");
|
|
692
695
|
const params = applyViduBasicParams(model, flags, {
|
|
693
696
|
duration: { min: 3, max: 16 },
|
|
694
697
|
resolution: Q3_MIX_RESOLUTIONS,
|
|
@@ -707,76 +710,76 @@ registerProvider({
|
|
|
707
710
|
throw new CLIError(`Model "${model}" allows at most 7 reference images via --image-url/--image-urls.`, ExitCode.USAGE);
|
|
708
711
|
}
|
|
709
712
|
if (images.length > 0)
|
|
710
|
-
params[
|
|
713
|
+
params["images"] = images;
|
|
711
714
|
const firstFrameImage = maybeString(flags.imageUrl);
|
|
712
715
|
if (firstFrameImage)
|
|
713
|
-
params[
|
|
716
|
+
params["first_frame_image"] = firstFrameImage;
|
|
714
717
|
const lastFrameImage = maybeString(flags.imageTailUrl);
|
|
715
718
|
if (lastFrameImage)
|
|
716
|
-
params[
|
|
719
|
+
params["last_frame_image"] = lastFrameImage;
|
|
717
720
|
const characterReferenceUrl = maybeString(flags.characterReferenceUrl);
|
|
718
721
|
if (characterReferenceUrl)
|
|
719
|
-
params[
|
|
722
|
+
params["character_reference_image"] = characterReferenceUrl;
|
|
720
723
|
const styleReferenceUrl = maybeString(flags.styleReferenceUrl);
|
|
721
724
|
if (styleReferenceUrl)
|
|
722
|
-
params[
|
|
723
|
-
const characterReferenceWeight = parseNumber(model, flags.characterReferenceWeight,
|
|
725
|
+
params["style_reference_image"] = styleReferenceUrl;
|
|
726
|
+
const characterReferenceWeight = parseNumber(model, flags.characterReferenceWeight, "character-reference-weight", {
|
|
724
727
|
min: 0,
|
|
725
728
|
max: 1,
|
|
726
729
|
});
|
|
727
730
|
if (characterReferenceWeight !== undefined) {
|
|
728
|
-
params[
|
|
731
|
+
params["character_reference_weight"] = characterReferenceWeight;
|
|
729
732
|
}
|
|
730
|
-
const styleReferenceWeight = parseNumber(model, flags.styleReferenceWeight,
|
|
733
|
+
const styleReferenceWeight = parseNumber(model, flags.styleReferenceWeight, "style-reference-weight", {
|
|
731
734
|
min: 0,
|
|
732
735
|
max: 1,
|
|
733
736
|
});
|
|
734
737
|
if (styleReferenceWeight !== undefined) {
|
|
735
|
-
params[
|
|
738
|
+
params["style_reference_weight"] = styleReferenceWeight;
|
|
736
739
|
}
|
|
737
740
|
if (flags.enhancePrompt !== undefined)
|
|
738
|
-
params[
|
|
739
|
-
params[
|
|
741
|
+
params["enhance_prompt"] = flags.enhancePrompt;
|
|
742
|
+
params["prompt"] = prompt;
|
|
740
743
|
return buildEnvelope(model, params);
|
|
741
744
|
},
|
|
742
745
|
});
|
|
743
746
|
registerProvider({
|
|
744
|
-
provider:
|
|
745
|
-
category:
|
|
747
|
+
provider: "vidu",
|
|
748
|
+
category: "video",
|
|
746
749
|
models: TEMPLATE_MODELS,
|
|
747
750
|
requiresPrompt() {
|
|
748
751
|
return false;
|
|
749
752
|
},
|
|
750
753
|
buildBody(model, prompt, flags) {
|
|
751
754
|
applyViduCommonUnsupported(model, flags);
|
|
752
|
-
assertUnsupported(model, flags.duration,
|
|
753
|
-
assertUnsupported(model, flags.aspectRatio,
|
|
754
|
-
assertUnsupported(model, flags.resolution,
|
|
755
|
-
assertUnsupported(model, flags.movementAmplitude,
|
|
756
|
-
assertUnsupported(model, flags.audio,
|
|
757
|
-
assertUnsupported(model, flags.payload,
|
|
758
|
-
assertUnsupported(model, flags.callbackUrl,
|
|
759
|
-
assertUnsupported(model, flags.offPeak,
|
|
760
|
-
assertUnsupported(model, flags.watermark,
|
|
761
|
-
assertUnsupported(model, flags.watermarkPosition,
|
|
762
|
-
assertUnsupported(model, flags.watermarkUrl,
|
|
763
|
-
assertUnsupported(model, flags.metaData,
|
|
764
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
765
|
-
assertUnsupported(model, flags.style,
|
|
766
|
-
assertUnsupported(model, flags.language,
|
|
767
|
-
assertUnsupported(model, flags.creative,
|
|
768
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
769
|
-
assertUnsupported(model, flags.removeAudio,
|
|
770
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
771
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
772
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
773
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
774
|
-
assertUnsupported(model, flags.videoUrl,
|
|
775
|
-
assertUnsupported(model, flags.audioUrl,
|
|
776
|
-
assertUnsupported(model, flags.sounds,
|
|
777
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
778
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
779
|
-
const template = parseEnum(model, flags.template,
|
|
755
|
+
assertUnsupported(model, flags.duration, "duration");
|
|
756
|
+
assertUnsupported(model, flags.aspectRatio, "aspect-ratio");
|
|
757
|
+
assertUnsupported(model, flags.resolution, "resolution");
|
|
758
|
+
assertUnsupported(model, flags.movementAmplitude, "movement-amplitude");
|
|
759
|
+
assertUnsupported(model, flags.audio, "audio");
|
|
760
|
+
assertUnsupported(model, flags.payload, "payload");
|
|
761
|
+
assertUnsupported(model, flags.callbackUrl, "callback-url");
|
|
762
|
+
assertUnsupported(model, flags.offPeak, "off-peak");
|
|
763
|
+
assertUnsupported(model, flags.watermark, "watermark");
|
|
764
|
+
assertUnsupported(model, flags.watermarkPosition, "watermark-position");
|
|
765
|
+
assertUnsupported(model, flags.watermarkUrl, "watermark-url");
|
|
766
|
+
assertUnsupported(model, flags.metaData, "meta-data");
|
|
767
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
768
|
+
assertUnsupported(model, flags.style, "style");
|
|
769
|
+
assertUnsupported(model, flags.language, "language");
|
|
770
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
771
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
772
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
773
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
774
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
775
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
776
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
777
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
778
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
779
|
+
assertUnsupported(model, flags.sounds, "sounds");
|
|
780
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
781
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
782
|
+
const template = parseEnum(model, flags.template, "template", TEMPLATE_NAMES);
|
|
780
783
|
if (!template) {
|
|
781
784
|
throw new CLIError(`Model "${model}" requires --template.`, ExitCode.USAGE);
|
|
782
785
|
}
|
|
@@ -785,109 +788,109 @@ registerProvider({
|
|
|
785
788
|
images: collectImageSet(model, flags, { min: 1, max: 7 }),
|
|
786
789
|
};
|
|
787
790
|
if (prompt.length > 0)
|
|
788
|
-
params[
|
|
789
|
-
const seed = parseInteger(model, flags.seed,
|
|
791
|
+
params["prompt"] = prompt;
|
|
792
|
+
const seed = parseInteger(model, flags.seed, "seed");
|
|
790
793
|
if (seed !== undefined)
|
|
791
|
-
params[
|
|
794
|
+
params["seed"] = seed;
|
|
792
795
|
if (flags.bgm !== undefined)
|
|
793
|
-
params[
|
|
794
|
-
const templateParams = parseJsonObject(model, flags.templateParams,
|
|
796
|
+
params["bgm"] = flags.bgm;
|
|
797
|
+
const templateParams = parseJsonObject(model, flags.templateParams, "template-params");
|
|
795
798
|
if (templateParams)
|
|
796
|
-
params[
|
|
799
|
+
params["extra_params"] = templateParams;
|
|
797
800
|
return buildEnvelope(model, params);
|
|
798
801
|
},
|
|
799
802
|
});
|
|
800
803
|
registerProvider({
|
|
801
|
-
provider:
|
|
802
|
-
category:
|
|
804
|
+
provider: "vidu",
|
|
805
|
+
category: "video",
|
|
803
806
|
models: AD_ONE_CLICK_MODELS,
|
|
804
807
|
requiresPrompt() {
|
|
805
808
|
return false;
|
|
806
809
|
},
|
|
807
810
|
buildBody(model, prompt, flags) {
|
|
808
811
|
applyViduCommonUnsupported(model, flags);
|
|
809
|
-
assertUnsupported(model, flags.seed,
|
|
810
|
-
assertUnsupported(model, flags.resolution,
|
|
811
|
-
assertUnsupported(model, flags.movementAmplitude,
|
|
812
|
-
assertUnsupported(model, flags.audio,
|
|
813
|
-
assertUnsupported(model, flags.bgm,
|
|
814
|
-
assertUnsupported(model, flags.payload,
|
|
815
|
-
assertUnsupported(model, flags.callbackUrl,
|
|
816
|
-
assertUnsupported(model, flags.offPeak,
|
|
817
|
-
assertUnsupported(model, flags.watermark,
|
|
818
|
-
assertUnsupported(model, flags.watermarkPosition,
|
|
819
|
-
assertUnsupported(model, flags.watermarkUrl,
|
|
820
|
-
assertUnsupported(model, flags.metaData,
|
|
821
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
822
|
-
assertUnsupported(model, flags.style,
|
|
823
|
-
assertUnsupported(model, flags.template,
|
|
824
|
-
assertUnsupported(model, flags.templateParams,
|
|
825
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
826
|
-
assertUnsupported(model, flags.removeAudio,
|
|
827
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
828
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
829
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
830
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
831
|
-
assertUnsupported(model, flags.videoUrl,
|
|
832
|
-
assertUnsupported(model, flags.audioUrl,
|
|
833
|
-
assertUnsupported(model, flags.sounds,
|
|
834
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
835
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
812
|
+
assertUnsupported(model, flags.seed, "seed");
|
|
813
|
+
assertUnsupported(model, flags.resolution, "resolution");
|
|
814
|
+
assertUnsupported(model, flags.movementAmplitude, "movement-amplitude");
|
|
815
|
+
assertUnsupported(model, flags.audio, "audio");
|
|
816
|
+
assertUnsupported(model, flags.bgm, "bgm");
|
|
817
|
+
assertUnsupported(model, flags.payload, "payload");
|
|
818
|
+
assertUnsupported(model, flags.callbackUrl, "callback-url");
|
|
819
|
+
assertUnsupported(model, flags.offPeak, "off-peak");
|
|
820
|
+
assertUnsupported(model, flags.watermark, "watermark");
|
|
821
|
+
assertUnsupported(model, flags.watermarkPosition, "watermark-position");
|
|
822
|
+
assertUnsupported(model, flags.watermarkUrl, "watermark-url");
|
|
823
|
+
assertUnsupported(model, flags.metaData, "meta-data");
|
|
824
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
825
|
+
assertUnsupported(model, flags.style, "style");
|
|
826
|
+
assertUnsupported(model, flags.template, "template");
|
|
827
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
828
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
829
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
830
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
831
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
832
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
833
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
834
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
835
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
836
|
+
assertUnsupported(model, flags.sounds, "sounds");
|
|
837
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
838
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
836
839
|
const params = {
|
|
837
840
|
images: collectImageSet(model, flags, { min: 1, max: 7 }),
|
|
838
841
|
};
|
|
839
842
|
if (prompt.length > 0)
|
|
840
|
-
params[
|
|
841
|
-
const duration = parseInteger(model, flags.duration,
|
|
843
|
+
params["prompt"] = prompt;
|
|
844
|
+
const duration = parseInteger(model, flags.duration, "duration", { min: 8, max: 60 });
|
|
842
845
|
if (duration !== undefined)
|
|
843
|
-
params[
|
|
844
|
-
const aspectRatio = parseEnum(model, flags.aspectRatio,
|
|
846
|
+
params["duration"] = duration;
|
|
847
|
+
const aspectRatio = parseEnum(model, flags.aspectRatio, "aspect-ratio", AD_ASPECT_RATIOS);
|
|
845
848
|
if (aspectRatio)
|
|
846
|
-
params[
|
|
847
|
-
const language = parseEnum(model, flags.language,
|
|
849
|
+
params["aspect_ratio"] = aspectRatio;
|
|
850
|
+
const language = parseEnum(model, flags.language, "language", AD_LANGUAGES);
|
|
848
851
|
if (language)
|
|
849
|
-
params[
|
|
852
|
+
params["language"] = language;
|
|
850
853
|
if (flags.creative !== undefined)
|
|
851
|
-
params[
|
|
854
|
+
params["creative"] = flags.creative;
|
|
852
855
|
return buildEnvelope(model, params);
|
|
853
856
|
},
|
|
854
857
|
});
|
|
855
858
|
registerProvider({
|
|
856
|
-
provider:
|
|
857
|
-
category:
|
|
859
|
+
provider: "vidu",
|
|
860
|
+
category: "video",
|
|
858
861
|
models: ONE_CLICK_MV_MODELS,
|
|
859
862
|
requiresPrompt() {
|
|
860
863
|
return false;
|
|
861
864
|
},
|
|
862
865
|
buildBody(model, prompt, flags) {
|
|
863
866
|
applyViduCommonUnsupported(model, flags);
|
|
864
|
-
assertUnsupported(model, flags.duration,
|
|
865
|
-
assertUnsupported(model, flags.seed,
|
|
866
|
-
assertUnsupported(model, flags.movementAmplitude,
|
|
867
|
-
assertUnsupported(model, flags.audio,
|
|
868
|
-
assertUnsupported(model, flags.bgm,
|
|
869
|
-
assertUnsupported(model, flags.payload,
|
|
870
|
-
assertUnsupported(model, flags.callbackUrl,
|
|
871
|
-
assertUnsupported(model, flags.offPeak,
|
|
872
|
-
assertUnsupported(model, flags.watermark,
|
|
873
|
-
assertUnsupported(model, flags.watermarkPosition,
|
|
874
|
-
assertUnsupported(model, flags.watermarkUrl,
|
|
875
|
-
assertUnsupported(model, flags.metaData,
|
|
876
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
877
|
-
assertUnsupported(model, flags.style,
|
|
878
|
-
assertUnsupported(model, flags.template,
|
|
879
|
-
assertUnsupported(model, flags.templateParams,
|
|
880
|
-
assertUnsupported(model, flags.language,
|
|
881
|
-
assertUnsupported(model, flags.creative,
|
|
882
|
-
assertUnsupported(model, flags.removeAudio,
|
|
883
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
884
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
885
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
886
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
887
|
-
assertUnsupported(model, flags.videoUrl,
|
|
888
|
-
assertUnsupported(model, flags.sounds,
|
|
889
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
890
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
867
|
+
assertUnsupported(model, flags.duration, "duration");
|
|
868
|
+
assertUnsupported(model, flags.seed, "seed");
|
|
869
|
+
assertUnsupported(model, flags.movementAmplitude, "movement-amplitude");
|
|
870
|
+
assertUnsupported(model, flags.audio, "audio");
|
|
871
|
+
assertUnsupported(model, flags.bgm, "bgm");
|
|
872
|
+
assertUnsupported(model, flags.payload, "payload");
|
|
873
|
+
assertUnsupported(model, flags.callbackUrl, "callback-url");
|
|
874
|
+
assertUnsupported(model, flags.offPeak, "off-peak");
|
|
875
|
+
assertUnsupported(model, flags.watermark, "watermark");
|
|
876
|
+
assertUnsupported(model, flags.watermarkPosition, "watermark-position");
|
|
877
|
+
assertUnsupported(model, flags.watermarkUrl, "watermark-url");
|
|
878
|
+
assertUnsupported(model, flags.metaData, "meta-data");
|
|
879
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
880
|
+
assertUnsupported(model, flags.style, "style");
|
|
881
|
+
assertUnsupported(model, flags.template, "template");
|
|
882
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
883
|
+
assertUnsupported(model, flags.language, "language");
|
|
884
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
885
|
+
assertUnsupported(model, flags.removeAudio, "remove-audio");
|
|
886
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
887
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
888
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
889
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
890
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
891
|
+
assertUnsupported(model, flags.sounds, "sounds");
|
|
892
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
893
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
891
894
|
const audioUrl = maybeString(flags.audioUrl);
|
|
892
895
|
if (!audioUrl) {
|
|
893
896
|
throw new CLIError(`Model "${model}" requires --audio-url.`, ExitCode.USAGE);
|
|
@@ -897,68 +900,68 @@ registerProvider({
|
|
|
897
900
|
audio_url: audioUrl,
|
|
898
901
|
};
|
|
899
902
|
if (prompt.length > 0)
|
|
900
|
-
params[
|
|
901
|
-
const aspectRatio = parseEnum(model, flags.aspectRatio,
|
|
903
|
+
params["prompt"] = prompt;
|
|
904
|
+
const aspectRatio = parseEnum(model, flags.aspectRatio, "aspect-ratio", ONE_CLICK_ASPECT_RATIOS);
|
|
902
905
|
if (aspectRatio)
|
|
903
|
-
params[
|
|
904
|
-
const resolution = parseEnum(model, flags.resolution,
|
|
906
|
+
params["aspect_ratio"] = aspectRatio;
|
|
907
|
+
const resolution = parseEnum(model, flags.resolution, "resolution", ONE_CLICK_RESOLUTIONS);
|
|
905
908
|
if (resolution)
|
|
906
|
-
params[
|
|
909
|
+
params["resolution"] = resolution;
|
|
907
910
|
if (flags.addSubtitle !== undefined)
|
|
908
|
-
params[
|
|
911
|
+
params["add_subtitle"] = flags.addSubtitle;
|
|
909
912
|
return buildEnvelope(model, params);
|
|
910
913
|
},
|
|
911
914
|
});
|
|
912
915
|
registerProvider({
|
|
913
|
-
provider:
|
|
914
|
-
category:
|
|
916
|
+
provider: "vidu",
|
|
917
|
+
category: "video",
|
|
915
918
|
models: TRENDING_REPLICATE_MODELS,
|
|
916
919
|
requiresPrompt() {
|
|
917
920
|
return false;
|
|
918
921
|
},
|
|
919
922
|
buildBody(model, prompt, flags) {
|
|
920
923
|
applyViduCommonUnsupported(model, flags);
|
|
921
|
-
assertUnsupported(model, flags.duration,
|
|
922
|
-
assertUnsupported(model, flags.seed,
|
|
923
|
-
assertUnsupported(model, flags.movementAmplitude,
|
|
924
|
-
assertUnsupported(model, flags.audio,
|
|
925
|
-
assertUnsupported(model, flags.bgm,
|
|
926
|
-
assertUnsupported(model, flags.payload,
|
|
927
|
-
assertUnsupported(model, flags.callbackUrl,
|
|
928
|
-
assertUnsupported(model, flags.offPeak,
|
|
929
|
-
assertUnsupported(model, flags.watermark,
|
|
930
|
-
assertUnsupported(model, flags.watermarkPosition,
|
|
931
|
-
assertUnsupported(model, flags.watermarkUrl,
|
|
932
|
-
assertUnsupported(model, flags.metaData,
|
|
933
|
-
assertUnsupported(model, flags.enhancePrompt,
|
|
934
|
-
assertUnsupported(model, flags.style,
|
|
935
|
-
assertUnsupported(model, flags.template,
|
|
936
|
-
assertUnsupported(model, flags.templateParams,
|
|
937
|
-
assertUnsupported(model, flags.language,
|
|
938
|
-
assertUnsupported(model, flags.creative,
|
|
939
|
-
assertUnsupported(model, flags.addSubtitle,
|
|
940
|
-
assertUnsupported(model, flags.characterReferenceUrl,
|
|
941
|
-
assertUnsupported(model, flags.styleReferenceUrl,
|
|
942
|
-
assertUnsupported(model, flags.characterReferenceWeight,
|
|
943
|
-
assertUnsupported(model, flags.styleReferenceWeight,
|
|
944
|
-
assertUnsupported(model, flags.audioUrl,
|
|
945
|
-
assertUnsupported(model, flags.sounds,
|
|
946
|
-
assertUnsupported(model, flags.recommendPrompt,
|
|
947
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
924
|
+
assertUnsupported(model, flags.duration, "duration");
|
|
925
|
+
assertUnsupported(model, flags.seed, "seed");
|
|
926
|
+
assertUnsupported(model, flags.movementAmplitude, "movement-amplitude");
|
|
927
|
+
assertUnsupported(model, flags.audio, "audio");
|
|
928
|
+
assertUnsupported(model, flags.bgm, "bgm");
|
|
929
|
+
assertUnsupported(model, flags.payload, "payload");
|
|
930
|
+
assertUnsupported(model, flags.callbackUrl, "callback-url");
|
|
931
|
+
assertUnsupported(model, flags.offPeak, "off-peak");
|
|
932
|
+
assertUnsupported(model, flags.watermark, "watermark");
|
|
933
|
+
assertUnsupported(model, flags.watermarkPosition, "watermark-position");
|
|
934
|
+
assertUnsupported(model, flags.watermarkUrl, "watermark-url");
|
|
935
|
+
assertUnsupported(model, flags.metaData, "meta-data");
|
|
936
|
+
assertUnsupported(model, flags.enhancePrompt, "enhance-prompt");
|
|
937
|
+
assertUnsupported(model, flags.style, "style");
|
|
938
|
+
assertUnsupported(model, flags.template, "template");
|
|
939
|
+
assertUnsupported(model, flags.templateParams, "template-params");
|
|
940
|
+
assertUnsupported(model, flags.language, "language");
|
|
941
|
+
assertUnsupported(model, flags.creative, "creative");
|
|
942
|
+
assertUnsupported(model, flags.addSubtitle, "add-subtitle");
|
|
943
|
+
assertUnsupported(model, flags.characterReferenceUrl, "character-reference-url");
|
|
944
|
+
assertUnsupported(model, flags.styleReferenceUrl, "style-reference-url");
|
|
945
|
+
assertUnsupported(model, flags.characterReferenceWeight, "character-reference-weight");
|
|
946
|
+
assertUnsupported(model, flags.styleReferenceWeight, "style-reference-weight");
|
|
947
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
948
|
+
assertUnsupported(model, flags.sounds, "sounds");
|
|
949
|
+
assertUnsupported(model, flags.recommendPrompt, "recommend-prompt");
|
|
950
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
948
951
|
const params = {
|
|
949
952
|
video_url: requireVideoUrl(model, flags),
|
|
950
953
|
images: collectImageSet(model, flags, { min: 1, max: 7 }),
|
|
951
954
|
};
|
|
952
955
|
if (prompt.length > 0)
|
|
953
|
-
params[
|
|
954
|
-
const aspectRatio = parseEnum(model, flags.aspectRatio,
|
|
956
|
+
params["prompt"] = prompt;
|
|
957
|
+
const aspectRatio = parseEnum(model, flags.aspectRatio, "aspect-ratio", ONE_CLICK_ASPECT_RATIOS);
|
|
955
958
|
if (aspectRatio)
|
|
956
|
-
params[
|
|
957
|
-
const resolution = parseEnum(model, flags.resolution,
|
|
959
|
+
params["aspect_ratio"] = aspectRatio;
|
|
960
|
+
const resolution = parseEnum(model, flags.resolution, "resolution", ONE_CLICK_RESOLUTIONS);
|
|
958
961
|
if (resolution)
|
|
959
|
-
params[
|
|
962
|
+
params["resolution"] = resolution;
|
|
960
963
|
if (flags.removeAudio !== undefined)
|
|
961
|
-
params[
|
|
964
|
+
params["remove_audio"] = flags.removeAudio;
|
|
962
965
|
return buildEnvelope(model, params);
|
|
963
966
|
},
|
|
964
967
|
});
|