import { app } from "../../scripts/app.js"; import { ComfyDialog, $el } from "../../scripts/ui.js"; import { ComfyApp } from "../../scripts/app.js"; const images = { cute_comfy_logo: 'data:image/png;base64,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' } const cuteCustomStyles = ` @import url('https://fonts.googleapis.com/css2?family=Comfortaa:wght@400;500;600;700&family=Noto+Color+Emoji&display=swap'); :root { --cute-comfy-text: #E1D5E8; --cute-comfy-bar-height: 50px; --cute-comfy-sidebar-width: 200px; --cute-comfy-sidebar-bg: #49355a; } #cute-comfy, #cute-comfy * { font-family: 'Comfortaa', sans-serif !important; font-size: 1rem; } #cute-comfy { color: var(--cute-comfy-text); } #cute-comfy #batchCountInputNumber { width: 50px; height: 26px; text-align: center; background-color: #d4c4e3; border: none; color: #241a2d; } .emoji { font-family: 'Noto Color Emoji', sans-serif !important; } .cute-comfy-top-bar { display: flex; position: absolute; top: 0; left: 0; right: 0; height: var(--cute-comfy-bar-height); justify-content: space-between; align-items: center; background: rgb(119, 86, 148); background: linear-gradient(135deg, rgba(119, 86, 148, 1) 20%, rgba(36, 26, 45, 1) 100%); box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); } .cute-comfy-top-bar-left { display: flex; align-items: center; height: 100%; padding-left: 10px; } .cute-comfy-top-bar-right { display: flex; align-items: center; height: 100%; padding-right: 10px; } .cute-comfy-top-bar-right > *, .cute-comfy-top-bar-left > *, .cute-comfy-top-bar-right button.comfy-queue-btn { margin-left: 1rem !important; } .cute-comfy-top-bar-right > *:last-child { margin-left: 0; } .cute-comfy-top-bar-left > *:first-child { margin-left: 0; } .cute-comfy-logo { position: relative; height: 100%; } .cute-comfy-logo img { height: 100%; } .cute-comfy-button { background-color: #b382e0; border: none; color: #241a2d; font-weight: bold; padding: 5px 10px; text-align: center; text-decoration: none; display: inline-block; width: auto; height: 28px; line-height: 1.25rem; cursor: pointer; box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.1); } .cute-comfy-button:hover { background-color: #a66ed8; color: #241a2d; } button.cute-comfy-button > svg { margin: 0 0.2rem; } .cute-comfy-menu-button:hover { color: #999; } .cute-comfy-menu-button:active { color: #666; } div.cute-comfy-menu { position: absolute; top: var(--cute-comfy-bar-height); right: 0; bottom: 0; background-color: var(--cute-comfy-sidebar-bg); border: none; box-shadow: none; border-radius: 0; width: var(--cute-comfy-sidebar-width); padding: 0 !important; } div.cute-comfy-menu button, div.cute-comfy-menu .cute-queue-button { border: 0; border-radius: 0; display: inline-flex; flex-flow: row nowrap; justify-content: center; align-items: center; min-height: 33px; background-color: #251b2e; color: #eed7eb !important } div.cute-comfy-menu hr { height: 1px !important; background-color: #ed8def; border: 0; } div.cute-comfy-menu .cute-queue-button { padding: 0.25rem 1rem; font-size: 1.25rem; } div.cute-comfy-list { margin: 0; padding: 0; border: 0; background-color: initial; display: flex; flex-flow: column nowrap; align-items: center; justify-content: stretch; } div.cute-comfy-list h4 { font-family: 'Comfortaa', sans-serif !important; color: #eed7eb !important; font-size: 1.3rem; margin: 0.5rem 0; } div.cute-comfy-list .comfy-list-items:first-of-type:empty:before { font-size: 0.7rem; content: 'Nothing!'; color: #eed7eb !important; opacity: 0.6; font-style: italic; } div.cute-comfy-menu .cute-comfy-spacer { flex-grow: 1; } div.cute-comfy-list { width: 100%; height: 100%; margin: 0; padding: 0; flex-grow: 10; } div.cute-comfy-list .comfy-list-items { overflow: auto; min-height: 0; width: 100%; background: initial; max-height: unset; max-height: unset; flex-basis: 0; padding: 0; } div.cute-comfy-list .comfy-list-items:not(:first-of-type) { flex-grow: 1; height: 100%; } div.cute-comfy-list .comfy-list-items:first-of-type { flex-grow: 0; min-height: 32px; overflow: hidden; } div.cute-comfy-list ~ div.cute-comfy-list .comfy-list-items { flex-grow: 1; overflow: auto; } div.cute-comfy-list .comfy-list-items > div { width: 100%; position: relative; display: flex; flex-flow: row nowrap; justify-content: flex-start; align-items: center; background-color: #382747; } div.cute-comfy-list .comfy-list-items > div > span { display: inline-block; font-size: 1rem; color: #eed7eb !important; flex-grow: 1; text-align: left; padding: 0 0.75rem; order: -2; } div.cute-comfy-list .comfy-list-items > div > svg { order: -1; color: #ff30c5; } div.cute-comfy-list .comfy-list-items > div > span:before { content: '#'; } div.cute-comfy-list .comfy-list-items > div > button { flex-grow: 0; justify-self: flex-end; background: none; min-height: unset; min-width: unset; height: 100%; } div.cute-comfy-list .comfy-list-items > div .cute-queue-button { padding: 0.25rem 0.6rem !important; } /* Hover effects */ button:hover > .cute-hover-red { color: #e5586a; } button:hover > .cute-hover-blue { color: #5890e5; } button:hover > .cute-hover-green { color: #58e57a; } .cute-comfy-pop-menu { position: absolute; right: -7.5em; top: 50px; display: flex; flex-flow: column nowrap; } .cute-comfy-pop-menu > * { height: unset; text-align: left; padding: 0.75rem 1rem; } .cute-comfy-top-bar-left { position: relative; } /* Overrides the built-in media query for small screens, argh...! */ @media only screen and (max-height: 850px) { .comfy-menu.cute-comfy-menu { top: var(--cute-comfy-bar-height) !important; } } `; function moveElement(elementSelector, destinationParentSelector, newClass, append = false) { let element = document.querySelector(elementSelector); if (newClass) { element.classList.add(newClass); } // Clear inline styles from the element element.removeAttribute("style"); let elementParent = element.parentNode; elementParent.removeChild(element); let destinationParent = document.querySelector(destinationParentSelector); if (append) { destinationParent.appendChild(element); } else { destinationParent.insertBefore(element, destinationParent.firstChild); } return element; } function surroundElement(elementSelector, surroundElementName) { let element = document.querySelector(elementSelector); let surroundElement = document.createElement(surroundElementName); let elementParent = element.parentNode; elementParent.removeChild(element); surroundElement.appendChild(element); elementParent.appendChild(surroundElement); return surroundElement; } // Blocks until the element is visible function waitForElementVisibility(selector, timeout = 5000) { let start = Date.now(); let element = document.querySelector(selector); while (element == null || element.offsetParent === null) { if (Date.now() - start > timeout) { throw new Error(`Timed out waiting for element ${selector} to appear.`); } element = document.querySelector(selector); } } async function initCuteness() { console.group('💜 Cute Comfy 💜 '); console.log("🟣 I'm going to make things CUTE! ^_^"); // Add a link tag to the header to add Font Awesome var link = document.createElement("link"); link.rel = "stylesheet"; link.href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"; document.head.appendChild(link); // Add a script tag for Font Awesome var script = document.createElement("script"); script.src = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/js/all.min.js"; document.head.appendChild(script); // Inject custom style tag into the header var style = document.createElement("style"); style.innerHTML = cuteCustomStyles; document.head.appendChild(style); //import { app } from "../../scripts/app.js"; // Find the drag-handle div inside the comfy-menu div, and hide it. document.querySelector(".comfy-menu .drag-handle").style.display = "none"; // Inject a "cute comfy" top bar var template = `
` // Init menu var topBar = document.createElement("div"); topBar.id = "cute-comfy"; topBar.innerHTML = template; var menu = document.querySelector(".comfy-menu"); menu.style.top = "var(--cute-comfy-bar-height)"; menu.classList.add("cute-comfy-menu"); menu.parentNode.insertBefore(topBar, menu); // Hide useless "Extra Options" / "View Queue" / "View History" document.querySelector(".comfy-menu label").parentNode.style.display = "none"; document.querySelector(".comfy-menu-btns").style.display = "none"; // Right Side var infiniteCheck = moveElement('#autoQueueCheckbox', ".cute-comfy-top-bar-right", null, true); surroundElement('#autoQueueCheckbox', "div"); infiniteCheck.title = "Infinite Queue"; var infLabel = document.createElement("label"); infLabel.htmlFor = "autoQueueCheckbox"; infLabel.innerHTML = "Infinite Gen"; infiniteCheck.after(infLabel); var bcount = moveElement('#batchCountInputNumber', ".cute-comfy-top-bar-right", null, true); var bcountLabeal = document.createElement("label"); bcountLabeal.htmlFor = "batchCountInputNumber"; bcountLabeal.innerHTML = ' Batch Count:'; bcount.before(bcountLabeal); surroundElement('#batchCountInputNumber', "div"); var queue = moveElement("#queue-button", ".cute-comfy-top-bar-right", "cute-comfy-button", true); queue.innerHTML = ` Queue`; queue.title = "Queue Workflow"; var queueTop = moveElement("#queue-front-button", ".cute-comfy-top-bar-right", "cute-comfy-button", true); queueTop.innerHTML = ``; queueTop.title = "Queue Next"; queueTop.classList.add("emoji"); // Popup menu var menu = document.createElement("div"); menu.classList.add("cute-comfy-pop-menu"); menu.style.display = "none"; // Left Side let btn = moveElement('#comfy-save-button', ".cute-comfy-top-bar-left", "cute-comfy-button", true); btn.innerHTML = ` Save`; btn.title = "Download the current workflow as JSON."; btn = moveElement('#comfy-load-button', ".cute-comfy-top-bar-left", "cute-comfy-button", true); btn.innerHTML = ` Load`; btn.title = "Upload a workflow JSON file. Will replace the current workflow."; btn = moveElement('#comfy-clear-button', ".cute-comfy-top-bar-left", "cute-comfy-button", true); btn.innerHTML = ` Clear`; btn.title = "Clears the canvas. Be sure to save your workflow first!"; // Append the menu document.querySelector(".cute-comfy-top-bar-left").appendChild(menu); // Menu items btn = moveElement('#comfy-dev-save-api-button', ".cute-comfy-pop-menu", "cute-comfy-button", true); btn.innerHTML = ` Save (API)`; btn.title = "Download the current workflow in API (JSON) format."; btn = moveElement('#comfy-refresh-button', ".cute-comfy-pop-menu", "cute-comfy-button", true); btn.innerHTML = ` Refresh`; btn.title = "Refreshes metadatata (selection lists, etc) inside nodes."; btn = moveElement('#comfy-clipspace-button', ".cute-comfy-pop-menu", "cute-comfy-button", true); btn.innerHTML = ` Clip Space`; btn.title = "Inspect any images currently in clip space."; btn = moveElement('#comfy-load-default-button', ".cute-comfy-pop-menu", "cute-comfy-button", true); btn.innerHTML = ` Load Default`; btn.title = "Loads the default workflow."; // Append the menu button btn = document.createElement("button"); btn.classList.add("cute-comfy-button"); btn.innerHTML = ``; document.querySelector(".cute-comfy-top-bar-left").appendChild(btn); // When the button is clicked, toggle the visibility of the .cute-comfy-pop-menu btn.addEventListener("click", (e) => { let menu = document.querySelector(".cute-comfy-pop-menu"); if (menu.style.display == "none") { menu.style.display = "flex"; } else { menu.style.display = "none"; } }); // When any buttons inside .cute-comfy-pop-menu are clicked, hide the menu document.querySelectorAll(".cute-comfy-pop-menu button").forEach((btn) => { btn.addEventListener("click", (e) => { document.querySelector(".cute-comfy-pop-menu").style.display = "none"; }); }); var list = document.querySelectorAll(".comfy-list"); for (let i = 0; i < list.length; i++) { list[i].removeAttribute("style"); list[i].classList.add("cute-comfy-list"); } var spacer = document.createElement('div'); spacer.classList.add('cute-comfy-spacer'); document.querySelectorAll('.cute-comfy-list')[1].after(spacer); function applyMutableChanges(mutations, observer, selector) { observer.disconnect(); observer.takeRecords(); // Stop adding inline styling to the menu let menu = document.querySelector(".cute-comfy-menu"); if (menu.hasAttribute("style")) { menu.removeAttribute("style"); } // Handle "refreshes" of the running/pending queues var headers = document.querySelectorAll(".cute-comfy-list h4"); for (let i = 0; i < headers.length; i++) { if (headers[i].innerHTML.includes("Running")) { headers[i].innerHTML = "Queue"; } else if (headers[i].innerHTML.includes("Pending")) { headers[i].style.display = "none"; } } var buttonGroups = document.querySelectorAll(".cute-comfy-list .comfy-list-actions button"); for (let i = 0; i < buttonGroups.length; i++) { if (buttonGroups[i].innerHTML.includes("Clear Queue")) { buttonGroups[i].innerHTML = ''; buttonGroups[i].title = "Clear the queue"; buttonGroups[i].classList.add("cute-queue-button"); } if (buttonGroups[i].innerHTML.includes("Clear History")) { buttonGroups[i].innerHTML = ''; buttonGroups[i].title = "Clear your history"; buttonGroups[i].classList.add("cute-queue-button"); } else if (buttonGroups[i].innerHTML.includes("Refresh")) { buttonGroups[i].innerHTML = ''; buttonGroups[i].title = "Refresh this list"; buttonGroups[i].classList.add("cute-queue-button"); } } // If we have some list items, then hook up an observer to watch for changes if (document.querySelectorAll(".cute-comfy-list .comfy-list-items > div").length) { var firstItem = document.querySelector(".cute-comfy-list .comfy-list-items:first-of-type > div:first-child"); // Append the spinner if it's not already there if (firstItem.querySelectorAll("svg").length == 0 && firstItem.querySelectorAll("i").length == 0) { var ic = document.createElement("i"); ic.classList.add("fas"); ic.classList.add("fa-lg"); ic.classList.add("fa-spinner"); ic.classList.add("fa-spin-pulse"); firstItem.appendChild(ic); } var listItems = document.querySelectorAll(".cute-comfy-list .comfy-list-items > div"); for (let i = 0; i < listItems.length; i++) { var el = listItems[i]; // If this element does not contain any span children if (el.querySelectorAll("span").length == 0) { setInnerText(el, getInnerText(el).replace(":", "")); // Wrap the inner text of the element in a span without affecting its children var span = document.createElement("span"); span.innerHTML = getInnerText(el); setInnerText(el, ""); el.appendChild(span); } var btns = el.querySelectorAll("button"); for (let j = 0; j < btns.length; j++) { btns[j].classList.add("cute-queue-button"); if (btns[j].innerText.includes("Load")) { // Set the inner HTML to an icon of an undo button btns[j].innerHTML = ``; btns[j].title = "Load the workflow state from this run"; } if (btns[j].innerText.includes("Cancel")) { // Set the inner HTML to an icon of a stop button btns[j].innerHTML = ``; btns[j].title = "Stop this run"; } if (btns[j].innerText.includes("Delete")) { // Set the inner HTML to an icon of a trash can btns[j].innerHTML = ``; btns[j].title = "Cancel this queued item"; } } } } // Start observing again observer.observe(document.querySelector(selector), { childList: true, subtree: true }); } var observer1 = new MutationObserver((m, o) => applyMutableChanges(m, o, "#cute-comfy")); var observer2 = new MutationObserver((m, o) => applyMutableChanges(m, o, ".cute-comfy-menu")); observer1.observe(document.getElementById('cute-comfy'), { childList: true, subtree: true }); observer2.observe(document.querySelector('.cute-comfy-menu'), { childList: true, subtree: true }); console.log("🟣 ALL DONE! ^_^"); console.groupEnd(); } // Function to get the inner text of an element without the text from its children // https://stackoverflow.com/a/5002619 function getInnerText(element) { return element.childNodes[0].nodeValue; } // Function to update the inner text of an element without affecting its children // https://stackoverflow.com/a/5002619 function setInnerText(element, text) { element.childNodes[0].nodeValue = text; } app.registerExtension({ name: "cute.comfy", async setup(app) { await initCuteness(); }, });