Files
AIDC-AI-ComfyUI-Copilot/entry/comfyui-bridge.js
T
2025-07-17 10:58:51 +08:00

78 lines
2.6 KiB
JavaScript

// Copyright (C) 2025 AIDC-AI
// Licensed under the MIT License.
import { app } from "../../scripts/app.js";
import { api } from "../../scripts/api.js";
// 定义事件常量
const COPILOT_EVENTS = {
EXPLAIN_NODE: 'copilot:explain-node',
TOOLBOX_USAGE: 'copilot:toolbox-usage',
TOOLBOX_PARAMETERS: 'copilot:toolbox-parameters',
TOOLBOX_DOWNSTREAMNODES: 'copilot:toolbox-downstreamnodes',
};
const COPILOT_TOOLBOX_IDS = {
USAGE: 'Copilot.Toolbox.Usage',
PARAMETERS: 'Copilot.Toolbox.Parameters',
DOWNSTREAMNODES: 'Copilot.Toolbox.DownstreamNodes'
}
function addExtraMenuOptions(nodeType, nodeData, app) {
const original_getExtraMenuOptions = nodeType.prototype.getExtraMenuOptions;
nodeType.prototype.getExtraMenuOptions = function (_, options) {
original_getExtraMenuOptions?.apply(this, arguments);
options.push({
content: "Explain with Copilot",
callback: async () => {
const nodeTypeUniqueId = nodeType?.comfyClass;
// 触发自定义事件
window.dispatchEvent(new CustomEvent(COPILOT_EVENTS.EXPLAIN_NODE, {
detail: { nodeType: nodeTypeUniqueId }
}));
}
})
}
}
app.registerExtension({
name: "ComfyUI-Copilot-Bridge",
async beforeRegisterNodeDef(nodeType, nodeData, app) {
addExtraMenuOptions(nodeType, nodeData, app);
},
commands: [
{
id: COPILOT_TOOLBOX_IDS.USAGE,
label: "Usage",
icon: 'pi pi-info-circle',
function: () => {
window.dispatchEvent(new CustomEvent(COPILOT_EVENTS.TOOLBOX_USAGE, {
}));
}
},
{
id: COPILOT_TOOLBOX_IDS.PARAMETERS,
label: 'Parameters',
icon: 'pi pi-objects-column',
function: () => {
window.dispatchEvent(new CustomEvent(COPILOT_EVENTS.TOOLBOX_PARAMETERS, {
}));
}
},
{
id: COPILOT_TOOLBOX_IDS.DOWNSTREAMNODES,
label: 'Downstream Nodes',
icon: 'pi pi-arrow-circle-right',
function: () => {
window.dispatchEvent(new CustomEvent(COPILOT_EVENTS.TOOLBOX_DOWNSTREAMNODES, {
}));
}
}
],
// Return an array of command IDs to show in the selection toolbox
// when an item is selected
getSelectionToolboxCommands: (selectedItem) => [COPILOT_TOOLBOX_IDS.USAGE, COPILOT_TOOLBOX_IDS.PARAMETERS, COPILOT_TOOLBOX_IDS.DOWNSTREAMNODES]
})