@sogni-ai/sogni-client 4.2.0-alpha.21 → 4.2.0-alpha.22

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 (170) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/CLAUDE.md +7 -0
  3. package/README.md +45 -25
  4. package/dist/Chat/ChatTools.js +30 -16
  5. package/dist/Chat/ChatTools.js.map +1 -1
  6. package/dist/Chat/hostedToolValidation.generated.d.ts +46 -0
  7. package/dist/Chat/hostedToolValidation.generated.js +306 -0
  8. package/dist/Chat/hostedToolValidation.generated.js.map +1 -0
  9. package/dist/Chat/index.d.ts +41 -1
  10. package/dist/Chat/index.js +166 -2
  11. package/dist/Chat/index.js.map +1 -1
  12. package/dist/Chat/modelRouting.d.ts +8 -26
  13. package/dist/Chat/modelRouting.js +11 -106
  14. package/dist/Chat/modelRouting.js.map +1 -1
  15. package/dist/Chat/sogniHostedTools.generated.json +1285 -283
  16. package/dist/Chat/tools.d.ts +52 -3
  17. package/dist/Chat/tools.js +80 -27
  18. package/dist/Chat/tools.js.map +1 -1
  19. package/dist/Chat/types.d.ts +119 -3
  20. package/dist/CreativeWorkflows/index.d.ts +1 -7
  21. package/dist/CreativeWorkflows/index.js +23 -21
  22. package/dist/CreativeWorkflows/index.js.map +1 -1
  23. package/dist/CreativeWorkflows/types.d.ts +27 -33
  24. package/dist/index.d.ts +19 -4
  25. package/dist/index.js +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/lib/Cache.js +6 -1
  28. package/dist/lib/Cache.js.map +1 -1
  29. package/dist-esm/Account/CurrentAccount.js +59 -0
  30. package/dist-esm/Account/CurrentAccount.js.map +1 -0
  31. package/dist-esm/Account/index.js +543 -0
  32. package/dist-esm/Account/index.js.map +1 -0
  33. package/dist-esm/Account/types.js +2 -0
  34. package/dist-esm/Account/types.js.map +1 -0
  35. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js +327 -0
  36. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js.map +1 -0
  37. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js +222 -0
  38. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js.map +1 -0
  39. package/dist-esm/ApiClient/WebSocketClient/ErrorCode.js +15 -0
  40. package/dist-esm/ApiClient/WebSocketClient/ErrorCode.js.map +1 -0
  41. package/dist-esm/ApiClient/WebSocketClient/eventSubscriptions.js +35 -0
  42. package/dist-esm/ApiClient/WebSocketClient/eventSubscriptions.js.map +1 -0
  43. package/dist-esm/ApiClient/WebSocketClient/events.js +2 -0
  44. package/dist-esm/ApiClient/WebSocketClient/events.js.map +1 -0
  45. package/dist-esm/ApiClient/WebSocketClient/index.js +221 -0
  46. package/dist-esm/ApiClient/WebSocketClient/index.js.map +1 -0
  47. package/dist-esm/ApiClient/WebSocketClient/messages.js +2 -0
  48. package/dist-esm/ApiClient/WebSocketClient/messages.js.map +1 -0
  49. package/dist-esm/ApiClient/WebSocketClient/types.js +2 -0
  50. package/dist-esm/ApiClient/WebSocketClient/types.js.map +1 -0
  51. package/dist-esm/ApiClient/events.js +2 -0
  52. package/dist-esm/ApiClient/events.js.map +1 -0
  53. package/dist-esm/ApiClient/index.js +120 -0
  54. package/dist-esm/ApiClient/index.js.map +1 -0
  55. package/dist-esm/ApiGroup.js +10 -0
  56. package/dist-esm/ApiGroup.js.map +1 -0
  57. package/dist-esm/Chat/ChatStream.js +181 -0
  58. package/dist-esm/Chat/ChatStream.js.map +1 -0
  59. package/dist-esm/Chat/ChatTools.js +562 -0
  60. package/dist-esm/Chat/ChatTools.js.map +1 -0
  61. package/dist-esm/Chat/hostedToolValidation.generated.js +301 -0
  62. package/dist-esm/Chat/hostedToolValidation.generated.js.map +1 -0
  63. package/dist-esm/Chat/index.js +598 -0
  64. package/dist-esm/Chat/index.js.map +1 -0
  65. package/dist-esm/Chat/modelRouting.js +326 -0
  66. package/dist-esm/Chat/modelRouting.js.map +1 -0
  67. package/dist-esm/Chat/sogniHostedTools.generated.json +1531 -0
  68. package/dist-esm/Chat/tools.js +149 -0
  69. package/dist-esm/Chat/tools.js.map +1 -0
  70. package/dist-esm/Chat/types.js +2 -0
  71. package/dist-esm/Chat/types.js.map +1 -0
  72. package/dist-esm/CreativeWorkflows/index.js +256 -0
  73. package/dist-esm/CreativeWorkflows/index.js.map +1 -0
  74. package/dist-esm/CreativeWorkflows/types.js +2 -0
  75. package/dist-esm/CreativeWorkflows/types.js.map +1 -0
  76. package/dist-esm/Projects/Job.js +391 -0
  77. package/dist-esm/Projects/Job.js.map +1 -0
  78. package/dist-esm/Projects/Project.js +295 -0
  79. package/dist-esm/Projects/Project.js.map +1 -0
  80. package/dist-esm/Projects/createJobRequestMessage.js +528 -0
  81. package/dist-esm/Projects/createJobRequestMessage.js.map +1 -0
  82. package/dist-esm/Projects/index.js +1309 -0
  83. package/dist-esm/Projects/index.js.map +1 -0
  84. package/dist-esm/Projects/types/ComfySamplerParams.js +2 -0
  85. package/dist-esm/Projects/types/ComfySamplerParams.js.map +1 -0
  86. package/dist-esm/Projects/types/ControlNetParams.js +2 -0
  87. package/dist-esm/Projects/types/ControlNetParams.js.map +1 -0
  88. package/dist-esm/Projects/types/EstimationResponse.js +2 -0
  89. package/dist-esm/Projects/types/EstimationResponse.js.map +1 -0
  90. package/dist-esm/Projects/types/ModelOptions.js +89 -0
  91. package/dist-esm/Projects/types/ModelOptions.js.map +1 -0
  92. package/dist-esm/Projects/types/ModelTiersRaw.js +13 -0
  93. package/dist-esm/Projects/types/ModelTiersRaw.js.map +1 -0
  94. package/dist-esm/Projects/types/RawProject.js +2 -0
  95. package/dist-esm/Projects/types/RawProject.js.map +1 -0
  96. package/dist-esm/Projects/types/events.js +2 -0
  97. package/dist-esm/Projects/types/events.js.map +1 -0
  98. package/dist-esm/Projects/types/index.js +10 -0
  99. package/dist-esm/Projects/types/index.js.map +1 -0
  100. package/dist-esm/Projects/utils/index.js +229 -0
  101. package/dist-esm/Projects/utils/index.js.map +1 -0
  102. package/dist-esm/Projects/utils/samplers.js +36 -0
  103. package/dist-esm/Projects/utils/samplers.js.map +1 -0
  104. package/dist-esm/Projects/utils/scheduler.js +27 -0
  105. package/dist-esm/Projects/utils/scheduler.js.map +1 -0
  106. package/dist-esm/Stats/index.js +20 -0
  107. package/dist-esm/Stats/index.js.map +1 -0
  108. package/dist-esm/Stats/types.js +2 -0
  109. package/dist-esm/Stats/types.js.map +1 -0
  110. package/dist-esm/events.js +2 -0
  111. package/dist-esm/events.js.map +1 -0
  112. package/dist-esm/index.js +144 -0
  113. package/dist-esm/index.js.map +1 -0
  114. package/dist-esm/lib/AuthManager/ApiKeyAuthManager.js +58 -0
  115. package/dist-esm/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
  116. package/dist-esm/lib/AuthManager/AuthManagerBase.js +9 -0
  117. package/dist-esm/lib/AuthManager/AuthManagerBase.js.map +1 -0
  118. package/dist-esm/lib/AuthManager/CookieAuthManager.js +48 -0
  119. package/dist-esm/lib/AuthManager/CookieAuthManager.js.map +1 -0
  120. package/dist-esm/lib/AuthManager/TokenAuthManager.js +186 -0
  121. package/dist-esm/lib/AuthManager/TokenAuthManager.js.map +1 -0
  122. package/dist-esm/lib/AuthManager/index.js +5 -0
  123. package/dist-esm/lib/AuthManager/index.js.map +1 -0
  124. package/dist-esm/lib/Cache.js +32 -0
  125. package/dist-esm/lib/Cache.js.map +1 -0
  126. package/dist-esm/lib/DataEntity.js +30 -0
  127. package/dist-esm/lib/DataEntity.js.map +1 -0
  128. package/dist-esm/lib/DefaultLogger.js +32 -0
  129. package/dist-esm/lib/DefaultLogger.js.map +1 -0
  130. package/dist-esm/lib/EIP712Helper.js +37 -0
  131. package/dist-esm/lib/EIP712Helper.js.map +1 -0
  132. package/dist-esm/lib/RestClient.js +90 -0
  133. package/dist-esm/lib/RestClient.js.map +1 -0
  134. package/dist-esm/lib/TypedEventEmitter.js +68 -0
  135. package/dist-esm/lib/TypedEventEmitter.js.map +1 -0
  136. package/dist-esm/lib/base64.js +18 -0
  137. package/dist-esm/lib/base64.js.map +1 -0
  138. package/dist-esm/lib/getUUID.js +7 -0
  139. package/dist-esm/lib/getUUID.js.map +1 -0
  140. package/dist-esm/lib/isNodejs.js +3 -0
  141. package/dist-esm/lib/isNodejs.js.map +1 -0
  142. package/dist-esm/lib/mediaValidation.js +277 -0
  143. package/dist-esm/lib/mediaValidation.js.map +1 -0
  144. package/dist-esm/lib/utils/index.js +30 -0
  145. package/dist-esm/lib/utils/index.js.map +1 -0
  146. package/dist-esm/lib/validation.js +138 -0
  147. package/dist-esm/lib/validation.js.map +1 -0
  148. package/dist-esm/package.json +3 -0
  149. package/dist-esm/types/ErrorData.js +2 -0
  150. package/dist-esm/types/ErrorData.js.map +1 -0
  151. package/dist-esm/types/json.js +2 -0
  152. package/dist-esm/types/json.js.map +1 -0
  153. package/dist-esm/types/token.js +2 -0
  154. package/dist-esm/types/token.js.map +1 -0
  155. package/dist-esm/version.js +3 -0
  156. package/dist-esm/version.js.map +1 -0
  157. package/llms-full.txt +11 -20
  158. package/llms.txt +9 -18
  159. package/package.json +21 -5
  160. package/src/Chat/ChatTools.ts +36 -16
  161. package/src/Chat/hostedToolValidation.generated.ts +453 -0
  162. package/src/Chat/index.ts +198 -3
  163. package/src/Chat/modelRouting.ts +26 -150
  164. package/src/Chat/sogniHostedTools.generated.json +1285 -283
  165. package/src/Chat/tools.ts +106 -41
  166. package/src/Chat/types.ts +131 -3
  167. package/src/CreativeWorkflows/index.ts +22 -41
  168. package/src/CreativeWorkflows/types.ts +69 -42
  169. package/src/index.ts +33 -12
  170. package/src/lib/Cache.ts +8 -1
@@ -0,0 +1,528 @@
1
+ import { isAudioParams, isImageParams, isVideoParams } from './types';
2
+ import { validateNumber, validateCustomImageSize, validateVideoSize, validateTeacacheThreshold, isComfyModel, validateVideoDuration, validateSampler, validateScheduler } from '../lib/validation';
3
+ import { getVideoWorkflowType, isVideoModel, VIDEO_WORKFLOW_ASSETS, calculateVideoFrames, isLtx2Model, isWanAnimateModel, isSeedanceModel } from './utils';
4
+ import { ApiError } from '../ApiClient';
5
+ /**
6
+ * Validate that the provided assets match the workflow requirements.
7
+ * Throws an error if required assets are missing or forbidden assets are provided.
8
+ */
9
+ function validateVideoWorkflowAssets(params) {
10
+ if (isSeedanceModel(params.modelId)) {
11
+ validateSeedanceReferenceAssets(params);
12
+ return;
13
+ }
14
+ if (params.referenceImageUrls || params.referenceVideoUrls || params.referenceAudioUrls) {
15
+ throw new ApiError(400, {
16
+ status: 'error',
17
+ errorCode: 0,
18
+ message: 'referenceImageUrls, referenceVideoUrls, and referenceAudioUrls are supported only by Seedance models.'
19
+ });
20
+ }
21
+ const workflowType = getVideoWorkflowType(params.modelId);
22
+ if (!workflowType)
23
+ return;
24
+ const requirements = VIDEO_WORKFLOW_ASSETS[workflowType];
25
+ if (!requirements)
26
+ return;
27
+ // Special case for i2v: at least ONE of referenceImage or referenceImageEnd required
28
+ if (workflowType === 'i2v') {
29
+ if (!params.referenceImage && !params.referenceImageEnd) {
30
+ throw new ApiError(400, {
31
+ status: 'error',
32
+ errorCode: 0,
33
+ message: 'i2v workflow requires at least one of referenceImage or referenceImageEnd. Please provide this asset.'
34
+ });
35
+ }
36
+ }
37
+ // sam2Coordinates is only valid for animate-replace workflows
38
+ if (params.sam2Coordinates && workflowType !== 'animate-replace') {
39
+ throw new ApiError(400, {
40
+ status: 'error',
41
+ errorCode: 0,
42
+ message: 'sam2Coordinates is only supported for animate-replace workflows.'
43
+ });
44
+ }
45
+ // Check for missing required assets and forbidden assets
46
+ for (const [asset, requirement] of Object.entries(requirements)) {
47
+ const assetKey = asset;
48
+ const hasAsset = !!params[assetKey];
49
+ if (requirement === 'required' && !hasAsset) {
50
+ throw new ApiError(400, {
51
+ status: 'error',
52
+ errorCode: 0,
53
+ message: `${workflowType} workflow requires ${assetKey}. Please provide this asset.`
54
+ });
55
+ }
56
+ if (requirement === 'forbidden' && hasAsset) {
57
+ throw new ApiError(400, {
58
+ status: 'error',
59
+ errorCode: 0,
60
+ message: `${workflowType} workflow does not support ${assetKey}. Please remove this asset.`
61
+ });
62
+ }
63
+ }
64
+ }
65
+ function asReferenceUrlArray(value) {
66
+ if (!Array.isArray(value))
67
+ return [];
68
+ return value.filter((url) => typeof url === 'string' && url.trim().length > 0);
69
+ }
70
+ function validateReferenceUrlArray(value, propertyName) {
71
+ if (value === undefined)
72
+ return;
73
+ if (!Array.isArray(value)) {
74
+ throw new ApiError(400, {
75
+ status: 'error',
76
+ errorCode: 0,
77
+ message: `${propertyName} must be an array of URL strings.`
78
+ });
79
+ }
80
+ if (value.some((url) => typeof url !== 'string' || url.trim().length === 0)) {
81
+ throw new ApiError(400, {
82
+ status: 'error',
83
+ errorCode: 0,
84
+ message: `${propertyName} must contain only non-empty URL strings.`
85
+ });
86
+ }
87
+ }
88
+ function validateSeedanceReferenceAssets(params) {
89
+ validateReferenceUrlArray(params.referenceImageUrls, 'referenceImageUrls');
90
+ validateReferenceUrlArray(params.referenceVideoUrls, 'referenceVideoUrls');
91
+ validateReferenceUrlArray(params.referenceAudioUrls, 'referenceAudioUrls');
92
+ const imageCount = (params.referenceImage ? 1 : 0) +
93
+ (params.referenceImageEnd ? 1 : 0) +
94
+ asReferenceUrlArray(params.referenceImageUrls).length;
95
+ const videoCount = (params.referenceVideo ? 1 : 0) + asReferenceUrlArray(params.referenceVideoUrls).length;
96
+ const audioCount = (params.referenceAudio || params.referenceAudioIdentity ? 1 : 0) +
97
+ asReferenceUrlArray(params.referenceAudioUrls).length;
98
+ const totalAssetCount = imageCount + videoCount + audioCount;
99
+ if (imageCount > 9) {
100
+ throw new ApiError(400, {
101
+ status: 'error',
102
+ errorCode: 0,
103
+ message: 'Seedance supports at most 9 image assets.'
104
+ });
105
+ }
106
+ if (videoCount > 3) {
107
+ throw new ApiError(400, {
108
+ status: 'error',
109
+ errorCode: 0,
110
+ message: 'Seedance supports at most 3 video assets.'
111
+ });
112
+ }
113
+ if (audioCount > 3) {
114
+ throw new ApiError(400, {
115
+ status: 'error',
116
+ errorCode: 0,
117
+ message: 'Seedance supports at most 3 audio assets.'
118
+ });
119
+ }
120
+ if (totalAssetCount > 12) {
121
+ throw new ApiError(400, {
122
+ status: 'error',
123
+ errorCode: 0,
124
+ message: 'Seedance supports at most 12 total asset files.'
125
+ });
126
+ }
127
+ if (audioCount > 0 && imageCount === 0 && videoCount === 0) {
128
+ throw new ApiError(400, {
129
+ status: 'error',
130
+ errorCode: 0,
131
+ message: 'Seedance audio references require at least one image or video reference.'
132
+ });
133
+ }
134
+ }
135
+ function getMaxVideoDuration(modelId) {
136
+ if (isSeedanceModel(modelId)) {
137
+ return 15;
138
+ }
139
+ if (isLtx2Model(modelId) || isWanAnimateModel(modelId)) {
140
+ return 20;
141
+ }
142
+ return 10;
143
+ }
144
+ // Mac worker can't process the data if some of the fields are missing, so we need to provide a default template
145
+ function getTemplate() {
146
+ return {
147
+ selectedUpscalingModel: 'OFF',
148
+ cnVideoFramesSketch: [],
149
+ cnVideoFramesSegmentedSubject: [],
150
+ cnVideoFramesFace: [],
151
+ doCanvasBlending: false,
152
+ animationIsOn: false,
153
+ cnVideoFramesBoth: [],
154
+ cnVideoFramesDepth: [],
155
+ keyFrames: [
156
+ {
157
+ stepsIsEnabled: true,
158
+ siRotation: 0,
159
+ siDragOffsetIsEnabled: true,
160
+ strength: 0.5,
161
+ siZoomScaleIsEnabled: true,
162
+ isEnabled: true,
163
+ processing: 'CPU, GPU',
164
+ useLastImageAsGuideImageInAnimation: true,
165
+ guidanceScaleIsEnabled: true,
166
+ siImageBackgroundColor: 'black',
167
+ cnDragOffset: [0, 0],
168
+ scheduler: null,
169
+ timeStepSpacing: null,
170
+ steps: 20,
171
+ cnRotation: 0,
172
+ guidanceScale: 7.5,
173
+ siZoomScale: 1,
174
+ modelID: '',
175
+ cnRotationIsEnabled: true,
176
+ negativePrompt: '',
177
+ startingImageZoomPanIsOn: false,
178
+ seed: undefined,
179
+ siRotationIsEnabled: true,
180
+ cnImageBackgroundColor: 'clear',
181
+ strengthIsEnabled: true,
182
+ siDragOffset: [0, 0],
183
+ useLastImageAsCNImageInAnimation: false,
184
+ positivePrompt: '',
185
+ controlNetZoomPanIsOn: false,
186
+ cnZoomScaleIsEnabled: true,
187
+ currentControlNets: null,
188
+ stylePrompt: '',
189
+ cnDragOffsetIsEnabled: true,
190
+ frameIndex: 0,
191
+ startingImage: null,
192
+ cnZoomScale: 1
193
+ }
194
+ ],
195
+ previews: 5,
196
+ frameRate: 24,
197
+ generatedVideoSeconds: 10,
198
+ canvasIsOn: false,
199
+ cnVideoFrames: [],
200
+ disableSafety: false,
201
+ cnVideoFramesSegmentedBackground: [],
202
+ cnVideoFramesSegmented: [],
203
+ numberOfImages: 1,
204
+ cnVideoFramesPose: [],
205
+ jobID: '',
206
+ siVideoFrames: []
207
+ };
208
+ }
209
+ function getControlNet(params) {
210
+ const cn = {
211
+ name: params.name,
212
+ cnImageState: 'original',
213
+ hasImage: !!params.image
214
+ };
215
+ if (params.strength !== undefined) {
216
+ cn.controlStrength = validateNumber(params.strength, {
217
+ min: 0,
218
+ max: 1,
219
+ propertyName: 'strength'
220
+ });
221
+ }
222
+ if (params.mode) {
223
+ switch (params.mode) {
224
+ case 'balanced':
225
+ cn.controlMode = 0;
226
+ break;
227
+ case 'prompt_priority':
228
+ cn.controlMode = 1;
229
+ break;
230
+ case 'cn_priority':
231
+ cn.controlMode = 2;
232
+ break;
233
+ default:
234
+ throw new Error(`Invalid control mode ${params.mode}`);
235
+ }
236
+ }
237
+ if (params.guidanceStart !== undefined) {
238
+ cn.controlGuidanceStart = validateNumber(params.guidanceStart, {
239
+ min: 0,
240
+ max: 1,
241
+ propertyName: 'guidanceStart'
242
+ });
243
+ }
244
+ if (params.guidanceEnd !== undefined) {
245
+ cn.controlGuidanceEnd = validateNumber(params.guidanceEnd, {
246
+ min: 0,
247
+ max: 1,
248
+ propertyName: 'guidanceEnd'
249
+ });
250
+ }
251
+ return [cn];
252
+ }
253
+ function getVideoControlNet(params) {
254
+ const cn = {
255
+ name: params.name
256
+ };
257
+ if (params.strength !== undefined) {
258
+ cn.controlStrength = validateNumber(params.strength, {
259
+ min: 0,
260
+ max: 1,
261
+ propertyName: 'strength'
262
+ });
263
+ }
264
+ return [cn];
265
+ }
266
+ function applyImageParams(inputKeyframe, params, options) {
267
+ const keyFrame = Object.assign(Object.assign({}, inputKeyframe), { sizePreset: params.sizePreset });
268
+ const contextImages = params.contextImages || [];
269
+ for (let index = 1; index <= 16; index += 1) {
270
+ keyFrame[`hasContextImage${index}`] = !!contextImages[index - 1];
271
+ }
272
+ // Sampler/scheduler handling: SDK validates and passes through as-is.
273
+ // sogni-socket normalizes values for both ComfyUI and Forge workers.
274
+ if (isComfyModel(params.modelId)) {
275
+ // ComfyUI models use comfySampler/comfyScheduler fields
276
+ keyFrame.comfySampler = validateSampler(params.sampler, options);
277
+ keyFrame.comfyScheduler = validateScheduler(params.scheduler, options);
278
+ }
279
+ else {
280
+ // Legacy Forge models use scheduler/timeStepSpacing fields
281
+ keyFrame.scheduler = validateSampler(params.sampler, options);
282
+ keyFrame.timeStepSpacing = validateScheduler(params.scheduler, options);
283
+ }
284
+ if (params.startingImage) {
285
+ keyFrame.hasStartingImage = true;
286
+ keyFrame.strengthIsEnabled = true;
287
+ keyFrame.strength = 1 - (Number(params.startingImageStrength) || 0.5);
288
+ }
289
+ if (params.controlNet) {
290
+ keyFrame.currentControlNetsJob = getControlNet(params.controlNet);
291
+ }
292
+ // Set sizePreset to 'custom' if width/height are provided but sizePreset is not set
293
+ let effectiveSizePreset = params.sizePreset;
294
+ if (params.width && params.height && !params.sizePreset) {
295
+ effectiveSizePreset = 'custom';
296
+ }
297
+ keyFrame.sizePreset = effectiveSizePreset;
298
+ if (effectiveSizePreset === 'custom' && params.width && params.height) {
299
+ keyFrame.width = validateCustomImageSize(params.width, {
300
+ modelId: params.modelId,
301
+ propertyName: 'Width'
302
+ });
303
+ keyFrame.height = validateCustomImageSize(params.height, {
304
+ modelId: params.modelId,
305
+ propertyName: 'Height'
306
+ });
307
+ }
308
+ if (params.gptImageQuality !== undefined) {
309
+ keyFrame.gptImageQuality = params.gptImageQuality;
310
+ }
311
+ if (params.gptImageBackground !== undefined) {
312
+ keyFrame.gptImageBackground = params.gptImageBackground;
313
+ }
314
+ return keyFrame;
315
+ }
316
+ function applyVideoParams(inputKeyframe, params, options) {
317
+ var _a;
318
+ if (!isVideoModel(params.modelId)) {
319
+ throw new ApiError(400, {
320
+ status: 'error',
321
+ errorCode: 0,
322
+ message: 'Video generation is only supported for video models.'
323
+ });
324
+ }
325
+ validateVideoWorkflowAssets(params);
326
+ const keyFrame = Object.assign({}, inputKeyframe);
327
+ if (params.referenceImage) {
328
+ keyFrame.hasReferenceImage = true;
329
+ }
330
+ const referenceImageUrls = asReferenceUrlArray(params.referenceImageUrls);
331
+ if (referenceImageUrls.length) {
332
+ keyFrame.referenceImageURLs = referenceImageUrls;
333
+ }
334
+ if (params.referenceImageEnd) {
335
+ keyFrame.hasReferenceImageEnd = true;
336
+ }
337
+ if (params.referenceAudio) {
338
+ keyFrame.hasReferenceAudio = true;
339
+ }
340
+ const referenceAudioUrls = asReferenceUrlArray(params.referenceAudioUrls);
341
+ if (referenceAudioUrls.length) {
342
+ keyFrame.referenceAudioURLs = referenceAudioUrls;
343
+ }
344
+ if (params.referenceVideo) {
345
+ keyFrame.hasReferenceVideo = true;
346
+ }
347
+ const referenceVideoUrls = asReferenceUrlArray(params.referenceVideoUrls);
348
+ if (referenceVideoUrls.length) {
349
+ keyFrame.referenceVideoURLs = referenceVideoUrls;
350
+ }
351
+ if (params.referenceAudioIdentity) {
352
+ keyFrame.hasReferenceAudioIdentity = true;
353
+ }
354
+ if (params.generateAudio !== undefined) {
355
+ keyFrame.generateAudio = params.generateAudio;
356
+ }
357
+ if (params.audioIdentityStrength !== undefined) {
358
+ keyFrame.identityGuidanceScale = params.audioIdentityStrength;
359
+ }
360
+ // Video generation parameters
361
+ // Note: fps must be processed before duration to correctly calculate frames for LTX-2.3 models
362
+ if (params.fps !== undefined) {
363
+ keyFrame.fps = params.fps;
364
+ }
365
+ else if (isSeedanceModel(params.modelId)) {
366
+ keyFrame.fps = 24;
367
+ }
368
+ if (params.frames !== undefined) {
369
+ keyFrame.frames = params.frames;
370
+ }
371
+ if (params.duration !== undefined) {
372
+ const isSeedance = isSeedanceModel(params.modelId);
373
+ const duration = validateVideoDuration(params.duration, isSeedance ? 4 : 1, getMaxVideoDuration(params.modelId));
374
+ // Use fps from params or default based on model type:
375
+ // - WAN 2.2: fps doesn't affect frame count (always generates at 16fps)
376
+ // - LTX-2.3: fps directly affects frame count (default 24fps if not specified)
377
+ // - Seedance: fixed 24fps external API generation
378
+ const fps = (_a = params.fps) !== null && _a !== void 0 ? _a : 24;
379
+ keyFrame.frames = calculateVideoFrames(params.modelId, duration, fps);
380
+ }
381
+ if (params.shift !== undefined) {
382
+ keyFrame.shift = params.shift;
383
+ }
384
+ if (params.teacacheThreshold !== undefined) {
385
+ const validatedThreshold = validateTeacacheThreshold(params.teacacheThreshold);
386
+ if (validatedThreshold !== undefined) {
387
+ keyFrame.teacacheThreshold = validatedThreshold;
388
+ }
389
+ }
390
+ // S2V audio parameters
391
+ if (params.audioStart !== undefined) {
392
+ keyFrame.audioStart = params.audioStart;
393
+ }
394
+ if (params.audioDuration !== undefined) {
395
+ keyFrame.audioDuration = params.audioDuration;
396
+ }
397
+ // Animate video parameters (for animate-move, animate-replace)
398
+ if (params.videoStart !== undefined) {
399
+ keyFrame.videoStart = params.videoStart;
400
+ }
401
+ // SAM2 subject detection coordinates for animate-replace workflows
402
+ if (params.sam2Coordinates !== undefined) {
403
+ keyFrame.sam2Coordinates = JSON.stringify(params.sam2Coordinates);
404
+ }
405
+ // Frame trimming for seamless stitching of transition videos
406
+ if (params.trimEndFrame) {
407
+ keyFrame.trimEndFrame = true;
408
+ }
409
+ // First/last frame strengths for LTX-2.3 keyframe interpolation (when referenceImageEnd is provided)
410
+ if (params.firstFrameStrength !== undefined) {
411
+ keyFrame.firstFrameStrength = params.firstFrameStrength;
412
+ }
413
+ if (params.lastFrameStrength !== undefined) {
414
+ keyFrame.lastFrameStrength = params.lastFrameStrength;
415
+ }
416
+ // ControlNet parameters for LTX-2.3 v2v workflows
417
+ if (params.controlNet) {
418
+ keyFrame.currentControlNetsJob = getVideoControlNet(params.controlNet);
419
+ }
420
+ // Detailer LoRA strength for LTX-2.3 v2v IC-Control workflows
421
+ if (params.detailerStrength !== undefined) {
422
+ keyFrame.detailerStrength = params.detailerStrength;
423
+ }
424
+ // Validate and set video dimensions (minimum 480px for Wan 2.2 models)
425
+ if (params.width && params.height) {
426
+ keyFrame.width = validateVideoSize(params.width, 'width');
427
+ keyFrame.height = validateVideoSize(params.height, 'height');
428
+ }
429
+ keyFrame.comfySampler = validateSampler(params.sampler, options);
430
+ keyFrame.comfyScheduler = validateScheduler(params.scheduler, options);
431
+ return keyFrame;
432
+ }
433
+ function applyAudioParams(inputKeyframe, params, options) {
434
+ const keyFrame = Object.assign({}, inputKeyframe);
435
+ if (params.duration !== undefined) {
436
+ keyFrame.duration = params.duration;
437
+ }
438
+ if (params.bpm !== undefined) {
439
+ keyFrame.bpm = params.bpm;
440
+ }
441
+ if (params.timesignature !== undefined) {
442
+ keyFrame.timesignature = params.timesignature;
443
+ }
444
+ if (params.language !== undefined) {
445
+ keyFrame.language = params.language;
446
+ }
447
+ if (params.lyrics !== undefined) {
448
+ keyFrame.lyrics = params.lyrics;
449
+ }
450
+ if (params.keyscale !== undefined) {
451
+ keyFrame.keyscale = params.keyscale;
452
+ }
453
+ if (params.composerMode !== undefined) {
454
+ keyFrame.composerMode = params.composerMode;
455
+ }
456
+ if (params.promptStrength !== undefined) {
457
+ keyFrame.promptStrength = params.promptStrength;
458
+ }
459
+ if (params.creativity !== undefined) {
460
+ keyFrame.creativity = params.creativity;
461
+ }
462
+ if (params.shift !== undefined) {
463
+ keyFrame.shift = params.shift;
464
+ }
465
+ keyFrame.comfySampler = validateSampler(params.sampler, options);
466
+ keyFrame.comfyScheduler = validateScheduler(params.scheduler, options);
467
+ return keyFrame;
468
+ }
469
+ function createJobRequestMessage(id, params, options) {
470
+ const template = getTemplate();
471
+ const negativePrompt = isImageParams(params) || (isVideoParams(params) && !isSeedanceModel(params.modelId))
472
+ ? params.negativePrompt
473
+ : undefined;
474
+ // Base keyFrame with common params
475
+ let keyFrame = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, template.keyFrames[0]), { steps: params.steps, guidanceScale: params.guidance, modelID: params.modelId, seed: params.seed, positivePrompt: params.positivePrompt }), (negativePrompt && { negativePrompt })), (params.stylePrompt && { stylePrompt: params.stylePrompt })), (params.loras && params.loras.length > 0 && { loras: params.loras })), (params.loraStrengths &&
476
+ params.loraStrengths.length > 0 && { loraStrengths: params.loraStrengths }));
477
+ if (isAudioParams(params) || (isVideoParams(params) && isSeedanceModel(params.modelId))) {
478
+ delete keyFrame.negativePrompt;
479
+ }
480
+ switch (params.type) {
481
+ case 'image':
482
+ if (options.type !== 'image') {
483
+ throw new ApiError(400, {
484
+ status: 'error',
485
+ errorCode: 0,
486
+ message: 'Invalid model type. Model does not support image generation. Please use a different model.'
487
+ });
488
+ }
489
+ keyFrame = applyImageParams(keyFrame, params, options);
490
+ break;
491
+ case 'video':
492
+ if (options.type !== 'video') {
493
+ throw new ApiError(400, {
494
+ status: 'error',
495
+ errorCode: 0,
496
+ message: 'Invalid model type. Model does not support video generation. Please use a different model.'
497
+ });
498
+ }
499
+ keyFrame = applyVideoParams(keyFrame, params, options);
500
+ break;
501
+ case 'audio':
502
+ if (options.type !== 'audio') {
503
+ throw new ApiError(400, {
504
+ status: 'error',
505
+ errorCode: 0,
506
+ message: 'Invalid model type. Model does not support audio generation. Please use a different model.'
507
+ });
508
+ }
509
+ keyFrame = applyAudioParams(keyFrame, params, options);
510
+ break;
511
+ default:
512
+ throw new ApiError(400, {
513
+ status: 'error',
514
+ errorCode: 0,
515
+ message: 'Invalid project type. Must be "image", "video", or "audio".'
516
+ });
517
+ }
518
+ const jobRequest = Object.assign(Object.assign({}, template), { keyFrames: [keyFrame], previews: isImageParams(params) ? params.numberOfPreviews || 0 : 0, numberOfImages: params.numberOfMedia || 1, jobID: id, disableSafety: !!params.disableNSFWFilter, tokenType: params.tokenType, outputFormat: params.outputFormat || (isAudioParams(params) ? 'mp3' : isVideoParams(params) ? 'mp4' : 'png') });
519
+ if (params.network) {
520
+ jobRequest.network = params.network;
521
+ }
522
+ if (params.appSource) {
523
+ jobRequest.appSource = params.appSource;
524
+ }
525
+ return jobRequest;
526
+ }
527
+ export default createJobRequestMessage;
528
+ //# sourceMappingURL=createJobRequestMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createJobRequestMessage.js","sourceRoot":"","sources":["../../src/Projects/createJobRequestMessage.ts"],"names":[],"mappings":"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"}