diff --git a/src/extensions/core/nodeBadge.ts b/src/extensions/core/nodeBadge.ts index 9a3ae5e1e..109bd75ea 100644 --- a/src/extensions/core/nodeBadge.ts +++ b/src/extensions/core/nodeBadge.ts @@ -1,6 +1,6 @@ import { app, type ComfyApp } from '@/scripts/app' import type { ComfyExtension } from '@/types/comfy' -import type { ComfyLGraphNode } from '@/types/comfyLGraphNode' +import type { LGraphNode } from '@comfyorg/litegraph' import { LGraphBadge } from '@comfyorg/litegraph' import { useSettingStore } from '@/stores/settingStore' import { computed, ComputedRef, watch } from 'vue' @@ -12,9 +12,8 @@ import type { Palette } from '@/types/colorPalette' import type { ComfyNodeDef } from '@/types/apiTypes' import { useNodeDefStore } from '@/stores/nodeDefStore' -function getNodeSource(node: ComfyLGraphNode): NodeSource | null { - const nodeDef = (node.constructor as typeof ComfyLGraphNode) - .nodeData as ComfyNodeDef +function getNodeSource(node: LGraphNode): NodeSource | null { + const nodeDef = node.constructor.nodeData // Frontend-only nodes don't have nodeDef if (!nodeDef) { return null @@ -23,29 +22,23 @@ function getNodeSource(node: ComfyLGraphNode): NodeSource | null { return nodeDefStore.nodeDefsByName[nodeDef.name]?.nodeSource ?? null } -function isCoreNode(node: ComfyLGraphNode) { +function isCoreNode(node: LGraphNode) { return getNodeSource(node)?.type === NodeSourceType.Core } -function badgeTextVisible( - node: ComfyLGraphNode, - badgeMode: NodeBadgeMode -): boolean { +function badgeTextVisible(node: LGraphNode, badgeMode: NodeBadgeMode): boolean { return ( badgeMode === NodeBadgeMode.None || (isCoreNode(node) && badgeMode === NodeBadgeMode.HideBuiltIn) ) } -function getNodeIdBadgeText( - node: ComfyLGraphNode, - nodeIdBadgeMode: NodeBadgeMode -) { +function getNodeIdBadgeText(node: LGraphNode, nodeIdBadgeMode: NodeBadgeMode) { return badgeTextVisible(node, nodeIdBadgeMode) ? '' : `#${node.id}` } function getNodeSourceBadgeText( - node: ComfyLGraphNode, + node: LGraphNode, nodeSourceBadgeMode: NodeBadgeMode ) { const nodeSource = getNodeSource(node) @@ -55,11 +48,11 @@ function getNodeSourceBadgeText( } function getNodeLifeCycleBadgeText( - node: ComfyLGraphNode, + node: LGraphNode, nodeLifeCycleBadgeMode: NodeBadgeMode ) { let text = '' - const nodeDef = (node.constructor as typeof ComfyLGraphNode).nodeData + const nodeDef = node.constructor.nodeData // Frontend-only nodes don't have nodeDef if (!nodeDef) { @@ -118,7 +111,7 @@ class NodeBadgeExtension implements ComfyExtension { }) } - nodeCreated(node: ComfyLGraphNode, app: ComfyApp) { + nodeCreated(node: LGraphNode, app: ComfyApp) { node.badgePosition = BadgePosition.TopRight // @ts-expect-error Disable ComfyUI-Manager's badge drawing by setting badge_enabled to true. Remove this when ComfyUI-Manager's badge drawing is removed. node.badge_enabled = true diff --git a/src/extensions/core/nodeTemplates.ts b/src/extensions/core/nodeTemplates.ts index b33ae7a8e..ae5aa105d 100644 --- a/src/extensions/core/nodeTemplates.ts +++ b/src/extensions/core/nodeTemplates.ts @@ -378,7 +378,6 @@ app.registerExtension({ const nodeIds = Object.keys(app.canvas.selected_nodes) for (let i = 0; i < nodeIds.length; i++) { const node = app.graph.getNodeById(nodeIds[i]) - // @ts-expect-error const nodeData = node?.constructor.nodeData let groupData = GroupNodeHandler.getGroupData(node) diff --git a/src/extensions/core/rerouteNode.ts b/src/extensions/core/rerouteNode.ts index 1ace3e543..b81ebe19d 100644 --- a/src/extensions/core/rerouteNode.ts +++ b/src/extensions/core/rerouteNode.ts @@ -74,7 +74,6 @@ app.registerExtension({ const link = app.graph.links[linkId] if (!link) return const node = app.graph.getNodeById(link.origin_id) - // @ts-expect-error Nodes that extend LGraphNode will not have a static type property const type = node.constructor.type if (type === 'Reroute') { if (node === this) { @@ -113,7 +112,6 @@ app.registerExtension({ if (!link) continue const node = app.graph.getNodeById(link.target_id) - // @ts-expect-error Nodes that extend LGraphNode will not have a static type property const type = node.constructor.type if (type === 'Reroute') { @@ -179,7 +177,6 @@ app.registerExtension({ } if (!targetWidget) { targetWidget = targetNode.widgets?.find( - // @ts-expect-error fix widget types (w) => w.name === targetInput.widget.name ) } diff --git a/src/scripts/app.ts b/src/scripts/app.ts index ebf2b268c..9ac7ae785 100644 --- a/src/scripts/app.ts +++ b/src/scripts/app.ts @@ -51,7 +51,6 @@ import { useToastStore } from '@/stores/toastStore' import { ModelStore, useModelStore } from '@/stores/modelStore' import type { ToastMessageOptions } from 'primevue/toast' import { useWorkspaceStore } from '@/stores/workspaceStateStore' -import { ComfyLGraphNode } from '@/types/comfyLGraphNode' import { useExecutionStore } from '@/stores/executionStore' export const ANIM_PREVIEW_WIDGET = '$$comfy_animation_preview' @@ -1935,7 +1934,6 @@ export class ComfyApp { { name, display_name: name, - // @ts-expect-error category: node.category || '__frontend_only__', input: { required: {}, optional: {} }, output: [], @@ -1989,7 +1987,7 @@ export class ComfyApp { async registerNodeDef(nodeId: string, nodeData: ComfyNodeDef) { const self = this - const node: new () => ComfyLGraphNode = class ComfyNode extends LGraphNode { + const node = class ComfyNode extends LGraphNode { static comfyClass? = nodeData.name // TODO: change to "title?" once litegraph.d.ts has been updated static title = nodeData.display_name || nodeData.name @@ -2074,7 +2072,6 @@ export class ComfyApp { await this.#invokeExtensionsAsync('beforeRegisterNodeDef', node, nodeData) LiteGraph.registerNodeType(nodeId, node) // Note: Do not move this to the class definition, it will be overwritten - // @ts-expect-error node.category = nodeData.category } diff --git a/src/types/comfyLGraphNode.ts b/src/types/comfyLGraphNode.ts deleted file mode 100644 index ad06a10ac..000000000 --- a/src/types/comfyLGraphNode.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { LGraphNode } from '@comfyorg/litegraph' -import type { ComfyNodeDef } from './apiTypes' - -export declare class ComfyLGraphNode extends LGraphNode { - static comfyClass: string - static title: string - static nodeData?: ComfyNodeDef - static category?: string - - constructor(title?: string) -} diff --git a/src/types/litegraph-augmentation.d.ts b/src/types/litegraph-augmentation.d.ts index 74b4fe050..0afbdfe9d 100644 --- a/src/types/litegraph-augmentation.d.ts +++ b/src/types/litegraph-augmentation.d.ts @@ -1,14 +1,33 @@ import '@comfyorg/litegraph' +import type { ComfyNodeDef } from '@/types/apiTypes' +import type { LLink } from '@comfyorg/litegraph' /** * ComfyUI extensions of litegraph */ declare module '@comfyorg/litegraph' { + interface LGraphNodeConstructor { + type?: string + comfyClass: string + title: string + nodeData?: ComfyNodeDef + category?: string + new (): T + } + interface LGraphNode { + constructor: LGraphNodeConstructor + /** * Callback fired on each node after the graph is configured */ onAfterGraphConfigured?(): void + onNodeCreated?(this: LGraphNode): void + setInnerNodes?(nodes: LGraphNode[]): void + applyToGraph?(extraLinks?: LLink[]): void + updateLink?(link: LLink): LLink | null + + comfyClass?: string /** * If the node is a frontend only node and should not be serialized into the prompt. @@ -24,25 +43,30 @@ declare module '@comfyorg/litegraph' { } interface IWidget { + type?: string + /** * Allows for additional cleanup when removing a widget when converting to input. */ onRemove?(): void + serializeValue?(node?: LGraphNode, i?: string) + beforeQueued?(): void + /** * DOM element used for the widget */ element?: HTMLElement tooltip?: string + + origType?: IWidget['type'] + origComputeSize?: IWidget['computeSize'] + origSerializeValue?: IWidget['serializeValue'] } - interface INodeOutputSlot { - widget?: unknown - } - - interface INodeInputSlot { - widget?: unknown + interface INodeSlot { + widget?: unknown & { name?: string } } } diff --git a/src/types/litegraph-core-augmentation.d.ts b/src/types/litegraph-core-augmentation.d.ts index d58f10ec8..b97345c71 100644 --- a/src/types/litegraph-core-augmentation.d.ts +++ b/src/types/litegraph-core-augmentation.d.ts @@ -6,6 +6,7 @@ declare module '@comfyorg/litegraph' { interface LiteGraphExtended { search_filter_enabled: boolean middle_click_slot_add_default_node: boolean + registered_node_types: Record registered_slot_out_types: Record registered_slot_in_types: Record slot_types_out: string[]