n8n-nodes-comfyui-all 2.0.0
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/README.md +882 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/nodes/ComfyUi/ComfyUi.node.d.ts +248 -0
- package/dist/nodes/ComfyUi/ComfyUi.node.d.ts.map +1 -0
- package/dist/nodes/ComfyUi/ComfyUi.node.js +484 -0
- package/dist/nodes/ComfyUi/ComfyUi.node.js.map +1 -0
- package/dist/nodes/ComfyUiClient.d.ts +63 -0
- package/dist/nodes/ComfyUiClient.d.ts.map +1 -0
- package/dist/nodes/ComfyUiClient.js +281 -0
- package/dist/nodes/ComfyUiClient.js.map +1 -0
- package/dist/nodes/constants.d.ts +49 -0
- package/dist/nodes/constants.d.ts.map +1 -0
- package/dist/nodes/constants.js +86 -0
- package/dist/nodes/constants.js.map +1 -0
- package/dist/nodes/logger.d.ts +29 -0
- package/dist/nodes/logger.d.ts.map +1 -0
- package/dist/nodes/logger.js +59 -0
- package/dist/nodes/logger.js.map +1 -0
- package/dist/nodes/types.d.ts +71 -0
- package/dist/nodes/types.d.ts.map +1 -0
- package/dist/nodes/types.js +6 -0
- package/dist/nodes/types.js.map +1 -0
- package/dist/nodes/validation.d.ts +23 -0
- package/dist/nodes/validation.d.ts.map +1 -0
- package/dist/nodes/validation.js +175 -0
- package/dist/nodes/validation.js.map +1 -0
- package/dist/nodes/workflow-builder.d.ts +22 -0
- package/dist/nodes/workflow-builder.d.ts.map +1 -0
- package/dist/nodes/workflow-builder.js +240 -0
- package/dist/nodes/workflow-builder.js.map +1 -0
- package/dist/nodes/workflow-parser.d.ts +51 -0
- package/dist/nodes/workflow-parser.d.ts.map +1 -0
- package/dist/nodes/workflow-parser.js +258 -0
- package/dist/nodes/workflow-parser.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateUrl = validateUrl;
|
|
4
|
+
exports.isPrivateNetworkAddress = isPrivateNetworkAddress;
|
|
5
|
+
exports.getNetworkAddressInfo = getNetworkAddressInfo;
|
|
6
|
+
exports.validateImageInput = validateImageInput;
|
|
7
|
+
exports.validateComfyUIWorkflow = validateComfyUIWorkflow;
|
|
8
|
+
const url_1 = require("url");
|
|
9
|
+
const constants_1 = require("./constants");
|
|
10
|
+
/**
|
|
11
|
+
* Validate if a string is a valid HTTP/HTTPS URL
|
|
12
|
+
*/
|
|
13
|
+
function validateUrl(url) {
|
|
14
|
+
try {
|
|
15
|
+
const parsed = new url_1.URL(url);
|
|
16
|
+
return parsed.protocol === 'http:' || parsed.protocol === 'https:';
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check if a URL points to a private network address (SSRF protection)
|
|
24
|
+
* Note: localhost/127.0.0.1 is allowed for local development
|
|
25
|
+
*/
|
|
26
|
+
function isPrivateNetworkAddress(url) {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = new url_1.URL(url);
|
|
29
|
+
const hostname = parsed.hostname;
|
|
30
|
+
// Skip localhost/127.0.0.1 for local development
|
|
31
|
+
if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1') {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
// Check against private IP patterns
|
|
35
|
+
return constants_1.PRIVATE_IP_PATTERNS.some(pattern => pattern.test(hostname));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get network address information for a URL
|
|
43
|
+
*/
|
|
44
|
+
function getNetworkAddressInfo(url) {
|
|
45
|
+
try {
|
|
46
|
+
const parsed = new url_1.URL(url);
|
|
47
|
+
const hostname = parsed.hostname;
|
|
48
|
+
return {
|
|
49
|
+
isLocalhost: hostname === 'localhost' ||
|
|
50
|
+
hostname === '127.0.0.1' ||
|
|
51
|
+
hostname === '::1',
|
|
52
|
+
isPrivate: constants_1.PRIVATE_IP_PATTERNS.some(pattern => pattern.test(hostname)),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return {
|
|
57
|
+
isLocalhost: false,
|
|
58
|
+
isPrivate: false,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Validate and sanitize image input (check size if base64)
|
|
64
|
+
*/
|
|
65
|
+
function validateImageInput(image) {
|
|
66
|
+
if (!image || image.trim() === '') {
|
|
67
|
+
return {
|
|
68
|
+
valid: false,
|
|
69
|
+
error: 'Image input is empty',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// If it's a base64 data URL, check size
|
|
73
|
+
if (image.startsWith('data:image/')) {
|
|
74
|
+
try {
|
|
75
|
+
// Extract base64 part
|
|
76
|
+
const base64Data = image.split(',')[1];
|
|
77
|
+
if (!base64Data) {
|
|
78
|
+
return {
|
|
79
|
+
valid: false,
|
|
80
|
+
error: 'Invalid base64 image data',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// Calculate size in bytes (rough estimation)
|
|
84
|
+
const sizeInBytes = Math.ceil(base64Data.length * 0.75);
|
|
85
|
+
const sizeInMB = sizeInBytes / (1024 * 1024);
|
|
86
|
+
if (sizeInMB > constants_1.VALIDATION.MAX_IMAGE_SIZE_MB) {
|
|
87
|
+
return {
|
|
88
|
+
valid: false,
|
|
89
|
+
error: `Image is too large. Maximum size is ${constants_1.VALIDATION.MAX_IMAGE_SIZE_MB}MB.`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
return {
|
|
95
|
+
valid: false,
|
|
96
|
+
error: 'Failed to process base64 image data',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return { valid: true };
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Validate if a JSON string is a valid ComfyUI API format workflow
|
|
104
|
+
*/
|
|
105
|
+
function validateComfyUIWorkflow(workflowJson) {
|
|
106
|
+
if (!workflowJson || workflowJson.trim() === '') {
|
|
107
|
+
return {
|
|
108
|
+
valid: false,
|
|
109
|
+
error: 'Workflow JSON is empty',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
let workflow;
|
|
113
|
+
try {
|
|
114
|
+
workflow = JSON.parse(workflowJson);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
return {
|
|
118
|
+
valid: false,
|
|
119
|
+
error: `Invalid JSON: ${error.message}`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// Check if it's an object with node IDs as keys
|
|
123
|
+
if (typeof workflow !== 'object' || workflow === null || Array.isArray(workflow)) {
|
|
124
|
+
return {
|
|
125
|
+
valid: false,
|
|
126
|
+
error: 'Workflow must be an object with node IDs as keys',
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// Check if there's at least one node
|
|
130
|
+
const nodeIds = Object.keys(workflow);
|
|
131
|
+
if (nodeIds.length === 0) {
|
|
132
|
+
return {
|
|
133
|
+
valid: false,
|
|
134
|
+
error: 'Workflow must contain at least one node',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
// Validate each node has the required structure
|
|
138
|
+
for (const nodeId of nodeIds) {
|
|
139
|
+
const node = workflow[nodeId];
|
|
140
|
+
// Each node should be an object
|
|
141
|
+
if (typeof node !== 'object' || node === null) {
|
|
142
|
+
return {
|
|
143
|
+
valid: false,
|
|
144
|
+
error: `Node ${nodeId} must be an object`,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// Each node should have a class_type
|
|
148
|
+
if (!node.class_type || typeof node.class_type !== 'string') {
|
|
149
|
+
return {
|
|
150
|
+
valid: false,
|
|
151
|
+
error: `Node ${nodeId} must have a class_type property`,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// Node can have inputs (optional)
|
|
155
|
+
if (node.inputs !== undefined) {
|
|
156
|
+
if (typeof node.inputs !== 'object' || node.inputs === null || Array.isArray(node.inputs)) {
|
|
157
|
+
return {
|
|
158
|
+
valid: false,
|
|
159
|
+
error: `Node ${nodeId} inputs must be an object`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Node can have widgets_values (optional)
|
|
164
|
+
if (node.widgets_values !== undefined) {
|
|
165
|
+
if (!Array.isArray(node.widgets_values)) {
|
|
166
|
+
return {
|
|
167
|
+
valid: false,
|
|
168
|
+
error: `Node ${nodeId} widgets_values must be an array`,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return { valid: true };
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../nodes/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ComfyUIWorkflow, WorkflowOptions } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Build a text-to-image workflow
|
|
4
|
+
*/
|
|
5
|
+
export declare function buildTextToImageWorkflow(prompt: string, negativePrompt: string | undefined, options?: WorkflowOptions): ComfyUIWorkflow;
|
|
6
|
+
/**
|
|
7
|
+
* Build an image-to-image workflow
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildImageToImageWorkflow(prompt: string, negativePrompt: string | undefined, image: string, options?: WorkflowOptions): ComfyUIWorkflow;
|
|
10
|
+
/**
|
|
11
|
+
* Build an image edit workflow
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildImageEditWorkflow(prompt: string, negativePrompt: string | undefined, image: string, options?: WorkflowOptions): ComfyUIWorkflow;
|
|
14
|
+
/**
|
|
15
|
+
* Build a text-to-video workflow
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildTextToVideoWorkflow(prompt: string, negativePrompt: string | undefined, options?: WorkflowOptions): ComfyUIWorkflow;
|
|
18
|
+
/**
|
|
19
|
+
* Build an image-to-video workflow
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildImageToVideoWorkflow(prompt: string, negativePrompt: string | undefined, image: string, options?: WorkflowOptions): ComfyUIWorkflow;
|
|
22
|
+
//# sourceMappingURL=workflow-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-builder.d.ts","sourceRoot":"","sources":["../../nodes/workflow-builder.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,eAAe,EAEhB,MAAM,SAAS,CAAC;AAuKjB;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,OAAO,CAAC,EAAE,eAAe,GACxB,eAAe,CAejB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,GACxB,eAAe,CAgBjB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,GACxB,eAAe,CAiBjB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,OAAO,CAAC,EAAE,eAAe,GACxB,eAAe,CAgBjB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,GACxB,eAAe,CAgBjB"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildTextToImageWorkflow = buildTextToImageWorkflow;
|
|
4
|
+
exports.buildImageToImageWorkflow = buildImageToImageWorkflow;
|
|
5
|
+
exports.buildImageEditWorkflow = buildImageEditWorkflow;
|
|
6
|
+
exports.buildTextToVideoWorkflow = buildTextToVideoWorkflow;
|
|
7
|
+
exports.buildImageToVideoWorkflow = buildImageToVideoWorkflow;
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
9
|
+
const constants_1 = require("./constants");
|
|
10
|
+
/**
|
|
11
|
+
* Generate a random seed for ComfyUI generation
|
|
12
|
+
*/
|
|
13
|
+
function generateSeed() {
|
|
14
|
+
return (0, crypto_1.randomInt)(0, constants_1.VALIDATION.MAX_SEED);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a checkpoint loader node
|
|
18
|
+
*/
|
|
19
|
+
function createCheckpointLoader(modelName) {
|
|
20
|
+
return {
|
|
21
|
+
inputs: {
|
|
22
|
+
ckpt_name: modelName || constants_1.DEFAULT_MODEL,
|
|
23
|
+
},
|
|
24
|
+
class_type: 'CheckpointLoaderSimple',
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create a KSampler node
|
|
29
|
+
*/
|
|
30
|
+
function createKSampler(seed, denoise, options) {
|
|
31
|
+
return {
|
|
32
|
+
inputs: {
|
|
33
|
+
seed,
|
|
34
|
+
steps: options?.steps || constants_1.DEFAULT_STEPS,
|
|
35
|
+
cfg: options?.cfg || constants_1.DEFAULT_CFG,
|
|
36
|
+
sampler_name: options?.samplerName || constants_1.DEFAULT_SAMPLER_NAME,
|
|
37
|
+
scheduler: options?.scheduler || constants_1.DEFAULT_SCHEDULER,
|
|
38
|
+
denoise,
|
|
39
|
+
model: [constants_1.NodeIds.CHECKPOINT_LOADER, 0],
|
|
40
|
+
positive: [constants_1.NodeIds.POSITIVE_CLIP, 0],
|
|
41
|
+
negative: [constants_1.NodeIds.NEGATIVE_CLIP, 0],
|
|
42
|
+
latent_image: [constants_1.NodeIds.LATENT_IMAGE, 0],
|
|
43
|
+
},
|
|
44
|
+
class_type: 'KSampler',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create an empty latent image node
|
|
49
|
+
*/
|
|
50
|
+
function createEmptyLatentImage(options) {
|
|
51
|
+
return {
|
|
52
|
+
inputs: {
|
|
53
|
+
width: options?.width || constants_1.DEFAULT_IMAGE_WIDTH,
|
|
54
|
+
height: options?.height || constants_1.DEFAULT_IMAGE_HEIGHT,
|
|
55
|
+
batch_size: constants_1.DEFAULT_BATCH_SIZE,
|
|
56
|
+
},
|
|
57
|
+
class_type: 'EmptyLatentImage',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create a latent image node for video with custom batch size
|
|
62
|
+
*/
|
|
63
|
+
function createVideoLatentImage(frames, options) {
|
|
64
|
+
return {
|
|
65
|
+
inputs: {
|
|
66
|
+
width: options?.width || constants_1.DEFAULT_IMAGE_WIDTH,
|
|
67
|
+
height: options?.height || constants_1.DEFAULT_IMAGE_HEIGHT,
|
|
68
|
+
batch_size: frames,
|
|
69
|
+
},
|
|
70
|
+
class_type: 'EmptyLatentImage',
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create a VAE encode node
|
|
75
|
+
*/
|
|
76
|
+
function createVAEEncode() {
|
|
77
|
+
return {
|
|
78
|
+
inputs: {
|
|
79
|
+
pixels: [constants_1.NodeIds.LOAD_IMAGE, 0],
|
|
80
|
+
vae: [constants_1.NodeIds.CHECKPOINT_LOADER, 2],
|
|
81
|
+
},
|
|
82
|
+
class_type: 'VAEEncode',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create a CLIP text encode node for positive prompt
|
|
87
|
+
*/
|
|
88
|
+
function createPositiveClipEncode(prompt) {
|
|
89
|
+
return {
|
|
90
|
+
inputs: {
|
|
91
|
+
text: prompt,
|
|
92
|
+
clip: [constants_1.NodeIds.CHECKPOINT_LOADER, 1],
|
|
93
|
+
},
|
|
94
|
+
class_type: 'CLIPTextEncode',
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Create a CLIP text encode node for negative prompt
|
|
99
|
+
*/
|
|
100
|
+
function createNegativeClipEncode(negativePrompt) {
|
|
101
|
+
return {
|
|
102
|
+
inputs: {
|
|
103
|
+
text: negativePrompt || '',
|
|
104
|
+
clip: [constants_1.NodeIds.CHECKPOINT_LOADER, 1],
|
|
105
|
+
},
|
|
106
|
+
class_type: 'CLIPTextEncode',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Create a VAE decode node
|
|
111
|
+
*/
|
|
112
|
+
function createVAEDecode() {
|
|
113
|
+
return {
|
|
114
|
+
inputs: {
|
|
115
|
+
samples: [constants_1.NodeIds.K_SAMPLER, 0],
|
|
116
|
+
vae: [constants_1.NodeIds.CHECKPOINT_LOADER, 2],
|
|
117
|
+
},
|
|
118
|
+
class_type: 'VAEDecode',
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create a save image node
|
|
123
|
+
*/
|
|
124
|
+
function createSaveImage() {
|
|
125
|
+
return {
|
|
126
|
+
inputs: {
|
|
127
|
+
filename_prefix: 'ComfyUI',
|
|
128
|
+
images: [constants_1.NodeIds.VAE_DECODE, 0],
|
|
129
|
+
},
|
|
130
|
+
class_type: 'SaveImage',
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Create a load image node
|
|
135
|
+
*/
|
|
136
|
+
function createLoadImage(image) {
|
|
137
|
+
return {
|
|
138
|
+
inputs: {
|
|
139
|
+
image: image,
|
|
140
|
+
'choose file to upload': 'image',
|
|
141
|
+
},
|
|
142
|
+
class_type: 'LoadImage',
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Build a text-to-image workflow
|
|
147
|
+
*/
|
|
148
|
+
function buildTextToImageWorkflow(prompt, negativePrompt, options) {
|
|
149
|
+
const seed = generateSeed();
|
|
150
|
+
return {
|
|
151
|
+
prompt: {
|
|
152
|
+
[constants_1.NodeIds.K_SAMPLER]: createKSampler(seed, 1, options),
|
|
153
|
+
[constants_1.NodeIds.CHECKPOINT_LOADER]: createCheckpointLoader(options?.modelName),
|
|
154
|
+
[constants_1.NodeIds.LATENT_IMAGE]: createEmptyLatentImage(options),
|
|
155
|
+
[constants_1.NodeIds.POSITIVE_CLIP]: createPositiveClipEncode(prompt),
|
|
156
|
+
[constants_1.NodeIds.NEGATIVE_CLIP]: createNegativeClipEncode(negativePrompt),
|
|
157
|
+
[constants_1.NodeIds.VAE_DECODE]: createVAEDecode(),
|
|
158
|
+
[constants_1.NodeIds.SAVE_IMAGE]: createSaveImage(),
|
|
159
|
+
},
|
|
160
|
+
extra_data: {},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Build an image-to-image workflow
|
|
165
|
+
*/
|
|
166
|
+
function buildImageToImageWorkflow(prompt, negativePrompt, image, options) {
|
|
167
|
+
const seed = generateSeed();
|
|
168
|
+
return {
|
|
169
|
+
prompt: {
|
|
170
|
+
[constants_1.NodeIds.K_SAMPLER]: createKSampler(seed, constants_1.DEFAULT_DENOISE, options),
|
|
171
|
+
[constants_1.NodeIds.CHECKPOINT_LOADER]: createCheckpointLoader(options?.modelName),
|
|
172
|
+
[constants_1.NodeIds.LATENT_IMAGE]: createVAEEncode(),
|
|
173
|
+
[constants_1.NodeIds.POSITIVE_CLIP]: createPositiveClipEncode(prompt),
|
|
174
|
+
[constants_1.NodeIds.NEGATIVE_CLIP]: createNegativeClipEncode(negativePrompt),
|
|
175
|
+
[constants_1.NodeIds.VAE_DECODE]: createVAEDecode(),
|
|
176
|
+
[constants_1.NodeIds.SAVE_IMAGE]: createSaveImage(),
|
|
177
|
+
[constants_1.NodeIds.LOAD_IMAGE]: createLoadImage(image),
|
|
178
|
+
},
|
|
179
|
+
extra_data: {},
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Build an image edit workflow
|
|
184
|
+
*/
|
|
185
|
+
function buildImageEditWorkflow(prompt, negativePrompt, image, options) {
|
|
186
|
+
const seed = generateSeed();
|
|
187
|
+
const denoise = options?.denoise !== undefined ? options.denoise : constants_1.DEFAULT_IMAGE_EDIT_DENOISE;
|
|
188
|
+
return {
|
|
189
|
+
prompt: {
|
|
190
|
+
[constants_1.NodeIds.K_SAMPLER]: createKSampler(seed, denoise, options),
|
|
191
|
+
[constants_1.NodeIds.CHECKPOINT_LOADER]: createCheckpointLoader(options?.modelName),
|
|
192
|
+
[constants_1.NodeIds.LATENT_IMAGE]: createVAEEncode(),
|
|
193
|
+
[constants_1.NodeIds.POSITIVE_CLIP]: createPositiveClipEncode(prompt),
|
|
194
|
+
[constants_1.NodeIds.NEGATIVE_CLIP]: createNegativeClipEncode(negativePrompt),
|
|
195
|
+
[constants_1.NodeIds.VAE_DECODE]: createVAEDecode(),
|
|
196
|
+
[constants_1.NodeIds.SAVE_IMAGE]: createSaveImage(),
|
|
197
|
+
[constants_1.NodeIds.LOAD_IMAGE]: createLoadImage(image),
|
|
198
|
+
},
|
|
199
|
+
extra_data: {},
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Build a text-to-video workflow
|
|
204
|
+
*/
|
|
205
|
+
function buildTextToVideoWorkflow(prompt, negativePrompt, options) {
|
|
206
|
+
const seed = generateSeed();
|
|
207
|
+
const frames = options?.frames || constants_1.DEFAULT_FRAMES;
|
|
208
|
+
return {
|
|
209
|
+
prompt: {
|
|
210
|
+
[constants_1.NodeIds.K_SAMPLER]: createKSampler(seed, 1, options),
|
|
211
|
+
[constants_1.NodeIds.CHECKPOINT_LOADER]: createCheckpointLoader(options?.modelName),
|
|
212
|
+
[constants_1.NodeIds.LATENT_IMAGE]: createVideoLatentImage(frames, options),
|
|
213
|
+
[constants_1.NodeIds.POSITIVE_CLIP]: createPositiveClipEncode(prompt),
|
|
214
|
+
[constants_1.NodeIds.NEGATIVE_CLIP]: createNegativeClipEncode(negativePrompt),
|
|
215
|
+
[constants_1.NodeIds.VAE_DECODE]: createVAEDecode(),
|
|
216
|
+
[constants_1.NodeIds.SAVE_IMAGE]: createSaveImage(),
|
|
217
|
+
},
|
|
218
|
+
extra_data: {},
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Build an image-to-video workflow
|
|
223
|
+
*/
|
|
224
|
+
function buildImageToVideoWorkflow(prompt, negativePrompt, image, options) {
|
|
225
|
+
const seed = generateSeed();
|
|
226
|
+
return {
|
|
227
|
+
prompt: {
|
|
228
|
+
[constants_1.NodeIds.K_SAMPLER]: createKSampler(seed, constants_1.DEFAULT_DENOISE, options),
|
|
229
|
+
[constants_1.NodeIds.CHECKPOINT_LOADER]: createCheckpointLoader(options?.modelName),
|
|
230
|
+
[constants_1.NodeIds.LATENT_IMAGE]: createVAEEncode(),
|
|
231
|
+
[constants_1.NodeIds.POSITIVE_CLIP]: createPositiveClipEncode(prompt),
|
|
232
|
+
[constants_1.NodeIds.NEGATIVE_CLIP]: createNegativeClipEncode(negativePrompt),
|
|
233
|
+
[constants_1.NodeIds.VAE_DECODE]: createVAEDecode(),
|
|
234
|
+
[constants_1.NodeIds.SAVE_IMAGE]: createSaveImage(),
|
|
235
|
+
[constants_1.NodeIds.LOAD_IMAGE]: createLoadImage(image),
|
|
236
|
+
},
|
|
237
|
+
extra_data: {},
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=workflow-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-builder.js","sourceRoot":"","sources":["../../nodes/workflow-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ComfyUI Workflow Parser
|
|
3
|
+
* Parses API-format ComfyUI workflows and extracts configurable input parameters
|
|
4
|
+
*/
|
|
5
|
+
type NodePropertyType = 'string' | 'number' | 'boolean' | 'options' | 'any';
|
|
6
|
+
export interface WorkflowNode {
|
|
7
|
+
inputs?: Record<string, any>;
|
|
8
|
+
class_type: string;
|
|
9
|
+
_meta?: Record<string, any>;
|
|
10
|
+
}
|
|
11
|
+
export interface ComfyUIWorkflow {
|
|
12
|
+
[nodeId: string]: WorkflowNode;
|
|
13
|
+
}
|
|
14
|
+
export interface ParsedWorkflowInput {
|
|
15
|
+
nodeId: string;
|
|
16
|
+
nodeTitle: string;
|
|
17
|
+
classType: string;
|
|
18
|
+
parameterName: string;
|
|
19
|
+
parameterType: NodePropertyType;
|
|
20
|
+
defaultValue?: any;
|
|
21
|
+
required: boolean;
|
|
22
|
+
description?: string;
|
|
23
|
+
options?: Array<{
|
|
24
|
+
name: string;
|
|
25
|
+
value: any;
|
|
26
|
+
}>;
|
|
27
|
+
isImage?: boolean;
|
|
28
|
+
isText?: boolean;
|
|
29
|
+
isNumber?: boolean;
|
|
30
|
+
isSeed?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface ParsedWorkflowResult {
|
|
33
|
+
valid: boolean;
|
|
34
|
+
error?: string;
|
|
35
|
+
inputs: ParsedWorkflowInput[];
|
|
36
|
+
workflow: ComfyUIWorkflow;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Parse ComfyUI workflow and extract all configurable input parameters
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseWorkflowInputs(workflowJson: string): ParsedWorkflowResult;
|
|
42
|
+
/**
|
|
43
|
+
* Update workflow with user input values
|
|
44
|
+
*/
|
|
45
|
+
export declare function updateWorkflowWithInputs(workflow: ComfyUIWorkflow, inputValues: Record<string, unknown>): ComfyUIWorkflow;
|
|
46
|
+
/**
|
|
47
|
+
* Generate node-friendly parameter name
|
|
48
|
+
*/
|
|
49
|
+
export declare function generateParameterKey(nodeId: string, paramName: string): string;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=workflow-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-parser.d.ts","sourceRoot":"","sources":["../../nodes/workflow-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,KAAK,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC;AAE5E,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,QAAQ,EAAE,eAAe,CAAC;CAC3B;AA0KD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,oBAAoB,CAmE9E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,eAAe,EACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,eAAe,CAiBjB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9E"}
|