@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.
Files changed (34) hide show
  1. package/dist/server/server/sac/generate.d.ts.map +1 -1
  2. package/dist/server/server/sac/generate.js.map +1 -1
  3. package/dist/server/server/sac/providers/alibaba.js +231 -249
  4. package/dist/server/server/sac/providers/alibaba.js.map +1 -1
  5. package/dist/server/server/sac/providers/audio.js +16 -19
  6. package/dist/server/server/sac/providers/audio.js.map +1 -1
  7. package/dist/server/server/sac/providers/kling.js +157 -184
  8. package/dist/server/server/sac/providers/kling.js.map +1 -1
  9. package/dist/server/server/sac/providers/nano.js +7 -9
  10. package/dist/server/server/sac/providers/nano.js.map +1 -1
  11. package/dist/server/server/sac/providers/pixverse.js +436 -425
  12. package/dist/server/server/sac/providers/pixverse.js.map +1 -1
  13. package/dist/server/server/sac/providers/seaart.d.ts.map +1 -1
  14. package/dist/server/server/sac/providers/seaart.js +6 -10
  15. package/dist/server/server/sac/providers/seaart.js.map +1 -1
  16. package/dist/server/server/sac/providers/store.d.ts +1 -1
  17. package/dist/server/server/sac/providers/tencent-3d.js +59 -57
  18. package/dist/server/server/sac/providers/tencent-3d.js.map +1 -1
  19. package/dist/server/server/sac/providers/tencent-image.js +39 -38
  20. package/dist/server/server/sac/providers/tencent-image.js.map +1 -1
  21. package/dist/server/server/sac/providers/tencent-video.js +58 -57
  22. package/dist/server/server/sac/providers/tencent-video.js.map +1 -1
  23. package/dist/server/server/sac/providers/tripo3d.js +135 -136
  24. package/dist/server/server/sac/providers/tripo3d.js.map +1 -1
  25. package/dist/server/server/sac/providers/vidu.js +470 -467
  26. package/dist/server/server/sac/providers/vidu.js.map +1 -1
  27. package/dist/server/server/sac/providers/volces-3d.js +30 -32
  28. package/dist/server/server/sac/providers/volces-3d.js.map +1 -1
  29. package/dist/server/server/sac/providers/volces-video.js +87 -83
  30. package/dist/server/server/sac/providers/volces-video.js.map +1 -1
  31. package/dist/server/server/sac/providers/volces.d.ts.map +1 -1
  32. package/dist/server/server/sac/providers/volces.js +44 -42
  33. package/dist/server/server/sac/providers/volces.js.map +1 -1
  34. 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 = ['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'];
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
- 'turn_into_zombie',
18
- 'head_to_balloon',
19
- 'wednesdays_vibe',
20
- 'covered_liquid_metal',
17
+ "turn_into_zombie",
18
+ "head_to_balloon",
19
+ "wednesdays_vibe",
20
+ "covered_liquid_metal",
21
21
  ]);
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']);
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 !== 'string' || value.length === 0)
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 === 'string' && item.length > 0);
54
+ return value.filter((item) => typeof item === "string" && item.length > 0);
55
55
  }
56
- if (typeof value === 'string' && value.length > 0)
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 !== 'number' || Number.isNaN(value) || !Number.isInteger(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 !== 'number' || Number.isNaN(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 !== 'string' || !allowed.has(value)) {
97
- throw new CLIError(`Model "${model}" requires --${flagName} to be one of: ${Array.from(allowed).join(', ')}.`, ExitCode.USAGE);
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 !== 'string' || value.length === 0) {
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 !== 'object') {
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, 'image-tail-url');
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 ? '' : 's'} via --image-url/--image-urls.`, ExitCode.USAGE);
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, 'image-tail-url');
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, 'image-urls');
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, 'sounds', `Model "${model}" does not currently support --sounds; the upstream field is reserved.`);
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, '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');
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, '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(', ')}.`, ExitCode.USAGE);
205
+ throw new CLIError(`Model "${model}" requires --duration to be one of: ${options.duration.allowed.join(", ")}.`, ExitCode.USAGE);
206
206
  }
207
- params['duration'] = duration;
207
+ params["duration"] = duration;
208
208
  }
209
209
  }
210
210
  else {
211
- assertUnsupported(model, flags.duration, 'duration');
211
+ assertUnsupported(model, flags.duration, "duration");
212
212
  }
213
213
  if (options.resolution) {
214
- const resolution = parseEnum(model, flags.resolution, 'resolution', options.resolution);
214
+ const resolution = parseEnum(model, flags.resolution, "resolution", options.resolution);
215
215
  if (resolution)
216
- params['resolution'] = resolution;
216
+ params["resolution"] = resolution;
217
217
  }
218
218
  else {
219
- assertUnsupported(model, flags.resolution, 'resolution');
219
+ assertUnsupported(model, flags.resolution, "resolution");
220
220
  }
221
221
  if (flags.seed !== undefined) {
222
- const seed = parseInteger(model, flags.seed, 'seed');
222
+ const seed = parseInteger(model, flags.seed, "seed");
223
223
  if (seed !== undefined)
224
- params['seed'] = seed;
224
+ params["seed"] = seed;
225
225
  }
226
226
  if (options.aspectRatio) {
227
- const aspectRatio = parseEnum(model, flags.aspectRatio, 'aspect-ratio', options.aspectRatio);
227
+ const aspectRatio = parseEnum(model, flags.aspectRatio, "aspect-ratio", options.aspectRatio);
228
228
  if (aspectRatio)
229
- params['aspect_ratio'] = aspectRatio;
229
+ params["aspect_ratio"] = aspectRatio;
230
230
  }
231
231
  else {
232
- assertUnsupported(model, flags.aspectRatio, 'aspect-ratio');
232
+ assertUnsupported(model, flags.aspectRatio, "aspect-ratio");
233
233
  }
234
234
  if (options.movementAmplitude) {
235
- const movementAmplitude = parseEnum(model, flags.movementAmplitude, 'movement-amplitude', MOVEMENT_AMPLITUDES);
235
+ const movementAmplitude = parseEnum(model, flags.movementAmplitude, "movement-amplitude", MOVEMENT_AMPLITUDES);
236
236
  if (movementAmplitude)
237
- params['movement_amplitude'] = movementAmplitude;
237
+ params["movement_amplitude"] = movementAmplitude;
238
238
  }
239
239
  else {
240
- assertUnsupported(model, flags.movementAmplitude, 'movement-amplitude');
240
+ assertUnsupported(model, flags.movementAmplitude, "movement-amplitude");
241
241
  }
242
242
  if (options.bgm) {
243
243
  if (flags.bgm !== undefined)
244
- params['bgm'] = flags.bgm;
244
+ params["bgm"] = flags.bgm;
245
245
  }
246
246
  else {
247
- assertUnsupported(model, flags.bgm, 'bgm');
247
+ assertUnsupported(model, flags.bgm, "bgm");
248
248
  }
249
249
  if (options.audio) {
250
250
  if (flags.audio !== undefined)
251
- params['audio'] = flags.audio;
251
+ params["audio"] = flags.audio;
252
252
  }
253
253
  else {
254
- assertUnsupported(model, flags.audio, '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['payload'] = payload;
259
+ params["payload"] = payload;
260
260
  }
261
261
  else {
262
- assertUnsupported(model, flags.payload, '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['callback_url'] = callbackUrl;
267
+ params["callback_url"] = callbackUrl;
268
268
  }
269
269
  else {
270
- assertUnsupported(model, flags.callbackUrl, 'callback-url');
270
+ assertUnsupported(model, flags.callbackUrl, "callback-url");
271
271
  }
272
272
  if (options.offPeak) {
273
273
  if (flags.offPeak !== undefined)
274
- params['off_peak'] = flags.offPeak;
274
+ params["off_peak"] = flags.offPeak;
275
275
  }
276
276
  else {
277
- assertUnsupported(model, flags.offPeak, 'off-peak');
277
+ assertUnsupported(model, flags.offPeak, "off-peak");
278
278
  }
279
279
  if (options.watermark) {
280
280
  if (flags.watermark !== undefined)
281
- params['watermark'] = flags.watermark;
281
+ params["watermark"] = flags.watermark;
282
282
  }
283
283
  else {
284
- assertUnsupported(model, flags.watermark, 'watermark');
284
+ assertUnsupported(model, flags.watermark, "watermark");
285
285
  }
286
286
  if (options.watermarkPosition) {
287
- const watermarkPosition = parseInteger(model, flags.watermarkPosition, 'watermark-position', { min: 1, max: 4 });
287
+ const watermarkPosition = parseInteger(model, flags.watermarkPosition, "watermark-position", {
288
+ min: 1,
289
+ max: 4,
290
+ });
288
291
  if (watermarkPosition !== undefined)
289
- params['wm_position'] = watermarkPosition;
292
+ params["wm_position"] = watermarkPosition;
290
293
  }
291
294
  else {
292
- assertUnsupported(model, flags.watermarkPosition, 'watermark-position');
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['wm_url'] = watermarkUrl;
300
+ params["wm_url"] = watermarkUrl;
298
301
  }
299
302
  else {
300
- assertUnsupported(model, flags.watermarkUrl, 'watermark-url');
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['meta_data'] = metaData;
308
+ params["meta_data"] = metaData;
306
309
  }
307
310
  else {
308
- assertUnsupported(model, flags.metaData, 'meta-data');
311
+ assertUnsupported(model, flags.metaData, "meta-data");
309
312
  }
310
313
  if (options.style) {
311
- const style = parseEnum(model, flags.style, 'style', options.style);
314
+ const style = parseEnum(model, flags.style, "style", options.style);
312
315
  if (style)
313
- params['style'] = style;
316
+ params["style"] = style;
314
317
  }
315
318
  else {
316
- assertUnsupported(model, flags.style, 'style');
319
+ assertUnsupported(model, flags.style, "style");
317
320
  }
318
321
  return params;
319
322
  }
320
323
  registerProvider({
321
- provider: 'vidu',
322
- category: 'video',
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, 'image-url');
327
- assertUnsupported(model, flags.imageTailUrl, 'image-tail-url');
328
- assertUnsupported(model, flags.imageUrls, 'image-urls');
329
- assertUnsupported(model, flags.videoUrl, 'video-url');
330
- assertUnsupported(model, flags.audioUrl, 'audio-url');
331
- assertUnsupported(model, flags.sounds, 'sounds');
332
- assertUnsupported(model, flags.recommendPrompt, 'recommend-prompt');
333
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
334
- assertUnsupported(model, flags.template, 'template');
335
- assertUnsupported(model, flags.templateParams, 'template-params');
336
- assertUnsupported(model, flags.language, 'language');
337
- assertUnsupported(model, flags.creative, 'creative');
338
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
339
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
340
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
341
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
342
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
343
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
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['prompt'] = prompt;
355
+ params["prompt"] = prompt;
353
356
  return buildEnvelope(model, params);
354
357
  },
355
358
  });
356
359
  registerProvider({
357
- provider: 'vidu',
358
- category: 'video',
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, 'image-url');
363
- assertUnsupported(model, flags.imageTailUrl, 'image-tail-url');
364
- assertUnsupported(model, flags.imageUrls, 'image-urls');
365
- assertUnsupported(model, flags.videoUrl, 'video-url');
366
- assertUnsupported(model, flags.audioUrl, 'audio-url');
367
- assertUnsupported(model, flags.sounds, 'sounds');
368
- assertUnsupported(model, flags.recommendPrompt, 'recommend-prompt');
369
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
370
- assertUnsupported(model, flags.template, 'template');
371
- assertUnsupported(model, flags.templateParams, 'template-params');
372
- assertUnsupported(model, flags.language, 'language');
373
- assertUnsupported(model, flags.creative, 'creative');
374
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
375
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
376
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
377
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
378
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
379
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
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['prompt'] = prompt;
392
+ params["prompt"] = prompt;
390
393
  return buildEnvelope(model, params);
391
394
  },
392
395
  });
393
396
  registerProvider({
394
- provider: 'vidu',
395
- category: 'video',
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, 'image-url');
400
- assertUnsupported(model, flags.imageTailUrl, 'image-tail-url');
401
- assertUnsupported(model, flags.imageUrls, 'image-urls');
402
- assertUnsupported(model, flags.videoUrl, 'video-url');
403
- assertUnsupported(model, flags.audioUrl, 'audio-url');
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, 'recommend-prompt');
406
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
407
- assertUnsupported(model, flags.template, 'template');
408
- assertUnsupported(model, flags.templateParams, 'template-params');
409
- assertUnsupported(model, flags.language, 'language');
410
- assertUnsupported(model, flags.creative, 'creative');
411
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
412
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
413
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
414
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
415
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
416
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
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['prompt'] = prompt;
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, 'image-tail-url');
439
- assertUnsupported(model, flags.imageUrls, 'image-urls');
440
- assertUnsupported(model, flags.videoUrl, 'video-url');
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, 'recommend-prompt');
443
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
444
- assertUnsupported(model, flags.template, 'template');
445
- assertUnsupported(model, flags.templateParams, 'template-params');
446
- assertUnsupported(model, flags.language, 'language');
447
- assertUnsupported(model, flags.creative, 'creative');
448
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
449
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
450
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
451
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
452
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
453
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
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['images'] = requireSingleImage(model, flags);
471
+ params["images"] = requireSingleImage(model, flags);
469
472
  if (prompt.length > 0)
470
- params['prompt'] = prompt;
473
+ params["prompt"] = prompt;
471
474
  const audioUrl = maybeString(flags.audioUrl);
472
475
  if (audioUrl)
473
- params['audio_url'] = audioUrl;
476
+ params["audio_url"] = audioUrl;
474
477
  const voiceId = maybeString(flags.voiceId);
475
478
  if (voiceId)
476
- params['voice_id'] = voiceId;
479
+ params["voice_id"] = voiceId;
477
480
  return buildEnvelope(model, params);
478
481
  }
479
482
  registerProvider({
480
- provider: 'vidu',
481
- category: 'video',
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: 'vidu',
490
- category: 'video',
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, 'image-tail-url');
498
- assertUnsupported(model, flags.imageUrls, 'image-urls');
499
- assertUnsupported(model, flags.videoUrl, 'video-url');
500
- assertUnsupported(model, flags.audioUrl, 'audio-url');
501
- assertUnsupported(model, flags.sounds, 'sounds');
502
- assertUnsupported(model, flags.offPeak, 'off-peak');
503
- assertUnsupported(model, flags.watermark, 'watermark');
504
- assertUnsupported(model, flags.watermarkPosition, 'watermark-position');
505
- assertUnsupported(model, flags.watermarkUrl, 'watermark-url');
506
- assertUnsupported(model, flags.metaData, 'meta-data');
507
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
508
- assertUnsupported(model, flags.template, 'template');
509
- assertUnsupported(model, flags.templateParams, 'template-params');
510
- assertUnsupported(model, flags.language, 'language');
511
- assertUnsupported(model, flags.creative, 'creative');
512
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
513
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
514
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
515
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
516
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
517
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
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['images'] = requireSingleImage(model, flags);
531
+ params["images"] = requireSingleImage(model, flags);
529
532
  if (prompt.length > 0)
530
- params['prompt'] = prompt;
533
+ params["prompt"] = prompt;
531
534
  if (flags.recommendPrompt)
532
- params['is_rec'] = true;
535
+ params["is_rec"] = true;
533
536
  return buildEnvelope(model, params);
534
537
  },
535
538
  });
536
539
  registerProvider({
537
- provider: 'vidu',
538
- category: 'video',
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, 'image-tail-url');
546
- assertUnsupported(model, flags.imageUrls, 'image-urls');
547
- assertUnsupported(model, flags.videoUrl, 'video-url');
548
- assertUnsupported(model, flags.audioUrl, 'audio-url');
549
- assertUnsupported(model, flags.sounds, 'sounds');
550
- assertUnsupported(model, flags.recommendPrompt, 'recommend-prompt');
551
- assertUnsupported(model, flags.watermark, 'watermark');
552
- assertUnsupported(model, flags.watermarkPosition, 'watermark-position');
553
- assertUnsupported(model, flags.watermarkUrl, 'watermark-url');
554
- assertUnsupported(model, flags.metaData, 'meta-data');
555
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
556
- assertUnsupported(model, flags.template, 'template');
557
- assertUnsupported(model, flags.templateParams, 'template-params');
558
- assertUnsupported(model, flags.language, 'language');
559
- assertUnsupported(model, flags.creative, 'creative');
560
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
561
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
562
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
563
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
564
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
565
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
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['images'] = requireSingleImage(model, flags);
577
+ params["images"] = requireSingleImage(model, flags);
575
578
  if (prompt.length > 0)
576
- params['prompt'] = prompt;
579
+ params["prompt"] = prompt;
577
580
  return buildEnvelope(model, params);
578
581
  },
579
582
  });
580
583
  registerProvider({
581
- provider: 'vidu',
582
- category: 'video',
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, 'sounds');
590
- assertUnsupported(model, flags.payload, 'payload');
591
- assertUnsupported(model, flags.callbackUrl, 'callback-url');
592
- assertUnsupported(model, flags.watermark, 'watermark');
593
- assertUnsupported(model, flags.watermarkPosition, 'watermark-position');
594
- assertUnsupported(model, flags.watermarkUrl, 'watermark-url');
595
- assertUnsupported(model, flags.metaData, 'meta-data');
596
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
597
- assertUnsupported(model, flags.template, 'template');
598
- assertUnsupported(model, flags.templateParams, 'template-params');
599
- assertUnsupported(model, flags.language, 'language');
600
- assertUnsupported(model, flags.creative, 'creative');
601
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
602
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
603
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
604
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
605
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
606
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
607
- assertUnsupported(model, flags.videoUrl, 'video-url');
608
- assertUnsupported(model, flags.audioUrl, 'audio-url');
609
- if (model === 'vidu_q3_pro_start_end') {
610
- assertUnsupported(model, flags.recommendPrompt, 'recommend-prompt');
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['images'] = requireStartEndImages(model, flags);
626
+ params["images"] = requireStartEndImages(model, flags);
624
627
  if (prompt.length > 0)
625
- params['prompt'] = prompt;
628
+ params["prompt"] = prompt;
626
629
  if (flags.recommendPrompt)
627
- params['is_rec'] = true;
630
+ params["is_rec"] = true;
628
631
  return buildEnvelope(model, params);
629
632
  },
630
633
  });
631
634
  registerProvider({
632
- provider: 'vidu',
633
- category: 'video',
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, 'image-tail-url');
639
- assertUnsupported(model, flags.videoUrl, 'video-url');
640
- assertUnsupported(model, flags.audioUrl, 'audio-url');
641
- assertUnsupported(model, flags.recommendPrompt, 'recommend-prompt');
642
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
643
- assertUnsupported(model, flags.template, 'template');
644
- assertUnsupported(model, flags.templateParams, 'template-params');
645
- assertUnsupported(model, flags.language, 'language');
646
- assertUnsupported(model, flags.creative, 'creative');
647
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
648
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
649
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
650
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
651
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
652
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
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, 'movement-amplitude');
670
+ assertUnsupported(model, flags.movementAmplitude, "movement-amplitude");
668
671
  const images = collectImages(flags);
669
672
  if (images.length > 0)
670
- params['images'] = images;
671
- params['prompt'] = prompt;
673
+ params["images"] = images;
674
+ params["prompt"] = prompt;
672
675
  return buildEnvelope(model, params);
673
676
  },
674
677
  });
675
678
  registerProvider({
676
- provider: 'vidu',
677
- category: 'video',
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, 'template');
683
- assertUnsupported(model, flags.templateParams, 'template-params');
684
- assertUnsupported(model, flags.language, 'language');
685
- assertUnsupported(model, flags.creative, 'creative');
686
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
687
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
688
- assertUnsupported(model, flags.videoUrl, 'video-url');
689
- assertUnsupported(model, flags.audioUrl, 'audio-url');
690
- assertUnsupported(model, flags.recommendPrompt, 'recommend-prompt');
691
- assertUnsupported(model, flags.movementAmplitude, 'movement-amplitude');
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['images'] = images;
713
+ params["images"] = images;
711
714
  const firstFrameImage = maybeString(flags.imageUrl);
712
715
  if (firstFrameImage)
713
- params['first_frame_image'] = firstFrameImage;
716
+ params["first_frame_image"] = firstFrameImage;
714
717
  const lastFrameImage = maybeString(flags.imageTailUrl);
715
718
  if (lastFrameImage)
716
- params['last_frame_image'] = lastFrameImage;
719
+ params["last_frame_image"] = lastFrameImage;
717
720
  const characterReferenceUrl = maybeString(flags.characterReferenceUrl);
718
721
  if (characterReferenceUrl)
719
- params['character_reference_image'] = characterReferenceUrl;
722
+ params["character_reference_image"] = characterReferenceUrl;
720
723
  const styleReferenceUrl = maybeString(flags.styleReferenceUrl);
721
724
  if (styleReferenceUrl)
722
- params['style_reference_image'] = styleReferenceUrl;
723
- const characterReferenceWeight = parseNumber(model, flags.characterReferenceWeight, 'character-reference-weight', {
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['character_reference_weight'] = characterReferenceWeight;
731
+ params["character_reference_weight"] = characterReferenceWeight;
729
732
  }
730
- const styleReferenceWeight = parseNumber(model, flags.styleReferenceWeight, 'style-reference-weight', {
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['style_reference_weight'] = styleReferenceWeight;
738
+ params["style_reference_weight"] = styleReferenceWeight;
736
739
  }
737
740
  if (flags.enhancePrompt !== undefined)
738
- params['enhance_prompt'] = flags.enhancePrompt;
739
- params['prompt'] = prompt;
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: 'vidu',
745
- category: 'video',
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, 'duration');
753
- assertUnsupported(model, flags.aspectRatio, 'aspect-ratio');
754
- assertUnsupported(model, flags.resolution, 'resolution');
755
- assertUnsupported(model, flags.movementAmplitude, 'movement-amplitude');
756
- assertUnsupported(model, flags.audio, 'audio');
757
- assertUnsupported(model, flags.payload, 'payload');
758
- assertUnsupported(model, flags.callbackUrl, 'callback-url');
759
- assertUnsupported(model, flags.offPeak, 'off-peak');
760
- assertUnsupported(model, flags.watermark, 'watermark');
761
- assertUnsupported(model, flags.watermarkPosition, 'watermark-position');
762
- assertUnsupported(model, flags.watermarkUrl, 'watermark-url');
763
- assertUnsupported(model, flags.metaData, 'meta-data');
764
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
765
- assertUnsupported(model, flags.style, 'style');
766
- assertUnsupported(model, flags.language, 'language');
767
- assertUnsupported(model, flags.creative, 'creative');
768
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
769
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
770
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
771
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
772
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
773
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
774
- assertUnsupported(model, flags.videoUrl, 'video-url');
775
- assertUnsupported(model, flags.audioUrl, 'audio-url');
776
- assertUnsupported(model, flags.sounds, 'sounds');
777
- assertUnsupported(model, flags.recommendPrompt, 'recommend-prompt');
778
- assertUnsupported(model, flags.imageTailUrl, 'image-tail-url');
779
- const template = parseEnum(model, flags.template, 'template', TEMPLATE_NAMES);
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['prompt'] = prompt;
789
- const seed = parseInteger(model, flags.seed, 'seed');
791
+ params["prompt"] = prompt;
792
+ const seed = parseInteger(model, flags.seed, "seed");
790
793
  if (seed !== undefined)
791
- params['seed'] = seed;
794
+ params["seed"] = seed;
792
795
  if (flags.bgm !== undefined)
793
- params['bgm'] = flags.bgm;
794
- const templateParams = parseJsonObject(model, flags.templateParams, 'template-params');
796
+ params["bgm"] = flags.bgm;
797
+ const templateParams = parseJsonObject(model, flags.templateParams, "template-params");
795
798
  if (templateParams)
796
- params['extra_params'] = templateParams;
799
+ params["extra_params"] = templateParams;
797
800
  return buildEnvelope(model, params);
798
801
  },
799
802
  });
800
803
  registerProvider({
801
- provider: 'vidu',
802
- category: 'video',
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, 'seed');
810
- assertUnsupported(model, flags.resolution, 'resolution');
811
- assertUnsupported(model, flags.movementAmplitude, 'movement-amplitude');
812
- assertUnsupported(model, flags.audio, 'audio');
813
- assertUnsupported(model, flags.bgm, 'bgm');
814
- assertUnsupported(model, flags.payload, 'payload');
815
- assertUnsupported(model, flags.callbackUrl, 'callback-url');
816
- assertUnsupported(model, flags.offPeak, 'off-peak');
817
- assertUnsupported(model, flags.watermark, 'watermark');
818
- assertUnsupported(model, flags.watermarkPosition, 'watermark-position');
819
- assertUnsupported(model, flags.watermarkUrl, 'watermark-url');
820
- assertUnsupported(model, flags.metaData, 'meta-data');
821
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
822
- assertUnsupported(model, flags.style, 'style');
823
- assertUnsupported(model, flags.template, 'template');
824
- assertUnsupported(model, flags.templateParams, 'template-params');
825
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
826
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
827
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
828
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
829
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
830
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
831
- assertUnsupported(model, flags.videoUrl, 'video-url');
832
- assertUnsupported(model, flags.audioUrl, 'audio-url');
833
- assertUnsupported(model, flags.sounds, 'sounds');
834
- assertUnsupported(model, flags.recommendPrompt, 'recommend-prompt');
835
- assertUnsupported(model, flags.imageTailUrl, 'image-tail-url');
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['prompt'] = prompt;
841
- const duration = parseInteger(model, flags.duration, 'duration', { min: 8, max: 60 });
843
+ params["prompt"] = prompt;
844
+ const duration = parseInteger(model, flags.duration, "duration", { min: 8, max: 60 });
842
845
  if (duration !== undefined)
843
- params['duration'] = duration;
844
- const aspectRatio = parseEnum(model, flags.aspectRatio, 'aspect-ratio', AD_ASPECT_RATIOS);
846
+ params["duration"] = duration;
847
+ const aspectRatio = parseEnum(model, flags.aspectRatio, "aspect-ratio", AD_ASPECT_RATIOS);
845
848
  if (aspectRatio)
846
- params['aspect_ratio'] = aspectRatio;
847
- const language = parseEnum(model, flags.language, 'language', AD_LANGUAGES);
849
+ params["aspect_ratio"] = aspectRatio;
850
+ const language = parseEnum(model, flags.language, "language", AD_LANGUAGES);
848
851
  if (language)
849
- params['language'] = language;
852
+ params["language"] = language;
850
853
  if (flags.creative !== undefined)
851
- params['creative'] = flags.creative;
854
+ params["creative"] = flags.creative;
852
855
  return buildEnvelope(model, params);
853
856
  },
854
857
  });
855
858
  registerProvider({
856
- provider: 'vidu',
857
- category: 'video',
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, 'duration');
865
- assertUnsupported(model, flags.seed, 'seed');
866
- assertUnsupported(model, flags.movementAmplitude, 'movement-amplitude');
867
- assertUnsupported(model, flags.audio, 'audio');
868
- assertUnsupported(model, flags.bgm, 'bgm');
869
- assertUnsupported(model, flags.payload, 'payload');
870
- assertUnsupported(model, flags.callbackUrl, 'callback-url');
871
- assertUnsupported(model, flags.offPeak, 'off-peak');
872
- assertUnsupported(model, flags.watermark, 'watermark');
873
- assertUnsupported(model, flags.watermarkPosition, 'watermark-position');
874
- assertUnsupported(model, flags.watermarkUrl, 'watermark-url');
875
- assertUnsupported(model, flags.metaData, 'meta-data');
876
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
877
- assertUnsupported(model, flags.style, 'style');
878
- assertUnsupported(model, flags.template, 'template');
879
- assertUnsupported(model, flags.templateParams, 'template-params');
880
- assertUnsupported(model, flags.language, 'language');
881
- assertUnsupported(model, flags.creative, 'creative');
882
- assertUnsupported(model, flags.removeAudio, 'remove-audio');
883
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
884
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
885
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
886
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
887
- assertUnsupported(model, flags.videoUrl, 'video-url');
888
- assertUnsupported(model, flags.sounds, 'sounds');
889
- assertUnsupported(model, flags.recommendPrompt, 'recommend-prompt');
890
- assertUnsupported(model, flags.imageTailUrl, 'image-tail-url');
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['prompt'] = prompt;
901
- const aspectRatio = parseEnum(model, flags.aspectRatio, 'aspect-ratio', ONE_CLICK_ASPECT_RATIOS);
903
+ params["prompt"] = prompt;
904
+ const aspectRatio = parseEnum(model, flags.aspectRatio, "aspect-ratio", ONE_CLICK_ASPECT_RATIOS);
902
905
  if (aspectRatio)
903
- params['aspect_ratio'] = aspectRatio;
904
- const resolution = parseEnum(model, flags.resolution, 'resolution', ONE_CLICK_RESOLUTIONS);
906
+ params["aspect_ratio"] = aspectRatio;
907
+ const resolution = parseEnum(model, flags.resolution, "resolution", ONE_CLICK_RESOLUTIONS);
905
908
  if (resolution)
906
- params['resolution'] = resolution;
909
+ params["resolution"] = resolution;
907
910
  if (flags.addSubtitle !== undefined)
908
- params['add_subtitle'] = flags.addSubtitle;
911
+ params["add_subtitle"] = flags.addSubtitle;
909
912
  return buildEnvelope(model, params);
910
913
  },
911
914
  });
912
915
  registerProvider({
913
- provider: 'vidu',
914
- category: 'video',
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, 'duration');
922
- assertUnsupported(model, flags.seed, 'seed');
923
- assertUnsupported(model, flags.movementAmplitude, 'movement-amplitude');
924
- assertUnsupported(model, flags.audio, 'audio');
925
- assertUnsupported(model, flags.bgm, 'bgm');
926
- assertUnsupported(model, flags.payload, 'payload');
927
- assertUnsupported(model, flags.callbackUrl, 'callback-url');
928
- assertUnsupported(model, flags.offPeak, 'off-peak');
929
- assertUnsupported(model, flags.watermark, 'watermark');
930
- assertUnsupported(model, flags.watermarkPosition, 'watermark-position');
931
- assertUnsupported(model, flags.watermarkUrl, 'watermark-url');
932
- assertUnsupported(model, flags.metaData, 'meta-data');
933
- assertUnsupported(model, flags.enhancePrompt, 'enhance-prompt');
934
- assertUnsupported(model, flags.style, 'style');
935
- assertUnsupported(model, flags.template, 'template');
936
- assertUnsupported(model, flags.templateParams, 'template-params');
937
- assertUnsupported(model, flags.language, 'language');
938
- assertUnsupported(model, flags.creative, 'creative');
939
- assertUnsupported(model, flags.addSubtitle, 'add-subtitle');
940
- assertUnsupported(model, flags.characterReferenceUrl, 'character-reference-url');
941
- assertUnsupported(model, flags.styleReferenceUrl, 'style-reference-url');
942
- assertUnsupported(model, flags.characterReferenceWeight, 'character-reference-weight');
943
- assertUnsupported(model, flags.styleReferenceWeight, 'style-reference-weight');
944
- assertUnsupported(model, flags.audioUrl, 'audio-url');
945
- assertUnsupported(model, flags.sounds, 'sounds');
946
- assertUnsupported(model, flags.recommendPrompt, 'recommend-prompt');
947
- assertUnsupported(model, flags.imageTailUrl, 'image-tail-url');
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['prompt'] = prompt;
954
- const aspectRatio = parseEnum(model, flags.aspectRatio, 'aspect-ratio', ONE_CLICK_ASPECT_RATIOS);
956
+ params["prompt"] = prompt;
957
+ const aspectRatio = parseEnum(model, flags.aspectRatio, "aspect-ratio", ONE_CLICK_ASPECT_RATIOS);
955
958
  if (aspectRatio)
956
- params['aspect_ratio'] = aspectRatio;
957
- const resolution = parseEnum(model, flags.resolution, 'resolution', ONE_CLICK_RESOLUTIONS);
959
+ params["aspect_ratio"] = aspectRatio;
960
+ const resolution = parseEnum(model, flags.resolution, "resolution", ONE_CLICK_RESOLUTIONS);
958
961
  if (resolution)
959
- params['resolution'] = resolution;
962
+ params["resolution"] = resolution;
960
963
  if (flags.removeAudio !== undefined)
961
- params['remove_audio'] = flags.removeAudio;
964
+ params["remove_audio"] = flags.removeAudio;
962
965
  return buildEnvelope(model, params);
963
966
  },
964
967
  });