@genfeedai/workflow-ui 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/canvas.d.ts +22 -22
- package/dist/canvas.mjs +16 -16
- package/dist/{chunk-XPZAHIWY.mjs → chunk-2FUPL67V.mjs} +1592 -1044
- package/dist/{chunk-HWVTD2LC.mjs → chunk-53XDE62A.mjs} +818 -623
- package/dist/{chunk-PCIWWD37.mjs → chunk-7LV4UAUS.mjs} +19 -19
- package/dist/{chunk-7SKSRSS7.mjs → chunk-B4EAAKYF.mjs} +16 -16
- package/dist/{chunk-ZJD5WMR3.mjs → chunk-C6MQBJFC.mjs} +45 -13
- package/dist/{chunk-7H3WJJYS.mjs → chunk-ESVULCFY.mjs} +12 -6
- package/dist/{chunk-GWBGK3KL.mjs → chunk-FWJIAW2E.mjs} +82 -47
- package/dist/{chunk-R727OFBR.mjs → chunk-GPYIIWD5.mjs} +404 -350
- package/dist/{chunk-OQREHJXK.mjs → chunk-IYFWAJBB.mjs} +208 -203
- package/dist/{chunk-N5NJZTK4.mjs → chunk-MGLAKMDP.mjs} +23 -21
- package/dist/{chunk-LT3ZJJL6.mjs → chunk-OJWVEEMM.mjs} +497 -399
- package/dist/{chunk-ZD2BADZO.mjs → chunk-ORVDYXDP.mjs} +221 -175
- package/dist/{chunk-CV4M7CNU.mjs → chunk-QQVHGJ2G.mjs} +149 -142
- package/dist/{chunk-6PSJTBNV.mjs → chunk-U4QPE4CY.mjs} +387 -347
- package/dist/{chunk-EFXQT23N.mjs → chunk-VVQ4CH77.mjs} +5 -5
- package/dist/{chunk-VRN3UWE5.mjs → chunk-XRC3O5GK.mjs} +73 -73
- package/dist/{chunk-FT33LFII.mjs → chunk-YUIK4AHM.mjs} +1 -1
- package/dist/{chunk-FMJPFB6W.mjs → chunk-ZSITTZ4S.mjs} +630 -569
- package/dist/hooks.d.ts +37 -37
- package/dist/hooks.mjs +10 -10
- package/dist/index.d.ts +26 -11
- package/dist/index.mjs +99 -19
- package/dist/lib.d.ts +203 -203
- package/dist/lib.mjs +228 -198
- package/dist/nodes.d.ts +2 -2
- package/dist/nodes.mjs +12 -12
- package/dist/panels.d.ts +2 -3
- package/dist/panels.mjs +3 -3
- package/dist/provider.d.ts +2 -2
- package/dist/provider.mjs +2 -2
- package/dist/stores.d.ts +5 -5
- package/dist/stores.mjs +5 -5
- package/dist/toolbar.d.ts +42 -24
- package/dist/toolbar.mjs +4 -4
- package/dist/ui.d.ts +2 -2
- package/dist/ui.mjs +2 -2
- package/dist/{useCommentNavigation-BakbiiIc.d.ts → useRequiredInputs-ByoIS-fT.d.ts} +160 -160
- package/dist/{promptLibraryStore-Dl3Q3cP6.d.ts → workflowStore-Bsz0nd5c.d.ts} +368 -368
- package/dist/workflowStore-N2F7WIG3.mjs +2 -0
- package/package.json +77 -75
- package/src/styles/workflow-ui.css +56 -19
- package/dist/workflowStore-UAAKOOIK.mjs +0 -2
- package/dist/{types-IEKYuYhu.d.ts → types-CRXJnajq.d.ts} +1 -1
package/dist/lib.d.ts
CHANGED
|
@@ -1,92 +1,40 @@
|
|
|
1
|
-
import { HandleDefinition, NodeType, WorkflowNodeData, CubicBezier, EasingPreset, WorkflowNode, CostBreakdown, ImageModel, LipSyncModel, TextModel, VideoModel } from '@genfeedai/types';
|
|
2
|
-
export { CostBreakdown, NodeCostEstimate } from '@genfeedai/types';
|
|
3
1
|
import * as react from 'react';
|
|
4
2
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
import { CubicBezier, WorkflowNode, CostBreakdown, EasingPreset, NodeType, WorkflowNodeData, ImageModel, LipSyncModel, TextModel, VideoModel, HandleDefinition } from '@genfeedai/types';
|
|
4
|
+
export { CostBreakdown, NodeCostEstimate } from '@genfeedai/types';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
declare function generateHandlesFromSchema(inputSchema: Record<string, unknown> | undefined, staticHandles: HandleDefinition[]): HandleDefinition[];
|
|
17
|
-
/**
|
|
18
|
-
* Check if a handle was dynamically generated from schema.
|
|
19
|
-
*/
|
|
20
|
-
declare function isSchemaHandle(handle: HandleDefinition): boolean;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Utility functions for validating required schema fields
|
|
24
|
-
*/
|
|
25
|
-
/**
|
|
26
|
-
* Validates that all required fields in a JSON Schema have values.
|
|
27
|
-
*
|
|
28
|
-
* @param inputSchema - The JSON Schema with required array
|
|
29
|
-
* @param values - Current field values
|
|
30
|
-
* @param skipFields - Fields to skip (e.g., fields populated via connections)
|
|
31
|
-
* @returns Validation result with isValid flag and list of missing fields
|
|
32
|
-
*/
|
|
33
|
-
declare function validateRequiredSchemaFields(inputSchema: Record<string, unknown> | undefined, values: Record<string, unknown>, skipFields: Set<string>): {
|
|
34
|
-
isValid: boolean;
|
|
35
|
-
missingFields: string[];
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* Fields that are populated via node connections rather than schema inputs.
|
|
39
|
-
* These should be skipped when validating schema required fields.
|
|
40
|
-
*/
|
|
41
|
-
declare const CONNECTION_FIELDS: Set<string>;
|
|
6
|
+
interface CubicBezierEditorProps {
|
|
7
|
+
value: CubicBezier;
|
|
8
|
+
onChange: (value: CubicBezier) => void;
|
|
9
|
+
onCommit?: (value: CubicBezier) => void;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
width?: number;
|
|
12
|
+
height?: number;
|
|
13
|
+
}
|
|
14
|
+
declare function CubicBezierEditorComponent({ value, onChange, onCommit, disabled, width, height, }: CubicBezierEditorProps): react_jsx_runtime.JSX.Element;
|
|
15
|
+
declare const CubicBezierEditor: react.MemoExoticComponent<typeof CubicBezierEditorComponent>;
|
|
42
16
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
*/
|
|
46
|
-
/**
|
|
47
|
-
* Extract default values from schema properties
|
|
48
|
-
*/
|
|
49
|
-
declare function getSchemaDefaults(schema: Record<string, unknown> | undefined): Record<string, unknown>;
|
|
50
|
-
/**
|
|
51
|
-
* Check if the model's schema supports image input
|
|
52
|
-
* Used to determine whether to enable/disable image input handles
|
|
53
|
-
*/
|
|
54
|
-
declare function supportsImageInput(schema: Record<string, unknown> | undefined): boolean;
|
|
55
|
-
/**
|
|
56
|
-
* Extract enum values from component schemas for SchemaInputs dropdowns
|
|
57
|
-
*/
|
|
58
|
-
declare function extractEnumValues(componentSchemas: Record<string, {
|
|
59
|
-
enum?: unknown[];
|
|
60
|
-
type?: string;
|
|
61
|
-
}> | undefined): Record<string, string[]> | undefined;
|
|
17
|
+
declare function calculateWorkflowCost(nodes: WorkflowNode[]): CostBreakdown;
|
|
18
|
+
declare function formatCost(amount: number): string;
|
|
62
19
|
|
|
63
|
-
interface MediaInfo {
|
|
64
|
-
url: string | null;
|
|
65
|
-
urls?: string[];
|
|
66
|
-
type: 'image' | 'video' | null;
|
|
67
|
-
}
|
|
68
20
|
/**
|
|
69
|
-
*
|
|
21
|
+
* Deduplicated Fetch Utility
|
|
22
|
+
*
|
|
23
|
+
* When multiple callers request the same URL concurrently, only one
|
|
24
|
+
* actual network request is made. All callers receive the same response
|
|
25
|
+
* data once the request completes. Responses are cached for 5 seconds.
|
|
70
26
|
*/
|
|
71
|
-
declare function getMediaFromNode(nodeType: NodeType, data: WorkflowNodeData): MediaInfo;
|
|
72
|
-
|
|
73
27
|
/**
|
|
74
|
-
*
|
|
28
|
+
* Fetch with request deduplication.
|
|
29
|
+
*
|
|
30
|
+
* Multiple concurrent calls to the same URL (with same headers) will
|
|
31
|
+
* share a single network request. The response is cloned for each caller.
|
|
75
32
|
*/
|
|
76
|
-
declare function
|
|
77
|
-
width: number;
|
|
78
|
-
height: number;
|
|
79
|
-
}>;
|
|
33
|
+
declare function deduplicatedFetch(url: string, options?: RequestInit): Promise<Response>;
|
|
80
34
|
/**
|
|
81
|
-
*
|
|
35
|
+
* Clear all cached responses.
|
|
82
36
|
*/
|
|
83
|
-
declare function
|
|
84
|
-
duration: number;
|
|
85
|
-
dimensions: {
|
|
86
|
-
width: number;
|
|
87
|
-
height: number;
|
|
88
|
-
};
|
|
89
|
-
}>;
|
|
37
|
+
declare function clearFetchCache(): void;
|
|
90
38
|
|
|
91
39
|
type EasingFunction = (t: number) => number;
|
|
92
40
|
/**
|
|
@@ -98,10 +46,10 @@ declare const DEFAULT_CUSTOM_BEZIER: CubicBezier;
|
|
|
98
46
|
/** Named presets for the CubicBezierEditor */
|
|
99
47
|
declare const PRESET_BEZIERS: {
|
|
100
48
|
readonly easeInExpoOutCubic: [0.85, 0, 0.15, 1];
|
|
101
|
-
readonly easeInOutExpo: [0.87, 0, 0.13, 1];
|
|
102
|
-
readonly easeInQuartOutQuad: [0.8, 0, 0.2, 1];
|
|
103
49
|
readonly easeInOutCubic: [0.65, 0, 0.35, 1];
|
|
50
|
+
readonly easeInOutExpo: [0.87, 0, 0.13, 1];
|
|
104
51
|
readonly easeInOutSine: [0.37, 0, 0.63, 1];
|
|
52
|
+
readonly easeInQuartOutQuad: [0.8, 0, 0.2, 1];
|
|
105
53
|
};
|
|
106
54
|
type EasingPresetName = keyof typeof PRESET_BEZIERS;
|
|
107
55
|
/**
|
|
@@ -119,28 +67,28 @@ declare function createAsymmetricEase(easeIn: EasingFunction, easeOut: EasingFun
|
|
|
119
67
|
declare const easing: {
|
|
120
68
|
readonly easeInExpoOutCubic: EasingFunction;
|
|
121
69
|
readonly easeInQuartOutQuad: EasingFunction;
|
|
122
|
-
readonly
|
|
123
|
-
readonly easeInQuad: (t: number) => number;
|
|
124
|
-
readonly easeOutQuad: (t: number) => number;
|
|
125
|
-
readonly easeInOutQuad: (t: number) => number;
|
|
70
|
+
readonly easeInCirc: (t: number) => number;
|
|
126
71
|
readonly easeInCubic: (t: number) => number;
|
|
127
|
-
readonly
|
|
72
|
+
readonly easeInExpo: (t: number) => number;
|
|
73
|
+
readonly easeInOutCirc: (t: number) => number;
|
|
128
74
|
readonly easeInOutCubic: (t: number) => number;
|
|
129
|
-
readonly
|
|
130
|
-
readonly
|
|
75
|
+
readonly easeInOutExpo: (t: number) => number;
|
|
76
|
+
readonly easeInOutQuad: (t: number) => number;
|
|
131
77
|
readonly easeInOutQuart: (t: number) => number;
|
|
132
|
-
readonly easeInQuint: (t: number) => number;
|
|
133
|
-
readonly easeOutQuint: (t: number) => number;
|
|
134
78
|
readonly easeInOutQuint: (t: number) => number;
|
|
135
|
-
readonly easeInSine: (t: number) => number;
|
|
136
|
-
readonly easeOutSine: (t: number) => number;
|
|
137
79
|
readonly easeInOutSine: (t: number) => number;
|
|
138
|
-
readonly
|
|
139
|
-
readonly
|
|
140
|
-
readonly
|
|
141
|
-
readonly
|
|
80
|
+
readonly easeInQuad: (t: number) => number;
|
|
81
|
+
readonly easeInQuart: (t: number) => number;
|
|
82
|
+
readonly easeInQuint: (t: number) => number;
|
|
83
|
+
readonly easeInSine: (t: number) => number;
|
|
142
84
|
readonly easeOutCirc: (t: number) => number;
|
|
143
|
-
readonly
|
|
85
|
+
readonly easeOutCubic: (t: number) => number;
|
|
86
|
+
readonly easeOutExpo: (t: number) => number;
|
|
87
|
+
readonly easeOutQuad: (t: number) => number;
|
|
88
|
+
readonly easeOutQuart: (t: number) => number;
|
|
89
|
+
readonly easeOutQuint: (t: number) => number;
|
|
90
|
+
readonly easeOutSine: (t: number) => number;
|
|
91
|
+
readonly linear: (t: number) => number;
|
|
144
92
|
};
|
|
145
93
|
/**
|
|
146
94
|
* Create an easing function from cubic bezier control points
|
|
@@ -164,44 +112,6 @@ declare function applySpeedCurve(duration: number, curve: CubicBezier, sampleRat
|
|
|
164
112
|
*/
|
|
165
113
|
declare function getEasingDisplayName(preset: EasingPreset | string): string;
|
|
166
114
|
|
|
167
|
-
/**
|
|
168
|
-
* Speed Curve Utility
|
|
169
|
-
*
|
|
170
|
-
* Advanced time-warping for video speed ramps using easing functions.
|
|
171
|
-
* Maps original video timestamps to warped timestamps through easing curves.
|
|
172
|
-
*/
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Maps original video timestamps to warped timestamps using any easing function.
|
|
176
|
-
*
|
|
177
|
-
* @param originalTime - Original timestamp in seconds (0 to inputDuration)
|
|
178
|
-
* @param inputDuration - Input video duration in seconds (default: 5)
|
|
179
|
-
* @param outputDuration - Output video duration in seconds (default: 1.5)
|
|
180
|
-
* @param easingFunction - Easing function or function name string (default: easeInOutCubic)
|
|
181
|
-
* @returns Warped timestamp for the output video
|
|
182
|
-
*/
|
|
183
|
-
declare function warpTime(originalTime: number, inputDuration?: number, outputDuration?: number, easingFunction?: EasingFunction | string): number;
|
|
184
|
-
/**
|
|
185
|
-
* Calculate the duration of a frame after warping.
|
|
186
|
-
*/
|
|
187
|
-
declare function calculateWarpedDuration(originalStart: number, originalDuration: number, inputDuration?: number, outputDuration?: number, easingFunction?: EasingFunction | string): number;
|
|
188
|
-
/**
|
|
189
|
-
* Validate that a warp time function produces valid output.
|
|
190
|
-
*/
|
|
191
|
-
declare function validateWarpFunction(easingFunction?: EasingFunction | string, inputDuration?: number, outputDuration?: number, tolerance?: number): {
|
|
192
|
-
valid: boolean;
|
|
193
|
-
errors: string[];
|
|
194
|
-
};
|
|
195
|
-
/**
|
|
196
|
-
* Generate statistics about the warp curve.
|
|
197
|
-
*/
|
|
198
|
-
declare function analyzeWarpCurve(easingFunction?: EasingFunction | string, inputDuration?: number, outputDuration?: number, samples?: number): {
|
|
199
|
-
speedMultipliers: number[];
|
|
200
|
-
minSpeed: number;
|
|
201
|
-
maxSpeed: number;
|
|
202
|
-
avgSpeed: number;
|
|
203
|
-
};
|
|
204
|
-
|
|
205
115
|
/**
|
|
206
116
|
* Grid Splitter Utility
|
|
207
117
|
*
|
|
@@ -266,78 +176,32 @@ declare function splitWithDimensions(imageDataUrl: string, rows: number, cols: n
|
|
|
266
176
|
}>;
|
|
267
177
|
|
|
268
178
|
/**
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
* Calculate node dimensions based on output aspect ratio,
|
|
272
|
-
* respecting min/max constraints.
|
|
273
|
-
*/
|
|
274
|
-
/**
|
|
275
|
-
* Extract dimensions from a base64 data URL image.
|
|
276
|
-
*/
|
|
277
|
-
declare function getImageDimensions(base64DataUrl: string): Promise<{
|
|
278
|
-
width: number;
|
|
279
|
-
height: number;
|
|
280
|
-
} | null>;
|
|
281
|
-
/**
|
|
282
|
-
* Extract dimensions from a video data URL or blob URL.
|
|
283
|
-
*/
|
|
284
|
-
declare function getVideoDimensions(videoUrl: string): Promise<{
|
|
285
|
-
width: number;
|
|
286
|
-
height: number;
|
|
287
|
-
} | null>;
|
|
288
|
-
/**
|
|
289
|
-
* Calculate node dimensions that maintain aspect ratio within constraints.
|
|
290
|
-
*
|
|
291
|
-
* @param aspectRatio - Width divided by height (e.g., 16/9 for landscape)
|
|
292
|
-
* @param baseWidth - Starting width to calculate from (default 300px)
|
|
179
|
+
* Get the dimensions of an image from its source URL or data URL.
|
|
293
180
|
*/
|
|
294
|
-
declare function
|
|
181
|
+
declare function getImageDimensions$1(src: string): Promise<{
|
|
295
182
|
width: number;
|
|
296
183
|
height: number;
|
|
297
|
-
}
|
|
184
|
+
}>;
|
|
298
185
|
/**
|
|
299
|
-
*
|
|
300
|
-
*
|
|
301
|
-
* @param aspectRatio - Width divided by height
|
|
302
|
-
* @param currentHeight - Optional current height to preserve (if within constraints)
|
|
186
|
+
* Get duration and dimensions of a video from its source URL or data URL.
|
|
303
187
|
*/
|
|
304
|
-
declare function
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
188
|
+
declare function getVideoMetadata(src: string): Promise<{
|
|
189
|
+
duration: number;
|
|
190
|
+
dimensions: {
|
|
191
|
+
width: number;
|
|
192
|
+
height: number;
|
|
193
|
+
};
|
|
194
|
+
}>;
|
|
308
195
|
|
|
196
|
+
interface MediaInfo {
|
|
197
|
+
url: string | null;
|
|
198
|
+
urls?: string[];
|
|
199
|
+
type: 'image' | 'video' | null;
|
|
200
|
+
}
|
|
309
201
|
/**
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
* When multiple callers request the same URL concurrently, only one
|
|
313
|
-
* actual network request is made. All callers receive the same response
|
|
314
|
-
* data once the request completes. Responses are cached for 5 seconds.
|
|
315
|
-
*/
|
|
316
|
-
/**
|
|
317
|
-
* Fetch with request deduplication.
|
|
318
|
-
*
|
|
319
|
-
* Multiple concurrent calls to the same URL (with same headers) will
|
|
320
|
-
* share a single network request. The response is cloned for each caller.
|
|
321
|
-
*/
|
|
322
|
-
declare function deduplicatedFetch(url: string, options?: RequestInit): Promise<Response>;
|
|
323
|
-
/**
|
|
324
|
-
* Clear all cached responses.
|
|
202
|
+
* Extract media URL and type from node data
|
|
325
203
|
*/
|
|
326
|
-
declare function
|
|
327
|
-
|
|
328
|
-
declare function calculateWorkflowCost(nodes: WorkflowNode[]): CostBreakdown;
|
|
329
|
-
declare function formatCost(amount: number): string;
|
|
330
|
-
|
|
331
|
-
interface CubicBezierEditorProps {
|
|
332
|
-
value: CubicBezier;
|
|
333
|
-
onChange: (value: CubicBezier) => void;
|
|
334
|
-
onCommit?: (value: CubicBezier) => void;
|
|
335
|
-
disabled?: boolean;
|
|
336
|
-
width?: number;
|
|
337
|
-
height?: number;
|
|
338
|
-
}
|
|
339
|
-
declare function CubicBezierEditorComponent({ value, onChange, onCommit, disabled, width, height, }: CubicBezierEditorProps): react_jsx_runtime.JSX.Element;
|
|
340
|
-
declare const CubicBezierEditor: react.MemoExoticComponent<typeof CubicBezierEditorComponent>;
|
|
204
|
+
declare function getMediaFromNode(nodeType: NodeType, data: WorkflowNodeData): MediaInfo;
|
|
341
205
|
|
|
342
206
|
interface ImageModelConfig {
|
|
343
207
|
value: ImageModel;
|
|
@@ -365,20 +229,20 @@ interface LipSyncModelConfig {
|
|
|
365
229
|
}
|
|
366
230
|
declare const LIPSYNC_MODELS: LipSyncModelConfig[];
|
|
367
231
|
declare const LIPSYNC_SYNC_MODES: ({
|
|
368
|
-
value: "loop";
|
|
369
232
|
label: string;
|
|
233
|
+
value: "loop";
|
|
370
234
|
} | {
|
|
371
|
-
value: "bounce";
|
|
372
235
|
label: string;
|
|
236
|
+
value: "bounce";
|
|
373
237
|
} | {
|
|
374
|
-
value: "cut_off";
|
|
375
238
|
label: string;
|
|
239
|
+
value: "cut_off";
|
|
376
240
|
} | {
|
|
377
|
-
value: "silence";
|
|
378
241
|
label: string;
|
|
242
|
+
value: "silence";
|
|
379
243
|
} | {
|
|
380
|
-
value: "remap";
|
|
381
244
|
label: string;
|
|
245
|
+
value: "remap";
|
|
382
246
|
})[];
|
|
383
247
|
declare const DEFAULT_LIPSYNC_MODEL: LipSyncModel;
|
|
384
248
|
interface TextModelConfig {
|
|
@@ -396,4 +260,140 @@ declare function getLipSyncModelLabel(model: LipSyncModel): string;
|
|
|
396
260
|
declare function getLLMModelLabel(model: TextModel): string;
|
|
397
261
|
declare function lipSyncModelSupportsImage(model: LipSyncModel): boolean;
|
|
398
262
|
|
|
263
|
+
/**
|
|
264
|
+
* Node Dimensions Utility
|
|
265
|
+
*
|
|
266
|
+
* Calculate node dimensions based on output aspect ratio,
|
|
267
|
+
* respecting min/max constraints.
|
|
268
|
+
*/
|
|
269
|
+
/**
|
|
270
|
+
* Extract dimensions from a base64 data URL image.
|
|
271
|
+
*/
|
|
272
|
+
declare function getImageDimensions(base64DataUrl: string): Promise<{
|
|
273
|
+
width: number;
|
|
274
|
+
height: number;
|
|
275
|
+
} | null>;
|
|
276
|
+
/**
|
|
277
|
+
* Extract dimensions from a video data URL or blob URL.
|
|
278
|
+
*/
|
|
279
|
+
declare function getVideoDimensions(videoUrl: string): Promise<{
|
|
280
|
+
width: number;
|
|
281
|
+
height: number;
|
|
282
|
+
} | null>;
|
|
283
|
+
/**
|
|
284
|
+
* Calculate node dimensions that maintain aspect ratio within constraints.
|
|
285
|
+
*
|
|
286
|
+
* @param aspectRatio - Width divided by height (e.g., 16/9 for landscape)
|
|
287
|
+
* @param baseWidth - Starting width to calculate from (default 300px)
|
|
288
|
+
*/
|
|
289
|
+
declare function calculateNodeSize(aspectRatio: number, baseWidth?: number): {
|
|
290
|
+
width: number;
|
|
291
|
+
height: number;
|
|
292
|
+
};
|
|
293
|
+
/**
|
|
294
|
+
* Calculate node dimensions preserving current height if provided.
|
|
295
|
+
*
|
|
296
|
+
* @param aspectRatio - Width divided by height
|
|
297
|
+
* @param currentHeight - Optional current height to preserve (if within constraints)
|
|
298
|
+
*/
|
|
299
|
+
declare function calculateNodeSizePreservingHeight(aspectRatio: number, currentHeight?: number): {
|
|
300
|
+
width: number;
|
|
301
|
+
height: number;
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Generates dynamic input handles from a model's input schema.
|
|
306
|
+
*
|
|
307
|
+
* Merges dynamically discovered handles with static handles defined in NODE_DEFINITIONS.
|
|
308
|
+
* Static handles take precedence - dynamic handles are only added if not already present.
|
|
309
|
+
*
|
|
310
|
+
* @param inputSchema - The model's input schema containing properties
|
|
311
|
+
* @param staticHandles - Static handles from NODE_DEFINITIONS
|
|
312
|
+
* @returns Combined array of handles (static + dynamic)
|
|
313
|
+
*/
|
|
314
|
+
declare function generateHandlesFromSchema(inputSchema: Record<string, unknown> | undefined, staticHandles: HandleDefinition[]): HandleDefinition[];
|
|
315
|
+
/**
|
|
316
|
+
* Check if a handle was dynamically generated from schema.
|
|
317
|
+
*/
|
|
318
|
+
declare function isSchemaHandle(handle: HandleDefinition): boolean;
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Shared utilities for working with provider model schemas
|
|
322
|
+
*/
|
|
323
|
+
/**
|
|
324
|
+
* Extract default values from schema properties
|
|
325
|
+
*/
|
|
326
|
+
declare function getSchemaDefaults(schema: Record<string, unknown> | undefined): Record<string, unknown>;
|
|
327
|
+
/**
|
|
328
|
+
* Check if the model's schema supports image input
|
|
329
|
+
* Used to determine whether to enable/disable image input handles
|
|
330
|
+
*/
|
|
331
|
+
declare function supportsImageInput(schema: Record<string, unknown> | undefined): boolean;
|
|
332
|
+
/**
|
|
333
|
+
* Extract enum values from component schemas for SchemaInputs dropdowns
|
|
334
|
+
*/
|
|
335
|
+
declare function extractEnumValues(componentSchemas: Record<string, {
|
|
336
|
+
enum?: unknown[];
|
|
337
|
+
type?: string;
|
|
338
|
+
}> | undefined): Record<string, string[]> | undefined;
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Utility functions for validating required schema fields
|
|
342
|
+
*/
|
|
343
|
+
/**
|
|
344
|
+
* Validates that all required fields in a JSON Schema have values.
|
|
345
|
+
*
|
|
346
|
+
* @param inputSchema - The JSON Schema with required array
|
|
347
|
+
* @param values - Current field values
|
|
348
|
+
* @param skipFields - Fields to skip (e.g., fields populated via connections)
|
|
349
|
+
* @returns Validation result with isValid flag and list of missing fields
|
|
350
|
+
*/
|
|
351
|
+
declare function validateRequiredSchemaFields(inputSchema: Record<string, unknown> | undefined, values: Record<string, unknown>, skipFields: Set<string>): {
|
|
352
|
+
isValid: boolean;
|
|
353
|
+
missingFields: string[];
|
|
354
|
+
};
|
|
355
|
+
/**
|
|
356
|
+
* Fields that are populated via node connections rather than schema inputs.
|
|
357
|
+
* These should be skipped when validating schema required fields.
|
|
358
|
+
*/
|
|
359
|
+
declare const CONNECTION_FIELDS: Set<string>;
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Speed Curve Utility
|
|
363
|
+
*
|
|
364
|
+
* Advanced time-warping for video speed ramps using easing functions.
|
|
365
|
+
* Maps original video timestamps to warped timestamps through easing curves.
|
|
366
|
+
*/
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Maps original video timestamps to warped timestamps using any easing function.
|
|
370
|
+
*
|
|
371
|
+
* @param originalTime - Original timestamp in seconds (0 to inputDuration)
|
|
372
|
+
* @param inputDuration - Input video duration in seconds (default: 5)
|
|
373
|
+
* @param outputDuration - Output video duration in seconds (default: 1.5)
|
|
374
|
+
* @param easingFunction - Easing function or function name string (default: easeInOutCubic)
|
|
375
|
+
* @returns Warped timestamp for the output video
|
|
376
|
+
*/
|
|
377
|
+
declare function warpTime(originalTime: number, inputDuration?: number, outputDuration?: number, easingFunction?: EasingFunction | string): number;
|
|
378
|
+
/**
|
|
379
|
+
* Calculate the duration of a frame after warping.
|
|
380
|
+
*/
|
|
381
|
+
declare function calculateWarpedDuration(originalStart: number, originalDuration: number, inputDuration?: number, outputDuration?: number, easingFunction?: EasingFunction | string): number;
|
|
382
|
+
/**
|
|
383
|
+
* Validate that a warp time function produces valid output.
|
|
384
|
+
*/
|
|
385
|
+
declare function validateWarpFunction(easingFunction?: EasingFunction | string, inputDuration?: number, outputDuration?: number, tolerance?: number): {
|
|
386
|
+
valid: boolean;
|
|
387
|
+
errors: string[];
|
|
388
|
+
};
|
|
389
|
+
/**
|
|
390
|
+
* Generate statistics about the warp curve.
|
|
391
|
+
*/
|
|
392
|
+
declare function analyzeWarpCurve(easingFunction?: EasingFunction | string, inputDuration?: number, outputDuration?: number, samples?: number): {
|
|
393
|
+
speedMultipliers: number[];
|
|
394
|
+
minSpeed: number;
|
|
395
|
+
maxSpeed: number;
|
|
396
|
+
avgSpeed: number;
|
|
397
|
+
};
|
|
398
|
+
|
|
399
399
|
export { CONNECTION_FIELDS, CubicBezierEditor, DEFAULT_CUSTOM_BEZIER, DEFAULT_IMAGE_MODEL, DEFAULT_LIPSYNC_MODEL, DEFAULT_LLM_MODEL, DEFAULT_VIDEO_MODEL, EASING_BEZIER_MAP, EASING_PRESETS, type EasingFunction, type EasingPresetName, type GridCandidate, type GridCell, type GridDetectionResult, IMAGE_MODELS, IMAGE_MODEL_ID_MAP, IMAGE_MODEL_MAP, type ImageModelConfig, LIPSYNC_MODELS, LIPSYNC_SYNC_MODES, LLM_MODELS, LLM_MODEL_ID_MAP, LLM_MODEL_MAP, type LipSyncModelConfig, type MediaInfo, PRESET_BEZIERS, type TextModelConfig, VIDEO_MODELS, VIDEO_MODEL_ID_MAP, VIDEO_MODEL_MAP, type VideoModelConfig, analyzeWarpCurve, applySpeedCurve, calculateNodeSize, calculateNodeSizePreservingHeight, calculateWarpedDuration, calculateWorkflowCost, clearFetchCache, createAsymmetricEase, createBezierEasing, createGridForDimensions, deduplicatedFetch, detectAndSplitGrid, detectGrid, detectGridWithDimensions, easing, evaluateBezier, extractEnumValues, formatCost, generateHandlesFromSchema, getAllEasingNames, getEasingBezier, getEasingDisplayName, getEasingFunction, getGridCandidates, getImageDimensions$1 as getImageDimensions, getImageDimensions as getImageDimensionsFromDataUrl, getImageModelLabel, getLLMModelLabel, getLipSyncModelLabel, getMediaFromNode, getPresetBezier, getSchemaDefaults, getVideoDimensions as getVideoDimensionsFromUrl, getVideoMetadata, getVideoModelLabel, isSchemaHandle, lipSyncModelSupportsImage, splitImage, splitWithDimensions, supportsImageInput, validateRequiredSchemaFields, validateWarpFunction, warpTime };
|