Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix ComfyExtension types #778

Merged
merged 1 commit into from
Sep 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/extensions/core/clipspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ export class ClipspaceDialog extends ComfyDialog {
app.registerExtension({
name: 'Comfy.Clipspace',
init(app) {
// @ts-expect-error Move to ComfyApp
app.openClipspace = function () {
if (!ClipspaceDialog.instance) {
ClipspaceDialog.instance = new ClipspaceDialog()
Expand Down
5 changes: 5 additions & 0 deletions src/extensions/core/rerouteNode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ 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) {
Expand Down Expand Up @@ -112,6 +113,7 @@ 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') {
Expand Down Expand Up @@ -164,6 +166,7 @@ app.registerExtension({
for (const l of node.outputs[0].links || []) {
const link = app.graph.links[l]
if (link) {
// @ts-expect-error Fix litegraph types
link.color = color

if (app.configuringGraph) continue
Expand All @@ -177,6 +180,7 @@ app.registerExtension({
}
if (!targetWidget) {
targetWidget = targetNode.widgets?.find(
// @ts-expect-error fix widget types
(w) => w.name === targetInput.widget.name
)
}
Expand Down Expand Up @@ -209,6 +213,7 @@ app.registerExtension({
if (inputNode) {
const link = app.graph.links[inputNode.inputs[0].link]
if (link) {
// @ts-expect-error Fix litegraph types
link.color = color
}
}
Expand Down
3 changes: 1 addition & 2 deletions src/extensions/core/slotDefaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ app.registerExtension({
slot_types_default_in: {},
async beforeRegisterNodeDef(nodeType, nodeData, app) {
var nodeId = nodeData.name
var inputs = []
inputs = nodeData['input']['required'] //only show required inputs to reduce the mess also not logical to create node with optional inputs
const inputs = nodeData['input']['required'] //only show required inputs to reduce the mess also not logical to create node with optional inputs
for (const inputKey in inputs) {
var input = inputs[inputKey]
if (typeof input[0] !== 'string') continue
Expand Down
1 change: 1 addition & 0 deletions src/extensions/core/widgetInputs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -826,6 +826,7 @@ app.registerExtension({
}

function isNodeAtPos(pos) {
// @ts-expect-error Fix litegraph types
for (const n of app.graph._nodes) {
if (n.pos[0] === pos[0] && n.pos[1] === pos[1]) {
return true
Expand Down
2 changes: 1 addition & 1 deletion src/scripts/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2871,7 +2871,7 @@ export class ComfyApp {
* Registers a Comfy web extension with the app
* @param {ComfyExtension} extension
*/
registerExtension(extension) {
registerExtension(extension: ComfyExtension) {
if (!extension.name) {
throw new Error("Extensions must have a 'name' property.")
}
Expand Down
40 changes: 20 additions & 20 deletions src/types/comfy.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@ import { LGraphNode, IWidget } from './litegraph'
import { ComfyApp } from '../scripts/app'
import type { ComfyNodeDef } from '@/types/apiTypes'

export type Widgets = Record<
string,
(
node,
inputName,
inputData,
app?: ComfyApp
) => { widget?: IWidget; minWidth?: number; minHeight?: number }
>

export interface ComfyExtension {
/**
* The name of the extension
Expand All @@ -11,12 +21,12 @@ export interface ComfyExtension {
* 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>
init?(app: ComfyApp): Promise<void> | void
/**
* Allows any additional setup, called after the application is fully set up and running
* @param app The ComfyUI app instance
*/
setup?(app: ComfyApp): Promise<void>
setup?(app: ComfyApp): Promise<void> | void
/**
* Called before nodes are registered with the graph
* @param defs The collection of node definitions, add custom ones or edit existing ones
Expand All @@ -25,25 +35,13 @@ export interface ComfyExtension {
addCustomNodeDefs?(
defs: Record<string, ComfyObjectInfo>,
app: ComfyApp
): Promise<void>
): Promise<void> | 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 }
>
>
getCustomWidgets?(app: ComfyApp): Promise<Widgets> | Widgets
/**
* Allows the extension to add additional handling to the node before it is registered with **LGraph**
* @param nodeType The node class (not an instance)
Expand All @@ -54,7 +52,7 @@ export interface ComfyExtension {
nodeType: typeof LGraphNode,
nodeData: ComfyObjectInfo,
app: ComfyApp
): Promise<void>
): Promise<void> | void

/**
* Allows the extension to modify the node definitions before they are used in the Vue app
Expand All @@ -71,21 +69,23 @@ export interface ComfyExtension {
*
* @param app The ComfyUI app instance
*/
registerCustomNodes?(app: ComfyApp): Promise<void>
registerCustomNodes?(app: ComfyApp): Promise<void> | 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)
loadedGraphNode?(node: LGraphNode, app: ComfyApp): void
/**
* 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)
nodeCreated?(node: LGraphNode, app: ComfyApp): void

[key: string]: any
}

export type ComfyObjectInfo = {
Expand Down
Loading