Spaces:
Configuration error
Configuration error
| import { tryToGetWorkflowDataFromEvent } from "rgthree/common/utils_workflow.js"; | |
| import { app } from "scripts/app.js"; | |
| import type { ComfyNode, ComfyNodeConstructor, ComfyObjectInfo } from "typings/comfy.js"; | |
| import { SERVICE as CONFIG_SERVICE } from "./services/config_service.js"; | |
| /** | |
| * Registers the GroupHeaderToggles which places a mute and/or bypass icons in groups headers for | |
| * quick, single-click ability to mute/bypass. | |
| */ | |
| app.registerExtension({ | |
| name: "rgthree.ImportIndividualNodes", | |
| async beforeRegisterNodeDef(nodeType: ComfyNodeConstructor, nodeData: ComfyObjectInfo) { | |
| const onDragOver = nodeType.prototype.onDragOver; | |
| nodeType.prototype.onDragOver = function (e: DragEvent) { | |
| let handled = onDragOver?.apply?.(this, [...arguments] as any); | |
| if (handled != null) { | |
| return handled; | |
| } | |
| return importIndividualNodesInnerOnDragOver(this, e); | |
| }; | |
| const onDragDrop = nodeType.prototype.onDragDrop; | |
| nodeType.prototype.onDragDrop = async function (e: DragEvent) { | |
| const alreadyHandled = await onDragDrop?.apply?.(this, [...arguments] as any); | |
| if (alreadyHandled) { | |
| return alreadyHandled; | |
| } | |
| return importIndividualNodesInnerOnDragDrop(this, e); | |
| }; | |
| }, | |
| }); | |
| export function importIndividualNodesInnerOnDragOver(node: ComfyNode, e: DragEvent): boolean { | |
| return ( | |
| (node.widgets?.length && !!CONFIG_SERVICE.getFeatureValue("import_individual_nodes.enabled")) || | |
| false | |
| ); | |
| } | |
| export async function importIndividualNodesInnerOnDragDrop(node: ComfyNode, e: DragEvent) { | |
| if (!node.widgets?.length || !CONFIG_SERVICE.getFeatureValue("import_individual_nodes.enabled")) { | |
| return false; | |
| } | |
| let handled = false; | |
| const { workflow, prompt } = await tryToGetWorkflowDataFromEvent(e); | |
| if (!handled && workflow) { | |
| const exact = (workflow.nodes || []).find((n) => n.id === node.id && n.type === node.type); | |
| if ( | |
| exact && | |
| exact.widgets_values?.length && | |
| confirm( | |
| "Found a node match from embedded workflow (same id & type) in this workflow. Would you like to set the widget values?", | |
| ) | |
| ) { | |
| node.configure({ widgets_values: [...(exact?.widgets_values || [])] } as any); | |
| handled = true; | |
| } | |
| } | |
| if (!handled) { | |
| handled = !confirm( | |
| "No exact match found in workflow. Would you like to replace the whole workflow?", | |
| ); | |
| } | |
| return handled; | |
| } | |