@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,43 +1,25 @@
|
|
|
1
1
|
import { SACError as CLIError, ExitCode } from "../errors.js";
|
|
2
2
|
import { registerProvider } from "./store.js";
|
|
3
|
-
const IMAGE_MODELS = [
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
];
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
];
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
];
|
|
13
|
-
const VIDEO_I2V_27_MODELS = [
|
|
14
|
-
'alibaba_wan27_i2v',
|
|
15
|
-
];
|
|
16
|
-
const VIDEO_I2V_26_MODELS = [
|
|
17
|
-
'alibaba_wanx26_i2v',
|
|
18
|
-
'alibaba_wanx26_i2v_flash',
|
|
19
|
-
];
|
|
20
|
-
const VIDEO_REF_27_MODELS = [
|
|
21
|
-
'alibaba_wan27_r2v',
|
|
22
|
-
];
|
|
23
|
-
const VIDEO_REF_26_MODELS = [
|
|
24
|
-
'alibaba_wanx26_reference',
|
|
25
|
-
];
|
|
26
|
-
const VIDEO_EDIT_MODELS = [
|
|
27
|
-
'alibaba_wan27_videoedit',
|
|
28
|
-
];
|
|
29
|
-
const WAN27_RATIOS = new Set(['16:9', '9:16', '1:1', '4:3', '3:4']);
|
|
30
|
-
const WAN27_VIDEO_RESOLUTIONS = new Set(['720P', '1080P']);
|
|
3
|
+
const IMAGE_MODELS = ["alibaba_wan27_image", "alibaba_wan27_image_pro"];
|
|
4
|
+
const VIDEO_T2V_27_MODELS = ["alibaba_wan27_t2v"];
|
|
5
|
+
const VIDEO_T2V_26_MODELS = ["alibaba_wanx26_t2v"];
|
|
6
|
+
const VIDEO_I2V_27_MODELS = ["alibaba_wan27_i2v"];
|
|
7
|
+
const VIDEO_I2V_26_MODELS = ["alibaba_wanx26_i2v", "alibaba_wanx26_i2v_flash"];
|
|
8
|
+
const VIDEO_REF_27_MODELS = ["alibaba_wan27_r2v"];
|
|
9
|
+
const VIDEO_REF_26_MODELS = ["alibaba_wanx26_reference"];
|
|
10
|
+
const VIDEO_EDIT_MODELS = ["alibaba_wan27_videoedit"];
|
|
11
|
+
const WAN27_RATIOS = new Set(["16:9", "9:16", "1:1", "4:3", "3:4"]);
|
|
12
|
+
const WAN27_VIDEO_RESOLUTIONS = new Set(["720P", "1080P"]);
|
|
31
13
|
function maybeString(value) {
|
|
32
|
-
if (typeof value !==
|
|
14
|
+
if (typeof value !== "string" || value.length === 0)
|
|
33
15
|
return undefined;
|
|
34
16
|
return value;
|
|
35
17
|
}
|
|
36
18
|
function maybeStringArray(value) {
|
|
37
19
|
if (Array.isArray(value)) {
|
|
38
|
-
return value.filter((item) => typeof item ===
|
|
20
|
+
return value.filter((item) => typeof item === "string" && item.length > 0);
|
|
39
21
|
}
|
|
40
|
-
if (typeof value ===
|
|
22
|
+
if (typeof value === "string" && value.length > 0)
|
|
41
23
|
return [value];
|
|
42
24
|
return [];
|
|
43
25
|
}
|
|
@@ -49,8 +31,8 @@ function assertUnsupported(model, value, flagName, hint) {
|
|
|
49
31
|
function parseEnum(model, value, flagName, allowed) {
|
|
50
32
|
if (value === undefined)
|
|
51
33
|
return undefined;
|
|
52
|
-
if (typeof value !==
|
|
53
|
-
throw new CLIError(`Model "${model}" requires --${flagName} to be one of: ${Array.from(allowed).join(
|
|
34
|
+
if (typeof value !== "string" || !allowed.has(value)) {
|
|
35
|
+
throw new CLIError(`Model "${model}" requires --${flagName} to be one of: ${Array.from(allowed).join(", ")}.`, ExitCode.USAGE);
|
|
54
36
|
}
|
|
55
37
|
return value;
|
|
56
38
|
}
|
|
@@ -91,415 +73,415 @@ function buildMessageContent(prompt, flags) {
|
|
|
91
73
|
return content;
|
|
92
74
|
}
|
|
93
75
|
function assertUnsupportedImageFlags(model, flags) {
|
|
94
|
-
assertUnsupported(model, flags.modelVerNo,
|
|
95
|
-
assertUnsupported(model, flags.steps,
|
|
96
|
-
assertUnsupported(model, flags.cfgScale,
|
|
97
|
-
assertUnsupported(model, flags.denoise,
|
|
98
|
-
assertUnsupported(model, flags.action,
|
|
99
|
-
assertUnsupported(model, flags.width,
|
|
100
|
-
assertUnsupported(model, flags.height,
|
|
101
|
-
assertUnsupported(model, flags.aspectRatio,
|
|
102
|
-
assertUnsupported(model, flags.resolution,
|
|
103
|
-
assertUnsupported(model, flags.logoAdd,
|
|
104
|
-
assertUnsupported(model, flags.revise,
|
|
105
|
-
assertUnsupported(model, flags.negativePrompt,
|
|
106
|
-
assertUnsupported(model, flags.externalTaskId,
|
|
107
|
-
assertUnsupported(model, flags.elementIds,
|
|
108
|
-
assertUnsupported(model, flags.resultType,
|
|
109
|
-
assertUnsupported(model, flags.seriesAmount,
|
|
110
|
-
assertUnsupported(model, flags.scale,
|
|
111
|
-
assertUnsupported(model, flags.templateId,
|
|
112
|
-
assertUnsupported(model, flags.reqKey,
|
|
113
|
-
assertUnsupported(model, flags.subReqKey,
|
|
114
|
-
assertUnsupported(model, flags.refType,
|
|
115
|
-
assertUnsupported(model, flags.gpen,
|
|
116
|
-
assertUnsupported(model, flags.skin,
|
|
117
|
-
assertUnsupported(model, flags.skinUnifi,
|
|
118
|
-
assertUnsupported(model, flags.genMode,
|
|
76
|
+
assertUnsupported(model, flags.modelVerNo, "model-ver-no");
|
|
77
|
+
assertUnsupported(model, flags.steps, "steps");
|
|
78
|
+
assertUnsupported(model, flags.cfgScale, "cfg-scale");
|
|
79
|
+
assertUnsupported(model, flags.denoise, "denoise");
|
|
80
|
+
assertUnsupported(model, flags.action, "action");
|
|
81
|
+
assertUnsupported(model, flags.width, "width");
|
|
82
|
+
assertUnsupported(model, flags.height, "height");
|
|
83
|
+
assertUnsupported(model, flags.aspectRatio, "aspect-ratio");
|
|
84
|
+
assertUnsupported(model, flags.resolution, "resolution");
|
|
85
|
+
assertUnsupported(model, flags.logoAdd, "logo-add");
|
|
86
|
+
assertUnsupported(model, flags.revise, "revise");
|
|
87
|
+
assertUnsupported(model, flags.negativePrompt, "negative-prompt");
|
|
88
|
+
assertUnsupported(model, flags.externalTaskId, "external-task-id");
|
|
89
|
+
assertUnsupported(model, flags.elementIds, "element-ids");
|
|
90
|
+
assertUnsupported(model, flags.resultType, "result-type");
|
|
91
|
+
assertUnsupported(model, flags.seriesAmount, "series-amount");
|
|
92
|
+
assertUnsupported(model, flags.scale, "scale");
|
|
93
|
+
assertUnsupported(model, flags.templateId, "template-id");
|
|
94
|
+
assertUnsupported(model, flags.reqKey, "req-key");
|
|
95
|
+
assertUnsupported(model, flags.subReqKey, "sub-req-key");
|
|
96
|
+
assertUnsupported(model, flags.refType, "ref-type");
|
|
97
|
+
assertUnsupported(model, flags.gpen, "gpen");
|
|
98
|
+
assertUnsupported(model, flags.skin, "skin");
|
|
99
|
+
assertUnsupported(model, flags.skinUnifi, "skin-unifi");
|
|
100
|
+
assertUnsupported(model, flags.genMode, "gen-mode");
|
|
119
101
|
}
|
|
120
102
|
function assertUnsupportedAlibabaVideoFlags(model, flags) {
|
|
121
103
|
const entries = [
|
|
122
|
-
[
|
|
123
|
-
[
|
|
124
|
-
[
|
|
125
|
-
[
|
|
126
|
-
[
|
|
127
|
-
[
|
|
128
|
-
[
|
|
129
|
-
[
|
|
130
|
-
[
|
|
131
|
-
[
|
|
132
|
-
[
|
|
133
|
-
[
|
|
134
|
-
[
|
|
135
|
-
[
|
|
136
|
-
[
|
|
137
|
-
[
|
|
138
|
-
[
|
|
139
|
-
[
|
|
140
|
-
[
|
|
141
|
-
[
|
|
142
|
-
[
|
|
143
|
-
[
|
|
144
|
-
[
|
|
145
|
-
[
|
|
146
|
-
[
|
|
147
|
-
[
|
|
148
|
-
[
|
|
149
|
-
[
|
|
150
|
-
[
|
|
151
|
-
[
|
|
152
|
-
[
|
|
153
|
-
[
|
|
154
|
-
[
|
|
155
|
-
[
|
|
156
|
-
[
|
|
157
|
-
[
|
|
158
|
-
[
|
|
159
|
-
[
|
|
160
|
-
[
|
|
161
|
-
[
|
|
162
|
-
[
|
|
163
|
-
[
|
|
164
|
-
[
|
|
165
|
-
[
|
|
166
|
-
[
|
|
167
|
-
[
|
|
168
|
-
[
|
|
169
|
-
[
|
|
170
|
-
[
|
|
171
|
-
[
|
|
104
|
+
["short", flags.short],
|
|
105
|
+
["fps", flags.fps],
|
|
106
|
+
["frames", flags.frames],
|
|
107
|
+
["service-tier", flags.serviceTier],
|
|
108
|
+
["expires-after", flags.expiresAfter],
|
|
109
|
+
["style", flags.style],
|
|
110
|
+
["payload", flags.payload],
|
|
111
|
+
["callback-url", flags.callbackUrl],
|
|
112
|
+
["off-peak", flags.offPeak],
|
|
113
|
+
["recommend-prompt", flags.recommendPrompt],
|
|
114
|
+
["enhance-prompt", flags.enhancePrompt],
|
|
115
|
+
["template", flags.template],
|
|
116
|
+
["template-params", flags.templateParams],
|
|
117
|
+
["language", flags.language],
|
|
118
|
+
["creative", flags.creative],
|
|
119
|
+
["add-subtitle", flags.addSubtitle],
|
|
120
|
+
["remove-audio", flags.removeAudio],
|
|
121
|
+
["watermark-position", flags.watermarkPosition],
|
|
122
|
+
["watermark-url", flags.watermarkUrl],
|
|
123
|
+
["meta-data", flags.metaData],
|
|
124
|
+
["external-task-id", flags.externalTaskId],
|
|
125
|
+
["element-ids", flags.elementIds],
|
|
126
|
+
["effect-scene", flags.effectScene],
|
|
127
|
+
["character-orientation", flags.characterOrientation],
|
|
128
|
+
["keep-original-sound", flags.keepOriginalSound],
|
|
129
|
+
["video-refer-type", flags.videoReferType],
|
|
130
|
+
["lipsync-mode", flags.lipsyncMode],
|
|
131
|
+
["camera-fixed", flags.cameraFixed],
|
|
132
|
+
["return-last-frame", flags.returnLastFrame],
|
|
133
|
+
["draft", flags.draft],
|
|
134
|
+
["draft-task-id", flags.draftTaskId],
|
|
135
|
+
["mask-urls", flags.maskUrls],
|
|
136
|
+
["movement-amplitude", flags.movementAmplitude],
|
|
137
|
+
["mode", flags.mode],
|
|
138
|
+
["cfg-scale", flags.cfgScale],
|
|
139
|
+
["video-quality", flags.videoQuality],
|
|
140
|
+
["pe-fast-mode", flags.peFastMode],
|
|
141
|
+
["audio-id", flags.audioId],
|
|
142
|
+
["voice-id", flags.voiceId],
|
|
143
|
+
["voice-language", flags.voiceLanguage],
|
|
144
|
+
["voice-speed", flags.voiceSpeed],
|
|
145
|
+
["bgm", flags.bgm],
|
|
146
|
+
["sound", flags.sound],
|
|
147
|
+
["sounds", flags.sounds],
|
|
148
|
+
["bitrate", flags.bitrate],
|
|
149
|
+
["extension-type", flags.extensionType],
|
|
150
|
+
["character-reference-url", flags.characterReferenceUrl],
|
|
151
|
+
["style-reference-url", flags.styleReferenceUrl],
|
|
152
|
+
["character-reference-weight", flags.characterReferenceWeight],
|
|
153
|
+
["style-reference-weight", flags.styleReferenceWeight],
|
|
172
154
|
];
|
|
173
155
|
for (const [flagName, value] of entries) {
|
|
174
156
|
assertUnsupported(model, value, flagName);
|
|
175
157
|
}
|
|
176
158
|
}
|
|
177
159
|
registerProvider({
|
|
178
|
-
provider:
|
|
179
|
-
category:
|
|
160
|
+
provider: "alibaba",
|
|
161
|
+
category: "image",
|
|
180
162
|
models: IMAGE_MODELS,
|
|
181
163
|
buildBody(model, prompt, flags) {
|
|
182
164
|
assertUnsupportedImageFlags(model, flags);
|
|
183
165
|
const upstreamInput = {
|
|
184
|
-
messages: [{ role:
|
|
166
|
+
messages: [{ role: "user", content: buildMessageContent(prompt, flags) }],
|
|
185
167
|
};
|
|
186
168
|
const upstreamParameters = {};
|
|
187
169
|
if (flags.size)
|
|
188
|
-
upstreamParameters[
|
|
170
|
+
upstreamParameters["size"] = flags.size;
|
|
189
171
|
if (flags.n)
|
|
190
|
-
upstreamParameters[
|
|
172
|
+
upstreamParameters["n"] = flags.n;
|
|
191
173
|
if (flags.seed !== undefined)
|
|
192
|
-
upstreamParameters[
|
|
174
|
+
upstreamParameters["seed"] = flags.seed;
|
|
193
175
|
if (flags.watermark !== undefined)
|
|
194
|
-
upstreamParameters[
|
|
176
|
+
upstreamParameters["watermark"] = flags.watermark;
|
|
195
177
|
const params = { input: upstreamInput };
|
|
196
178
|
if (Object.keys(upstreamParameters).length > 0)
|
|
197
|
-
params[
|
|
179
|
+
params["parameters"] = upstreamParameters;
|
|
198
180
|
return buildEnvelope(model, params);
|
|
199
181
|
},
|
|
200
182
|
});
|
|
201
183
|
registerProvider({
|
|
202
|
-
provider:
|
|
203
|
-
category:
|
|
184
|
+
provider: "alibaba",
|
|
185
|
+
category: "video",
|
|
204
186
|
models: VIDEO_T2V_27_MODELS,
|
|
205
187
|
buildBody(model, prompt, flags) {
|
|
206
|
-
assertUnsupported(model, flags.imageUrl,
|
|
207
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
208
|
-
assertUnsupported(model, flags.imageUrls,
|
|
209
|
-
assertUnsupported(model, flags.referenceUrls,
|
|
210
|
-
assertUnsupported(model, flags.videoUrl,
|
|
211
|
-
assertUnsupported(model, flags.videoId,
|
|
212
|
-
assertUnsupported(model, flags.size,
|
|
213
|
-
assertUnsupported(model, flags.shotType,
|
|
214
|
-
assertUnsupported(model, flags.audio,
|
|
188
|
+
assertUnsupported(model, flags.imageUrl, "image-url");
|
|
189
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
190
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
191
|
+
assertUnsupported(model, flags.referenceUrls, "reference-urls");
|
|
192
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
193
|
+
assertUnsupported(model, flags.videoId, "video-id");
|
|
194
|
+
assertUnsupported(model, flags.size, "size");
|
|
195
|
+
assertUnsupported(model, flags.shotType, "shot-type");
|
|
196
|
+
assertUnsupported(model, flags.audio, "audio");
|
|
215
197
|
assertUnsupportedAlibabaVideoFlags(model, flags);
|
|
216
198
|
const upstreamInput = { prompt };
|
|
217
199
|
if (flags.audioUrl)
|
|
218
|
-
upstreamInput[
|
|
200
|
+
upstreamInput["audio_url"] = flags.audioUrl;
|
|
219
201
|
const upstreamParameters = {};
|
|
220
202
|
if (flags.resolution !== undefined) {
|
|
221
|
-
upstreamParameters[
|
|
203
|
+
upstreamParameters["resolution"] = parseEnum(model, flags.resolution, "resolution", WAN27_VIDEO_RESOLUTIONS);
|
|
222
204
|
}
|
|
223
205
|
if (flags.aspectRatio !== undefined) {
|
|
224
|
-
upstreamParameters[
|
|
206
|
+
upstreamParameters["ratio"] = parseEnum(model, flags.aspectRatio, "aspect-ratio", WAN27_RATIOS);
|
|
225
207
|
}
|
|
226
208
|
if (flags.duration !== undefined)
|
|
227
|
-
upstreamParameters[
|
|
209
|
+
upstreamParameters["duration"] = flags.duration;
|
|
228
210
|
if (flags.seed !== undefined)
|
|
229
|
-
upstreamParameters[
|
|
211
|
+
upstreamParameters["seed"] = flags.seed;
|
|
230
212
|
if (flags.watermark !== undefined)
|
|
231
|
-
upstreamParameters[
|
|
213
|
+
upstreamParameters["watermark"] = flags.watermark;
|
|
232
214
|
if (flags.negativePrompt)
|
|
233
|
-
upstreamParameters[
|
|
215
|
+
upstreamParameters["negative_prompt"] = flags.negativePrompt;
|
|
234
216
|
const params = { input: upstreamInput };
|
|
235
217
|
if (Object.keys(upstreamParameters).length > 0)
|
|
236
|
-
params[
|
|
218
|
+
params["parameters"] = upstreamParameters;
|
|
237
219
|
return buildEnvelope(model, params);
|
|
238
220
|
},
|
|
239
221
|
});
|
|
240
222
|
registerProvider({
|
|
241
|
-
provider:
|
|
242
|
-
category:
|
|
223
|
+
provider: "alibaba",
|
|
224
|
+
category: "video",
|
|
243
225
|
models: VIDEO_T2V_26_MODELS,
|
|
244
226
|
buildBody(model, prompt, flags) {
|
|
245
|
-
assertUnsupported(model, flags.imageUrl,
|
|
246
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
247
|
-
assertUnsupported(model, flags.imageUrls,
|
|
248
|
-
assertUnsupported(model, flags.referenceUrls,
|
|
249
|
-
assertUnsupported(model, flags.videoUrl,
|
|
250
|
-
assertUnsupported(model, flags.videoId,
|
|
251
|
-
assertUnsupported(model, flags.aspectRatio,
|
|
252
|
-
assertUnsupported(model, flags.resolution,
|
|
253
|
-
assertUnsupported(model, flags.watermark,
|
|
227
|
+
assertUnsupported(model, flags.imageUrl, "image-url");
|
|
228
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
229
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
230
|
+
assertUnsupported(model, flags.referenceUrls, "reference-urls");
|
|
231
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
232
|
+
assertUnsupported(model, flags.videoId, "video-id");
|
|
233
|
+
assertUnsupported(model, flags.aspectRatio, "aspect-ratio");
|
|
234
|
+
assertUnsupported(model, flags.resolution, "resolution");
|
|
235
|
+
assertUnsupported(model, flags.watermark, "watermark");
|
|
254
236
|
assertUnsupportedAlibabaVideoFlags(model, flags);
|
|
255
237
|
const upstreamInput = { prompt };
|
|
256
238
|
if (flags.audioUrl)
|
|
257
|
-
upstreamInput[
|
|
239
|
+
upstreamInput["audio_url"] = flags.audioUrl;
|
|
258
240
|
const upstreamParameters = {};
|
|
259
241
|
if (flags.duration !== undefined)
|
|
260
|
-
upstreamParameters[
|
|
242
|
+
upstreamParameters["duration"] = flags.duration;
|
|
261
243
|
if (flags.size)
|
|
262
|
-
upstreamParameters[
|
|
244
|
+
upstreamParameters["size"] = flags.size;
|
|
263
245
|
if (flags.shotType)
|
|
264
|
-
upstreamParameters[
|
|
246
|
+
upstreamParameters["shot_type"] = flags.shotType;
|
|
265
247
|
if (flags.seed !== undefined)
|
|
266
|
-
upstreamParameters[
|
|
248
|
+
upstreamParameters["seed"] = flags.seed;
|
|
267
249
|
if (flags.audio !== undefined)
|
|
268
|
-
upstreamParameters[
|
|
250
|
+
upstreamParameters["audio"] = flags.audio;
|
|
269
251
|
if (flags.negativePrompt)
|
|
270
|
-
upstreamParameters[
|
|
252
|
+
upstreamParameters["negative_prompt"] = flags.negativePrompt;
|
|
271
253
|
const params = { input: upstreamInput };
|
|
272
254
|
if (Object.keys(upstreamParameters).length > 0)
|
|
273
|
-
params[
|
|
255
|
+
params["parameters"] = upstreamParameters;
|
|
274
256
|
return buildEnvelope(model, params);
|
|
275
257
|
},
|
|
276
258
|
});
|
|
277
259
|
registerProvider({
|
|
278
|
-
provider:
|
|
279
|
-
category:
|
|
260
|
+
provider: "alibaba",
|
|
261
|
+
category: "video",
|
|
280
262
|
models: VIDEO_I2V_27_MODELS,
|
|
281
263
|
requiresPrompt() {
|
|
282
264
|
return false;
|
|
283
265
|
},
|
|
284
266
|
buildBody(model, prompt, flags) {
|
|
285
267
|
assertUnsupportedAlibabaVideoFlags(model, flags);
|
|
286
|
-
assertUnsupported(model, flags.imageUrls,
|
|
287
|
-
assertUnsupported(model, flags.referenceUrls,
|
|
288
|
-
assertUnsupported(model, flags.size,
|
|
289
|
-
assertUnsupported(model, flags.shotType,
|
|
290
|
-
assertUnsupported(model, flags.audio,
|
|
268
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
269
|
+
assertUnsupported(model, flags.referenceUrls, "reference-urls");
|
|
270
|
+
assertUnsupported(model, flags.size, "size");
|
|
271
|
+
assertUnsupported(model, flags.shotType, "shot-type");
|
|
272
|
+
assertUnsupported(model, flags.audio, "audio");
|
|
291
273
|
const media = [
|
|
292
|
-
{ type:
|
|
274
|
+
{ type: "first_frame", url: requireSingleImage(model, flags) },
|
|
293
275
|
];
|
|
294
276
|
const lastFrame = maybeString(flags.imageTailUrl);
|
|
295
277
|
if (lastFrame)
|
|
296
|
-
media.push({ type:
|
|
278
|
+
media.push({ type: "last_frame", url: lastFrame });
|
|
297
279
|
const drivingAudio = maybeString(flags.audioUrl);
|
|
298
280
|
if (drivingAudio)
|
|
299
|
-
media.push({ type:
|
|
281
|
+
media.push({ type: "driving_audio", url: drivingAudio });
|
|
300
282
|
const firstClip = maybeString(flags.videoUrl);
|
|
301
283
|
if (firstClip)
|
|
302
|
-
media.push({ type:
|
|
284
|
+
media.push({ type: "first_clip", url: firstClip });
|
|
303
285
|
const upstreamInput = { media };
|
|
304
286
|
if (prompt)
|
|
305
|
-
upstreamInput[
|
|
287
|
+
upstreamInput["prompt"] = prompt;
|
|
306
288
|
if (flags.negativePrompt)
|
|
307
|
-
upstreamInput[
|
|
289
|
+
upstreamInput["negative_prompt"] = flags.negativePrompt;
|
|
308
290
|
const upstreamParameters = {};
|
|
309
291
|
if (flags.resolution !== undefined) {
|
|
310
|
-
upstreamParameters[
|
|
292
|
+
upstreamParameters["resolution"] = parseEnum(model, flags.resolution, "resolution", WAN27_VIDEO_RESOLUTIONS);
|
|
311
293
|
}
|
|
312
294
|
if (flags.duration !== undefined)
|
|
313
|
-
upstreamParameters[
|
|
295
|
+
upstreamParameters["duration"] = flags.duration;
|
|
314
296
|
if (flags.seed !== undefined)
|
|
315
|
-
upstreamParameters[
|
|
297
|
+
upstreamParameters["seed"] = flags.seed;
|
|
316
298
|
if (flags.watermark !== undefined)
|
|
317
|
-
upstreamParameters[
|
|
299
|
+
upstreamParameters["watermark"] = flags.watermark;
|
|
318
300
|
const params = { input: upstreamInput };
|
|
319
301
|
if (Object.keys(upstreamParameters).length > 0)
|
|
320
|
-
params[
|
|
302
|
+
params["parameters"] = upstreamParameters;
|
|
321
303
|
return buildEnvelope(model, params);
|
|
322
304
|
},
|
|
323
305
|
});
|
|
324
306
|
registerProvider({
|
|
325
|
-
provider:
|
|
326
|
-
category:
|
|
307
|
+
provider: "alibaba",
|
|
308
|
+
category: "video",
|
|
327
309
|
models: VIDEO_I2V_26_MODELS,
|
|
328
310
|
requiresPrompt() {
|
|
329
311
|
return false;
|
|
330
312
|
},
|
|
331
313
|
buildBody(model, prompt, flags) {
|
|
332
314
|
assertUnsupportedAlibabaVideoFlags(model, flags);
|
|
333
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
334
|
-
assertUnsupported(model, flags.imageUrls,
|
|
335
|
-
assertUnsupported(model, flags.referenceUrls,
|
|
336
|
-
assertUnsupported(model, flags.videoUrl,
|
|
337
|
-
assertUnsupported(model, flags.videoId,
|
|
338
|
-
assertUnsupported(model, flags.aspectRatio,
|
|
339
|
-
assertUnsupported(model, flags.size,
|
|
340
|
-
assertUnsupported(model, flags.audioUrl,
|
|
341
|
-
assertUnsupported(model, flags.audio,
|
|
342
|
-
assertUnsupported(model, flags.shotType,
|
|
343
|
-
assertUnsupported(model, flags.watermark,
|
|
315
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
316
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
317
|
+
assertUnsupported(model, flags.referenceUrls, "reference-urls");
|
|
318
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
319
|
+
assertUnsupported(model, flags.videoId, "video-id");
|
|
320
|
+
assertUnsupported(model, flags.aspectRatio, "aspect-ratio");
|
|
321
|
+
assertUnsupported(model, flags.size, "size");
|
|
322
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
323
|
+
assertUnsupported(model, flags.audio, "audio");
|
|
324
|
+
assertUnsupported(model, flags.shotType, "shot-type");
|
|
325
|
+
assertUnsupported(model, flags.watermark, "watermark");
|
|
344
326
|
const upstreamInput = { img_url: requireSingleImage(model, flags) };
|
|
345
327
|
if (prompt)
|
|
346
|
-
upstreamInput[
|
|
328
|
+
upstreamInput["prompt"] = prompt;
|
|
347
329
|
const upstreamParameters = {};
|
|
348
330
|
if (flags.resolution)
|
|
349
|
-
upstreamParameters[
|
|
331
|
+
upstreamParameters["resolution"] = flags.resolution;
|
|
350
332
|
if (flags.duration !== undefined)
|
|
351
|
-
upstreamParameters[
|
|
333
|
+
upstreamParameters["duration"] = flags.duration;
|
|
352
334
|
if (flags.seed !== undefined)
|
|
353
|
-
upstreamParameters[
|
|
335
|
+
upstreamParameters["seed"] = flags.seed;
|
|
354
336
|
if (flags.negativePrompt)
|
|
355
|
-
upstreamParameters[
|
|
337
|
+
upstreamParameters["negative_prompt"] = flags.negativePrompt;
|
|
356
338
|
const params = { input: upstreamInput };
|
|
357
339
|
if (Object.keys(upstreamParameters).length > 0)
|
|
358
|
-
params[
|
|
340
|
+
params["parameters"] = upstreamParameters;
|
|
359
341
|
return buildEnvelope(model, params);
|
|
360
342
|
},
|
|
361
343
|
});
|
|
362
344
|
registerProvider({
|
|
363
|
-
provider:
|
|
364
|
-
category:
|
|
345
|
+
provider: "alibaba",
|
|
346
|
+
category: "video",
|
|
365
347
|
models: VIDEO_REF_27_MODELS,
|
|
366
348
|
requiresPrompt() {
|
|
367
349
|
return false;
|
|
368
350
|
},
|
|
369
351
|
buildBody(model, prompt, flags) {
|
|
370
352
|
assertUnsupportedAlibabaVideoFlags(model, flags);
|
|
371
|
-
assertUnsupported(model, flags.referenceUrls,
|
|
372
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
373
|
-
assertUnsupported(model, flags.audioUrl,
|
|
374
|
-
assertUnsupported(model, flags.audio,
|
|
375
|
-
assertUnsupported(model, flags.size,
|
|
376
|
-
assertUnsupported(model, flags.shotType,
|
|
377
|
-
assertUnsupported(model, flags.videoId,
|
|
353
|
+
assertUnsupported(model, flags.referenceUrls, "reference-urls");
|
|
354
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
355
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
356
|
+
assertUnsupported(model, flags.audio, "audio");
|
|
357
|
+
assertUnsupported(model, flags.size, "size");
|
|
358
|
+
assertUnsupported(model, flags.shotType, "shot-type");
|
|
359
|
+
assertUnsupported(model, flags.videoId, "video-id");
|
|
378
360
|
const media = [];
|
|
379
361
|
const firstFrame = maybeString(flags.imageUrl);
|
|
380
362
|
if (firstFrame)
|
|
381
|
-
media.push({ type:
|
|
363
|
+
media.push({ type: "first_frame", url: firstFrame });
|
|
382
364
|
for (const image of maybeStringArray(flags.imageUrls)) {
|
|
383
|
-
media.push({ type:
|
|
365
|
+
media.push({ type: "reference_image", url: image });
|
|
384
366
|
}
|
|
385
367
|
const referenceVideo = maybeString(flags.videoUrl);
|
|
386
368
|
if (referenceVideo)
|
|
387
|
-
media.push({ type:
|
|
369
|
+
media.push({ type: "reference_video", url: referenceVideo });
|
|
388
370
|
if (media.length === 0) {
|
|
389
371
|
throw new CLIError(`Model "${model}" requires at least one media input via --image-url, --image-urls, or --video-url.`, ExitCode.USAGE);
|
|
390
372
|
}
|
|
391
373
|
const upstreamInput = { media };
|
|
392
374
|
if (prompt)
|
|
393
|
-
upstreamInput[
|
|
375
|
+
upstreamInput["prompt"] = prompt;
|
|
394
376
|
if (flags.negativePrompt)
|
|
395
|
-
upstreamInput[
|
|
377
|
+
upstreamInput["negative_prompt"] = flags.negativePrompt;
|
|
396
378
|
const upstreamParameters = {};
|
|
397
379
|
if (flags.resolution !== undefined) {
|
|
398
|
-
upstreamParameters[
|
|
380
|
+
upstreamParameters["resolution"] = parseEnum(model, flags.resolution, "resolution", WAN27_VIDEO_RESOLUTIONS);
|
|
399
381
|
}
|
|
400
382
|
if (flags.aspectRatio !== undefined) {
|
|
401
|
-
upstreamParameters[
|
|
383
|
+
upstreamParameters["ratio"] = parseEnum(model, flags.aspectRatio, "aspect-ratio", WAN27_RATIOS);
|
|
402
384
|
}
|
|
403
385
|
if (flags.duration !== undefined)
|
|
404
|
-
upstreamParameters[
|
|
386
|
+
upstreamParameters["duration"] = flags.duration;
|
|
405
387
|
if (flags.seed !== undefined)
|
|
406
|
-
upstreamParameters[
|
|
388
|
+
upstreamParameters["seed"] = flags.seed;
|
|
407
389
|
if (flags.watermark !== undefined)
|
|
408
|
-
upstreamParameters[
|
|
390
|
+
upstreamParameters["watermark"] = flags.watermark;
|
|
409
391
|
const params = { input: upstreamInput };
|
|
410
392
|
if (Object.keys(upstreamParameters).length > 0)
|
|
411
|
-
params[
|
|
393
|
+
params["parameters"] = upstreamParameters;
|
|
412
394
|
return buildEnvelope(model, params);
|
|
413
395
|
},
|
|
414
396
|
});
|
|
415
397
|
registerProvider({
|
|
416
|
-
provider:
|
|
417
|
-
category:
|
|
398
|
+
provider: "alibaba",
|
|
399
|
+
category: "video",
|
|
418
400
|
models: VIDEO_REF_26_MODELS,
|
|
419
401
|
requiresPrompt() {
|
|
420
402
|
return false;
|
|
421
403
|
},
|
|
422
404
|
buildBody(model, prompt, flags) {
|
|
423
405
|
assertUnsupportedAlibabaVideoFlags(model, flags);
|
|
424
|
-
assertUnsupported(model, flags.imageUrl,
|
|
425
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
426
|
-
assertUnsupported(model, flags.imageUrls,
|
|
427
|
-
assertUnsupported(model, flags.videoUrl,
|
|
428
|
-
assertUnsupported(model, flags.videoId,
|
|
429
|
-
assertUnsupported(model, flags.aspectRatio,
|
|
430
|
-
assertUnsupported(model, flags.resolution,
|
|
431
|
-
assertUnsupported(model, flags.watermark,
|
|
406
|
+
assertUnsupported(model, flags.imageUrl, "image-url");
|
|
407
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
408
|
+
assertUnsupported(model, flags.imageUrls, "image-urls");
|
|
409
|
+
assertUnsupported(model, flags.videoUrl, "video-url");
|
|
410
|
+
assertUnsupported(model, flags.videoId, "video-id");
|
|
411
|
+
assertUnsupported(model, flags.aspectRatio, "aspect-ratio");
|
|
412
|
+
assertUnsupported(model, flags.resolution, "resolution");
|
|
413
|
+
assertUnsupported(model, flags.watermark, "watermark");
|
|
432
414
|
const upstreamInput = {
|
|
433
415
|
reference_urls: requireReferenceUrls(model, flags),
|
|
434
416
|
};
|
|
435
417
|
if (prompt)
|
|
436
|
-
upstreamInput[
|
|
418
|
+
upstreamInput["prompt"] = prompt;
|
|
437
419
|
if (flags.audioUrl)
|
|
438
|
-
upstreamInput[
|
|
420
|
+
upstreamInput["audio_url"] = flags.audioUrl;
|
|
439
421
|
const upstreamParameters = {};
|
|
440
422
|
if (flags.duration !== undefined)
|
|
441
|
-
upstreamParameters[
|
|
423
|
+
upstreamParameters["duration"] = flags.duration;
|
|
442
424
|
if (flags.size)
|
|
443
|
-
upstreamParameters[
|
|
425
|
+
upstreamParameters["size"] = flags.size;
|
|
444
426
|
if (flags.seed !== undefined)
|
|
445
|
-
upstreamParameters[
|
|
427
|
+
upstreamParameters["seed"] = flags.seed;
|
|
446
428
|
if (flags.audio !== undefined)
|
|
447
|
-
upstreamParameters[
|
|
429
|
+
upstreamParameters["audio"] = flags.audio;
|
|
448
430
|
if (flags.shotType)
|
|
449
|
-
upstreamParameters[
|
|
431
|
+
upstreamParameters["shot_type"] = flags.shotType;
|
|
450
432
|
if (flags.negativePrompt)
|
|
451
|
-
upstreamParameters[
|
|
433
|
+
upstreamParameters["negative_prompt"] = flags.negativePrompt;
|
|
452
434
|
const params = { input: upstreamInput };
|
|
453
435
|
if (Object.keys(upstreamParameters).length > 0)
|
|
454
|
-
params[
|
|
436
|
+
params["parameters"] = upstreamParameters;
|
|
455
437
|
return buildEnvelope(model, params);
|
|
456
438
|
},
|
|
457
439
|
});
|
|
458
440
|
registerProvider({
|
|
459
|
-
provider:
|
|
460
|
-
category:
|
|
441
|
+
provider: "alibaba",
|
|
442
|
+
category: "video",
|
|
461
443
|
models: VIDEO_EDIT_MODELS,
|
|
462
444
|
requiresPrompt() {
|
|
463
445
|
return false;
|
|
464
446
|
},
|
|
465
447
|
buildBody(model, prompt, flags) {
|
|
466
448
|
assertUnsupportedAlibabaVideoFlags(model, flags);
|
|
467
|
-
assertUnsupported(model, flags.referenceUrls,
|
|
468
|
-
assertUnsupported(model, flags.imageTailUrl,
|
|
469
|
-
assertUnsupported(model, flags.audioUrl,
|
|
470
|
-
assertUnsupported(model, flags.audio,
|
|
471
|
-
assertUnsupported(model, flags.size,
|
|
472
|
-
assertUnsupported(model, flags.shotType,
|
|
473
|
-
assertUnsupported(model, flags.videoId,
|
|
449
|
+
assertUnsupported(model, flags.referenceUrls, "reference-urls");
|
|
450
|
+
assertUnsupported(model, flags.imageTailUrl, "image-tail-url");
|
|
451
|
+
assertUnsupported(model, flags.audioUrl, "audio-url");
|
|
452
|
+
assertUnsupported(model, flags.audio, "audio");
|
|
453
|
+
assertUnsupported(model, flags.size, "size");
|
|
454
|
+
assertUnsupported(model, flags.shotType, "shot-type");
|
|
455
|
+
assertUnsupported(model, flags.videoId, "video-id");
|
|
474
456
|
const videoUrl = maybeString(flags.videoUrl);
|
|
475
457
|
if (!videoUrl) {
|
|
476
458
|
throw new CLIError(`Model "${model}" requires --video-url.`, ExitCode.USAGE);
|
|
477
459
|
}
|
|
478
|
-
const media = [{ type:
|
|
460
|
+
const media = [{ type: "video", url: videoUrl }];
|
|
479
461
|
for (const image of collectImageInputs(flags)) {
|
|
480
|
-
media.push({ type:
|
|
462
|
+
media.push({ type: "reference_image", url: image });
|
|
481
463
|
}
|
|
482
464
|
const upstreamInput = { media };
|
|
483
465
|
if (prompt)
|
|
484
|
-
upstreamInput[
|
|
466
|
+
upstreamInput["prompt"] = prompt;
|
|
485
467
|
if (flags.negativePrompt)
|
|
486
|
-
upstreamInput[
|
|
468
|
+
upstreamInput["negative_prompt"] = flags.negativePrompt;
|
|
487
469
|
const upstreamParameters = {};
|
|
488
470
|
if (flags.resolution !== undefined) {
|
|
489
|
-
upstreamParameters[
|
|
471
|
+
upstreamParameters["resolution"] = parseEnum(model, flags.resolution, "resolution", WAN27_VIDEO_RESOLUTIONS);
|
|
490
472
|
}
|
|
491
473
|
if (flags.aspectRatio !== undefined) {
|
|
492
|
-
upstreamParameters[
|
|
474
|
+
upstreamParameters["ratio"] = parseEnum(model, flags.aspectRatio, "aspect-ratio", WAN27_RATIOS);
|
|
493
475
|
}
|
|
494
476
|
if (flags.duration !== undefined)
|
|
495
|
-
upstreamParameters[
|
|
477
|
+
upstreamParameters["duration"] = flags.duration;
|
|
496
478
|
if (flags.seed !== undefined)
|
|
497
|
-
upstreamParameters[
|
|
479
|
+
upstreamParameters["seed"] = flags.seed;
|
|
498
480
|
if (flags.watermark !== undefined)
|
|
499
|
-
upstreamParameters[
|
|
481
|
+
upstreamParameters["watermark"] = flags.watermark;
|
|
500
482
|
const params = { input: upstreamInput };
|
|
501
483
|
if (Object.keys(upstreamParameters).length > 0)
|
|
502
|
-
params[
|
|
484
|
+
params["parameters"] = upstreamParameters;
|
|
503
485
|
return buildEnvelope(model, params);
|
|
504
486
|
},
|
|
505
487
|
});
|