Files
jaidaken f09734b0ee
Some checks failed
Python Linting / Run Ruff (push) Has been cancelled
Python Linting / Run Pylint (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.10, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.11, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.12, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-unix-nightly (12.1, , linux, 3.11, [self-hosted Linux], nightly) (push) Has been cancelled
Execution Tests / test (macos-latest) (push) Has been cancelled
Execution Tests / test (ubuntu-latest) (push) Has been cancelled
Execution Tests / test (windows-latest) (push) Has been cancelled
Test server launches without errors / test (push) Has been cancelled
Unit Tests / test (macos-latest) (push) Has been cancelled
Unit Tests / test (ubuntu-latest) (push) Has been cancelled
Unit Tests / test (windows-2022) (push) Has been cancelled
Add custom nodes, Civitai loras (LFS), and vast.ai setup script
Includes 30 custom nodes committed directly, 7 Civitai-exclusive
loras stored via Git LFS, and a setup script that installs all
dependencies and downloads HuggingFace-hosted models on vast.ai.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 00:56:42 +00:00

194 lines
8.6 KiB
TypeScript

/**
* This used to augment the LiteGraph types, either to fix them for how they actually behave
* (e.g. marking args that are typed as required as optional because they actually are, etc.) or
* adding properties/methods that rgthree-comfy adds/uses. Mostly the latter are prefixed 'rgthree_'
* but not always.
*/
import "@comfyorg/frontend";
declare module "@comfyorg/frontend" {
interface INodeSlot {
// @rgthree: Hides a slot for rgthree-comfy draw methods.
hidden?: boolean;
// @rgthree: Used to "disable" an input/output. Used in PowerPrompt to disallow connecting
// an output if there's no optional corresponding input (since, that would just break).
disabled?: boolean;
// @rgthree: A status we put on some nodes so we can draw things around it.
rgthree_status?: "WARN" | "ERROR";
}
interface LGraph {
// @rgthree (Fix): `result` arg is optional in impl.
findNodesByType(type: string, result?: LGraphNode[]): LGraphNode[];
}
interface LGraphNode {
// @rgthree: rgthree-comfy added this before comfyui did and it was a bit more flexible.
removeWidget(widget: IBaseWidget | IWidget | number | undefined): void;
// @rgthree (Fix): Implementation allows a falsy value to be returned and it will suppress the
// menu all together.
// NOTE: [🤮] We can't actually augment this because it's a return.. but keeping here because
// this is how it's actually implemented.
// getSlotMenuOptions?(this: LGraphNode, slot: IFoundSlot): IContextMenuValue[] | void;
// @rgthree (Fix): Implementation allows a falsy value to be returned and it will not add items.
// NOTE: [🤮] We can't actually augment this because it's a return.. but keeping here because
// this is how it's actually implemented.
// getExtraMenuOptions?(
// canvas: LGraphCanvas,
// options: (IContextMenuValue<unknown> | null)[],
// ): (IContextMenuValue<unknown> | null)[] | void;
/**
* Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts
*
* Callback invoked when the node is dragged over from an external source, i.e.
* a file or another HTML element.
* @param e The drag event
* @returns {boolean} True if the drag event should be handled by this node, false otherwise
*/
onDragOver?(e: DragEvent): boolean;
/**
* Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts
*
* Callback invoked when the node is dropped from an external source, i.e.
* a file or another HTML element.
* @param e The drag event
* @returns {boolean} True if the drag event should be handled by this node, false otherwise
*/
onDragDrop?(e: DragEvent): Promise<boolean> | boolean;
/** Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts */
onExecuted?(output: any): void;
/**
* Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts
*
* Index of the currently selected image on a multi-image node such as Preview Image
*/
imageIndex?: number | null;
/** Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts */
overIndex?: number | null;
/** Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts */
imgs?: HTMLImageElement[];
/** Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts */
refreshComboInNode?(defs: Record<string, ComfyNodeDef>);
/**
* Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts
*
* widgets_values is set to LGraphNode by `LGraphNode.configure`, but it is not
* used by litegraph internally. We should remove the dependency on it later.
*/
widgets_values?: unknown[];
}
/**
* Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts
*
* Only used by the Primitive node. Primitive node is using the widget property
* to store/access the widget config.
* We should remove this hacky solution once we have a proper solution.
*
* @rgthree - Changed this to add `widget?: IWidgetLocator` to INodeOutputSlot (which matches
* INodeInputSlot) and then `[key: symbol]: unknown` to IWidgetLocator as that's how it's
* used for CONFIG and GET_CONFIG symbols.
*/
interface INodeOutputSlot {
widget?: IWidgetLocator; //{name: string; [key: symbol]: unknown};
}
// @rgthree - See above.
interface IWidgetLocator {
[key: symbol]: unknown;
}
interface LGraphGroup {
// @rgthree: Track whether a group has any active node from the fast group mode changers.
rgthree_hasAnyActiveNode?: boolean;
}
interface LGraphCanvas {
// @rgthree (Fix): At one point this was in ComfyUI's app.js. I don't see it now... perhaps it's
// been removed? We were using it in rgthree-comfy.
selected_group_moving?: boolean;
// @rgthree (Fix): Allows LGraphGroup to be passed (it could be `{size: Point, pos: Point}`).
centerOnNode(node: LGraphNode | LGraphGroup);
// @rgthree (Fix): Makes item's fields optiona, and other params nullable, as well as adds
// LGraphGroup to the node, since the implementation accomodates all of these as typed below.
// NOTE: [🤮] We can't actually augment this because it's static.. but keeping here because
// this is how it's actually implemented.
// static onShowPropertyEditor(
// item: {
// property?: keyof LGraphNode | undefined;
// type?: string;
// },
// options: IContextMenuOptions<string> | null,
// e: MouseEvent | null,
// menu: ContextMenu<string> | null,
// node: LGraphNode | LGraphGroup,
// ): void;
}
interface LGraphNodeConstructor {
// @rgthree (Fix): Fixes ComfyUI-Frontend which marks this as required, even though elsewhere it
// defines it as optional (like for the actual for LGraphNode). Our virtual nodes do not have
// a comfyClass since there's nothing to tie it back to.
comfyClass?: string;
// @rgthree: reference the original nodeType data as sometimes extensions clobber it.
nodeType?: LGraphNodeConstructor | null;
}
}
declare module "@/lib/litegraph/src/types/widgets" {
interface IBaseWidget {
// @rgthree (Fix): Where is this in Comfy types?
inputEl?: HTMLInputElement;
// @rgthree: A status we put on some nodes so we can draw things around it.
rgthree_lastValue?: any;
/** Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts */
onRemove?(): void;
/** Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts */
serializeValue?(node: LGraphNode, index: number): Promise<unknown> | unknown;
}
interface IWidgetOptions {
/**
* Copied from https://github.com/Comfy-Org/ComfyUI_frontend/blob/ba355b543d0b753365c4e2b40ec376e186727c8c/src/types/litegraph-augmentation.d.ts
*
* Controls whether the widget's value is included in the API workflow/prompt.
* - If false, the value will be excluded from the API workflow but still serialized as part of the graph state
* - If true or undefined, the value will be included in both the API workflow and graph state *
* @default true
* @use {@link IBaseWidget.serialize} if you don't want the widget value to be included in both
* the API workflow and graph state.
*/
serialize?: boolean;
}
}
declare module "@/lib/litegraph/src/interfaces" {
// @rgthree (Fix): widget is (or was?) available when inputs were moved from a widget.
interface IFoundSlot {
widget?: IBaseWidget;
}
}
declare module "@comfyorg/litegraph/dist/LiteGraphGlobal" {
interface LiteGraphGlobal {
// @rgthree (Fix): Window is actually optional in the code.
closeAllContextMenus(ref_window?: Window): void;
}
}