diff --git a/src/extensions/core/clipspace.js b/src/extensions/core/clipspace.js index e376a02f70..0ec0987b8a 100644 --- a/src/extensions/core/clipspace.js +++ b/src/extensions/core/clipspace.js @@ -1,6 +1,6 @@ -import { app } from "../../scripts/app.js"; -import { ComfyDialog, $el } from "../../scripts/ui.js"; -import { ComfyApp } from "../../scripts/app.js"; +import { app } from "../../scripts/app"; +import { ComfyDialog, $el } from "../../scripts/ui"; +import { ComfyApp } from "../../scripts/app"; export class ClipspaceDialog extends ComfyDialog { static items = []; diff --git a/src/extensions/core/colorPalette.js b/src/extensions/core/colorPalette.js index 02546782f8..fef2a42709 100644 --- a/src/extensions/core/colorPalette.js +++ b/src/extensions/core/colorPalette.js @@ -1,5 +1,5 @@ -import {app} from "../../scripts/app.js"; -import {$el} from "../../scripts/ui.js"; +import {app} from "../../scripts/app"; +import {$el} from "../../scripts/ui"; // Manage color palettes diff --git a/src/extensions/core/contextMenuFilter.js b/src/extensions/core/contextMenuFilter.js index 0a305391a4..98fd58b8a3 100644 --- a/src/extensions/core/contextMenuFilter.js +++ b/src/extensions/core/contextMenuFilter.js @@ -1,4 +1,4 @@ -import {app} from "../../scripts/app.js"; +import {app} from "../../scripts/app"; // Adds filtering to combo context menus diff --git a/src/extensions/core/dynamicPrompts.js b/src/extensions/core/dynamicPrompts.js index 7417361ba9..f342e1b120 100644 --- a/src/extensions/core/dynamicPrompts.js +++ b/src/extensions/core/dynamicPrompts.js @@ -1,4 +1,4 @@ -import { app } from "../../scripts/app.js"; +import { app } from "../../scripts/app"; // Allows for simple dynamic prompt replacement // Inputs in the format {a|b} will have a random value of a or b chosen when the prompt is queued. diff --git a/src/extensions/core/editAttention.js b/src/extensions/core/editAttention.js index 6792b23572..fc8da36a1b 100644 --- a/src/extensions/core/editAttention.js +++ b/src/extensions/core/editAttention.js @@ -1,4 +1,4 @@ -import { app } from "../../scripts/app.js"; +import { app } from "../../scripts/app"; // Allows you to edit the attention weight by holding ctrl (or cmd) and using the up/down arrow keys diff --git a/src/extensions/core/groupNode.js b/src/extensions/core/groupNode.js index 0b0763d1d4..c0a575d9eb 100644 --- a/src/extensions/core/groupNode.js +++ b/src/extensions/core/groupNode.js @@ -1,7 +1,7 @@ -import { app } from "../../scripts/app.js"; -import { api } from "../../scripts/api.js"; -import { mergeIfValid } from "./widgetInputs.js"; -import { ManageGroupDialog } from "./groupNodeManage.js"; +import { app } from "../../scripts/app"; +import { api } from "../../scripts/api"; +import { mergeIfValid } from "./widgetInputs"; +import { ManageGroupDialog } from "./groupNodeManage"; const GROUP = Symbol(); diff --git a/src/extensions/core/groupNodeManage.js b/src/extensions/core/groupNodeManage.js index 1ab3383868..02dc81b2d4 100644 --- a/src/extensions/core/groupNodeManage.js +++ b/src/extensions/core/groupNodeManage.js @@ -1,7 +1,7 @@ -import { $el, ComfyDialog } from "../../scripts/ui.js"; -import { DraggableList } from "../../scripts/ui/draggableList.js"; -import { addStylesheet } from "../../scripts/utils.js"; -import { GroupNodeConfig, GroupNodeHandler } from "./groupNode.js"; +import { $el, ComfyDialog } from "../../scripts/ui"; +import { DraggableList } from "../../scripts/ui/draggableList"; +import { addStylesheet } from "../../scripts/utils"; +import { GroupNodeConfig, GroupNodeHandler } from "./groupNode"; addStylesheet(import.meta.url); diff --git a/src/extensions/core/groupOptions.js b/src/extensions/core/groupOptions.js index 5dd21e7301..ec038d0432 100644 --- a/src/extensions/core/groupOptions.js +++ b/src/extensions/core/groupOptions.js @@ -1,4 +1,4 @@ -import {app} from "../../scripts/app.js"; +import {app} from "../../scripts/app"; function setNodeMode(node, mode) { node.mode = mode; diff --git a/src/extensions/core/index.js b/src/extensions/core/index.js new file mode 100644 index 0000000000..c408a97299 --- /dev/null +++ b/src/extensions/core/index.js @@ -0,0 +1,23 @@ +import "./clipspace"; +import "./colorPalette"; +import "./contextMenuFilter"; +import "./dynamicPrompts"; +import "./editAttention"; +import "./groupNode"; +import "./groupNodeManage"; +import "./groupOptions"; +import "./invertMenuScrolling"; +import "./keybinds"; +import "./linkRenderMode"; +import "./maskeditor"; +import "./nodeTemplates"; +import "./noteNode"; +import "./rerouteNode"; +import "./saveImageExtraOutput"; +import "./simpleTouchSupport"; +import "./slotDefaults"; +import "./snapToGrid"; +import "./undoRedo"; +import "./uploadImage"; +import "./webcamCapture"; +import "./widgetInputs"; diff --git a/src/extensions/core/invertMenuScrolling.js b/src/extensions/core/invertMenuScrolling.js index 98a1786ab4..81fb8ed38c 100644 --- a/src/extensions/core/invertMenuScrolling.js +++ b/src/extensions/core/invertMenuScrolling.js @@ -1,4 +1,4 @@ -import { app } from "../../scripts/app.js"; +import { app } from "../../scripts/app"; // Inverts the scrolling of context menus diff --git a/src/extensions/core/keybinds.js b/src/extensions/core/keybinds.js index ac367c116f..5295cf8d72 100644 --- a/src/extensions/core/keybinds.js +++ b/src/extensions/core/keybinds.js @@ -1,4 +1,4 @@ -import {app} from "../../scripts/app.js"; +import {app} from "../../scripts/app"; app.registerExtension({ name: "Comfy.Keybinds", diff --git a/src/extensions/core/linkRenderMode.js b/src/extensions/core/linkRenderMode.js index fb4df4234e..ca15d16e1a 100644 --- a/src/extensions/core/linkRenderMode.js +++ b/src/extensions/core/linkRenderMode.js @@ -1,4 +1,4 @@ -import { app } from "../../scripts/app.js"; +import { app } from "../../scripts/app"; const id = "Comfy.LinkRenderMode"; const ext = { diff --git a/src/extensions/core/maskeditor.js b/src/extensions/core/maskeditor.js index 36f7496e71..e314910eee 100644 --- a/src/extensions/core/maskeditor.js +++ b/src/extensions/core/maskeditor.js @@ -1,8 +1,8 @@ -import { app } from "../../scripts/app.js"; -import { ComfyDialog, $el } from "../../scripts/ui.js"; -import { ComfyApp } from "../../scripts/app.js"; -import { api } from "../../scripts/api.js" -import { ClipspaceDialog } from "./clipspace.js"; +import { app } from "../../scripts/app"; +import { ComfyDialog, $el } from "../../scripts/ui"; +import { ComfyApp } from "../../scripts/app"; +import { api } from "../../scripts/api"; +import { ClipspaceDialog } from "./clipspace"; // Helper function to convert a data URL to a Blob object function dataURLToBlob(dataURL) { diff --git a/src/extensions/core/nodeTemplates.js b/src/extensions/core/nodeTemplates.js index 9350ba6549..d0da2c981b 100644 --- a/src/extensions/core/nodeTemplates.js +++ b/src/extensions/core/nodeTemplates.js @@ -1,7 +1,7 @@ -import { app } from "../../scripts/app.js"; -import { api } from "../../scripts/api.js"; -import { ComfyDialog, $el } from "../../scripts/ui.js"; -import { GroupNodeConfig, GroupNodeHandler } from "./groupNode.js"; +import { app } from "../../scripts/app"; +import { api } from "../../scripts/api"; +import { ComfyDialog, $el } from "../../scripts/ui"; +import { GroupNodeConfig, GroupNodeHandler } from "./groupNode"; // Adds the ability to save and add multiple nodes as a template // To save: diff --git a/src/extensions/core/noteNode.js b/src/extensions/core/noteNode.js index 8d89054e9f..c1ba699408 100644 --- a/src/extensions/core/noteNode.js +++ b/src/extensions/core/noteNode.js @@ -1,5 +1,5 @@ -import {app} from "../../scripts/app.js"; -import {ComfyWidgets} from "../../scripts/widgets.js"; +import {app} from "../../scripts/app"; +import {ComfyWidgets} from "../../scripts/widgets"; // Node that add notes to your project app.registerExtension({ diff --git a/src/extensions/core/rerouteNode.js b/src/extensions/core/rerouteNode.js index 4feff91e50..bb8666270a 100644 --- a/src/extensions/core/rerouteNode.js +++ b/src/extensions/core/rerouteNode.js @@ -1,5 +1,5 @@ -import { app } from "../../scripts/app.js"; -import { mergeIfValid, getWidgetConfig, setWidgetConfig } from "./widgetInputs.js"; +import { app } from "../../scripts/app"; +import { mergeIfValid, getWidgetConfig, setWidgetConfig } from "./widgetInputs"; // Node that allows you to redirect connections for cleaner graphs diff --git a/src/extensions/core/saveImageExtraOutput.js b/src/extensions/core/saveImageExtraOutput.js index a0506b43b6..5dccd2ac33 100644 --- a/src/extensions/core/saveImageExtraOutput.js +++ b/src/extensions/core/saveImageExtraOutput.js @@ -1,5 +1,5 @@ -import { app } from "../../scripts/app.js"; -import { applyTextReplacements } from "../../scripts/utils.js"; +import { app } from "../../scripts/app"; +import { applyTextReplacements } from "../../scripts/utils"; // Use widget values and dates in output filenames app.registerExtension({ diff --git a/src/extensions/core/simpleTouchSupport.js b/src/extensions/core/simpleTouchSupport.js index 041fc2c4ca..451c14d9ce 100644 --- a/src/extensions/core/simpleTouchSupport.js +++ b/src/extensions/core/simpleTouchSupport.js @@ -1,4 +1,4 @@ -import { app } from "../../scripts/app.js"; +import { app } from "../../scripts/app"; let touchZooming; let touchCount = 0; diff --git a/src/extensions/core/slotDefaults.js b/src/extensions/core/slotDefaults.js index 718d254057..905358cda0 100644 --- a/src/extensions/core/slotDefaults.js +++ b/src/extensions/core/slotDefaults.js @@ -1,5 +1,5 @@ -import { app } from "../../scripts/app.js"; -import { ComfyWidgets } from "../../scripts/widgets.js"; +import { app } from "../../scripts/app"; +import { ComfyWidgets } from "../../scripts/widgets"; // Adds defaults for quickly adding nodes with middle click on the input/output app.registerExtension({ diff --git a/src/extensions/core/snapToGrid.js b/src/extensions/core/snapToGrid.js index aac0177484..4ca89ad32c 100644 --- a/src/extensions/core/snapToGrid.js +++ b/src/extensions/core/snapToGrid.js @@ -1,4 +1,4 @@ -import { app } from "../../scripts/app.js"; +import { app } from "../../scripts/app"; // Shift + drag/resize to snap to grid diff --git a/src/extensions/core/undoRedo.js b/src/extensions/core/undoRedo.js index 900eed2a7c..3bdd6760c4 100644 --- a/src/extensions/core/undoRedo.js +++ b/src/extensions/core/undoRedo.js @@ -1,5 +1,5 @@ -import { app } from "../../scripts/app.js"; -import { api } from "../../scripts/api.js" +import { app } from "../../scripts/app"; +import { api } from "../../scripts/api"; const MAX_HISTORY = 50; diff --git a/src/extensions/core/uploadImage.js b/src/extensions/core/uploadImage.js index 530c4599e7..7e6186c64a 100644 --- a/src/extensions/core/uploadImage.js +++ b/src/extensions/core/uploadImage.js @@ -1,4 +1,4 @@ -import { app } from "../../scripts/app.js"; +import { app } from "../../scripts/app"; // Adds an upload button to the nodes diff --git a/src/extensions/core/webcamCapture.js b/src/extensions/core/webcamCapture.js index dd5725bd4f..6e60e9b36f 100644 --- a/src/extensions/core/webcamCapture.js +++ b/src/extensions/core/webcamCapture.js @@ -1,5 +1,5 @@ -import { app } from "../../scripts/app.js"; -import { api } from "../../scripts/api.js"; +import { app } from "../../scripts/app"; +import { api } from "../../scripts/api"; const WEBCAM_READY = Symbol(); diff --git a/src/extensions/core/widgetInputs.js b/src/extensions/core/widgetInputs.js index f1a1d22cd9..fc705f4678 100644 --- a/src/extensions/core/widgetInputs.js +++ b/src/extensions/core/widgetInputs.js @@ -1,6 +1,6 @@ -import { ComfyWidgets, addValueControlWidgets } from "../../scripts/widgets.js"; -import { app } from "../../scripts/app.js"; -import { applyTextReplacements } from "../../scripts/utils.js"; +import { ComfyWidgets, addValueControlWidgets } from "../../scripts/widgets"; +import { app } from "../../scripts/app"; +import { applyTextReplacements } from "../../scripts/utils"; const CONVERTED_TYPE = "converted-widget"; const VALID_TYPES = ["STRING", "combo", "number", "BOOLEAN"]; diff --git a/src/scripts/app.ts b/src/scripts/app.ts index e4c5a3b5cf..dbe52858e3 100644 --- a/src/scripts/app.ts +++ b/src/scripts/app.ts @@ -1503,14 +1503,19 @@ export class ComfyApp { const extensions = await api.getExtensions(); this.logging.addEntry("Comfy.App", "debug", { Extensions: extensions }); - const extensionPromises = extensions.map(async ext => { + const extensionPromises = extensions + .filter(extension => !extension.includes("extensions/core")) + .map(async ext => { try { - await import(api.apiURL(ext)); + await import(/* @vite-ignore */api.apiURL(ext)); } catch (error) { console.error("Error loading extension", ext, error); } }); + // Need to load core extensions first as some custom extensions + // may depend on them. + await import("../extensions/core/index.js"); await Promise.all(extensionPromises); } diff --git a/vite.config.mts b/vite.config.mts index 8aa796bace..ede9783755 100644 --- a/vite.config.mts +++ b/vite.config.mts @@ -12,7 +12,8 @@ function comfyAPIPlugin(): Plugin { return { name: 'comfy-api-plugin', transform(code: string, id: string) { - if (id.endsWith('.ts')) { + // TODO: Remove second condition after all js files are converted to ts + if (id.endsWith('.ts') || (id.endsWith('.js') && id.includes("extensions/core"))) { const result = transformExports(code, id); if (result.exports.length > 0) { @@ -87,7 +88,6 @@ export default defineConfig({ viteStaticCopy({ targets: [ {src: "src/lib/*", dest: "lib/"}, - {src: "src/extensions/*", dest: "extensions/"}, ], }), ],