comfyui-mcp 0.3.0 → 0.3.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.
@@ -65,4 +65,51 @@ export interface JobProgress {
65
65
  node?: string;
66
66
  prompt_id?: string;
67
67
  }
68
+ export interface UiNodeInput {
69
+ name: string;
70
+ type: string;
71
+ link: number | null;
72
+ widget?: {
73
+ name: string;
74
+ };
75
+ slot_index?: number;
76
+ }
77
+ export interface UiNodeOutput {
78
+ name: string;
79
+ type: string;
80
+ links: number[] | null;
81
+ slot_index?: number;
82
+ }
83
+ export interface UiNode {
84
+ id: number;
85
+ type: string;
86
+ pos: [number, number] | {
87
+ 0: number;
88
+ 1: number;
89
+ };
90
+ size?: [number, number] | {
91
+ 0: number;
92
+ 1: number;
93
+ };
94
+ flags?: Record<string, unknown>;
95
+ order?: number;
96
+ mode?: number;
97
+ inputs?: UiNodeInput[];
98
+ outputs?: UiNodeOutput[];
99
+ properties?: Record<string, unknown>;
100
+ widgets_values?: unknown[];
101
+ title?: string;
102
+ _meta?: {
103
+ title?: string;
104
+ };
105
+ }
106
+ export type UiLink = [number, number, number, number, number, string];
107
+ export interface UiWorkflow {
108
+ nodes: UiNode[];
109
+ links: UiLink[];
110
+ version?: number;
111
+ extra?: Record<string, unknown>;
112
+ config?: Record<string, unknown>;
113
+ groups?: unknown[];
114
+ }
68
115
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/comfyui/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACzC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;KACxC,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,OAAO,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAE1E,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,aAAa,EAAE,SAAS,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEpF,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,OAAO,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/comfyui/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import type { WorkflowJSON } from "../comfyui/types.js";
2
- import type { SectionInfo } from "./workflow-sections.js";
1
+ import type { WorkflowJSON, ObjectInfo } from "../comfyui/types.js";
2
+ import type { SectionInfo, VirtualEdge } from "./workflow-sections.js";
3
3
  interface HierarchicalOptions {
4
4
  showValues?: boolean;
5
5
  direction?: "LR" | "TB";
@@ -7,5 +7,6 @@ interface HierarchicalOptions {
7
7
  export declare function generateOverview(workflow: WorkflowJSON, sections: Map<string, SectionInfo>, options?: HierarchicalOptions): string;
8
8
  export declare function generateSectionDetail(workflow: WorkflowJSON, sections: Map<string, SectionInfo>, sectionName: string, options?: HierarchicalOptions): string;
9
9
  export declare function listSections(workflow: WorkflowJSON, sections: Map<string, SectionInfo>): string;
10
+ export declare function generateSummary(workflow: WorkflowJSON, sections: Map<string, SectionInfo>, objectInfo: ObjectInfo, virtualEdges: VirtualEdge[], nodeToSection: Map<string, string>, getSetNodeIds: Set<string>): string;
10
11
  export {};
11
12
  //# sourceMappingURL=hierarchical-mermaid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchical-mermaid.d.ts","sourceRoot":"","sources":["../../src/services/hierarchical-mermaid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,wBAAwB,CAAC;AAYvE,UAAU,mBAAmB;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB;AAsBD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,OAAO,GAAE,mBAAwB,GAChC,MAAM,CA0DR;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAkJR;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GACjC,MAAM,CAkCR"}
1
+ {"version":3,"file":"hierarchical-mermaid.d.ts","sourceRoot":"","sources":["../../src/services/hierarchical-mermaid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAYvE,UAAU,mBAAmB;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB;AAsBD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,OAAO,GAAE,mBAAwB,GAChC,MAAM,CA0DR;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAkJR;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GACjC,MAAM,CAkCR;AA0DD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,WAAW,EAAE,EAC3B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GACzB,MAAM,CA4HR"}
@@ -1,4 +1,4 @@
1
- import { buildNodeLabel, wrapNodeLabel, escapeForMermaid, extractConnections, guessOutputType, } from "./mermaid-converter.js";
1
+ import { buildNodeLabel, wrapNodeLabel, escapeForMermaid, extractConnections, guessOutputType, isConnection, DISPLAY_VALUES, } from "./mermaid-converter.js";
2
2
  // Section shapes for the overview diagram
3
3
  const SECTION_SHAPES = {
4
4
  sampling: (id, label) => `${id}{{"${label}"}}`,
@@ -214,4 +214,157 @@ export function listSections(workflow, sections) {
214
214
  }
215
215
  return lines.join("\n");
216
216
  }
217
+ // Key widget values to show in AI summary (superset of DISPLAY_VALUES)
218
+ const SUMMARY_VALUES = new Set([
219
+ ...DISPLAY_VALUES,
220
+ "add_noise",
221
+ "start_at_step",
222
+ "end_at_step",
223
+ "return_with_leftover_noise",
224
+ "noise_seed",
225
+ "lora_01",
226
+ "strength_01",
227
+ "lora_02",
228
+ "strength_02",
229
+ "clip_name",
230
+ "unet_name",
231
+ "vae_name",
232
+ "type",
233
+ "weight_dtype",
234
+ "model_name",
235
+ "shift",
236
+ "length",
237
+ "batch_size",
238
+ "generation_mode",
239
+ "positive_prompt",
240
+ "negative_prompt",
241
+ "crop",
242
+ "num_frames",
243
+ ]);
244
+ function formatNodeSummary(id, node) {
245
+ const title = node._meta?.title;
246
+ const classType = node.class_type;
247
+ const nameStr = title && title !== classType ? `${classType} "${title}"` : classType;
248
+ // Collect key settings
249
+ const settings = [];
250
+ for (const [key, value] of Object.entries(node.inputs)) {
251
+ if (isConnection(value))
252
+ continue;
253
+ if (!SUMMARY_VALUES.has(key))
254
+ continue;
255
+ let display;
256
+ if (typeof value === "string") {
257
+ // Truncate long strings
258
+ display = value.length > 50 ? value.slice(0, 47) + "..." : value;
259
+ }
260
+ else {
261
+ display = String(value);
262
+ }
263
+ settings.push(`${key}=${display}`);
264
+ }
265
+ const settingsStr = settings.length > 0 ? ` — ${settings.join(", ")}` : "";
266
+ return ` ${id}: ${nameStr}${settingsStr}`;
267
+ }
268
+ export function generateSummary(workflow, sections, objectInfo, virtualEdges, nodeToSection, getSetNodeIds) {
269
+ const lines = [];
270
+ const totalNodes = Object.keys(workflow).length;
271
+ const getSetCount = getSetNodeIds.size;
272
+ lines.push(`# Workflow: ${totalNodes} nodes (${totalNodes - getSetCount} real + ${getSetCount} Get/Set), ${sections.size} sections`);
273
+ lines.push("");
274
+ // Sections with node details
275
+ for (const [, section] of sections) {
276
+ lines.push(`## ${section.label} (${section.nodeIds.size} nodes)`);
277
+ // Node list with IDs and key settings
278
+ for (const id of section.nodeIds) {
279
+ const node = workflow[id];
280
+ if (!node)
281
+ continue;
282
+ lines.push(formatNodeSummary(id, node));
283
+ }
284
+ // Cross-section data flow using real output types from object_info
285
+ const receives = [];
286
+ const sends = [];
287
+ for (const inEdge of section.inEdges) {
288
+ const types = [...inEdge.dataTypes].join(", ");
289
+ receives.push(`← ${inEdge.fromSection}: ${types}`);
290
+ }
291
+ for (const outEdge of section.outEdges) {
292
+ const types = [...outEdge.dataTypes].join(", ");
293
+ sends.push(`→ ${outEdge.toSection}: ${types}`);
294
+ }
295
+ if (receives.length > 0 || sends.length > 0) {
296
+ lines.push(" Data flow:");
297
+ for (const r of receives)
298
+ lines.push(` ${r}`);
299
+ for (const s of sends)
300
+ lines.push(` ${s}`);
301
+ }
302
+ lines.push("");
303
+ }
304
+ // Virtual wires (Get/Set)
305
+ if (virtualEdges.length > 0) {
306
+ lines.push("## Virtual Wires (Get/Set)");
307
+ // Group by key
308
+ const wiresByKey = new Map();
309
+ for (const ve of virtualEdges) {
310
+ if (!wiresByKey.has(ve.key)) {
311
+ wiresByKey.set(ve.key, { setterId: ve.sourceNodeId, getterIds: [] });
312
+ }
313
+ wiresByKey.get(ve.key).getterIds.push(ve.targetNodeId);
314
+ }
315
+ for (const [key, wire] of wiresByKey) {
316
+ // Find what feeds into the SetNode
317
+ const setNode = workflow[wire.setterId];
318
+ let feederInfo = "";
319
+ if (setNode) {
320
+ for (const [, value] of Object.entries(setNode.inputs)) {
321
+ if (isConnection(value)) {
322
+ const feederId = value[0];
323
+ const feederNode = workflow[feederId];
324
+ if (feederNode) {
325
+ const feederSection = nodeToSection.get(feederId) ?? "?";
326
+ feederInfo = ` fed by ${feederId}:${feederNode._meta?.title ?? feederNode.class_type} [${feederSection}]`;
327
+ }
328
+ break;
329
+ }
330
+ }
331
+ }
332
+ // Find what consumes from each GetNode
333
+ const consumers = [];
334
+ for (const getterId of wire.getterIds) {
335
+ for (const [nodeId, node] of Object.entries(workflow)) {
336
+ for (const [inputName, value] of Object.entries(node.inputs)) {
337
+ if (isConnection(value) && value[0] === getterId) {
338
+ const consumerSection = nodeToSection.get(nodeId) ?? "?";
339
+ consumers.push(`${nodeId}:${node._meta?.title ?? node.class_type}.${inputName} [${consumerSection}]`);
340
+ }
341
+ }
342
+ }
343
+ }
344
+ lines.push(` "${key}": Set(${wire.setterId})${feederInfo} → Get(${wire.getterIds.join(", ")})`);
345
+ if (consumers.length > 0) {
346
+ for (const c of consumers) {
347
+ lines.push(` → ${c}`);
348
+ }
349
+ }
350
+ }
351
+ lines.push("");
352
+ }
353
+ // Connection graph: list all direct node-to-node connections for reference
354
+ lines.push("## Connection Graph");
355
+ const allEdges = extractConnections(workflow);
356
+ for (const edge of allEdges) {
357
+ const sourceNode = workflow[edge.sourceId];
358
+ const targetNode = workflow[edge.targetId];
359
+ if (!sourceNode || !targetNode)
360
+ continue;
361
+ // Get real output type from object_info
362
+ const def = objectInfo[sourceNode.class_type];
363
+ const outputType = def?.output?.[edge.outputIndex] ??
364
+ guessOutputType(sourceNode.class_type, edge.outputIndex) ??
365
+ "?";
366
+ lines.push(` ${edge.sourceId}:${sourceNode.class_type}[${edge.outputIndex}] --${outputType}--> ${edge.targetId}:${targetNode.class_type}.${edge.inputName}`);
367
+ }
368
+ return lines.join("\n");
369
+ }
217
370
  //# sourceMappingURL=hierarchical-mermaid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchical-mermaid.js","sourceRoot":"","sources":["../../src/services/hierarchical-mermaid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hierarchical-mermaid.js","sourceRoot":"","sources":["../../src/services/hierarchical-mermaid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { WorkflowJSON, ObjectInfo, UiWorkflow } from "../comfyui/types.js";
2
+ export interface ConversionResult {
3
+ workflow: WorkflowJSON;
4
+ warnings: string[];
5
+ }
6
+ /**
7
+ * Detect whether a parsed object is in ComfyUI UI format (nodes + links arrays)
8
+ * vs API format (string keys with class_type + inputs).
9
+ */
10
+ export declare function isUiFormat(obj: unknown): obj is UiWorkflow;
11
+ /**
12
+ * Convert a ComfyUI UI-format workflow to API format.
13
+ * Requires objectInfo from /object_info to map widgets_values to named inputs.
14
+ */
15
+ export declare function convertUiToApi(ui: UiWorkflow, objectInfo: ObjectInfo): ConversionResult;
16
+ //# sourceMappingURL=workflow-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-converter.d.ts","sourceRoot":"","sources":["../../src/services/workflow-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EAEV,UAAU,EAGX,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAUD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU,CAI1D;AA6DD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,UAAU,EACd,UAAU,EAAE,UAAU,GACrB,gBAAgB,CAkJlB"}
@@ -0,0 +1,197 @@
1
+ import { logger } from "../utils/logger.js";
2
+ /**
3
+ * Detect whether a parsed object is in ComfyUI UI format (nodes + links arrays)
4
+ * vs API format (string keys with class_type + inputs).
5
+ */
6
+ export function isUiFormat(obj) {
7
+ if (typeof obj !== "object" || obj === null || Array.isArray(obj))
8
+ return false;
9
+ const record = obj;
10
+ return Array.isArray(record.nodes) && Array.isArray(record.links);
11
+ }
12
+ /**
13
+ * Check if an input spec represents a widget (value input) vs a link (connection input).
14
+ * Widget inputs have an array type spec like ["INT", {...}] or ["STRING", {...}].
15
+ * Link inputs have a plain string type like "MODEL" or "CLIP".
16
+ */
17
+ function isWidgetInput(inputName, def) {
18
+ const spec = def.input.required?.[inputName] ?? def.input.optional?.[inputName];
19
+ if (!spec)
20
+ return false;
21
+ const typeSpec = spec[0];
22
+ // If the type is an array of choices like ["option1", "option2"], it's a widget
23
+ if (Array.isArray(typeSpec))
24
+ return true;
25
+ // Standard widget types
26
+ const WIDGET_TYPES = new Set([
27
+ "INT",
28
+ "FLOAT",
29
+ "STRING",
30
+ "BOOLEAN",
31
+ "COMBO",
32
+ ]);
33
+ return WIDGET_TYPES.has(typeSpec);
34
+ }
35
+ /**
36
+ * Check if an input has control_after_generate in its spec config.
37
+ * These inputs (like seed, noise_seed) have a phantom "fixed"/"randomize" widget
38
+ * in the UI's widgets_values array that doesn't correspond to any named input.
39
+ */
40
+ function hasControlAfterGenerate(inputName, def) {
41
+ const spec = def.input.required?.[inputName] ?? def.input.optional?.[inputName];
42
+ if (!spec || !spec[1])
43
+ return false;
44
+ return spec[1].control_after_generate === true;
45
+ }
46
+ /**
47
+ * Get the ordered list of input names from a node definition.
48
+ * Uses input_order if available, otherwise falls back to object keys.
49
+ */
50
+ function getOrderedInputNames(def) {
51
+ const names = [];
52
+ if (def.input_order) {
53
+ if (def.input_order.required)
54
+ names.push(...def.input_order.required);
55
+ if (def.input_order.optional)
56
+ names.push(...def.input_order.optional);
57
+ }
58
+ else {
59
+ // Fallback: use object key order
60
+ if (def.input.required)
61
+ names.push(...Object.keys(def.input.required));
62
+ if (def.input.optional)
63
+ names.push(...Object.keys(def.input.optional));
64
+ }
65
+ return names;
66
+ }
67
+ /**
68
+ * Convert a ComfyUI UI-format workflow to API format.
69
+ * Requires objectInfo from /object_info to map widgets_values to named inputs.
70
+ */
71
+ export function convertUiToApi(ui, objectInfo) {
72
+ const workflow = {};
73
+ const warnings = [];
74
+ // Build link lookup: linkId → LinkInfo
75
+ const linkMap = new Map();
76
+ for (const link of ui.links) {
77
+ if (!Array.isArray(link) || link.length < 6)
78
+ continue;
79
+ const [linkId, sourceNodeId, sourceSlot, targetNodeId, targetSlot, typeName] = link;
80
+ linkMap.set(linkId, {
81
+ sourceNodeId,
82
+ sourceSlot,
83
+ targetNodeId,
84
+ targetSlot,
85
+ typeName,
86
+ });
87
+ }
88
+ // Build a set of node IDs for validating link targets
89
+ const nodeIdSet = new Set(ui.nodes.map((n) => n.id));
90
+ // Node types that are purely visual/internal and have no API equivalent
91
+ const SKIP_TYPES = new Set(["Reroute", "Note", "PrimitiveNode", "MarkdownNote"]);
92
+ // Get/Set node types that need special handling (not in object_info)
93
+ const GET_SET_TYPES = new Set([
94
+ "GetNode", "SetNode", "PRO_GetNode", "PRO_SetNode",
95
+ "SetNode_GetNode", "SetNode_SetNode",
96
+ ]);
97
+ for (const node of ui.nodes) {
98
+ const nodeId = String(node.id);
99
+ const classType = node.type;
100
+ // Skip internal litegraph node types
101
+ if (SKIP_TYPES.has(classType))
102
+ continue;
103
+ // Determine mode status
104
+ const isMuted = node.mode === 2 || node.mode === 4;
105
+ // Handle Get/Set nodes specially — they're not in object_info but are
106
+ // important for understanding data flow. Use the node's title as the key.
107
+ if (GET_SET_TYPES.has(classType)) {
108
+ const title = node.title ?? node._meta?.title ?? "";
109
+ const inputs = {};
110
+ // For SetNode, wire the incoming connection
111
+ if (node.inputs) {
112
+ for (const input of node.inputs) {
113
+ if (input.link != null) {
114
+ const linkInfo = linkMap.get(input.link);
115
+ if (linkInfo && nodeIdSet.has(linkInfo.sourceNodeId)) {
116
+ inputs[input.name] = [String(linkInfo.sourceNodeId), linkInfo.sourceSlot];
117
+ }
118
+ }
119
+ }
120
+ }
121
+ // Store the key used for Get/Set matching
122
+ if (node.widgets_values && node.widgets_values.length > 0) {
123
+ inputs.Constant = node.widgets_values[0];
124
+ }
125
+ workflow[nodeId] = {
126
+ class_type: classType,
127
+ inputs,
128
+ _meta: { title: title || undefined },
129
+ };
130
+ if (isMuted) {
131
+ workflow[nodeId]._meta = { ...workflow[nodeId]._meta, mode: "muted" };
132
+ }
133
+ continue;
134
+ }
135
+ const def = objectInfo[classType];
136
+ if (!def) {
137
+ warnings.push(`Node ${nodeId} (${classType}): not found in object_info — custom node may not be installed. Skipping.`);
138
+ continue;
139
+ }
140
+ const inputs = {};
141
+ // Get ordered input names and figure out which are widgets vs links
142
+ const orderedNames = getOrderedInputNames(def);
143
+ const widgetNames = [];
144
+ for (const name of orderedNames) {
145
+ if (isWidgetInput(name, def)) {
146
+ widgetNames.push(name);
147
+ }
148
+ }
149
+ // Map widgets_values to named widget inputs.
150
+ // Some INT inputs with "control_after_generate": true (like seed, noise_seed) have
151
+ // a phantom widget value in widgets_values ("fixed"/"randomize"/"increment"/"decrement")
152
+ // that doesn't correspond to any named input — we must skip those.
153
+ const widgetValues = node.widgets_values ?? [];
154
+ let widgetIdx = 0;
155
+ for (const name of widgetNames) {
156
+ if (widgetIdx >= widgetValues.length)
157
+ break;
158
+ inputs[name] = widgetValues[widgetIdx];
159
+ widgetIdx++;
160
+ // If this input has control_after_generate, skip the next widgets_values entry
161
+ if (hasControlAfterGenerate(name, def) && widgetIdx < widgetValues.length) {
162
+ widgetIdx++;
163
+ }
164
+ }
165
+ // Map linked inputs from node's inputs array
166
+ if (node.inputs) {
167
+ for (const input of node.inputs) {
168
+ if (input.link != null) {
169
+ const linkInfo = linkMap.get(input.link);
170
+ if (linkInfo && nodeIdSet.has(linkInfo.sourceNodeId)) {
171
+ inputs[input.name] = [String(linkInfo.sourceNodeId), linkInfo.sourceSlot];
172
+ }
173
+ }
174
+ }
175
+ }
176
+ // Build the API node
177
+ workflow[nodeId] = {
178
+ class_type: classType,
179
+ inputs,
180
+ };
181
+ // Preserve title and mode metadata
182
+ const title = node.title ?? node._meta?.title;
183
+ const meta = {};
184
+ if (title && title !== classType)
185
+ meta.title = title;
186
+ if (isMuted)
187
+ meta.mode = "muted";
188
+ if (Object.keys(meta).length > 0) {
189
+ workflow[nodeId]._meta = meta;
190
+ }
191
+ }
192
+ const nodeCount = Object.keys(workflow).length;
193
+ const skipped = ui.nodes.length - nodeCount;
194
+ logger.info(`Converted UI workflow: ${nodeCount} nodes (${skipped} skipped)`);
195
+ return { workflow, warnings };
196
+ }
197
+ //# sourceMappingURL=workflow-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-converter.js","sourceRoot":"","sources":["../../src/services/workflow-converter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-sections.d.ts","sourceRoot":"","sources":["../../src/services/workflow-sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGpE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B;AAaD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAeD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW,EAAE,CAgCxE;AAuDD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,UAAU,GACrB,eAAe,CA+KjB"}
1
+ {"version":3,"file":"workflow-sections.d.ts","sourceRoot":"","sources":["../../src/services/workflow-sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGpE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B;AA8BD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2B9D;AAeD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW,EAAE,CAiCxE;AAuDD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,UAAU,GACrB,eAAe,CA+KjB"}
@@ -4,18 +4,52 @@ const CATEGORY_ALIASES = {
4
4
  _for_testing: "utility",
5
5
  api: "utility",
6
6
  utils: "utility",
7
+ // Custom node pack categories
8
+ bootleg: "loading", // ComfyUI-GGUF (UNET/CLIP loaders)
9
+ gguf: "loading", // gguf pack (CLIP loaders)
10
+ rgthree: "loading", // rgthree (Lora Loader Stack, etc.)
11
+ seedvr2: "image", // SeedVR2 (video upscaler)
12
+ "video helper suite": "output", // VHS (Video Combine)
7
13
  };
8
14
  // Meta-categories where the second level is more meaningful
9
15
  const META_CATEGORIES = new Set(["advanced"]);
16
+ // Known core pipeline section names
17
+ const KNOWN_SECTIONS = new Set([
18
+ "loading", "conditioning", "sampling", "latent",
19
+ "image", "output", "mask", "utility",
20
+ ]);
21
+ // Strip emoji and special characters from a category string
22
+ function cleanCategory(category) {
23
+ return category.replace(/[^\p{L}\p{N}\s/\-_]/gu, "").trim();
24
+ }
10
25
  // Normalize a ComfyUI category string to a top-level section name
11
26
  export function normalizeCategoryName(category) {
12
- const parts = category.split("/").map((p) => p.toLowerCase().trim());
27
+ const cleaned = cleanCategory(category);
28
+ const parts = cleaned.split("/").map((p) => p.toLowerCase().trim());
13
29
  // For meta-categories like "advanced/loaders", use the second level
14
30
  let key = parts[0];
15
31
  if (META_CATEGORIES.has(key) && parts.length > 1) {
16
32
  key = parts[1];
17
33
  }
18
- return CATEGORY_ALIASES[key] ?? key;
34
+ // Check direct alias
35
+ const aliased = CATEGORY_ALIASES[key];
36
+ if (aliased)
37
+ return aliased;
38
+ // If key is already a known section, use it
39
+ if (KNOWN_SECTIONS.has(key))
40
+ return key;
41
+ // Check if any sub-part of the category path is a known section or has an alias
42
+ // e.g., "KJNodes/image" → sub-part "image" is known
43
+ // e.g., "GetSetNode_Pro/loaders" → sub-part "loaders" aliases to "loading"
44
+ for (let i = 1; i < parts.length; i++) {
45
+ const part = parts[i];
46
+ if (CATEGORY_ALIASES[part])
47
+ return CATEGORY_ALIASES[part];
48
+ if (KNOWN_SECTIONS.has(part))
49
+ return part;
50
+ }
51
+ // Fall back to the cleaned key
52
+ return key;
19
53
  }
20
54
  // Get/Set node class types we recognize
21
55
  const GET_NODE_TYPES = new Set(["GetNode", "PRO_GetNode", "SetNode_GetNode"]);
@@ -32,15 +66,16 @@ export function resolveGetSetPairs(workflow) {
32
66
  const getters = new Map(); // key -> node IDs
33
67
  for (const [id, node] of Object.entries(workflow)) {
34
68
  if (isSetNode(node.class_type)) {
35
- const key = node._meta?.title ??
36
- node.inputs.Constant ??
69
+ // Prefer Constant (the actual wire key) over title (which may have "Set_" prefix)
70
+ const key = node.inputs.Constant ??
71
+ node._meta?.title ??
37
72
  "";
38
73
  if (key)
39
74
  setters.set(key, id);
40
75
  }
41
76
  else if (isGetNode(node.class_type)) {
42
- const key = node._meta?.title ??
43
- node.inputs.Constant ??
77
+ const key = node.inputs.Constant ??
78
+ node._meta?.title ??
44
79
  "";
45
80
  if (key) {
46
81
  if (!getters.has(key))