import {app} from "/scripts/app.js"; app.registerExtension({ name: "Comfy.Keybinds", init() { const keybindListener = function (event) { const modifierPressed = event.ctrlKey || event.metaKey; // Queue prompt using ctrl or command + enter if (modifierPressed && event.key === "Enter") { app.queuePrompt(event.shiftKey ? -1 : 0).then(); return; } const target = event.composedPath()[0]; if (["INPUT", "TEXTAREA"].includes(target.tagName)) { return; } const modifierKeyIdMap = { s: "#comfy-save-button", o: "#comfy-file-input", Backspace: "#comfy-clear-button", Delete: "#comfy-clear-button", d: "#comfy-load-default-button", }; const modifierKeybindId = modifierKeyIdMap[event.key]; if (modifierPressed && modifierKeybindId) { event.preventDefault(); const elem = document.querySelector(modifierKeybindId); elem.click(); return; } // Finished Handling all modifier keybinds, now handle the rest if (event.ctrlKey || event.altKey || event.metaKey) { return; } // Close out of modals using escape if (event.key === "Escape") { const modals = document.querySelectorAll(".comfy-modal"); const modal = Array.from(modals).find(modal => window.getComputedStyle(modal).getPropertyValue("display") !== "none"); if (modal) { modal.style.display = "none"; } [...document.querySelectorAll("dialog")].forEach(d => { d.close(); }); } const keyIdMap = { q: "#comfy-view-queue-button", h: "#comfy-view-history-button", r: "#comfy-refresh-button", }; const buttonId = keyIdMap[event.key]; if (buttonId) { const button = document.querySelector(buttonId); button.click(); } } window.addEventListener("keydown", keybindListener, true); } });