|
|
|
|
|
|
|
|
|
export type Vector2 = [number, number]; |
|
export type Vector4 = [number, number, number, number]; |
|
export type widgetTypes = |
|
| "number" |
|
| "slider" |
|
| "combo" |
|
| "text" |
|
| "toggle" |
|
| "button"; |
|
export type SlotShape = |
|
| typeof LiteGraph.BOX_SHAPE |
|
| typeof LiteGraph.CIRCLE_SHAPE |
|
| typeof LiteGraph.ARROW_SHAPE |
|
| typeof LiteGraph.SQUARE_SHAPE |
|
| number; |
|
|
|
|
|
export interface INodeSlot { |
|
name: string; |
|
type: string | -1; |
|
label?: string; |
|
dir?: |
|
| typeof LiteGraph.UP |
|
| typeof LiteGraph.RIGHT |
|
| typeof LiteGraph.DOWN |
|
| typeof LiteGraph.LEFT; |
|
color_on?: string; |
|
color_off?: string; |
|
shape?: SlotShape; |
|
locked?: boolean; |
|
nameLocked?: boolean; |
|
pos?: Vector2; |
|
|
|
hidden?: boolean; |
|
|
|
disabled?: boolean; |
|
|
|
removable?: boolean; |
|
|
|
rgthree_status?: 'WARN' | 'ERROR'; |
|
} |
|
|
|
export interface INodeInputSlot extends INodeSlot { |
|
link: LLink["id"] | null; |
|
|
|
widget?: { |
|
name: string; |
|
} |
|
} |
|
|
|
export interface INodeOutputSlot extends INodeSlot { |
|
links: LLink["id"][] | null; |
|
} |
|
|
|
export type WidgetCallback<T extends IWidget = IWidget> = ( |
|
this: T, |
|
value: T["value"], |
|
graphCanvas: LGraphCanvas, |
|
node: LGraphNode, |
|
pos: Vector2, |
|
event?: MouseEvent |
|
) => void; |
|
|
|
|
|
export type WidgetComboCallback<T extends IWidget = IWidget> = ( |
|
this: T, |
|
value: T["value"][0], |
|
graphCanvas: LGraphCanvas, |
|
node: LGraphNode, |
|
pos: Vector2, |
|
event?: MouseEvent |
|
) => void; |
|
|
|
|
|
export type IWidgetOptions = { |
|
y?: number; |
|
property?: string; |
|
serialize?: boolean; |
|
forceInput?: boolean; |
|
defaultInput?: boolean; |
|
} |
|
|
|
|
|
export type IWidgetToggleOptions = IWidgetOptions & { |
|
on?: string; |
|
off?: string; |
|
} |
|
|
|
|
|
export type IWidgetNumberOptions = IWidgetOptions & { |
|
precision?: number; |
|
max?: number; |
|
min?: number; |
|
} |
|
|
|
|
|
export type IWidgetSliderOptions = IWidgetNumberOptions & { |
|
slider_color?: string; |
|
marker_color?: string; |
|
} |
|
|
|
|
|
|
|
export type IWidgetComboOptions = IWidgetOptions & { |
|
values?: string[] | ((widget: IComboWidget, node: LGraphNode) => string[]); |
|
} |
|
|
|
export interface IWidget<TValue = any, TOptions = any> { |
|
name: string | null; |
|
|
|
label?: string | null; |
|
value: TValue; |
|
options?: TOptions; |
|
|
|
type?: widgetTypes | string; |
|
y?: number; |
|
property?: string; |
|
last_y?: number; |
|
clicked?: boolean; |
|
marker?: boolean; |
|
disabled?: boolean; |
|
callback?: WidgetCallback<this>; |
|
|
|
draw?( |
|
ctx: CanvasRenderingContext2D, |
|
node: LGraphNode, |
|
width: number, |
|
posY: number, |
|
height: number |
|
): void; |
|
|
|
|
|
|
|
|
|
mouse?( |
|
event: MouseEvent, |
|
pos: Vector2, |
|
node: LGraphNode |
|
): boolean; |
|
|
|
computeSize?(width: number): [number, number]; |
|
|
|
serializeValue?(serializedNode: SerializedLGraphNode, widgetIndex: number): TValue; |
|
|
|
width?: number; |
|
} |
|
export interface IButtonWidget extends IWidget<null, {}> { |
|
type: "button"; |
|
} |
|
|
|
export interface IToggleWidget extends IWidget<boolean, IWidgetToggleOptions> { |
|
type: "toggle"; |
|
} |
|
|
|
export interface ISliderWidget extends IWidget<number, IWidgetSliderOptions> { |
|
type: "slider"; |
|
} |
|
|
|
export interface INumberWidget extends IWidget<number, IWidgetNumberOptions> { |
|
type: "number"; |
|
} |
|
|
|
export interface IComboWidget extends IWidget<string[], IWidgetComboOptions> { |
|
value: T[0]; |
|
type: "combo"; |
|
callback?: WidgetComboCallback; |
|
} |
|
|
|
export interface ITextWidget extends IWidget<string, {}> { |
|
type: "text"; |
|
} |
|
|
|
export interface IContextMenuItem { |
|
|
|
content?: string; |
|
value?: any; |
|
callback?: ContextMenuEventListener; |
|
|
|
title?: string; |
|
disabled?: boolean; |
|
has_submenu?: boolean; |
|
submenu?: { |
|
options: ContextMenuItem[]; |
|
} & IContextMenuOptions; |
|
className?: string; |
|
|
|
rgthree_originalValue?: IContextMenuItem; |
|
|
|
slot?: {input?: INodeInputSlot, output?: INodeOutputSlot}; |
|
} |
|
export interface IContextMenuOptions { |
|
callback?: ContextMenuEventListener; |
|
ignore_item_callbacks?: Boolean; |
|
event?: MouseEvent | CustomEvent | AdjustedMouseEvent; |
|
parentMenu?: ContextMenu|null; |
|
autoopen?: boolean; |
|
title?: string; |
|
extra?: any; |
|
|
|
scale?: number; |
|
|
|
left?: number; |
|
|
|
top?: number; |
|
|
|
className?: string; |
|
|
|
rgthree_originalCallback?: ContextMenuEventListener; |
|
|
|
extra?: any |
|
} |
|
|
|
export type ContextMenuItem = IContextMenuItem | null; |
|
export type ContextMenuEventListener = ( |
|
value: ContextMenuItem, |
|
options: IContextMenuOptions, |
|
event: MouseEvent, |
|
parentMenu: ContextMenu | undefined, |
|
node: LGraphNode |
|
) => boolean | void; |
|
|
|
export const LiteGraph: { |
|
VERSION: number; |
|
|
|
CANVAS_GRID_SIZE: number; |
|
|
|
NODE_TITLE_HEIGHT: number; |
|
NODE_TITLE_TEXT_Y: number; |
|
NODE_SLOT_HEIGHT: number; |
|
NODE_WIDGET_HEIGHT: number; |
|
NODE_WIDTH: number; |
|
NODE_MIN_WIDTH: number; |
|
NODE_COLLAPSED_RADIUS: number; |
|
NODE_COLLAPSED_WIDTH: number; |
|
NODE_TITLE_COLOR: string; |
|
NODE_TEXT_SIZE: number; |
|
NODE_TEXT_COLOR: string; |
|
NODE_SUBTEXT_SIZE: number; |
|
NODE_DEFAULT_COLOR: string; |
|
NODE_DEFAULT_BGCOLOR: string; |
|
NODE_DEFAULT_BOXCOLOR: string; |
|
NODE_DEFAULT_SHAPE: string; |
|
|
|
NODE_BOX_OUTLINE_COLOR: string; |
|
DEFAULT_SHADOW_COLOR: string; |
|
DEFAULT_GROUP_FONT: number; |
|
|
|
NODE_BOX_OUTLINE_COLOR: string; |
|
|
|
WIDGET_BGCOLOR: string; |
|
WIDGET_OUTLINE_COLOR: string; |
|
WIDGET_TEXT_COLOR: string; |
|
WIDGET_SECONDARY_TEXT_COLOR: string; |
|
|
|
LINK_COLOR: string; |
|
EVENT_LINK_COLOR: string; |
|
CONNECTING_LINK_COLOR: string; |
|
|
|
MAX_NUMBER_OF_NODES: number; |
|
DEFAULT_POSITION: Vector2; |
|
VALID_SHAPES: ["default", "box", "round", "card"]; |
|
|
|
|
|
BOX_SHAPE: 1; |
|
ROUND_SHAPE: 2; |
|
CIRCLE_SHAPE: 3; |
|
CARD_SHAPE: 4; |
|
ARROW_SHAPE: 5; |
|
GRID_SHAPE: 6; |
|
|
|
|
|
INPUT: 1; |
|
OUTPUT: 2; |
|
|
|
EVENT: -1; |
|
ACTION: -1; |
|
|
|
ALWAYS: 0; |
|
ON_EVENT: 1; |
|
NEVER: 2; |
|
ON_TRIGGER: 3; |
|
|
|
UP: 1; |
|
DOWN: 2; |
|
LEFT: 3; |
|
RIGHT: 4; |
|
CENTER: 5; |
|
|
|
STRAIGHT_LINK: 0; |
|
LINEAR_LINK: 1; |
|
SPLINE_LINK: 2; |
|
|
|
NORMAL_TITLE: 0; |
|
NO_TITLE: 1; |
|
TRANSPARENT_TITLE: 2; |
|
AUTOHIDE_TITLE: 3; |
|
|
|
node_images_path: string; |
|
|
|
|
|
|
|
slot_types_default_out: {[key: string]: string[]}; |
|
slot_types_default_in: {[key: string]: string[]}; |
|
|
|
debug: boolean; |
|
catch_exceptions: boolean; |
|
throw_errors: boolean; |
|
|
|
allow_scripts: boolean; |
|
|
|
registered_node_types: Record<string, LGraphNodeConstructor>; |
|
|
|
node_types_by_file_extension: Record<string, LGraphNodeConstructor>; |
|
|
|
Nodes: Record<string, LGraphNodeConstructor>; |
|
|
|
|
|
searchbox_extras: Record< |
|
string, |
|
{ |
|
data: { outputs: string[][]; title: string }; |
|
desc: string; |
|
type: string; |
|
} |
|
>; |
|
|
|
|
|
isValidConnection(type: string|string[], type: string|string[]):boolean; |
|
overlapBounding(a: Vector4, b: Vector4) : boolean; |
|
|
|
createNode<T extends LGraphNode = LGraphNode>(type: string): T; |
|
|
|
registerNodeType<T extends LGraphNode = LGraphNode>(type: string, base: { new (title?: string): T }): void; |
|
|
|
unregisterNodeType(type: string): void; |
|
|
|
clearRegisteredTypes(): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wrapFunctionAsNode( |
|
name: string, |
|
func: (...args: any[]) => any, |
|
param_types?: string[], |
|
return_type?: string, |
|
properties?: object |
|
): void; |
|
|
|
|
|
|
|
|
|
|
|
addNodeMethod(name: string, func: (...args: any[]) => any): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
createNode<T extends LGraphNode>( |
|
type: string, |
|
title: string, |
|
options: object |
|
): T; |
|
|
|
|
|
|
|
|
|
|
|
getNodeType<T extends LGraphNode>(type: string): LGraphNodeConstructor<T>; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
getNodeTypesInCategory( |
|
category: string, |
|
filter: string |
|
): LGraphNodeConstructor[]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
getNodeTypesCategories(filter: string): string[]; |
|
|
|
|
|
reloadNodes(folder_wildcard: string): void; |
|
|
|
getTime(): number; |
|
LLink: typeof LLink; |
|
LGraph: typeof LGraph; |
|
DragAndScale: typeof DragAndScale; |
|
compareObjects(a: object, b: object): boolean; |
|
distance(a: Vector2, b: Vector2): number; |
|
colorToString(c: string): string; |
|
isInsideRectangle( |
|
x: number, |
|
y: number, |
|
left: number, |
|
top: number, |
|
width: number, |
|
height: number |
|
): boolean; |
|
growBounding(bounding: Vector4, x: number, y: number): Vector4; |
|
isInsideBounding(p: Vector2, bb: Vector4): boolean; |
|
hex2num(hex: string): [number, number, number]; |
|
num2hex(triplet: [number, number, number]): string; |
|
ContextMenu: typeof ContextMenu; |
|
extendClass<A, B>(target: A, origin: B): A & B; |
|
getParameterNames(func: string): string[]; |
|
|
|
closeAllContextMenus(ref_window?: Window): void; |
|
}; |
|
|
|
export type serializedLGraph< |
|
TNode = ReturnType<LGraphNode["serialize"]>, |
|
|
|
TLink = [number, number, number, number, number, string], |
|
TGroup = ReturnType<LGraphGroup["serialize"]> |
|
> = { |
|
last_node_id: LGraph["last_node_id"]; |
|
last_link_id: LGraph["last_link_id"]; |
|
nodes: TNode[]; |
|
links: TLink[]; |
|
groups: TGroup[]; |
|
config: LGraph["config"]; |
|
version: typeof LiteGraph.VERSION; |
|
}; |
|
|
|
export declare class LGraph { |
|
static supported_types: string[]; |
|
static STATUS_STOPPED: 1; |
|
static STATUS_RUNNING: 2; |
|
|
|
constructor(o?: object); |
|
|
|
filter: string; |
|
catch_errors: boolean; |
|
|
|
config: object; |
|
elapsed_time: number; |
|
fixedtime: number; |
|
fixedtime_lapse: number; |
|
globaltime: number; |
|
inputs: any; |
|
iteration: number; |
|
last_link_id: number; |
|
last_node_id: number; |
|
last_update_time: number; |
|
links: Record<number, LLink>; |
|
list_of_graphcanvas: LGraphCanvas[]; |
|
outputs: any; |
|
runningtime: number; |
|
starttime: number; |
|
status: typeof LGraph.STATUS_RUNNING | typeof LGraph.STATUS_STOPPED; |
|
|
|
|
|
_nodes: LGraphNode[]; |
|
|
|
_groups: LGraphGroup[]; |
|
private _nodes_by_id: Record<number, LGraphNode>; |
|
|
|
private _nodes_executable: |
|
| (LGraphNode & { onExecute: NonNullable<LGraphNode["onExecute"]> }[]) |
|
| null; |
|
|
|
private _nodes_in_order: LGraphNode[]; |
|
private _version: number; |
|
|
|
getSupportedTypes(): string[]; |
|
|
|
clear(): void; |
|
|
|
attachCanvas(graphCanvas: LGraphCanvas): void; |
|
|
|
detachCanvas(graphCanvas: LGraphCanvas): void; |
|
|
|
|
|
|
|
|
|
start(interval?: number): void; |
|
|
|
stop(): void; |
|
|
|
|
|
|
|
|
|
runStep(num?: number, do_not_catch_errors?: boolean): void; |
|
|
|
|
|
|
|
|
|
updateExecutionOrder(): void; |
|
|
|
computeExecutionOrder<T = any>(only_onExecute: boolean, set_level: any): T; |
|
|
|
|
|
|
|
|
|
|
|
getAncestors(node: LGraphNode): LGraphNode[]; |
|
|
|
|
|
|
|
arrange(margin?: number,layout?: string): void; |
|
|
|
|
|
|
|
|
|
getTime(): number; |
|
|
|
|
|
|
|
|
|
|
|
getFixedTime(): number; |
|
|
|
|
|
|
|
|
|
|
|
|
|
getElapsedTime(): number; |
|
|
|
|
|
|
|
|
|
|
|
sendEventToAllNodes(eventName: string, params: any[], mode?: any): void; |
|
|
|
sendActionToCanvas(action: any, params: any[]): void; |
|
|
|
|
|
|
|
|
|
add(node: LGraphNode, skip_compute_order?: boolean): void; |
|
|
|
|
|
|
|
|
|
onNodeAdded(node: LGraphNode): void; |
|
|
|
remove(node: LGraphNode): void; |
|
|
|
|
|
|
|
|
|
getNodeById(id?: number|null): LGraphNode | undefined; |
|
|
|
|
|
|
|
|
|
|
|
findNodesByClass<T extends LGraphNode>( |
|
classObject: LGraphNodeConstructor<T> |
|
): T[]; |
|
|
|
|
|
|
|
|
|
|
|
findNodesByType<T extends LGraphNode = LGraphNode>(type: string): T[]; |
|
|
|
|
|
|
|
|
|
|
|
findNodeByTitle<T extends LGraphNode = LGraphNode>(title: string): T | null; |
|
|
|
|
|
|
|
|
|
|
|
findNodesByTitle<T extends LGraphNode = LGraphNode>(title: string): T[]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
getNodeOnPos<T extends LGraphNode = LGraphNode>( |
|
x: number, |
|
y: number, |
|
node_list?: LGraphNode[], |
|
margin?: number |
|
): T | null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
getGroupOnPos(x: number, y: number): LGraphGroup | null; |
|
|
|
onAction(action: any, param: any): void; |
|
trigger(action: any, param: any): void; |
|
|
|
addInput(name: string, type: string, value?: any): void; |
|
|
|
setInputData(name: string, data: any): void; |
|
|
|
getInputData<T = any>(name: string): T; |
|
|
|
renameInput(old_name: string, name: string): false | undefined; |
|
|
|
changeInputType(name: string, type: string): false | undefined; |
|
|
|
removeInput(name: string): boolean; |
|
|
|
addOutput(name: string, type: string, value: any): void; |
|
|
|
setOutputData(name: string, value: string): void; |
|
|
|
getOutputData<T = any>(name: string): T; |
|
|
|
|
|
renameOutput(old_name: string, name: string): false | undefined; |
|
|
|
changeOutputType(name: string, type: string): false | undefined; |
|
|
|
removeOutput(name: string): boolean; |
|
triggerInput(name: string, value: any): void; |
|
setCallback(name: string, func: (...args: any[]) => any): void; |
|
beforeChange(info?: LGraphNode): void; |
|
afterChange(info?: LGraphNode): void; |
|
connectionChange(node: LGraphNode): void; |
|
|
|
isLive(): boolean; |
|
|
|
clearTriggeredSlots(): void; |
|
|
|
change(): void; |
|
setDirtyCanvas(fg: boolean, bg?: boolean): void; |
|
|
|
removeLink(link_id: number): void; |
|
|
|
serialize<T extends serializedLGraph>(): T; |
|
|
|
|
|
|
|
|
|
|
|
configure(data: object, keep_old?: boolean): boolean | undefined; |
|
load(url: string): void; |
|
} |
|
|
|
export type SerializedLLink = [number, string, number, number, number, number]; |
|
export declare class LLink { |
|
id: number; |
|
type: string; |
|
origin_id: number; |
|
origin_slot: number; |
|
target_id: number; |
|
target_slot: number; |
|
constructor( |
|
id: number, |
|
type: string, |
|
origin_id: number, |
|
origin_slot: number, |
|
target_id: number, |
|
target_slot: number |
|
); |
|
configure(o: LLink | SerializedLLink): void; |
|
serialize(): SerializedLLink; |
|
|
|
color?: string; |
|
} |
|
|
|
export type SerializedLGraphNode<T extends LGraphNode = LGraphNode> = { |
|
id: T["id"]; |
|
type: T["type"]; |
|
pos: T["pos"]; |
|
size: T["size"]; |
|
flags: T["flags"]; |
|
mode: T["mode"]; |
|
inputs: T["inputs"]; |
|
outputs: T["outputs"]; |
|
title: T["title"]; |
|
properties: T["properties"]; |
|
widgets_values?: IWidget["value"][]; |
|
}; |
|
|
|
|
|
export declare class LGraphNode { |
|
|
|
|
|
findInputSlotByType(type: string, returnObj?: boolean, preferFreeSlot?: boolean, doNotUseOccupied?: boolean): number |
|
findOutputSlotByType(type: string, returnObj?: boolean, preferFreeSlot?: boolean, doNotUseOccupied?: boolean): number |
|
onShowCustomPanelInfo(panel: HTMLElement): void; |
|
onDblClick?(event: AdjustedMouseEvent, pos: Vector2, canvas: LGraphCanvas): void; |
|
inResizeCorner(x: number, y:number) : boolean; |
|
onWidgetChanged?(widgetName: string, widgetValue: any, oldWidgetValue: any, widget: IWidget): void; |
|
|
|
|
|
|
|
static title_color?: string; |
|
static title: string; |
|
static type: null | string; |
|
static widgets_up: boolean; |
|
constructor(title?: string); |
|
|
|
title: string; |
|
|
|
type?: null | string; |
|
size: Vector2; |
|
graph: null | LGraph; |
|
graph_version: number; |
|
pos: Vector2; |
|
is_selected: boolean; |
|
mouseOver: boolean; |
|
|
|
block_delete: boolean; |
|
|
|
id: number; |
|
|
|
widgets: IWidget[]; |
|
|
|
inputs: INodeInputSlot[]; |
|
outputs: INodeOutputSlot[]; |
|
connections: any[]; |
|
|
|
|
|
_collapsed_width?: number; |
|
|
|
|
|
properties: Record<string, any>; |
|
properties_info: any[]; |
|
|
|
flags: Partial<{ |
|
collapsed: boolean |
|
|
|
allow_interaction: boolean; |
|
|
|
pinned: boolean; |
|
}>; |
|
|
|
color: string; |
|
bgcolor: string; |
|
boxcolor: string; |
|
shape: |
|
| typeof LiteGraph.BOX_SHAPE |
|
| typeof LiteGraph.ROUND_SHAPE |
|
| typeof LiteGraph.CIRCLE_SHAPE |
|
| typeof LiteGraph.CARD_SHAPE |
|
| typeof LiteGraph.ARROW_SHAPE; |
|
|
|
serialize_widgets: boolean; |
|
skip_list: boolean; |
|
|
|
|
|
mode?: |
|
| typeof LiteGraph.ON_EVENT |
|
| typeof LiteGraph.ON_TRIGGER |
|
| typeof LiteGraph.NEVER |
|
| typeof LiteGraph.ALWAYS |
|
| 4; |
|
|
|
|
|
widgets_up: boolean; |
|
|
|
widgets_start_y: number; |
|
|
|
clip_area: boolean; |
|
|
|
resizable: boolean; |
|
|
|
horizontal: boolean; |
|
|
|
has_errors?: boolean; |
|
|
|
|
|
setSize(size: Vector2): void; |
|
onResize?(size: Vector2): void; |
|
onInputClick(slot: number, event: MouseEvent): void; |
|
onOutputClick(slot: number, event: MouseEvent): void; |
|
getConnectionPos(isInput: boolean, slotNumber: number, out: Vector2): Vector2; |
|
|
|
|
|
configure(info: SerializedLGraphNode): void; |
|
|
|
serialize(): SerializedLGraphNode; |
|
|
|
clone(): this; |
|
|
|
toString(): string; |
|
|
|
getTitle(): string; |
|
|
|
setProperty(name: string, value: any): void; |
|
|
|
setOutputData(slot: number, data: any): void; |
|
|
|
setOutputDataType(slot: number, type: string): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
getInputData<T = any>(slot: number, force_update?: boolean): T; |
|
|
|
|
|
|
|
|
|
|
|
getInputDataType(slot: number): string; |
|
|
|
|
|
|
|
|
|
|
|
|
|
getInputDataByName<T = any>(slot_name: string, force_update?: boolean): T; |
|
|
|
isInputConnected(slot: number): boolean; |
|
|
|
getInputInfo( |
|
slot: number |
|
): { link: number; name: string; type: string | 0 } | null; |
|
|
|
getInputNode(slot: number): LGraphNode | null; |
|
|
|
getInputOrProperty<T = any>(name: string): T; |
|
|
|
getOutputData<T = any>(slot: number): T | null; |
|
|
|
getOutputInfo( |
|
slot: number |
|
): { name: string; type: string; links: number[] } | null; |
|
|
|
isOutputConnected(slot: number): boolean; |
|
|
|
isAnyOutputConnected(): boolean; |
|
|
|
getOutputNodes(slot: number): LGraphNode[]; |
|
|
|
trigger(action: string, param: any): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
triggerSlot(slot: number, param: any, link_id?: number): void; |
|
|
|
|
|
|
|
|
|
|
|
clearTriggeredSlot(slot: number, link_id?: number): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
addProperty<T = any>( |
|
name: string, |
|
default_value: any, |
|
type: string, |
|
extra_info?: object |
|
): T; |
|
|
|
|
|
|
|
|
|
|
|
|
|
addOutput( |
|
name: string, |
|
type: string | -1, |
|
extra_info?: Partial<INodeOutputSlot> |
|
): INodeOutputSlot; |
|
|
|
|
|
|
|
|
|
addOutputs( |
|
array: [string, string | -1, Partial<INodeOutputSlot> | undefined][] |
|
): void; |
|
|
|
removeOutput(slot: number): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
addInput( |
|
name: string, |
|
type: string | -1, |
|
extra_info?: Partial<INodeInputSlot> |
|
): INodeInputSlot; |
|
|
|
|
|
|
|
|
|
addInputs( |
|
array: [string, string | -1, Partial<INodeInputSlot> | undefined][] |
|
): void; |
|
|
|
removeInput(slot: number): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
addConnection( |
|
name: string, |
|
type: string, |
|
pos: Vector2, |
|
direction: string |
|
): { |
|
name: string; |
|
type: string; |
|
pos: Vector2; |
|
direction: string; |
|
links: null; |
|
}; |
|
setValue(v: any): void; |
|
|
|
computeSize(out?: Vector2): [number, number]; |
|
|
|
|
|
|
|
|
|
addWidget<T extends IWidget>( |
|
type: T["type"], |
|
name: string, |
|
value: T["value"], |
|
|
|
callback?: T["callback"] | string, |
|
options?: T["options"] |
|
): T; |
|
|
|
addCustomWidget<T extends IWidget>(customWidget: T): T; |
|
|
|
|
|
|
|
|
|
|
|
getBounding(): Vector4; |
|
|
|
isPointInside( |
|
x: number, |
|
y: number, |
|
margin?: number, |
|
skipTitle?: boolean |
|
): boolean; |
|
|
|
getSlotInPosition( |
|
x: number, |
|
y: number |
|
): { |
|
input?: INodeInputSlot; |
|
output?: INodeOutputSlot; |
|
slot: number; |
|
link_pos: Vector2; |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
findInputSlot(name: string): number; |
|
|
|
|
|
|
|
|
|
|
|
findOutputSlot(name: string): number; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
connect<T = any>( |
|
slot: number | string, |
|
targetNode: LGraphNode, |
|
targetSlot: number | string |
|
): T | null; |
|
|
|
connectByTypeOutput<T = any>( |
|
slot: number | string, |
|
sourceNode: LGraphNode, |
|
sourceSlotType: string, |
|
optsIn: string |
|
): T | null; |
|
|
|
connectByType<T = any>( |
|
slot: number | string, |
|
sourceNode: LGraphNode, |
|
sourceSlotType: string, |
|
optsIn: string |
|
): T | null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
disconnectOutput(slot: number | string, targetNode?: LGraphNode): boolean; |
|
|
|
|
|
|
|
|
|
|
|
disconnectInput(slot: number | string): boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
getConnectionPos( |
|
is_input: boolean, |
|
slot: number | string, |
|
out?: Vector2 |
|
): Vector2; |
|
|
|
alignToGrid(): void; |
|
|
|
trace(msg: string): void; |
|
|
|
setDirtyCanvas(fg: boolean, bg?: boolean): void; |
|
loadImage(url: string): void; |
|
|
|
captureInput(v: any): void; |
|
|
|
collapse(force: boolean): void; |
|
|
|
pin(v?: boolean): void; |
|
localToScreen(x: number, y: number, graphCanvas: LGraphCanvas): Vector2; |
|
|
|
|
|
onDrawBackground?( |
|
ctx: CanvasRenderingContext2D, |
|
|
|
canvas: LGraphCanvas |
|
): void; |
|
onDrawForeground?( |
|
ctx: CanvasRenderingContext2D, |
|
|
|
canvas: LGraphCanvas |
|
): void; |
|
|
|
|
|
onMouseDown?( |
|
event: MouseEvent, |
|
pos: Vector2, |
|
graphCanvas: LGraphCanvas |
|
): void; |
|
onMouseMove?( |
|
event: MouseEvent, |
|
pos: Vector2, |
|
graphCanvas: LGraphCanvas |
|
): void; |
|
onMouseUp?( |
|
event: MouseEvent, |
|
pos: Vector2, |
|
graphCanvas: LGraphCanvas |
|
): void; |
|
onMouseEnter?( |
|
event: MouseEvent, |
|
pos: Vector2, |
|
graphCanvas: LGraphCanvas |
|
): void; |
|
onMouseLeave?( |
|
event: MouseEvent, |
|
pos: Vector2, |
|
graphCanvas: LGraphCanvas |
|
): void; |
|
onKey?(event: KeyboardEvent, pos: Vector2, graphCanvas: LGraphCanvas): void; |
|
|
|
onKeyDown?(event: KeyboardEvent): void; |
|
|
|
onKeyUp?(event: KeyboardEvent): void; |
|
|
|
onExecuted(message: any): void; |
|
|
|
onNodeCreated?(): void; |
|
|
|
onSelected?(): void; |
|
|
|
onDeselected?(): void; |
|
|
|
onExecute?(): void; |
|
|
|
onSerialize?(o: SerializedLGraphNode): void; |
|
|
|
onConfigure?(o: SerializedLGraphNode): void; |
|
|
|
|
|
|
|
|
|
onAdded?(graph: LGraph): void; |
|
|
|
|
|
|
|
|
|
onRemoved?(): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
onConnectInput?( |
|
inputIndex: number, |
|
outputType: INodeOutputSlot["type"], |
|
outputSlot: INodeOutputSlot, |
|
outputNode: LGraphNode, |
|
outputIndex: number |
|
): boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
onConnectOutput?( |
|
outputIndex: number, |
|
inputType: INodeInputSlot["type"], |
|
inputSlot: INodeInputSlot, |
|
inputNode: LGraphNode, |
|
inputIndex: number |
|
): boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
onBeforeConnectInput?( |
|
inputIndex: number |
|
): number; |
|
|
|
|
|
onConnectionsChange( |
|
type: number, |
|
slotIndex: number, |
|
isConnected: boolean, |
|
link: LLink, |
|
|
|
ioSlot: INodeSlot |
|
): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
onPropertyChanged?(property: string, value: any, prevValue: any): void | boolean; |
|
|
|
|
|
getMenuOptions?(graphCanvas: LGraphCanvas): ContextMenuItem[]; |
|
|
|
|
|
getSlotMenuOptions(slot: {input?: INodeInputSlot, output?: INodeOutputSlot}): ContextMenuItem[] | null; |
|
|
|
getExtraMenuOptions?(canvas: LGraphCanvas, options: ContextMenuItem[]): void; |
|
|
|
|
|
onShowCustomPanelInfo(panel: HTMLElement): void; |
|
} |
|
|
|
export type LGraphNodeConstructor<T extends LGraphNode = LGraphNode> = { |
|
new (): T; |
|
|
|
|
|
title_mode?: |
|
typeof LiteGraph.NORMAL_TITLE | |
|
typeof LiteGraph.TRANSPARENT_TITLE | |
|
typeof LiteGraph.AUTOHIDE_TITLE | |
|
typeof LiteGraph.NO_TITLE; |
|
title: string; |
|
category: string; |
|
type: string; |
|
comfyClass?: string; |
|
}; |
|
|
|
export type SerializedLGraphGroup = { |
|
title: LGraphGroup["title"]; |
|
bounding: LGraphGroup["_bounding"]; |
|
color: LGraphGroup["color"]; |
|
font: LGraphGroup["font"]; |
|
}; |
|
export declare class LGraphGroup { |
|
title: string; |
|
|
|
_bounding: Vector4; |
|
|
|
color?: string|null; |
|
font: string; |
|
|
|
_nodes: LGraphNode[]; |
|
|
|
_pos: Vector2; |
|
|
|
_size: Vector2; |
|
|
|
graph: LGraph; |
|
|
|
size: Vector2; |
|
|
|
pos: Vector2; |
|
|
|
|
|
configure(o: SerializedLGraphGroup): void; |
|
serialize(): SerializedLGraphGroup; |
|
move(deltaX: number, deltaY: number, ignoreNodes?: boolean): void; |
|
recomputeInsideNodes(): void; |
|
isPointInside: LGraphNode["isPointInside"]; |
|
setDirtyCanvas: LGraphNode["setDirtyCanvas"]; |
|
} |
|
|
|
export declare class DragAndScale { |
|
constructor(element?: HTMLElement, skipEvents?: boolean); |
|
offset: [number, number]; |
|
scale: number; |
|
max_scale: number; |
|
min_scale: number; |
|
onredraw: Function | null; |
|
enabled: boolean; |
|
last_mouse: Vector2; |
|
element: HTMLElement | null; |
|
visible_area: Vector4; |
|
bindEvents(element: HTMLElement): void; |
|
computeVisibleArea(): void; |
|
onMouse(e: MouseEvent): void; |
|
toCanvasContext(ctx: CanvasRenderingContext2D): void; |
|
convertOffsetToCanvas(pos: Vector2): Vector2; |
|
convertCanvasToOffset(pos: Vector2): Vector2; |
|
mouseDrag(x: number, y: number): void; |
|
changeScale(value: number, zooming_center?: Vector2): void; |
|
changeDeltaScale(value: number, zooming_center?: Vector2): void; |
|
reset(): void; |
|
} |
|
|
|
|
|
interface CanvasDivDialog extends HTMLDivElement { |
|
close: () => void; |
|
modified: () => void; |
|
is_modified: boolean; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export declare class LGraphCanvas { |
|
static node_colors: Record< |
|
string, |
|
{ |
|
color: string; |
|
bgcolor: string; |
|
groupcolor: string; |
|
} |
|
>; |
|
static link_type_colors: Record<string, string>; |
|
static gradients: object; |
|
static search_limit: number; |
|
|
|
static getFileExtension(url: string): string; |
|
static decodeHTML(str: string): string; |
|
|
|
static onMenuCollapseAll(): void; |
|
static onMenuNodeEdit(): void; |
|
static onShowPropertyEditor( |
|
item: any, |
|
options: any, |
|
e: any, |
|
menu: any, |
|
node: any |
|
): void; |
|
|
|
static onGroupAdd: ContextMenuEventListener; |
|
|
|
static onMenuAdd: ContextMenuEventListener; |
|
static showMenuNodeOptionalInputs: ContextMenuEventListener; |
|
static showMenuNodeOptionalOutputs: ContextMenuEventListener; |
|
static onShowMenuNodeProperties: ContextMenuEventListener; |
|
static onResizeNode: ContextMenuEventListener; |
|
static onMenuNodeCollapse: ContextMenuEventListener; |
|
static onMenuNodePin: ContextMenuEventListener; |
|
static onMenuNodeMode: ContextMenuEventListener; |
|
static onMenuNodeColors: ContextMenuEventListener; |
|
static onMenuNodeShapes: ContextMenuEventListener; |
|
static onMenuNodeRemove: ContextMenuEventListener; |
|
static onMenuNodeClone: ContextMenuEventListener; |
|
|
|
|
|
static onShowPropertyEditor: ContextMenuEventListener; |
|
|
|
constructor( |
|
canvas: HTMLCanvasElement | string, |
|
graph?: LGraph, |
|
options?: { |
|
skip_render?: boolean; |
|
autoresize?: boolean; |
|
} |
|
); |
|
|
|
|
|
static active_canvas: LGraphCanvas; |
|
|
|
|
|
pointer_is_down: boolean; |
|
|
|
allow_dragcanvas: boolean; |
|
allow_dragnodes: boolean; |
|
|
|
allow_interaction: boolean; |
|
|
|
allow_reconnect_links: boolean; |
|
|
|
multi_select: boolean; |
|
|
|
allow_searchbox: boolean; |
|
always_render_background: boolean; |
|
autoresize?: boolean; |
|
background_image: string; |
|
bgcanvas: HTMLCanvasElement; |
|
bgctx: CanvasRenderingContext2D; |
|
canvas: HTMLCanvasElement; |
|
canvas_mouse: Vector2; |
|
|
|
graph_mouse: Vector2; |
|
clear_background: boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
connecting_links: { |
|
node: LGraphNode, input?: INodeInputSlot, output?: INodeOutputSlot, pos: Vector2, slot: number |
|
}[] | null; |
|
_connecting_links: this['connecting_links'] | null; |
|
|
|
connections_width: number; |
|
ctx: CanvasRenderingContext2D; |
|
current_node: LGraphNode | null; |
|
default_connection_color: { |
|
input_off: string; |
|
input_on: string; |
|
output_off: string; |
|
output_on: string; |
|
}; |
|
default_link_color: string; |
|
dirty_area: Vector4 | null; |
|
dirty_bgcanvas?: boolean; |
|
dirty_canvas?: boolean; |
|
drag_mode: boolean; |
|
dragging_canvas: boolean; |
|
dragging_rectangle: Vector4 | null; |
|
|
|
|
|
|
|
|
|
ds?: DragAndScale; |
|
|
|
editor_alpha: number; |
|
filter: any; |
|
fps: number; |
|
frame: number; |
|
graph: LGraph; |
|
highlighted_links: Record<number, boolean>; |
|
highquality_render: boolean; |
|
inner_text_font: string; |
|
is_rendering: boolean; |
|
last_draw_time: number; |
|
last_mouse: Vector2; |
|
|
|
|
|
|
|
|
|
last_mouse_position: Vector2; |
|
|
|
last_mouseclick: number; |
|
links_render_mode: |
|
| typeof LiteGraph.STRAIGHT_LINK |
|
| typeof LiteGraph.LINEAR_LINK |
|
| typeof LiteGraph.SPLINE_LINK; |
|
live_mode: boolean; |
|
node_capturing_input: LGraphNode | null; |
|
node_dragged: LGraphNode | null; |
|
node_in_panel: LGraphNode | null; |
|
node_over: LGraphNode | null; |
|
node_title_color: string; |
|
node_widget: [LGraphNode, IWidget] | null; |
|
|
|
onDrawBackground: |
|
| ((ctx: CanvasRenderingContext2D, visibleArea: Vector4) => void) |
|
| null; |
|
|
|
onDrawForeground: |
|
| ((ctx: CanvasRenderingContext2D, visibleArea: Vector4) => void) |
|
| null; |
|
onDrawOverlay: ((ctx: CanvasRenderingContext2D) => void) | null; |
|
|
|
onMouse: ((event: MouseEvent) => boolean) | null; |
|
|
|
onDrawLinkTooltip: ((ctx: CanvasRenderingContext2D, link: LLink, _this: this) => void) | null; |
|
|
|
onNodeMoved: ((node: LGraphNode) => void) | null; |
|
|
|
onNodeSelected: ((node: LGraphNode) => void) | null; |
|
|
|
onNodeDeselected: ((node: LGraphNode) => void) | null; |
|
|
|
onShowNodePanel: ((node: LGraphNode) => void) | null; |
|
|
|
onNodeDblClicked: ((node: LGraphNode) => void) | null; |
|
|
|
onSelectionChange: ((nodes: Record<number, LGraphNode>) => void) | null; |
|
|
|
onSearchBox: |
|
| (( |
|
helper: Element, |
|
value: string, |
|
graphCanvas: LGraphCanvas |
|
) => string[]) |
|
| null; |
|
onSearchBoxSelection: |
|
| ((name: string, event: MouseEvent, graphCanvas: LGraphCanvas) => void) |
|
| null; |
|
pause_rendering: boolean; |
|
render_canvas_border: boolean; |
|
render_collapsed_slots: boolean; |
|
render_connection_arrows: boolean; |
|
render_connections_border: boolean; |
|
render_connections_shadows: boolean; |
|
render_curved_connections: boolean; |
|
render_execution_order: boolean; |
|
render_only_selected: boolean; |
|
render_shadows: boolean; |
|
render_title_colored: boolean; |
|
round_radius: number; |
|
selected_group: null | LGraphGroup; |
|
selected_group_resizing: boolean; |
|
selected_nodes: Record<number, LGraphNode>; |
|
show_info: boolean; |
|
title_text_font: string; |
|
|
|
use_gradients: boolean; |
|
visible_area: DragAndScale["visible_area"]; |
|
visible_links: LLink[]; |
|
visible_nodes: LGraphNode[]; |
|
zoom_modify_alpha: boolean; |
|
|
|
|
|
clear(): void; |
|
|
|
setGraph(graph: LGraph, skipClear?: boolean): void; |
|
|
|
openSubgraph(graph: LGraph): void; |
|
|
|
closeSubgraph(): void; |
|
|
|
setCanvas(canvas: HTMLCanvasElement, skipEvents?: boolean): void; |
|
|
|
bindEvents(): void; |
|
|
|
unbindEvents(): void; |
|
|
|
|
|
|
|
|
|
|
|
enableWebGL(): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
setDirty(fg: boolean, bg?: boolean): void; |
|
|
|
|
|
|
|
|
|
|
|
getCanvasWindow(): Window; |
|
|
|
startRendering(): void; |
|
|
|
stopRendering(): void; |
|
|
|
processMouseDown(e: MouseEvent): boolean | undefined; |
|
processMouseMove(e: MouseEvent): boolean | undefined; |
|
processMouseUp(e: MouseEvent): boolean | undefined; |
|
processMouseWheel(e: MouseEvent): boolean | undefined; |
|
|
|
|
|
isOverNodeBox(node: LGraphNode, canvasX: number, canvasY: number): boolean; |
|
|
|
isOverNodeInput( |
|
node: LGraphNode, |
|
canvasX: number, |
|
canvasY: number, |
|
slotPos: Vector2 |
|
): boolean; |
|
|
|
|
|
processKey(e: KeyboardEvent): boolean | undefined; |
|
|
|
|
|
copyToClipboard(nodes: LGraphNode[]|{[key:number]:LGraphNode}): void; |
|
pasteFromClipboard(): void; |
|
processDrop(e: DragEvent): void; |
|
checkDropItem(e: DragEvent): void; |
|
processNodeDblClicked(n: LGraphNode): void; |
|
processNodeSelected(n: LGraphNode, e: MouseEvent): void; |
|
processNodeDeselected(node: LGraphNode): void; |
|
|
|
|
|
selectNode(node: LGraphNode, add?: boolean): void; |
|
|
|
selectNodes(nodes?: LGraphNode[], add?: boolean): void; |
|
|
|
deselectNode(node: LGraphNode): void; |
|
|
|
deselectAllNodes(): void; |
|
|
|
deleteSelectedNodes(): void; |
|
|
|
|
|
|
|
centerOnNode(node: {pos: Vector2, size: Vector2}): void; |
|
|
|
setZoom(value: number, center: Vector2): void; |
|
|
|
bringToFront(node: LGraphNode): void; |
|
|
|
sendToBack(node: LGraphNode): void; |
|
|
|
computeVisibleNodes(nodes: LGraphNode[]): LGraphNode[]; |
|
|
|
draw(forceFG?: boolean, forceBG?: boolean): void; |
|
|
|
drawFrontCanvas(): void; |
|
|
|
renderInfo(ctx: CanvasRenderingContext2D, x: number, y: number): void; |
|
|
|
drawBackCanvas(): void; |
|
|
|
drawNode(node: LGraphNode, ctx: CanvasRenderingContext2D): void; |
|
|
|
drawSlotGraphic(ctx: CanvasRenderingContext2D, pos: number[], shape: SlotShape, horizontal: boolean): void; |
|
|
|
drawNodeShape( |
|
node: LGraphNode, |
|
ctx: CanvasRenderingContext2D, |
|
size: [number, number], |
|
fgColor: string, |
|
bgColor: string, |
|
selected: boolean, |
|
mouseOver: boolean |
|
): void; |
|
|
|
drawConnections(ctx: CanvasRenderingContext2D): void; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
renderLink( |
|
a: Vector2, |
|
b: Vector2, |
|
link: object, |
|
skipBorder: boolean, |
|
flow: boolean, |
|
color?: string, |
|
startDir?: number, |
|
endDir?: number, |
|
numSublines?: number |
|
): void; |
|
|
|
computeConnectionPoint( |
|
a: Vector2, |
|
b: Vector2, |
|
t: number, |
|
startDir?: number, |
|
endDir?: number |
|
): void; |
|
|
|
drawExecutionOrder(ctx: CanvasRenderingContext2D): void; |
|
|
|
drawNodeWidgets( |
|
node: LGraphNode, |
|
posY: number, |
|
ctx: CanvasRenderingContext2D, |
|
activeWidget: object |
|
): void; |
|
|
|
processNodeWidgets( |
|
node: LGraphNode, |
|
pos: Vector2, |
|
event: Event, |
|
activeWidget: object |
|
): void; |
|
|
|
drawGroups(canvas: any, ctx: CanvasRenderingContext2D): void; |
|
adjustNodesSize(): void; |
|
|
|
resize(width?: number, height?: number): void; |
|
|
|
|
|
|
|
|
|
switchLiveMode(transition?: boolean): void; |
|
onNodeSelectionChange(): void; |
|
touchHandler(event: TouchEvent): void; |
|
|
|
showLinkMenu(link: LLink, e: any): false; |
|
prompt( |
|
title: string, |
|
value: any, |
|
callback: Function, |
|
event: any |
|
): HTMLDivElement; |
|
showSearchBox(event?: MouseEvent): void; |
|
showEditPropertyValue(node: LGraphNode, property: any, options: any): void; |
|
createDialog( |
|
html: string, |
|
options?: { position?: Vector2; event?: MouseEvent } |
|
|
|
): CanvasDivDialog; |
|
|
|
|
|
|
|
convertOffsetToCanvas: DragAndScale["convertOffsetToCanvas"]; |
|
convertCanvasToOffset: DragAndScale["convertCanvasToOffset"]; |
|
|
|
|
|
|
|
convertEventToCanvasOffset(e: {clientX: number, clientY: number}): Vector2; |
|
|
|
adjustMouseEvent(e: MouseEvent): void; |
|
|
|
getCanvasMenuOptions(): ContextMenuItem[]; |
|
getNodeMenuOptions(node: LGraphNode): ContextMenuItem[]; |
|
getGroupMenuOptions(): ContextMenuItem[]; |
|
|
|
getMenuOptions?(): ContextMenuItem[]; |
|
|
|
getExtraMenuOptions?(): ContextMenuItem[]; |
|
|
|
processContextMenu(node: LGraphNode, event: Event): void; |
|
|
|
|
|
selected_group_moving?: boolean; |
|
|
|
|
|
showShowNodePanel(node: LGraphNode): void; |
|
} |
|
|
|
|
|
export interface AdjustedMouseEvent extends PointerEvent { |
|
deltaX: number; |
|
deltaY: number; |
|
canvasX: number; |
|
canvasY: number; |
|
} |
|
|
|
declare class ContextMenu { |
|
static trigger( |
|
element: HTMLElement, |
|
event_name: string, |
|
params: any, |
|
origin: any |
|
): void; |
|
static isCursorOverElement(event: MouseEvent, element: HTMLElement): void; |
|
static closeAllContextMenus(window: Window): void; |
|
constructor(values: ContextMenuItem[]|string[], options?: IContextMenuOptions, window?: Window); |
|
options: IContextMenuOptions; |
|
parentMenu?: ContextMenu; |
|
lock: boolean; |
|
current_submenu?: ContextMenu; |
|
addItem( |
|
name: string, |
|
value: ContextMenuItem, |
|
options?: IContextMenuOptions |
|
): void; |
|
close(e?: MouseEvent, ignore_parent_menu?: boolean): void; |
|
getTopMenu(): void; |
|
getFirstEvent(): void; |
|
} |
|
|
|
declare global { |
|
interface Math { |
|
clamp(v: number, min: number, max: number): number; |
|
} |
|
} |
|
|