File size: 2,752 Bytes
90ed76e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { LGraphNode, IWidget } from "./litegraph";
import { ComfyApp } from "../../scripts/app";

export interface ComfyExtension {
	/**

	 * The name of the extension

	 */
	name: string;
	/**

	 * Allows any initialisation, e.g. loading resources. Called after the canvas is created but before nodes are added

	 * @param app The ComfyUI app instance

	 */
	init?(app: ComfyApp): Promise<void>;
	/**

	 * Allows any additonal setup, called after the application is fully set up and running

	 * @param app The ComfyUI app instance

	 */
	setup?(app: ComfyApp): Promise<void>;
	/**

	 * Called before nodes are registered with the graph

	 * @param defs The collection of node definitions, add custom ones or edit existing ones

	 * @param app The ComfyUI app instance

	 */
	addCustomNodeDefs?(defs: Record<string, ComfyObjectInfo>, app: ComfyApp): Promise<void>;
	/**

	 * Allows the extension to add custom widgets

	 * @param app The ComfyUI app instance

	 * @returns An array of {[widget name]: widget data}

	 */
	getCustomWidgets?(
		app: ComfyApp
	): Promise<
		Record<string, (node, inputName, inputData, app) => { widget?: IWidget; minWidth?: number; minHeight?: number }>
	>;
	/**

	 * Allows the extension to add additional handling to the node before it is registered with LGraph

	 * @param nodeType The node class (not an instance)

	 * @param nodeData The original node object info config object

	 * @param app The ComfyUI app instance

	 */
	beforeRegisterNodeDef?(nodeType: typeof LGraphNode, nodeData: ComfyObjectInfo, app: ComfyApp): Promise<void>;
	/**

	 * Allows the extension to register additional nodes with LGraph after standard nodes are added

	 * @param app The ComfyUI app instance

	 */
	registerCustomNodes?(app: ComfyApp): Promise<void>;
	/**

	 * Allows the extension to modify a node that has been reloaded onto the graph.

	 * If you break something in the backend and want to patch workflows in the frontend

	 * This is the place to do this

	 * @param node The node that has been loaded

	 * @param app The ComfyUI app instance

	 */
	loadedGraphNode?(node: LGraphNode, app: ComfyApp);
	/**

	 * Allows the extension to run code after the constructor of the node

	 * @param node The node that has been created

	 * @param app The ComfyUI app instance

	 */
	nodeCreated?(node: LGraphNode, app: ComfyApp);
}

export type ComfyObjectInfo = {
	name: string;
	display_name?: string;
	description?: string;
	category: string;
	input?: {
		required?: Record<string, ComfyObjectInfoConfig>;
		optional?: Record<string, ComfyObjectInfoConfig>;
	};
	output?: string[];
	output_name: string[];
};

export type ComfyObjectInfoConfig = [string | any[]] | [string | any[], any];