Use comfyui_frontend_package pypi package to manage frontend dependency (Frontend v1.10.17) (#7021)
* Use frontend pypi package * Remove web/ * nit * nit * Update importlib logic * Remove unused gh action * Update code owners * Update codeowners * error message
58
.github/workflows/update-frontend.yml
vendored
@ -1,58 +0,0 @@
|
|||||||
name: Update Frontend Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
version:
|
|
||||||
description: "Frontend version to update to (e.g., 1.0.0)"
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-frontend:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout ComfyUI
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-python@v4
|
|
||||||
with:
|
|
||||||
python-version: '3.10'
|
|
||||||
- name: Install requirements
|
|
||||||
run: |
|
|
||||||
python -m pip install --upgrade pip
|
|
||||||
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
|
|
||||||
pip install -r requirements.txt
|
|
||||||
pip install wait-for-it
|
|
||||||
# Frontend asset will be downloaded to ComfyUI/web_custom_versions/Comfy-Org_ComfyUI_frontend/{version}
|
|
||||||
- name: Start ComfyUI server
|
|
||||||
run: |
|
|
||||||
python main.py --cpu --front-end-version Comfy-Org/ComfyUI_frontend@${{ github.event.inputs.version }} 2>&1 | tee console_output.log &
|
|
||||||
wait-for-it --service 127.0.0.1:8188 -t 30
|
|
||||||
- name: Configure Git
|
|
||||||
run: |
|
|
||||||
git config --global user.name "GitHub Action"
|
|
||||||
git config --global user.email "action@github.com"
|
|
||||||
# Replace existing frontend content with the new version and remove .js.map files
|
|
||||||
# See https://github.com/Comfy-Org/ComfyUI_frontend/issues/2145 for why we remove .js.map files
|
|
||||||
- name: Update frontend content
|
|
||||||
run: |
|
|
||||||
rm -rf web/
|
|
||||||
cp -r web_custom_versions/Comfy-Org_ComfyUI_frontend/${{ github.event.inputs.version }} web/
|
|
||||||
rm web/**/*.js.map
|
|
||||||
- name: Create Pull Request
|
|
||||||
uses: peter-evans/create-pull-request@v7
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.PR_BOT_PAT }}
|
|
||||||
commit-message: "Update frontend to v${{ github.event.inputs.version }}"
|
|
||||||
title: "Frontend Update: v${{ github.event.inputs.version }}"
|
|
||||||
body: |
|
|
||||||
Automated PR to update frontend content to version ${{ github.event.inputs.version }}
|
|
||||||
|
|
||||||
This PR was created automatically by the frontend update workflow.
|
|
||||||
branch: release-${{ github.event.inputs.version }}
|
|
||||||
base: master
|
|
||||||
labels: Frontend,dependencies
|
|
@ -11,14 +11,13 @@
|
|||||||
/notebooks/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink
|
/notebooks/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink
|
||||||
/script_examples/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink
|
/script_examples/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink
|
||||||
/.github/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink
|
/.github/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink
|
||||||
|
/requirements.txt @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink
|
||||||
|
/pyproject.toml @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink
|
||||||
|
|
||||||
# Python web server
|
# Python web server
|
||||||
/api_server/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata
|
/api_server/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata
|
||||||
/app/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata
|
/app/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata
|
||||||
/utils/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata
|
/utils/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata
|
||||||
|
|
||||||
# Frontend assets
|
|
||||||
/web/ @huchenlei @webfiltered @pythongosssss @yoland68 @robinjhuang
|
|
||||||
|
|
||||||
# Extra nodes
|
# Extra nodes
|
||||||
/comfy_extras/ @yoland68 @robinjhuang @huchenlei @pythongosssss @ltdrdata @Kosinkadink
|
/comfy_extras/ @yoland68 @robinjhuang @huchenlei @pythongosssss @ltdrdata @Kosinkadink
|
||||||
|
@ -5,6 +5,7 @@ import os
|
|||||||
import re
|
import re
|
||||||
import tempfile
|
import tempfile
|
||||||
import zipfile
|
import zipfile
|
||||||
|
import importlib
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@ -12,9 +13,18 @@ from typing import TypedDict, Optional
|
|||||||
|
|
||||||
import requests
|
import requests
|
||||||
from typing_extensions import NotRequired
|
from typing_extensions import NotRequired
|
||||||
|
|
||||||
from comfy.cli_args import DEFAULT_VERSION_STRING
|
from comfy.cli_args import DEFAULT_VERSION_STRING
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
import comfyui_frontend_package
|
||||||
|
except ImportError as e:
|
||||||
|
# TODO: Remove the check after roll out of 0.3.16
|
||||||
|
logging.error("comfyui-frontend-package is not installed. Please install the updated requirements.txt file by running: pip install -r requirements.txt")
|
||||||
|
raise e
|
||||||
|
|
||||||
|
|
||||||
REQUEST_TIMEOUT = 10 # seconds
|
REQUEST_TIMEOUT = 10 # seconds
|
||||||
|
|
||||||
|
|
||||||
@ -109,7 +119,7 @@ def download_release_asset_zip(release: Release, destination_path: str) -> None:
|
|||||||
|
|
||||||
|
|
||||||
class FrontendManager:
|
class FrontendManager:
|
||||||
DEFAULT_FRONTEND_PATH = str(Path(__file__).parents[1] / "web")
|
DEFAULT_FRONTEND_PATH = str(importlib.resources.files(comfyui_frontend_package) / "static")
|
||||||
CUSTOM_FRONTENDS_ROOT = str(Path(__file__).parents[1] / "web_custom_versions")
|
CUSTOM_FRONTENDS_ROOT = str(Path(__file__).parents[1] / "web_custom_versions")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
comfyui-frontend-package==1.10.17
|
||||||
torch
|
torch
|
||||||
torchsde
|
torchsde
|
||||||
torchvision
|
torchvision
|
||||||
|
51
web/assets/BaseViewTemplate-BTbuZf5t.js
generated
vendored
@ -1,51 +0,0 @@
|
|||||||
import { d as defineComponent, T as ref, p as onMounted, b8 as isElectron, V as nextTick, b9 as electronAPI, o as openBlock, f as createElementBlock, i as withDirectives, v as vShow, j as unref, ba as isNativeWindow, m as createBaseVNode, A as renderSlot, aj as normalizeClass } from "./index-Bv0b06LE.js";
|
|
||||||
const _hoisted_1 = { class: "flex-grow w-full flex items-center justify-center overflow-auto" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "BaseViewTemplate",
|
|
||||||
props: {
|
|
||||||
dark: { type: Boolean, default: false }
|
|
||||||
},
|
|
||||||
setup(__props) {
|
|
||||||
const props = __props;
|
|
||||||
const darkTheme = {
|
|
||||||
color: "rgba(0, 0, 0, 0)",
|
|
||||||
symbolColor: "#d4d4d4"
|
|
||||||
};
|
|
||||||
const lightTheme = {
|
|
||||||
color: "rgba(0, 0, 0, 0)",
|
|
||||||
symbolColor: "#171717"
|
|
||||||
};
|
|
||||||
const topMenuRef = ref(null);
|
|
||||||
onMounted(async () => {
|
|
||||||
if (isElectron()) {
|
|
||||||
await nextTick();
|
|
||||||
electronAPI().changeTheme({
|
|
||||||
...props.dark ? darkTheme : lightTheme,
|
|
||||||
height: topMenuRef.value.getBoundingClientRect().height
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createElementBlock("div", {
|
|
||||||
class: normalizeClass(["font-sans w-screen h-screen flex flex-col", [
|
|
||||||
props.dark ? "text-neutral-300 bg-neutral-900 dark-theme" : "text-neutral-900 bg-neutral-300"
|
|
||||||
]])
|
|
||||||
}, [
|
|
||||||
withDirectives(createBaseVNode("div", {
|
|
||||||
ref_key: "topMenuRef",
|
|
||||||
ref: topMenuRef,
|
|
||||||
class: "app-drag w-full h-[var(--comfy-topbar-height)]"
|
|
||||||
}, null, 512), [
|
|
||||||
[vShow, unref(isNativeWindow)()]
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
renderSlot(_ctx.$slots, "default")
|
|
||||||
])
|
|
||||||
], 2);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
export {
|
|
||||||
_sfc_main as _
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=BaseViewTemplate-BTbuZf5t.js.map
|
|
1
web/assets/CREDIT.txt
generated
vendored
@ -1 +0,0 @@
|
|||||||
Thanks to OpenArt (https://openart.ai) for providing the sorted-custom-node-map data, captured in September 2024.
|
|
19
web/assets/DesktopStartView-D9r53Bue.js
generated
vendored
@ -1,19 +0,0 @@
|
|||||||
import { d as defineComponent, o as openBlock, y as createBlock, z as withCtx, k as createVNode, j as unref, bE as script } from "./index-Bv0b06LE.js";
|
|
||||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-BTbuZf5t.js";
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "DesktopStartView",
|
|
||||||
setup(__props) {
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createBlock(_sfc_main$1, { dark: "" }, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createVNode(unref(script), { class: "m-8 w-48 h-48" })
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
export {
|
|
||||||
_sfc_main as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=DesktopStartView-D9r53Bue.js.map
|
|
58
web/assets/DesktopUpdateView-C-R0415K.js
generated
vendored
@ -1,58 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { d as defineComponent, T as ref, d8 as onUnmounted, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, j as unref, bg as t, k as createVNode, bE as script, l as script$1, b9 as electronAPI, _ as _export_sfc } from "./index-Bv0b06LE.js";
|
|
||||||
import { s as script$2 } from "./index-A_bXPJCN.js";
|
|
||||||
import { _ as _sfc_main$1 } from "./TerminalOutputDrawer-CKr7Br7O.js";
|
|
||||||
import { _ as _sfc_main$2 } from "./BaseViewTemplate-BTbuZf5t.js";
|
|
||||||
const _hoisted_1 = { class: "h-screen w-screen grid items-center justify-around overflow-y-auto" };
|
|
||||||
const _hoisted_2 = { class: "relative m-8 text-center" };
|
|
||||||
const _hoisted_3 = { class: "download-bg pi-download text-4xl font-bold" };
|
|
||||||
const _hoisted_4 = { class: "m-8" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "DesktopUpdateView",
|
|
||||||
setup(__props) {
|
|
||||||
const electron = electronAPI();
|
|
||||||
const terminalVisible = ref(false);
|
|
||||||
const toggleConsoleDrawer = /* @__PURE__ */ __name(() => {
|
|
||||||
terminalVisible.value = !terminalVisible.value;
|
|
||||||
}, "toggleConsoleDrawer");
|
|
||||||
onUnmounted(() => electron.Validation.dispose());
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createBlock(_sfc_main$2, { dark: "" }, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
createBaseVNode("div", _hoisted_2, [
|
|
||||||
createBaseVNode("h1", _hoisted_3, toDisplayString(unref(t)("desktopUpdate.title")), 1),
|
|
||||||
createBaseVNode("div", _hoisted_4, [
|
|
||||||
createBaseVNode("span", null, toDisplayString(unref(t)("desktopUpdate.description")), 1)
|
|
||||||
]),
|
|
||||||
createVNode(unref(script), { class: "m-8 w-48 h-48" }),
|
|
||||||
createVNode(unref(script$1), {
|
|
||||||
style: { "transform": "translateX(-50%)" },
|
|
||||||
class: "fixed bottom-0 left-1/2 my-8",
|
|
||||||
label: unref(t)("maintenance.consoleLogs"),
|
|
||||||
icon: "pi pi-desktop",
|
|
||||||
"icon-pos": "left",
|
|
||||||
severity: "secondary",
|
|
||||||
onClick: toggleConsoleDrawer
|
|
||||||
}, null, 8, ["label"]),
|
|
||||||
createVNode(_sfc_main$1, {
|
|
||||||
modelValue: terminalVisible.value,
|
|
||||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => terminalVisible.value = $event),
|
|
||||||
header: unref(t)("g.terminal"),
|
|
||||||
"default-message": unref(t)("desktopUpdate.terminalDefaultMessage")
|
|
||||||
}, null, 8, ["modelValue", "header", "default-message"])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
createVNode(unref(script$2))
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const DesktopUpdateView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8d77828d"]]);
|
|
||||||
export {
|
|
||||||
DesktopUpdateView as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=DesktopUpdateView-C-R0415K.js.map
|
|
20
web/assets/DesktopUpdateView-CxchaIvw.css
generated
vendored
@ -1,20 +0,0 @@
|
|||||||
|
|
||||||
.download-bg[data-v-8d77828d]::before {
|
|
||||||
position: absolute;
|
|
||||||
margin: 0px;
|
|
||||||
color: var(--p-text-muted-color);
|
|
||||||
font-family: 'primeicons';
|
|
||||||
top: -2rem;
|
|
||||||
right: 2rem;
|
|
||||||
speak: none;
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
font-variant: normal;
|
|
||||||
text-transform: none;
|
|
||||||
line-height: 1;
|
|
||||||
display: inline-block;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
opacity: 0.02;
|
|
||||||
font-size: min(14rem, 90vw);
|
|
||||||
z-index: 0
|
|
||||||
}
|
|
58
web/assets/DownloadGitView-PWqK5ke4.js
generated
vendored
@ -1,58 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { d as defineComponent, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, l as script, bi as useRouter } from "./index-Bv0b06LE.js";
|
|
||||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-BTbuZf5t.js";
|
|
||||||
const _hoisted_1 = { class: "max-w-screen-sm flex flex-col gap-8 p-8 bg-[url('/assets/images/Git-Logo-White.svg')] bg-no-repeat bg-right-top bg-origin-padding" };
|
|
||||||
const _hoisted_2 = { class: "mt-24 text-4xl font-bold text-red-500" };
|
|
||||||
const _hoisted_3 = { class: "space-y-4" };
|
|
||||||
const _hoisted_4 = { class: "text-xl" };
|
|
||||||
const _hoisted_5 = { class: "text-xl" };
|
|
||||||
const _hoisted_6 = { class: "text-m" };
|
|
||||||
const _hoisted_7 = { class: "flex gap-4 flex-row-reverse" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "DownloadGitView",
|
|
||||||
setup(__props) {
|
|
||||||
const openGitDownloads = /* @__PURE__ */ __name(() => {
|
|
||||||
window.open("https://git-scm.com/downloads/", "_blank");
|
|
||||||
}, "openGitDownloads");
|
|
||||||
const skipGit = /* @__PURE__ */ __name(() => {
|
|
||||||
console.warn("pushing");
|
|
||||||
const router = useRouter();
|
|
||||||
router.push("install");
|
|
||||||
}, "skipGit");
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createBlock(_sfc_main$1, null, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
createBaseVNode("h1", _hoisted_2, toDisplayString(_ctx.$t("downloadGit.title")), 1),
|
|
||||||
createBaseVNode("div", _hoisted_3, [
|
|
||||||
createBaseVNode("p", _hoisted_4, toDisplayString(_ctx.$t("downloadGit.message")), 1),
|
|
||||||
createBaseVNode("p", _hoisted_5, toDisplayString(_ctx.$t("downloadGit.instructions")), 1),
|
|
||||||
createBaseVNode("p", _hoisted_6, toDisplayString(_ctx.$t("downloadGit.warning")), 1)
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_7, [
|
|
||||||
createVNode(unref(script), {
|
|
||||||
label: _ctx.$t("downloadGit.gitWebsite"),
|
|
||||||
icon: "pi pi-external-link",
|
|
||||||
"icon-pos": "right",
|
|
||||||
onClick: openGitDownloads,
|
|
||||||
severity: "primary"
|
|
||||||
}, null, 8, ["label"]),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
label: _ctx.$t("downloadGit.skip"),
|
|
||||||
icon: "pi pi-exclamation-triangle",
|
|
||||||
onClick: skipGit,
|
|
||||||
severity: "secondary"
|
|
||||||
}, null, 8, ["label"])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
export {
|
|
||||||
_sfc_main as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=DownloadGitView-PWqK5ke4.js.map
|
|
182
web/assets/ExtensionPanel-Ba57xrmg.js
generated
vendored
@ -1,182 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { d as defineComponent, T as ref, dx as FilterMatchMode, dC as useExtensionStore, a as useSettingStore, p as onMounted, c as computed, o as openBlock, y as createBlock, z as withCtx, k as createVNode, dy as SearchBox, j as unref, bn as script, m as createBaseVNode, f as createElementBlock, D as renderList, E as toDisplayString, a8 as createTextVNode, F as Fragment, l as script$1, B as createCommentVNode, a5 as script$3, ay as script$4, br as script$5, dz as _sfc_main$1 } from "./index-Bv0b06LE.js";
|
|
||||||
import { g as script$2, h as script$6 } from "./index-CgMyWf7n.js";
|
|
||||||
import "./index-Dzu9WL4p.js";
|
|
||||||
const _hoisted_1 = { class: "flex justify-end" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "ExtensionPanel",
|
|
||||||
setup(__props) {
|
|
||||||
const filters = ref({
|
|
||||||
global: { value: "", matchMode: FilterMatchMode.CONTAINS }
|
|
||||||
});
|
|
||||||
const extensionStore = useExtensionStore();
|
|
||||||
const settingStore = useSettingStore();
|
|
||||||
const editingEnabledExtensions = ref({});
|
|
||||||
onMounted(() => {
|
|
||||||
extensionStore.extensions.forEach((ext) => {
|
|
||||||
editingEnabledExtensions.value[ext.name] = extensionStore.isExtensionEnabled(ext.name);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
const changedExtensions = computed(() => {
|
|
||||||
return extensionStore.extensions.filter(
|
|
||||||
(ext) => editingEnabledExtensions.value[ext.name] !== extensionStore.isExtensionEnabled(ext.name)
|
|
||||||
);
|
|
||||||
});
|
|
||||||
const hasChanges = computed(() => {
|
|
||||||
return changedExtensions.value.length > 0;
|
|
||||||
});
|
|
||||||
const updateExtensionStatus = /* @__PURE__ */ __name(() => {
|
|
||||||
const editingDisabledExtensionNames = Object.entries(
|
|
||||||
editingEnabledExtensions.value
|
|
||||||
).filter(([_, enabled]) => !enabled).map(([name]) => name);
|
|
||||||
settingStore.set("Comfy.Extension.Disabled", [
|
|
||||||
...extensionStore.inactiveDisabledExtensionNames,
|
|
||||||
...editingDisabledExtensionNames
|
|
||||||
]);
|
|
||||||
}, "updateExtensionStatus");
|
|
||||||
const enableAllExtensions = /* @__PURE__ */ __name(() => {
|
|
||||||
extensionStore.extensions.forEach((ext) => {
|
|
||||||
if (extensionStore.isExtensionReadOnly(ext.name)) return;
|
|
||||||
editingEnabledExtensions.value[ext.name] = true;
|
|
||||||
});
|
|
||||||
updateExtensionStatus();
|
|
||||||
}, "enableAllExtensions");
|
|
||||||
const disableAllExtensions = /* @__PURE__ */ __name(() => {
|
|
||||||
extensionStore.extensions.forEach((ext) => {
|
|
||||||
if (extensionStore.isExtensionReadOnly(ext.name)) return;
|
|
||||||
editingEnabledExtensions.value[ext.name] = false;
|
|
||||||
});
|
|
||||||
updateExtensionStatus();
|
|
||||||
}, "disableAllExtensions");
|
|
||||||
const disableThirdPartyExtensions = /* @__PURE__ */ __name(() => {
|
|
||||||
extensionStore.extensions.forEach((ext) => {
|
|
||||||
if (extensionStore.isCoreExtension(ext.name)) return;
|
|
||||||
editingEnabledExtensions.value[ext.name] = false;
|
|
||||||
});
|
|
||||||
updateExtensionStatus();
|
|
||||||
}, "disableThirdPartyExtensions");
|
|
||||||
const applyChanges = /* @__PURE__ */ __name(() => {
|
|
||||||
window.location.reload();
|
|
||||||
}, "applyChanges");
|
|
||||||
const menu = ref();
|
|
||||||
const contextMenuItems = [
|
|
||||||
{
|
|
||||||
label: "Enable All",
|
|
||||||
icon: "pi pi-check",
|
|
||||||
command: enableAllExtensions
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "Disable All",
|
|
||||||
icon: "pi pi-times",
|
|
||||||
command: disableAllExtensions
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "Disable 3rd Party",
|
|
||||||
icon: "pi pi-times",
|
|
||||||
command: disableThirdPartyExtensions,
|
|
||||||
disabled: !extensionStore.hasThirdPartyExtensions
|
|
||||||
}
|
|
||||||
];
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createBlock(_sfc_main$1, {
|
|
||||||
value: "Extension",
|
|
||||||
class: "extension-panel"
|
|
||||||
}, {
|
|
||||||
header: withCtx(() => [
|
|
||||||
createVNode(SearchBox, {
|
|
||||||
modelValue: filters.value["global"].value,
|
|
||||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => filters.value["global"].value = $event),
|
|
||||||
placeholder: _ctx.$t("g.searchExtensions") + "..."
|
|
||||||
}, null, 8, ["modelValue", "placeholder"]),
|
|
||||||
hasChanges.value ? (openBlock(), createBlock(unref(script), {
|
|
||||||
key: 0,
|
|
||||||
severity: "info",
|
|
||||||
"pt:text": "w-full",
|
|
||||||
class: "max-h-96 overflow-y-auto"
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("ul", null, [
|
|
||||||
(openBlock(true), createElementBlock(Fragment, null, renderList(changedExtensions.value, (ext) => {
|
|
||||||
return openBlock(), createElementBlock("li", {
|
|
||||||
key: ext.name
|
|
||||||
}, [
|
|
||||||
createBaseVNode("span", null, toDisplayString(unref(extensionStore).isExtensionEnabled(ext.name) ? "[-]" : "[+]"), 1),
|
|
||||||
createTextVNode(" " + toDisplayString(ext.name), 1)
|
|
||||||
]);
|
|
||||||
}), 128))
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
createVNode(unref(script$1), {
|
|
||||||
label: _ctx.$t("g.reloadToApplyChanges"),
|
|
||||||
onClick: applyChanges,
|
|
||||||
outlined: "",
|
|
||||||
severity: "danger"
|
|
||||||
}, null, 8, ["label"])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})) : createCommentVNode("", true)
|
|
||||||
]),
|
|
||||||
default: withCtx(() => [
|
|
||||||
createVNode(unref(script$6), {
|
|
||||||
value: unref(extensionStore).extensions,
|
|
||||||
stripedRows: "",
|
|
||||||
size: "small",
|
|
||||||
filters: filters.value
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createVNode(unref(script$2), {
|
|
||||||
header: _ctx.$t("g.extensionName"),
|
|
||||||
sortable: "",
|
|
||||||
field: "name"
|
|
||||||
}, {
|
|
||||||
body: withCtx((slotProps) => [
|
|
||||||
createTextVNode(toDisplayString(slotProps.data.name) + " ", 1),
|
|
||||||
unref(extensionStore).isCoreExtension(slotProps.data.name) ? (openBlock(), createBlock(unref(script$3), {
|
|
||||||
key: 0,
|
|
||||||
value: "Core"
|
|
||||||
})) : createCommentVNode("", true)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["header"]),
|
|
||||||
createVNode(unref(script$2), { pt: {
|
|
||||||
headerCell: "flex items-center justify-end",
|
|
||||||
bodyCell: "flex items-center justify-end"
|
|
||||||
} }, {
|
|
||||||
header: withCtx(() => [
|
|
||||||
createVNode(unref(script$1), {
|
|
||||||
icon: "pi pi-ellipsis-h",
|
|
||||||
text: "",
|
|
||||||
severity: "secondary",
|
|
||||||
onClick: _cache[1] || (_cache[1] = ($event) => menu.value.show($event))
|
|
||||||
}),
|
|
||||||
createVNode(unref(script$4), {
|
|
||||||
ref_key: "menu",
|
|
||||||
ref: menu,
|
|
||||||
model: contextMenuItems
|
|
||||||
}, null, 512)
|
|
||||||
]),
|
|
||||||
body: withCtx((slotProps) => [
|
|
||||||
createVNode(unref(script$5), {
|
|
||||||
disabled: unref(extensionStore).isExtensionReadOnly(slotProps.data.name),
|
|
||||||
modelValue: editingEnabledExtensions.value[slotProps.data.name],
|
|
||||||
"onUpdate:modelValue": /* @__PURE__ */ __name(($event) => editingEnabledExtensions.value[slotProps.data.name] = $event, "onUpdate:modelValue"),
|
|
||||||
onChange: updateExtensionStatus
|
|
||||||
}, null, 8, ["disabled", "modelValue", "onUpdate:modelValue"])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["value", "filters"])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
export {
|
|
||||||
_sfc_main as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=ExtensionPanel-Ba57xrmg.js.map
|
|
4919
web/assets/GraphView-B_UDZi95.js
generated
vendored
383
web/assets/GraphView-Bo28XDd0.css
generated
vendored
@ -1,383 +0,0 @@
|
|||||||
|
|
||||||
.comfy-menu-hamburger[data-v-82120b51] {
|
|
||||||
position: fixed;
|
|
||||||
z-index: 9999;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-v-e50caa15] .p-splitter-gutter {
|
|
||||||
pointer-events: auto;
|
|
||||||
}
|
|
||||||
[data-v-e50caa15] .p-splitter-gutter:hover,[data-v-e50caa15] .p-splitter-gutter[data-p-gutter-resizing='true'] {
|
|
||||||
transition: background-color 0.2s ease 300ms;
|
|
||||||
background-color: var(--p-primary-color);
|
|
||||||
}
|
|
||||||
.side-bar-panel[data-v-e50caa15] {
|
|
||||||
background-color: var(--bg-color);
|
|
||||||
pointer-events: auto;
|
|
||||||
}
|
|
||||||
.bottom-panel[data-v-e50caa15] {
|
|
||||||
background-color: var(--bg-color);
|
|
||||||
pointer-events: auto;
|
|
||||||
}
|
|
||||||
.splitter-overlay[data-v-e50caa15] {
|
|
||||||
pointer-events: none;
|
|
||||||
border-style: none;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
.splitter-overlay-root[data-v-e50caa15] {
|
|
||||||
position: absolute;
|
|
||||||
top: 0px;
|
|
||||||
left: 0px;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
/* Set it the same as the ComfyUI menu */
|
|
||||||
/* Note: Lite-graph DOM widgets have the same z-index as the node id, so
|
|
||||||
999 should be sufficient to make sure splitter overlays on node's DOM
|
|
||||||
widgets */
|
|
||||||
z-index: 999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-buttongroup-vertical[data-v-27a9500c] {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
border-radius: var(--p-button-border-radius);
|
|
||||||
overflow: hidden;
|
|
||||||
border: 1px solid var(--p-panel-border-color);
|
|
||||||
}
|
|
||||||
.p-buttongroup-vertical .p-button[data-v-27a9500c] {
|
|
||||||
margin: 0;
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.node-tooltip[data-v-f03142eb] {
|
|
||||||
background: var(--comfy-input-bg);
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);
|
|
||||||
color: var(--input-text);
|
|
||||||
font-family: sans-serif;
|
|
||||||
left: 0;
|
|
||||||
max-width: 30vw;
|
|
||||||
padding: 4px 8px;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
transform: translate(5px, calc(-100% - 5px));
|
|
||||||
white-space: pre-wrap;
|
|
||||||
z-index: 99999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.group-title-editor.node-title-editor[data-v-12d3fd12] {
|
|
||||||
z-index: 9999;
|
|
||||||
padding: 0.25rem;
|
|
||||||
}
|
|
||||||
[data-v-12d3fd12] .editable-text {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
[data-v-12d3fd12] .editable-text input {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
/* Override the default font size */
|
|
||||||
font-size: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-v-fd0a74bd] .highlight {
|
|
||||||
background-color: var(--p-primary-color);
|
|
||||||
color: var(--p-primary-contrast-color);
|
|
||||||
font-weight: bold;
|
|
||||||
border-radius: 0.25rem;
|
|
||||||
padding: 0rem 0.125rem;
|
|
||||||
margin: -0.125rem 0.125rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.invisible-dialog-root {
|
|
||||||
width: 60%;
|
|
||||||
min-width: 24rem;
|
|
||||||
max-width: 48rem;
|
|
||||||
border: 0 !important;
|
|
||||||
background-color: transparent !important;
|
|
||||||
margin-top: 25vh;
|
|
||||||
margin-left: 400px;
|
|
||||||
}
|
|
||||||
@media all and (max-width: 768px) {
|
|
||||||
.invisible-dialog-root {
|
|
||||||
margin-left: 0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.node-search-box-dialog-mask {
|
|
||||||
align-items: flex-start !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.side-bar-button-icon {
|
|
||||||
font-size: var(--sidebar-icon-size) !important;
|
|
||||||
}
|
|
||||||
.side-bar-button-selected .side-bar-button-icon {
|
|
||||||
font-size: var(--sidebar-icon-size) !important;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.side-bar-button[data-v-6ab4daa6] {
|
|
||||||
width: var(--sidebar-width);
|
|
||||||
height: var(--sidebar-width);
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-6ab4daa6],
|
|
||||||
.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-6ab4daa6]:hover {
|
|
||||||
border-left: 4px solid var(--p-button-text-primary-color);
|
|
||||||
}
|
|
||||||
.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-6ab4daa6],
|
|
||||||
.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-6ab4daa6]:hover {
|
|
||||||
border-right: 4px solid var(--p-button-text-primary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.side-tool-bar-container[data-v-04875455] {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
width: var(--sidebar-width);
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
background-color: var(--comfy-menu-secondary-bg);
|
|
||||||
color: var(--fg-color);
|
|
||||||
box-shadow: var(--bar-shadow);
|
|
||||||
|
|
||||||
--sidebar-width: 4rem;
|
|
||||||
--sidebar-icon-size: 1.5rem;
|
|
||||||
}
|
|
||||||
.side-tool-bar-container.small-sidebar[data-v-04875455] {
|
|
||||||
--sidebar-width: 2.5rem;
|
|
||||||
--sidebar-icon-size: 1rem;
|
|
||||||
}
|
|
||||||
.side-tool-bar-end[data-v-04875455] {
|
|
||||||
align-self: flex-end;
|
|
||||||
margin-top: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.status-indicator[data-v-fd6ae3af] {
|
|
||||||
position: absolute;
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: 1.5rem;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
transform: translate(-50%, -50%)
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-v-54fadc45] .p-togglebutton {
|
|
||||||
position: relative;
|
|
||||||
flex-shrink: 0;
|
|
||||||
border-radius: 0px;
|
|
||||||
border-width: 0px;
|
|
||||||
border-right-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
background-color: transparent;
|
|
||||||
padding: 0px;
|
|
||||||
border-right-color: var(--border-color)
|
|
||||||
}
|
|
||||||
[data-v-54fadc45] .p-togglebutton::before {
|
|
||||||
display: none
|
|
||||||
}
|
|
||||||
[data-v-54fadc45] .p-togglebutton:first-child {
|
|
||||||
border-left-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-left-color: var(--border-color)
|
|
||||||
}
|
|
||||||
[data-v-54fadc45] .p-togglebutton:not(:first-child) {
|
|
||||||
border-left-width: 0px
|
|
||||||
}
|
|
||||||
[data-v-54fadc45] .p-togglebutton.p-togglebutton-checked {
|
|
||||||
height: 100%;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-bottom-color: var(--p-button-text-primary-color)
|
|
||||||
}
|
|
||||||
[data-v-54fadc45] .p-togglebutton:not(.p-togglebutton-checked) {
|
|
||||||
opacity: 0.75
|
|
||||||
}
|
|
||||||
[data-v-54fadc45] .p-togglebutton-checked .close-button,[data-v-54fadc45] .p-togglebutton:hover .close-button {
|
|
||||||
visibility: visible
|
|
||||||
}
|
|
||||||
[data-v-54fadc45] .p-togglebutton:hover .status-indicator {
|
|
||||||
display: none
|
|
||||||
}
|
|
||||||
[data-v-54fadc45] .p-togglebutton .close-button {
|
|
||||||
visibility: hidden
|
|
||||||
}
|
|
||||||
[data-v-54fadc45] .p-scrollpanel-content {
|
|
||||||
height: 100%
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Scrollbar half opacity to avoid blocking the active tab bottom border */
|
|
||||||
[data-v-54fadc45] .p-scrollpanel:hover .p-scrollpanel-bar,[data-v-54fadc45] .p-scrollpanel:active .p-scrollpanel-bar {
|
|
||||||
opacity: 0.5
|
|
||||||
}
|
|
||||||
[data-v-54fadc45] .p-selectbutton {
|
|
||||||
height: 100%;
|
|
||||||
border-radius: 0px
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-v-6ab68035] .workflow-tabs {
|
|
||||||
background-color: var(--comfy-menu-bg);
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-v-26957f1f] .p-inputtext {
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.comfyui-queue-button[data-v-91a628af] .p-splitbutton-dropdown {
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.actionbar[data-v-ebd56d51] {
|
|
||||||
pointer-events: all;
|
|
||||||
position: fixed;
|
|
||||||
z-index: 1000;
|
|
||||||
}
|
|
||||||
.actionbar.is-docked[data-v-ebd56d51] {
|
|
||||||
position: static;
|
|
||||||
border-style: none;
|
|
||||||
background-color: transparent;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
.actionbar.is-dragging[data-v-ebd56d51] {
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
[data-v-ebd56d51] .p-panel-content {
|
|
||||||
padding: 0.25rem;
|
|
||||||
}
|
|
||||||
.is-docked[data-v-ebd56d51] .p-panel-content {
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
[data-v-ebd56d51] .p-panel-header {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.drag-handle[data-v-ebd56d51] {
|
|
||||||
height: -moz-max-content;
|
|
||||||
height: max-content;
|
|
||||||
width: 0.75rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-menubar[data-v-56df69d2] .p-menubar-item-link svg {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
[data-v-56df69d2] .p-menubar-submenu.dropdown-direction-up {
|
|
||||||
top: auto;
|
|
||||||
bottom: 100%;
|
|
||||||
flex-direction: column-reverse;
|
|
||||||
}
|
|
||||||
.keybinding-tag[data-v-56df69d2] {
|
|
||||||
background: var(--p-content-hover-background);
|
|
||||||
border-color: var(--p-content-border-color);
|
|
||||||
border-style: solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
.comfyui-menu[data-v-68d3b5b9] {
|
|
||||||
width: 100vw;
|
|
||||||
height: var(--comfy-topbar-height);
|
|
||||||
background: var(--comfy-menu-bg);
|
|
||||||
color: var(--fg-color);
|
|
||||||
box-shadow: var(--bar-shadow);
|
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 0.8em;
|
|
||||||
box-sizing: border-box;
|
|
||||||
z-index: 1000;
|
|
||||||
order: 0;
|
|
||||||
grid-column: 1/-1;
|
|
||||||
}
|
|
||||||
.comfyui-menu.dropzone[data-v-68d3b5b9] {
|
|
||||||
background: var(--p-highlight-background);
|
|
||||||
}
|
|
||||||
.comfyui-menu.dropzone-active[data-v-68d3b5b9] {
|
|
||||||
background: var(--p-highlight-background-focus);
|
|
||||||
}
|
|
||||||
[data-v-68d3b5b9] .p-menubar-item-label {
|
|
||||||
line-height: revert;
|
|
||||||
}
|
|
||||||
.comfyui-logo[data-v-68d3b5b9] {
|
|
||||||
font-size: 1.2em;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
|
||||||
.comfyui-body[data-v-e89d9273] {
|
|
||||||
grid-template-columns: auto 1fr auto;
|
|
||||||
grid-template-rows: auto 1fr auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
+------------------+------------------+------------------+
|
|
||||||
| |
|
|
||||||
| .comfyui-body- |
|
|
||||||
| top |
|
|
||||||
| (spans all cols) |
|
|
||||||
| |
|
|
||||||
+------------------+------------------+------------------+
|
|
||||||
| | | |
|
|
||||||
| .comfyui-body- | #graph-canvas | .comfyui-body- |
|
|
||||||
| left | | right |
|
|
||||||
| | | |
|
|
||||||
| | | |
|
|
||||||
+------------------+------------------+------------------+
|
|
||||||
| |
|
|
||||||
| .comfyui-body- |
|
|
||||||
| bottom |
|
|
||||||
| (spans all cols) |
|
|
||||||
| |
|
|
||||||
+------------------+------------------+------------------+
|
|
||||||
*/
|
|
||||||
.comfyui-body-top[data-v-e89d9273] {
|
|
||||||
order: -5;
|
|
||||||
/* Span across all columns */
|
|
||||||
grid-column: 1/-1;
|
|
||||||
/* Position at the first row */
|
|
||||||
grid-row: 1;
|
|
||||||
/* Top menu bar dropdown needs to be above of graph canvas splitter overlay which is z-index: 999 */
|
|
||||||
/* Top menu bar z-index needs to be higher than bottom menu bar z-index as by default
|
|
||||||
pysssss's image feed is located at body-bottom, and it can overlap with the queue button, which
|
|
||||||
is located in body-top. */
|
|
||||||
z-index: 1001;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
.comfyui-body-left[data-v-e89d9273] {
|
|
||||||
order: -4;
|
|
||||||
/* Position in the first column */
|
|
||||||
grid-column: 1;
|
|
||||||
/* Position below the top element */
|
|
||||||
grid-row: 2;
|
|
||||||
z-index: 10;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
.graph-canvas-container[data-v-e89d9273] {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
order: -3;
|
|
||||||
grid-column: 2;
|
|
||||||
grid-row: 2;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
.comfyui-body-right[data-v-e89d9273] {
|
|
||||||
order: -2;
|
|
||||||
z-index: 10;
|
|
||||||
grid-column: 3;
|
|
||||||
grid-row: 2;
|
|
||||||
}
|
|
||||||
.comfyui-body-bottom[data-v-e89d9273] {
|
|
||||||
order: 4;
|
|
||||||
/* Span across all columns */
|
|
||||||
grid-column: 1/-1;
|
|
||||||
grid-row: 3;
|
|
||||||
/* Bottom menu bar dropdown needs to be above of graph canvas splitter overlay which is z-index: 999 */
|
|
||||||
z-index: 1000;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
971
web/assets/InstallView-DW9xwU_F.js
generated
vendored
@ -1,971 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { d as defineComponent, T as ref, bq as useModel, o as openBlock, f as createElementBlock, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, br as script, bl as script$1, as as withModifiers, z as withCtx, ac as script$2, I as useI18n, c as computed, aj as normalizeClass, B as createCommentVNode, a5 as script$3, a8 as createTextVNode, b9 as electronAPI, _ as _export_sfc, p as onMounted, r as resolveDirective, bk as script$4, i as withDirectives, bs as script$5, bt as script$6, l as script$7, y as createBlock, bn as script$8, bu as MigrationItems, w as watchEffect, F as Fragment, D as renderList, bv as script$9, bw as mergeModels, bx as ValidationState, X as normalizeI18nKey, N as watch, by as checkMirrorReachable, bz as _sfc_main$7, bA as isInChina, bB as mergeValidationStates, bg as t, b3 as script$a, bC as CUDA_TORCH_URL, bD as NIGHTLY_CPU_TORCH_URL, bi as useRouter, ah as toRaw } from "./index-Bv0b06LE.js";
|
|
||||||
import { s as script$b, a as script$c, b as script$d, c as script$e, d as script$f } from "./index-SeIZOWJp.js";
|
|
||||||
import { P as PYTHON_MIRROR, a as PYPI_MIRROR } from "./uvMirrors-B-HKMf6X.js";
|
|
||||||
import { _ as _sfc_main$8 } from "./BaseViewTemplate-BTbuZf5t.js";
|
|
||||||
const _hoisted_1$5 = { class: "flex flex-col gap-6 w-[600px]" };
|
|
||||||
const _hoisted_2$5 = { class: "flex flex-col gap-4" };
|
|
||||||
const _hoisted_3$5 = { class: "text-2xl font-semibold text-neutral-100" };
|
|
||||||
const _hoisted_4$5 = { class: "text-neutral-400 my-0" };
|
|
||||||
const _hoisted_5$3 = { class: "flex flex-col bg-neutral-800 p-4 rounded-lg" };
|
|
||||||
const _hoisted_6$3 = { class: "flex items-center gap-4" };
|
|
||||||
const _hoisted_7$3 = { class: "flex-1" };
|
|
||||||
const _hoisted_8$3 = { class: "text-lg font-medium text-neutral-100" };
|
|
||||||
const _hoisted_9$3 = { class: "text-sm text-neutral-400 mt-1" };
|
|
||||||
const _hoisted_10$3 = { class: "flex items-center gap-4" };
|
|
||||||
const _hoisted_11$3 = { class: "flex-1" };
|
|
||||||
const _hoisted_12$3 = { class: "text-lg font-medium text-neutral-100" };
|
|
||||||
const _hoisted_13$1 = { class: "text-sm text-neutral-400 mt-1" };
|
|
||||||
const _hoisted_14$1 = { class: "text-neutral-300" };
|
|
||||||
const _hoisted_15 = { class: "font-medium mb-2" };
|
|
||||||
const _hoisted_16 = { class: "list-disc pl-6 space-y-1" };
|
|
||||||
const _hoisted_17 = { class: "font-medium mt-4 mb-2" };
|
|
||||||
const _hoisted_18 = { class: "list-disc pl-6 space-y-1" };
|
|
||||||
const _hoisted_19 = { class: "mt-4" };
|
|
||||||
const _hoisted_20 = {
|
|
||||||
href: "https://comfy.org/privacy",
|
|
||||||
target: "_blank",
|
|
||||||
class: "text-blue-400 hover:text-blue-300 underline"
|
|
||||||
};
|
|
||||||
const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "DesktopSettingsConfiguration",
|
|
||||||
props: {
|
|
||||||
"autoUpdate": { type: Boolean, ...{ required: true } },
|
|
||||||
"autoUpdateModifiers": {},
|
|
||||||
"allowMetrics": { type: Boolean, ...{ required: true } },
|
|
||||||
"allowMetricsModifiers": {}
|
|
||||||
},
|
|
||||||
emits: ["update:autoUpdate", "update:allowMetrics"],
|
|
||||||
setup(__props) {
|
|
||||||
const showDialog = ref(false);
|
|
||||||
const autoUpdate = useModel(__props, "autoUpdate");
|
|
||||||
const allowMetrics = useModel(__props, "allowMetrics");
|
|
||||||
const showMetricsInfo = /* @__PURE__ */ __name(() => {
|
|
||||||
showDialog.value = true;
|
|
||||||
}, "showMetricsInfo");
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createElementBlock("div", _hoisted_1$5, [
|
|
||||||
createBaseVNode("div", _hoisted_2$5, [
|
|
||||||
createBaseVNode("h2", _hoisted_3$5, toDisplayString(_ctx.$t("install.desktopAppSettings")), 1),
|
|
||||||
createBaseVNode("p", _hoisted_4$5, toDisplayString(_ctx.$t("install.desktopAppSettingsDescription")), 1)
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_5$3, [
|
|
||||||
createBaseVNode("div", _hoisted_6$3, [
|
|
||||||
createBaseVNode("div", _hoisted_7$3, [
|
|
||||||
createBaseVNode("h3", _hoisted_8$3, toDisplayString(_ctx.$t("install.settings.autoUpdate")), 1),
|
|
||||||
createBaseVNode("p", _hoisted_9$3, toDisplayString(_ctx.$t("install.settings.autoUpdateDescription")), 1)
|
|
||||||
]),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
modelValue: autoUpdate.value,
|
|
||||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => autoUpdate.value = $event)
|
|
||||||
}, null, 8, ["modelValue"])
|
|
||||||
]),
|
|
||||||
createVNode(unref(script$1)),
|
|
||||||
createBaseVNode("div", _hoisted_10$3, [
|
|
||||||
createBaseVNode("div", _hoisted_11$3, [
|
|
||||||
createBaseVNode("h3", _hoisted_12$3, toDisplayString(_ctx.$t("install.settings.allowMetrics")), 1),
|
|
||||||
createBaseVNode("p", _hoisted_13$1, toDisplayString(_ctx.$t("install.settings.allowMetricsDescription")), 1),
|
|
||||||
createBaseVNode("a", {
|
|
||||||
href: "#",
|
|
||||||
class: "text-sm text-blue-400 hover:text-blue-300 mt-1 inline-block",
|
|
||||||
onClick: withModifiers(showMetricsInfo, ["prevent"])
|
|
||||||
}, toDisplayString(_ctx.$t("install.settings.learnMoreAboutData")), 1)
|
|
||||||
]),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
modelValue: allowMetrics.value,
|
|
||||||
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => allowMetrics.value = $event)
|
|
||||||
}, null, 8, ["modelValue"])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
createVNode(unref(script$2), {
|
|
||||||
visible: showDialog.value,
|
|
||||||
"onUpdate:visible": _cache[2] || (_cache[2] = ($event) => showDialog.value = $event),
|
|
||||||
modal: "",
|
|
||||||
header: _ctx.$t("install.settings.dataCollectionDialog.title")
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("div", _hoisted_14$1, [
|
|
||||||
createBaseVNode("h4", _hoisted_15, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.whatWeCollect")), 1),
|
|
||||||
createBaseVNode("ul", _hoisted_16, [
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.collect.errorReports")), 1),
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.collect.systemInfo")), 1),
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t(
|
|
||||||
"install.settings.dataCollectionDialog.collect.userJourneyEvents"
|
|
||||||
)), 1)
|
|
||||||
]),
|
|
||||||
createBaseVNode("h4", _hoisted_17, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.whatWeDoNotCollect")), 1),
|
|
||||||
createBaseVNode("ul", _hoisted_18, [
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t(
|
|
||||||
"install.settings.dataCollectionDialog.doNotCollect.personalInformation"
|
|
||||||
)), 1),
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t(
|
|
||||||
"install.settings.dataCollectionDialog.doNotCollect.workflowContents"
|
|
||||||
)), 1),
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t(
|
|
||||||
"install.settings.dataCollectionDialog.doNotCollect.fileSystemInformation"
|
|
||||||
)), 1),
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t(
|
|
||||||
"install.settings.dataCollectionDialog.doNotCollect.customNodeConfigurations"
|
|
||||||
)), 1)
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_19, [
|
|
||||||
createBaseVNode("a", _hoisted_20, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.viewFullPolicy")), 1)
|
|
||||||
])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["visible", "header"])
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const _imports_0 = "" + new URL("images/nvidia-logo.svg", import.meta.url).href;
|
|
||||||
const _imports_1 = "" + new URL("images/apple-mps-logo.png", import.meta.url).href;
|
|
||||||
const _imports_2 = "" + new URL("images/manual-configuration.svg", import.meta.url).href;
|
|
||||||
const _hoisted_1$4 = { class: "flex flex-col gap-6 w-[600px] h-[30rem] select-none" };
|
|
||||||
const _hoisted_2$4 = { class: "grow flex flex-col gap-4 text-neutral-300" };
|
|
||||||
const _hoisted_3$4 = { class: "text-2xl font-semibold text-neutral-100" };
|
|
||||||
const _hoisted_4$4 = { class: "m-1 text-neutral-400" };
|
|
||||||
const _hoisted_5$2 = {
|
|
||||||
key: 0,
|
|
||||||
class: "m-1"
|
|
||||||
};
|
|
||||||
const _hoisted_6$2 = {
|
|
||||||
key: 1,
|
|
||||||
class: "m-1"
|
|
||||||
};
|
|
||||||
const _hoisted_7$2 = {
|
|
||||||
key: 2,
|
|
||||||
class: "text-neutral-300"
|
|
||||||
};
|
|
||||||
const _hoisted_8$2 = { class: "m-1" };
|
|
||||||
const _hoisted_9$2 = { key: 3 };
|
|
||||||
const _hoisted_10$2 = { class: "m-1" };
|
|
||||||
const _hoisted_11$2 = { class: "m-1" };
|
|
||||||
const _hoisted_12$2 = {
|
|
||||||
for: "cpu-mode",
|
|
||||||
class: "select-none"
|
|
||||||
};
|
|
||||||
const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "GpuPicker",
|
|
||||||
props: {
|
|
||||||
"device": {
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
"deviceModifiers": {}
|
|
||||||
},
|
|
||||||
emits: ["update:device"],
|
|
||||||
setup(__props) {
|
|
||||||
const { t: t2 } = useI18n();
|
|
||||||
const cpuMode = computed({
|
|
||||||
get: /* @__PURE__ */ __name(() => selected.value === "cpu", "get"),
|
|
||||||
set: /* @__PURE__ */ __name((value) => {
|
|
||||||
selected.value = value ? "cpu" : null;
|
|
||||||
}, "set")
|
|
||||||
});
|
|
||||||
const selected = useModel(__props, "device");
|
|
||||||
const electron = electronAPI();
|
|
||||||
const platform = electron.getPlatform();
|
|
||||||
const pickGpu = /* @__PURE__ */ __name((value) => {
|
|
||||||
const newValue = selected.value === value ? null : value;
|
|
||||||
selected.value = newValue;
|
|
||||||
}, "pickGpu");
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createElementBlock("div", _hoisted_1$4, [
|
|
||||||
createBaseVNode("div", _hoisted_2$4, [
|
|
||||||
createBaseVNode("h2", _hoisted_3$4, toDisplayString(_ctx.$t("install.gpuSelection.selectGpu")), 1),
|
|
||||||
createBaseVNode("p", _hoisted_4$4, toDisplayString(_ctx.$t("install.gpuSelection.selectGpuDescription")) + ": ", 1),
|
|
||||||
createBaseVNode("div", {
|
|
||||||
class: normalizeClass(["flex gap-2 text-center transition-opacity", { selected: selected.value }])
|
|
||||||
}, [
|
|
||||||
unref(platform) !== "darwin" ? (openBlock(), createElementBlock("div", {
|
|
||||||
key: 0,
|
|
||||||
class: normalizeClass(["gpu-button", { selected: selected.value === "nvidia" }]),
|
|
||||||
role: "button",
|
|
||||||
onClick: _cache[0] || (_cache[0] = ($event) => pickGpu("nvidia"))
|
|
||||||
}, _cache[4] || (_cache[4] = [
|
|
||||||
createBaseVNode("img", {
|
|
||||||
class: "m-12",
|
|
||||||
alt: "NVIDIA logo",
|
|
||||||
width: "196",
|
|
||||||
height: "32",
|
|
||||||
src: _imports_0
|
|
||||||
}, null, -1)
|
|
||||||
]), 2)) : createCommentVNode("", true),
|
|
||||||
unref(platform) === "darwin" ? (openBlock(), createElementBlock("div", {
|
|
||||||
key: 1,
|
|
||||||
class: normalizeClass(["gpu-button", { selected: selected.value === "mps" }]),
|
|
||||||
role: "button",
|
|
||||||
onClick: _cache[1] || (_cache[1] = ($event) => pickGpu("mps"))
|
|
||||||
}, _cache[5] || (_cache[5] = [
|
|
||||||
createBaseVNode("img", {
|
|
||||||
class: "rounded-lg hover-brighten",
|
|
||||||
alt: "Apple Metal Performance Shaders Logo",
|
|
||||||
width: "292",
|
|
||||||
ratio: "",
|
|
||||||
src: _imports_1
|
|
||||||
}, null, -1)
|
|
||||||
]), 2)) : createCommentVNode("", true),
|
|
||||||
createBaseVNode("div", {
|
|
||||||
class: normalizeClass(["gpu-button", { selected: selected.value === "unsupported" }]),
|
|
||||||
role: "button",
|
|
||||||
onClick: _cache[2] || (_cache[2] = ($event) => pickGpu("unsupported"))
|
|
||||||
}, _cache[6] || (_cache[6] = [
|
|
||||||
createBaseVNode("img", {
|
|
||||||
class: "m-12",
|
|
||||||
alt: "Manual configuration",
|
|
||||||
width: "196",
|
|
||||||
src: _imports_2
|
|
||||||
}, null, -1)
|
|
||||||
]), 2)
|
|
||||||
], 2),
|
|
||||||
selected.value === "nvidia" ? (openBlock(), createElementBlock("p", _hoisted_5$2, [
|
|
||||||
createVNode(unref(script$3), {
|
|
||||||
icon: "pi pi-check",
|
|
||||||
severity: "success",
|
|
||||||
value: "CUDA"
|
|
||||||
}),
|
|
||||||
createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.nvidiaDescription")), 1)
|
|
||||||
])) : createCommentVNode("", true),
|
|
||||||
selected.value === "mps" ? (openBlock(), createElementBlock("p", _hoisted_6$2, [
|
|
||||||
createVNode(unref(script$3), {
|
|
||||||
icon: "pi pi-check",
|
|
||||||
severity: "success",
|
|
||||||
value: "MPS"
|
|
||||||
}),
|
|
||||||
createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.mpsDescription")), 1)
|
|
||||||
])) : createCommentVNode("", true),
|
|
||||||
selected.value === "unsupported" ? (openBlock(), createElementBlock("div", _hoisted_7$2, [
|
|
||||||
createBaseVNode("p", _hoisted_8$2, [
|
|
||||||
createVNode(unref(script$3), {
|
|
||||||
icon: "pi pi-exclamation-triangle",
|
|
||||||
severity: "warn",
|
|
||||||
value: unref(t2)("icon.exclamation-triangle")
|
|
||||||
}, null, 8, ["value"]),
|
|
||||||
createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.customSkipsPython")), 1)
|
|
||||||
]),
|
|
||||||
createBaseVNode("ul", null, [
|
|
||||||
createBaseVNode("li", null, [
|
|
||||||
createBaseVNode("strong", null, toDisplayString(_ctx.$t("install.gpuSelection.customComfyNeedsPython")), 1)
|
|
||||||
]),
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customManualVenv")), 1),
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customInstallRequirements")), 1),
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customMayNotWork")), 1)
|
|
||||||
])
|
|
||||||
])) : createCommentVNode("", true),
|
|
||||||
selected.value === "cpu" ? (openBlock(), createElementBlock("div", _hoisted_9$2, [
|
|
||||||
createBaseVNode("p", _hoisted_10$2, [
|
|
||||||
createVNode(unref(script$3), {
|
|
||||||
icon: "pi pi-exclamation-triangle",
|
|
||||||
severity: "warn",
|
|
||||||
value: unref(t2)("icon.exclamation-triangle")
|
|
||||||
}, null, 8, ["value"]),
|
|
||||||
createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.cpuModeDescription")), 1)
|
|
||||||
]),
|
|
||||||
createBaseVNode("p", _hoisted_11$2, toDisplayString(_ctx.$t("install.gpuSelection.cpuModeDescription2")), 1)
|
|
||||||
])) : createCommentVNode("", true)
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", {
|
|
||||||
class: normalizeClass(["transition-opacity flex gap-3 h-0", {
|
|
||||||
"opacity-40": selected.value && selected.value !== "cpu"
|
|
||||||
}])
|
|
||||||
}, [
|
|
||||||
createVNode(unref(script), {
|
|
||||||
modelValue: cpuMode.value,
|
|
||||||
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => cpuMode.value = $event),
|
|
||||||
inputId: "cpu-mode",
|
|
||||||
class: "-translate-y-40"
|
|
||||||
}, null, 8, ["modelValue"]),
|
|
||||||
createBaseVNode("label", _hoisted_12$2, toDisplayString(_ctx.$t("install.gpuSelection.enableCpuMode")), 1)
|
|
||||||
], 2)
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const GpuPicker = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-79125ff6"]]);
|
|
||||||
const _hoisted_1$3 = { class: "flex flex-col gap-6 w-[600px]" };
|
|
||||||
const _hoisted_2$3 = { class: "flex flex-col gap-4" };
|
|
||||||
const _hoisted_3$3 = { class: "text-2xl font-semibold text-neutral-100" };
|
|
||||||
const _hoisted_4$3 = { class: "text-neutral-400 my-0" };
|
|
||||||
const _hoisted_5$1 = { class: "flex gap-2" };
|
|
||||||
const _hoisted_6$1 = { class: "bg-neutral-800 p-4 rounded-lg" };
|
|
||||||
const _hoisted_7$1 = { class: "text-lg font-medium mt-0 mb-3 text-neutral-100" };
|
|
||||||
const _hoisted_8$1 = { class: "flex flex-col gap-2" };
|
|
||||||
const _hoisted_9$1 = { class: "flex items-center gap-2" };
|
|
||||||
const _hoisted_10$1 = { class: "text-neutral-200" };
|
|
||||||
const _hoisted_11$1 = { class: "pi pi-info-circle" };
|
|
||||||
const _hoisted_12$1 = { class: "flex items-center gap-2" };
|
|
||||||
const _hoisted_13 = { class: "text-neutral-200" };
|
|
||||||
const _hoisted_14 = { class: "pi pi-info-circle" };
|
|
||||||
const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "InstallLocationPicker",
|
|
||||||
props: {
|
|
||||||
"installPath": { required: true },
|
|
||||||
"installPathModifiers": {},
|
|
||||||
"pathError": { required: true },
|
|
||||||
"pathErrorModifiers": {}
|
|
||||||
},
|
|
||||||
emits: ["update:installPath", "update:pathError"],
|
|
||||||
setup(__props) {
|
|
||||||
const { t: t2 } = useI18n();
|
|
||||||
const installPath = useModel(__props, "installPath");
|
|
||||||
const pathError = useModel(__props, "pathError");
|
|
||||||
const pathExists = ref(false);
|
|
||||||
const appData = ref("");
|
|
||||||
const appPath = ref("");
|
|
||||||
const inputTouched = ref(false);
|
|
||||||
const electron = electronAPI();
|
|
||||||
onMounted(async () => {
|
|
||||||
const paths = await electron.getSystemPaths();
|
|
||||||
appData.value = paths.appData;
|
|
||||||
appPath.value = paths.appPath;
|
|
||||||
installPath.value = paths.defaultInstallPath;
|
|
||||||
await validatePath(paths.defaultInstallPath);
|
|
||||||
});
|
|
||||||
const validatePath = /* @__PURE__ */ __name(async (path) => {
|
|
||||||
try {
|
|
||||||
pathError.value = "";
|
|
||||||
pathExists.value = false;
|
|
||||||
const validation = await electron.validateInstallPath(path);
|
|
||||||
if (!validation.isValid) {
|
|
||||||
const errors = [];
|
|
||||||
if (validation.cannotWrite) errors.push(t2("install.cannotWrite"));
|
|
||||||
if (validation.freeSpace < validation.requiredSpace) {
|
|
||||||
const requiredGB = validation.requiredSpace / 1024 / 1024 / 1024;
|
|
||||||
errors.push(`${t2("install.insufficientFreeSpace")}: ${requiredGB} GB`);
|
|
||||||
}
|
|
||||||
if (validation.parentMissing) errors.push(t2("install.parentMissing"));
|
|
||||||
if (validation.error)
|
|
||||||
errors.push(`${t2("install.unhandledError")}: ${validation.error}`);
|
|
||||||
pathError.value = errors.join("\n");
|
|
||||||
}
|
|
||||||
if (validation.exists) pathExists.value = true;
|
|
||||||
} catch (error) {
|
|
||||||
pathError.value = t2("install.pathValidationFailed");
|
|
||||||
}
|
|
||||||
}, "validatePath");
|
|
||||||
const browsePath = /* @__PURE__ */ __name(async () => {
|
|
||||||
try {
|
|
||||||
const result = await electron.showDirectoryPicker();
|
|
||||||
if (result) {
|
|
||||||
installPath.value = result;
|
|
||||||
await validatePath(result);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
pathError.value = t2("install.failedToSelectDirectory");
|
|
||||||
}
|
|
||||||
}, "browsePath");
|
|
||||||
const onFocus = /* @__PURE__ */ __name(() => {
|
|
||||||
if (!inputTouched.value) {
|
|
||||||
inputTouched.value = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
validatePath(installPath.value);
|
|
||||||
}, "onFocus");
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
const _directive_tooltip = resolveDirective("tooltip");
|
|
||||||
return openBlock(), createElementBlock("div", _hoisted_1$3, [
|
|
||||||
createBaseVNode("div", _hoisted_2$3, [
|
|
||||||
createBaseVNode("h2", _hoisted_3$3, toDisplayString(_ctx.$t("install.chooseInstallationLocation")), 1),
|
|
||||||
createBaseVNode("p", _hoisted_4$3, toDisplayString(_ctx.$t("install.installLocationDescription")), 1),
|
|
||||||
createBaseVNode("div", _hoisted_5$1, [
|
|
||||||
createVNode(unref(script$6), { class: "flex-1" }, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createVNode(unref(script$4), {
|
|
||||||
modelValue: installPath.value,
|
|
||||||
"onUpdate:modelValue": [
|
|
||||||
_cache[0] || (_cache[0] = ($event) => installPath.value = $event),
|
|
||||||
validatePath
|
|
||||||
],
|
|
||||||
class: normalizeClass(["w-full", { "p-invalid": pathError.value }]),
|
|
||||||
onFocus
|
|
||||||
}, null, 8, ["modelValue", "class"]),
|
|
||||||
withDirectives(createVNode(unref(script$5), { class: "pi pi-info-circle" }, null, 512), [
|
|
||||||
[
|
|
||||||
_directive_tooltip,
|
|
||||||
_ctx.$t("install.installLocationTooltip"),
|
|
||||||
void 0,
|
|
||||||
{ top: true }
|
|
||||||
]
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}),
|
|
||||||
createVNode(unref(script$7), {
|
|
||||||
icon: "pi pi-folder",
|
|
||||||
onClick: browsePath,
|
|
||||||
class: "w-12"
|
|
||||||
})
|
|
||||||
]),
|
|
||||||
pathError.value ? (openBlock(), createBlock(unref(script$8), {
|
|
||||||
key: 0,
|
|
||||||
severity: "error",
|
|
||||||
class: "whitespace-pre-line"
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createTextVNode(toDisplayString(pathError.value), 1)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})) : createCommentVNode("", true),
|
|
||||||
pathExists.value ? (openBlock(), createBlock(unref(script$8), {
|
|
||||||
key: 1,
|
|
||||||
severity: "warn"
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createTextVNode(toDisplayString(_ctx.$t("install.pathExists")), 1)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})) : createCommentVNode("", true)
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_6$1, [
|
|
||||||
createBaseVNode("h3", _hoisted_7$1, toDisplayString(_ctx.$t("install.systemLocations")), 1),
|
|
||||||
createBaseVNode("div", _hoisted_8$1, [
|
|
||||||
createBaseVNode("div", _hoisted_9$1, [
|
|
||||||
_cache[1] || (_cache[1] = createBaseVNode("i", { class: "pi pi-folder text-neutral-400" }, null, -1)),
|
|
||||||
_cache[2] || (_cache[2] = createBaseVNode("span", { class: "text-neutral-400" }, "App Data:", -1)),
|
|
||||||
createBaseVNode("span", _hoisted_10$1, toDisplayString(appData.value), 1),
|
|
||||||
withDirectives(createBaseVNode("span", _hoisted_11$1, null, 512), [
|
|
||||||
[_directive_tooltip, _ctx.$t("install.appDataLocationTooltip")]
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_12$1, [
|
|
||||||
_cache[3] || (_cache[3] = createBaseVNode("i", { class: "pi pi-desktop text-neutral-400" }, null, -1)),
|
|
||||||
_cache[4] || (_cache[4] = createBaseVNode("span", { class: "text-neutral-400" }, "App Path:", -1)),
|
|
||||||
createBaseVNode("span", _hoisted_13, toDisplayString(appPath.value), 1),
|
|
||||||
withDirectives(createBaseVNode("span", _hoisted_14, null, 512), [
|
|
||||||
[_directive_tooltip, _ctx.$t("install.appPathLocationTooltip")]
|
|
||||||
])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const _hoisted_1$2 = { class: "flex flex-col gap-6 w-[600px]" };
|
|
||||||
const _hoisted_2$2 = { class: "flex flex-col gap-4" };
|
|
||||||
const _hoisted_3$2 = { class: "text-2xl font-semibold text-neutral-100" };
|
|
||||||
const _hoisted_4$2 = { class: "text-neutral-400 my-0" };
|
|
||||||
const _hoisted_5 = { class: "flex gap-2" };
|
|
||||||
const _hoisted_6 = {
|
|
||||||
key: 0,
|
|
||||||
class: "flex flex-col gap-4 bg-neutral-800 p-4 rounded-lg"
|
|
||||||
};
|
|
||||||
const _hoisted_7 = { class: "text-lg mt-0 font-medium text-neutral-100" };
|
|
||||||
const _hoisted_8 = { class: "flex flex-col gap-3" };
|
|
||||||
const _hoisted_9 = ["onClick"];
|
|
||||||
const _hoisted_10 = ["for"];
|
|
||||||
const _hoisted_11 = { class: "text-sm text-neutral-400 my-1" };
|
|
||||||
const _hoisted_12 = {
|
|
||||||
key: 1,
|
|
||||||
class: "text-neutral-400 italic"
|
|
||||||
};
|
|
||||||
const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "MigrationPicker",
|
|
||||||
props: {
|
|
||||||
"sourcePath": { required: false },
|
|
||||||
"sourcePathModifiers": {},
|
|
||||||
"migrationItemIds": {
|
|
||||||
required: false
|
|
||||||
},
|
|
||||||
"migrationItemIdsModifiers": {}
|
|
||||||
},
|
|
||||||
emits: ["update:sourcePath", "update:migrationItemIds"],
|
|
||||||
setup(__props) {
|
|
||||||
const { t: t2 } = useI18n();
|
|
||||||
const electron = electronAPI();
|
|
||||||
const sourcePath = useModel(__props, "sourcePath");
|
|
||||||
const migrationItemIds = useModel(__props, "migrationItemIds");
|
|
||||||
const migrationItems = ref(
|
|
||||||
MigrationItems.map((item) => ({
|
|
||||||
...item,
|
|
||||||
selected: true
|
|
||||||
}))
|
|
||||||
);
|
|
||||||
const pathError = ref("");
|
|
||||||
const isValidSource = computed(
|
|
||||||
() => sourcePath.value !== "" && pathError.value === ""
|
|
||||||
);
|
|
||||||
const validateSource = /* @__PURE__ */ __name(async (sourcePath2) => {
|
|
||||||
if (!sourcePath2) {
|
|
||||||
pathError.value = "";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
pathError.value = "";
|
|
||||||
const validation = await electron.validateComfyUISource(sourcePath2);
|
|
||||||
if (!validation.isValid) pathError.value = validation.error;
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
pathError.value = t2("install.pathValidationFailed");
|
|
||||||
}
|
|
||||||
}, "validateSource");
|
|
||||||
const browsePath = /* @__PURE__ */ __name(async () => {
|
|
||||||
try {
|
|
||||||
const result = await electron.showDirectoryPicker();
|
|
||||||
if (result) {
|
|
||||||
sourcePath.value = result;
|
|
||||||
await validateSource(result);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
pathError.value = t2("install.failedToSelectDirectory");
|
|
||||||
}
|
|
||||||
}, "browsePath");
|
|
||||||
watchEffect(() => {
|
|
||||||
migrationItemIds.value = migrationItems.value.filter((item) => item.selected).map((item) => item.id);
|
|
||||||
});
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createElementBlock("div", _hoisted_1$2, [
|
|
||||||
createBaseVNode("div", _hoisted_2$2, [
|
|
||||||
createBaseVNode("h2", _hoisted_3$2, toDisplayString(_ctx.$t("install.migrateFromExistingInstallation")), 1),
|
|
||||||
createBaseVNode("p", _hoisted_4$2, toDisplayString(_ctx.$t("install.migrationSourcePathDescription")), 1),
|
|
||||||
createBaseVNode("div", _hoisted_5, [
|
|
||||||
createVNode(unref(script$4), {
|
|
||||||
modelValue: sourcePath.value,
|
|
||||||
"onUpdate:modelValue": [
|
|
||||||
_cache[0] || (_cache[0] = ($event) => sourcePath.value = $event),
|
|
||||||
validateSource
|
|
||||||
],
|
|
||||||
placeholder: "Select existing ComfyUI installation (optional)",
|
|
||||||
class: normalizeClass(["flex-1", { "p-invalid": pathError.value }])
|
|
||||||
}, null, 8, ["modelValue", "class"]),
|
|
||||||
createVNode(unref(script$7), {
|
|
||||||
icon: "pi pi-folder",
|
|
||||||
onClick: browsePath,
|
|
||||||
class: "w-12"
|
|
||||||
})
|
|
||||||
]),
|
|
||||||
pathError.value ? (openBlock(), createBlock(unref(script$8), {
|
|
||||||
key: 0,
|
|
||||||
severity: "error"
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createTextVNode(toDisplayString(pathError.value), 1)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})) : createCommentVNode("", true)
|
|
||||||
]),
|
|
||||||
isValidSource.value ? (openBlock(), createElementBlock("div", _hoisted_6, [
|
|
||||||
createBaseVNode("h3", _hoisted_7, toDisplayString(_ctx.$t("install.selectItemsToMigrate")), 1),
|
|
||||||
createBaseVNode("div", _hoisted_8, [
|
|
||||||
(openBlock(true), createElementBlock(Fragment, null, renderList(migrationItems.value, (item) => {
|
|
||||||
return openBlock(), createElementBlock("div", {
|
|
||||||
key: item.id,
|
|
||||||
class: "flex items-center gap-3 p-2 hover:bg-neutral-700 rounded",
|
|
||||||
onClick: /* @__PURE__ */ __name(($event) => item.selected = !item.selected, "onClick")
|
|
||||||
}, [
|
|
||||||
createVNode(unref(script$9), {
|
|
||||||
modelValue: item.selected,
|
|
||||||
"onUpdate:modelValue": /* @__PURE__ */ __name(($event) => item.selected = $event, "onUpdate:modelValue"),
|
|
||||||
inputId: item.id,
|
|
||||||
binary: true,
|
|
||||||
onClick: _cache[1] || (_cache[1] = withModifiers(() => {
|
|
||||||
}, ["stop"]))
|
|
||||||
}, null, 8, ["modelValue", "onUpdate:modelValue", "inputId"]),
|
|
||||||
createBaseVNode("div", null, [
|
|
||||||
createBaseVNode("label", {
|
|
||||||
for: item.id,
|
|
||||||
class: "text-neutral-200 font-medium"
|
|
||||||
}, toDisplayString(item.label), 9, _hoisted_10),
|
|
||||||
createBaseVNode("p", _hoisted_11, toDisplayString(item.description), 1)
|
|
||||||
])
|
|
||||||
], 8, _hoisted_9);
|
|
||||||
}), 128))
|
|
||||||
])
|
|
||||||
])) : (openBlock(), createElementBlock("div", _hoisted_12, toDisplayString(_ctx.$t("install.migrationOptional")), 1))
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const _hoisted_1$1 = { class: "flex flex-col items-center gap-4" };
|
|
||||||
const _hoisted_2$1 = { class: "w-full" };
|
|
||||||
const _hoisted_3$1 = { class: "text-lg font-medium text-neutral-100" };
|
|
||||||
const _hoisted_4$1 = { class: "text-sm text-neutral-400 mt-1" };
|
|
||||||
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "MirrorItem",
|
|
||||||
props: /* @__PURE__ */ mergeModels({
|
|
||||||
item: {}
|
|
||||||
}, {
|
|
||||||
"modelValue": { required: true },
|
|
||||||
"modelModifiers": {}
|
|
||||||
}),
|
|
||||||
emits: /* @__PURE__ */ mergeModels(["state-change"], ["update:modelValue"]),
|
|
||||||
setup(__props, { emit: __emit }) {
|
|
||||||
const emit = __emit;
|
|
||||||
const modelValue = useModel(__props, "modelValue");
|
|
||||||
const validationState = ref(ValidationState.IDLE);
|
|
||||||
const normalizedSettingId = computed(() => {
|
|
||||||
return normalizeI18nKey(__props.item.settingId);
|
|
||||||
});
|
|
||||||
onMounted(() => {
|
|
||||||
modelValue.value = __props.item.mirror;
|
|
||||||
});
|
|
||||||
watch(validationState, (newState) => {
|
|
||||||
emit("state-change", newState);
|
|
||||||
if (newState === ValidationState.INVALID && modelValue.value === __props.item.mirror) {
|
|
||||||
modelValue.value = __props.item.fallbackMirror;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createElementBlock("div", _hoisted_1$1, [
|
|
||||||
createBaseVNode("div", _hoisted_2$1, [
|
|
||||||
createBaseVNode("h3", _hoisted_3$1, toDisplayString(_ctx.$t(`settings.${normalizedSettingId.value}.name`)), 1),
|
|
||||||
createBaseVNode("p", _hoisted_4$1, toDisplayString(_ctx.$t(`settings.${normalizedSettingId.value}.tooltip`)), 1)
|
|
||||||
]),
|
|
||||||
createVNode(_sfc_main$7, {
|
|
||||||
modelValue: modelValue.value,
|
|
||||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
||||||
"validate-url-fn": /* @__PURE__ */ __name((mirror) => unref(checkMirrorReachable)(mirror + (_ctx.item.validationPathSuffix ?? "")), "validate-url-fn"),
|
|
||||||
onStateChange: _cache[1] || (_cache[1] = ($event) => validationState.value = $event)
|
|
||||||
}, null, 8, ["modelValue", "validate-url-fn"])
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "MirrorsConfiguration",
|
|
||||||
props: /* @__PURE__ */ mergeModels({
|
|
||||||
device: {}
|
|
||||||
}, {
|
|
||||||
"pythonMirror": { required: true },
|
|
||||||
"pythonMirrorModifiers": {},
|
|
||||||
"pypiMirror": { required: true },
|
|
||||||
"pypiMirrorModifiers": {},
|
|
||||||
"torchMirror": { required: true },
|
|
||||||
"torchMirrorModifiers": {}
|
|
||||||
}),
|
|
||||||
emits: ["update:pythonMirror", "update:pypiMirror", "update:torchMirror"],
|
|
||||||
setup(__props) {
|
|
||||||
const showMirrorInputs = ref(false);
|
|
||||||
const pythonMirror = useModel(__props, "pythonMirror");
|
|
||||||
const pypiMirror = useModel(__props, "pypiMirror");
|
|
||||||
const torchMirror = useModel(__props, "torchMirror");
|
|
||||||
const getTorchMirrorItem = /* @__PURE__ */ __name((device) => {
|
|
||||||
const settingId = "Comfy-Desktop.UV.TorchInstallMirror";
|
|
||||||
switch (device) {
|
|
||||||
case "mps":
|
|
||||||
return {
|
|
||||||
settingId,
|
|
||||||
mirror: NIGHTLY_CPU_TORCH_URL,
|
|
||||||
fallbackMirror: NIGHTLY_CPU_TORCH_URL
|
|
||||||
};
|
|
||||||
case "nvidia":
|
|
||||||
return {
|
|
||||||
settingId,
|
|
||||||
mirror: CUDA_TORCH_URL,
|
|
||||||
fallbackMirror: CUDA_TORCH_URL
|
|
||||||
};
|
|
||||||
case "cpu":
|
|
||||||
default:
|
|
||||||
return {
|
|
||||||
settingId,
|
|
||||||
mirror: PYPI_MIRROR.mirror,
|
|
||||||
fallbackMirror: PYPI_MIRROR.fallbackMirror
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}, "getTorchMirrorItem");
|
|
||||||
const userIsInChina = ref(false);
|
|
||||||
onMounted(async () => {
|
|
||||||
userIsInChina.value = await isInChina();
|
|
||||||
});
|
|
||||||
const useFallbackMirror = /* @__PURE__ */ __name((mirror) => ({
|
|
||||||
...mirror,
|
|
||||||
mirror: mirror.fallbackMirror
|
|
||||||
}), "useFallbackMirror");
|
|
||||||
const mirrors = computed(
|
|
||||||
() => [
|
|
||||||
[PYTHON_MIRROR, pythonMirror],
|
|
||||||
[PYPI_MIRROR, pypiMirror],
|
|
||||||
[getTorchMirrorItem(__props.device), torchMirror]
|
|
||||||
].map(([item, modelValue]) => [
|
|
||||||
userIsInChina.value ? useFallbackMirror(item) : item,
|
|
||||||
modelValue
|
|
||||||
])
|
|
||||||
);
|
|
||||||
const validationStates = ref(
|
|
||||||
mirrors.value.map(() => ValidationState.IDLE)
|
|
||||||
);
|
|
||||||
const validationState = computed(() => {
|
|
||||||
return mergeValidationStates(validationStates.value);
|
|
||||||
});
|
|
||||||
const validationStateTooltip = computed(() => {
|
|
||||||
switch (validationState.value) {
|
|
||||||
case ValidationState.INVALID:
|
|
||||||
return t("install.settings.mirrorsUnreachable");
|
|
||||||
case ValidationState.VALID:
|
|
||||||
return t("install.settings.mirrorsReachable");
|
|
||||||
default:
|
|
||||||
return t("install.settings.checkingMirrors");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
const _directive_tooltip = resolveDirective("tooltip");
|
|
||||||
return openBlock(), createBlock(unref(script$a), {
|
|
||||||
header: _ctx.$t("install.settings.mirrorSettings"),
|
|
||||||
toggleable: "",
|
|
||||||
collapsed: !showMirrorInputs.value,
|
|
||||||
"pt:root": "bg-neutral-800 border-none w-[600px]"
|
|
||||||
}, {
|
|
||||||
icons: withCtx(() => [
|
|
||||||
withDirectives(createBaseVNode("i", {
|
|
||||||
class: normalizeClass({
|
|
||||||
"pi pi-spin pi-spinner text-neutral-400": validationState.value === unref(ValidationState).LOADING,
|
|
||||||
"pi pi-check text-green-500": validationState.value === unref(ValidationState).VALID,
|
|
||||||
"pi pi-times text-red-500": validationState.value === unref(ValidationState).INVALID
|
|
||||||
})
|
|
||||||
}, null, 2), [
|
|
||||||
[_directive_tooltip, validationStateTooltip.value]
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
default: withCtx(() => [
|
|
||||||
(openBlock(true), createElementBlock(Fragment, null, renderList(mirrors.value, ([item, modelValue], index) => {
|
|
||||||
return openBlock(), createElementBlock(Fragment, {
|
|
||||||
key: item.settingId + item.mirror
|
|
||||||
}, [
|
|
||||||
index > 0 ? (openBlock(), createBlock(unref(script$1), { key: 0 })) : createCommentVNode("", true),
|
|
||||||
createVNode(_sfc_main$2, {
|
|
||||||
item,
|
|
||||||
modelValue: modelValue.value,
|
|
||||||
"onUpdate:modelValue": /* @__PURE__ */ __name(($event) => modelValue.value = $event, "onUpdate:modelValue"),
|
|
||||||
onStateChange: /* @__PURE__ */ __name(($event) => validationStates.value[index] = $event, "onStateChange")
|
|
||||||
}, null, 8, ["item", "modelValue", "onUpdate:modelValue", "onStateChange"])
|
|
||||||
], 64);
|
|
||||||
}), 128))
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["header", "collapsed"]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const _hoisted_1 = { class: "flex pt-6 justify-end" };
|
|
||||||
const _hoisted_2 = { class: "flex pt-6 justify-between" };
|
|
||||||
const _hoisted_3 = { class: "flex pt-6 justify-between" };
|
|
||||||
const _hoisted_4 = { class: "flex mt-6 justify-between" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "InstallView",
|
|
||||||
setup(__props) {
|
|
||||||
const device = ref(null);
|
|
||||||
const installPath = ref("");
|
|
||||||
const pathError = ref("");
|
|
||||||
const migrationSourcePath = ref("");
|
|
||||||
const migrationItemIds = ref([]);
|
|
||||||
const autoUpdate = ref(true);
|
|
||||||
const allowMetrics = ref(true);
|
|
||||||
const pythonMirror = ref("");
|
|
||||||
const pypiMirror = ref("");
|
|
||||||
const torchMirror = ref("");
|
|
||||||
const highestStep = ref(0);
|
|
||||||
const handleStepChange = /* @__PURE__ */ __name((value) => {
|
|
||||||
setHighestStep(value);
|
|
||||||
electronAPI().Events.trackEvent("install_stepper_change", {
|
|
||||||
step: value
|
|
||||||
});
|
|
||||||
}, "handleStepChange");
|
|
||||||
const setHighestStep = /* @__PURE__ */ __name((value) => {
|
|
||||||
const int = typeof value === "number" ? value : parseInt(value, 10);
|
|
||||||
if (!isNaN(int) && int > highestStep.value) highestStep.value = int;
|
|
||||||
}, "setHighestStep");
|
|
||||||
const hasError = computed(() => pathError.value !== "");
|
|
||||||
const noGpu = computed(() => typeof device.value !== "string");
|
|
||||||
const electron = electronAPI();
|
|
||||||
const router = useRouter();
|
|
||||||
const install = /* @__PURE__ */ __name(() => {
|
|
||||||
const options = {
|
|
||||||
installPath: installPath.value,
|
|
||||||
autoUpdate: autoUpdate.value,
|
|
||||||
allowMetrics: allowMetrics.value,
|
|
||||||
migrationSourcePath: migrationSourcePath.value,
|
|
||||||
migrationItemIds: toRaw(migrationItemIds.value),
|
|
||||||
pythonMirror: pythonMirror.value,
|
|
||||||
pypiMirror: pypiMirror.value,
|
|
||||||
torchMirror: torchMirror.value,
|
|
||||||
device: device.value
|
|
||||||
};
|
|
||||||
electron.installComfyUI(options);
|
|
||||||
const nextPage = options.device === "unsupported" ? "/manual-configuration" : "/server-start";
|
|
||||||
router.push(nextPage);
|
|
||||||
}, "install");
|
|
||||||
onMounted(async () => {
|
|
||||||
if (!electron) return;
|
|
||||||
const detectedGpu = await electron.Config.getDetectedGpu();
|
|
||||||
if (detectedGpu === "mps" || detectedGpu === "nvidia") {
|
|
||||||
device.value = detectedGpu;
|
|
||||||
}
|
|
||||||
electronAPI().Events.trackEvent("install_stepper_change", {
|
|
||||||
step: "0",
|
|
||||||
gpu: detectedGpu
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createBlock(_sfc_main$8, { dark: "" }, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createVNode(unref(script$f), {
|
|
||||||
class: "h-full p-8 2xl:p-16",
|
|
||||||
value: "0",
|
|
||||||
"onUpdate:value": handleStepChange
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createVNode(unref(script$b), { class: "select-none" }, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createVNode(unref(script$c), { value: "0" }, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createTextVNode(toDisplayString(_ctx.$t("install.gpu")), 1)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}),
|
|
||||||
createVNode(unref(script$c), {
|
|
||||||
value: "1",
|
|
||||||
disabled: noGpu.value
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createTextVNode(toDisplayString(_ctx.$t("install.installLocation")), 1)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["disabled"]),
|
|
||||||
createVNode(unref(script$c), {
|
|
||||||
value: "2",
|
|
||||||
disabled: noGpu.value || hasError.value || highestStep.value < 1
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createTextVNode(toDisplayString(_ctx.$t("install.migration")), 1)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["disabled"]),
|
|
||||||
createVNode(unref(script$c), {
|
|
||||||
value: "3",
|
|
||||||
disabled: noGpu.value || hasError.value || highestStep.value < 2
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createTextVNode(toDisplayString(_ctx.$t("install.desktopSettings")), 1)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["disabled"])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}),
|
|
||||||
createVNode(unref(script$d), null, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createVNode(unref(script$e), { value: "0" }, {
|
|
||||||
default: withCtx(({ activateCallback }) => [
|
|
||||||
createVNode(GpuPicker, {
|
|
||||||
device: device.value,
|
|
||||||
"onUpdate:device": _cache[0] || (_cache[0] = ($event) => device.value = $event)
|
|
||||||
}, null, 8, ["device"]),
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
createVNode(unref(script$7), {
|
|
||||||
label: _ctx.$t("g.next"),
|
|
||||||
icon: "pi pi-arrow-right",
|
|
||||||
iconPos: "right",
|
|
||||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("1"), "onClick"),
|
|
||||||
disabled: typeof device.value !== "string"
|
|
||||||
}, null, 8, ["label", "onClick", "disabled"])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}),
|
|
||||||
createVNode(unref(script$e), { value: "1" }, {
|
|
||||||
default: withCtx(({ activateCallback }) => [
|
|
||||||
createVNode(_sfc_main$4, {
|
|
||||||
installPath: installPath.value,
|
|
||||||
"onUpdate:installPath": _cache[1] || (_cache[1] = ($event) => installPath.value = $event),
|
|
||||||
pathError: pathError.value,
|
|
||||||
"onUpdate:pathError": _cache[2] || (_cache[2] = ($event) => pathError.value = $event)
|
|
||||||
}, null, 8, ["installPath", "pathError"]),
|
|
||||||
createBaseVNode("div", _hoisted_2, [
|
|
||||||
createVNode(unref(script$7), {
|
|
||||||
label: _ctx.$t("g.back"),
|
|
||||||
severity: "secondary",
|
|
||||||
icon: "pi pi-arrow-left",
|
|
||||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("0"), "onClick")
|
|
||||||
}, null, 8, ["label", "onClick"]),
|
|
||||||
createVNode(unref(script$7), {
|
|
||||||
label: _ctx.$t("g.next"),
|
|
||||||
icon: "pi pi-arrow-right",
|
|
||||||
iconPos: "right",
|
|
||||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("2"), "onClick"),
|
|
||||||
disabled: pathError.value !== ""
|
|
||||||
}, null, 8, ["label", "onClick", "disabled"])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}),
|
|
||||||
createVNode(unref(script$e), { value: "2" }, {
|
|
||||||
default: withCtx(({ activateCallback }) => [
|
|
||||||
createVNode(_sfc_main$3, {
|
|
||||||
sourcePath: migrationSourcePath.value,
|
|
||||||
"onUpdate:sourcePath": _cache[3] || (_cache[3] = ($event) => migrationSourcePath.value = $event),
|
|
||||||
migrationItemIds: migrationItemIds.value,
|
|
||||||
"onUpdate:migrationItemIds": _cache[4] || (_cache[4] = ($event) => migrationItemIds.value = $event)
|
|
||||||
}, null, 8, ["sourcePath", "migrationItemIds"]),
|
|
||||||
createBaseVNode("div", _hoisted_3, [
|
|
||||||
createVNode(unref(script$7), {
|
|
||||||
label: _ctx.$t("g.back"),
|
|
||||||
severity: "secondary",
|
|
||||||
icon: "pi pi-arrow-left",
|
|
||||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("1"), "onClick")
|
|
||||||
}, null, 8, ["label", "onClick"]),
|
|
||||||
createVNode(unref(script$7), {
|
|
||||||
label: _ctx.$t("g.next"),
|
|
||||||
icon: "pi pi-arrow-right",
|
|
||||||
iconPos: "right",
|
|
||||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("3"), "onClick")
|
|
||||||
}, null, 8, ["label", "onClick"])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}),
|
|
||||||
createVNode(unref(script$e), { value: "3" }, {
|
|
||||||
default: withCtx(({ activateCallback }) => [
|
|
||||||
createVNode(_sfc_main$6, {
|
|
||||||
autoUpdate: autoUpdate.value,
|
|
||||||
"onUpdate:autoUpdate": _cache[5] || (_cache[5] = ($event) => autoUpdate.value = $event),
|
|
||||||
allowMetrics: allowMetrics.value,
|
|
||||||
"onUpdate:allowMetrics": _cache[6] || (_cache[6] = ($event) => allowMetrics.value = $event)
|
|
||||||
}, null, 8, ["autoUpdate", "allowMetrics"]),
|
|
||||||
createVNode(_sfc_main$1, {
|
|
||||||
device: device.value,
|
|
||||||
pythonMirror: pythonMirror.value,
|
|
||||||
"onUpdate:pythonMirror": _cache[7] || (_cache[7] = ($event) => pythonMirror.value = $event),
|
|
||||||
pypiMirror: pypiMirror.value,
|
|
||||||
"onUpdate:pypiMirror": _cache[8] || (_cache[8] = ($event) => pypiMirror.value = $event),
|
|
||||||
torchMirror: torchMirror.value,
|
|
||||||
"onUpdate:torchMirror": _cache[9] || (_cache[9] = ($event) => torchMirror.value = $event),
|
|
||||||
class: "mt-6"
|
|
||||||
}, null, 8, ["device", "pythonMirror", "pypiMirror", "torchMirror"]),
|
|
||||||
createBaseVNode("div", _hoisted_4, [
|
|
||||||
createVNode(unref(script$7), {
|
|
||||||
label: _ctx.$t("g.back"),
|
|
||||||
severity: "secondary",
|
|
||||||
icon: "pi pi-arrow-left",
|
|
||||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("2"), "onClick")
|
|
||||||
}, null, 8, ["label", "onClick"]),
|
|
||||||
createVNode(unref(script$7), {
|
|
||||||
label: _ctx.$t("g.install"),
|
|
||||||
icon: "pi pi-check",
|
|
||||||
iconPos: "right",
|
|
||||||
disabled: hasError.value,
|
|
||||||
onClick: _cache[10] || (_cache[10] = ($event) => install())
|
|
||||||
}, null, 8, ["label", "disabled"])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const InstallView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-cd6731d2"]]);
|
|
||||||
export {
|
|
||||||
InstallView as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=InstallView-DW9xwU_F.js.map
|
|
81
web/assets/InstallView-DbJ2cGfL.css
generated
vendored
@ -1,81 +0,0 @@
|
|||||||
|
|
||||||
.p-tag[data-v-79125ff6] {
|
|
||||||
--p-tag-gap: 0.5rem;
|
|
||||||
}
|
|
||||||
.hover-brighten {
|
|
||||||
&[data-v-79125ff6] {
|
|
||||||
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
||||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
||||||
transition-duration: 150ms;
|
|
||||||
transition-property: filter, box-shadow;
|
|
||||||
}
|
|
||||||
&[data-v-79125ff6]:hover {
|
|
||||||
filter: brightness(107%) contrast(105%);
|
|
||||||
box-shadow: 0 0 0.25rem #ffffff79;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.p-accordioncontent-content[data-v-79125ff6] {
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
--tw-bg-opacity: 1;
|
|
||||||
background-color: rgb(23 23 23 / var(--tw-bg-opacity));
|
|
||||||
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
||||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
||||||
transition-duration: 150ms;
|
|
||||||
}
|
|
||||||
div.selected {
|
|
||||||
.gpu-button[data-v-79125ff6]:not(.selected) {
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
.gpu-button[data-v-79125ff6]:not(.selected):hover {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.gpu-button[data-v-79125ff6] {
|
|
||||||
margin: 0px;
|
|
||||||
display: flex;
|
|
||||||
width: 50%;
|
|
||||||
cursor: pointer;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-around;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
background-color: rgb(38 38 38 / var(--tw-bg-opacity));
|
|
||||||
--tw-bg-opacity: 0.5;
|
|
||||||
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
||||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
||||||
transition-duration: 150ms;
|
|
||||||
}
|
|
||||||
.gpu-button[data-v-79125ff6]:hover {
|
|
||||||
--tw-bg-opacity: 0.75;
|
|
||||||
}
|
|
||||||
.gpu-button {
|
|
||||||
&.selected[data-v-79125ff6] {
|
|
||||||
--tw-bg-opacity: 1;
|
|
||||||
background-color: rgb(64 64 64 / var(--tw-bg-opacity));
|
|
||||||
}
|
|
||||||
&.selected[data-v-79125ff6] {
|
|
||||||
--tw-bg-opacity: 0.5;
|
|
||||||
}
|
|
||||||
&.selected[data-v-79125ff6] {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
&.selected[data-v-79125ff6]:hover {
|
|
||||||
--tw-bg-opacity: 0.6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.disabled[data-v-79125ff6] {
|
|
||||||
pointer-events: none;
|
|
||||||
opacity: 0.4;
|
|
||||||
}
|
|
||||||
.p-card-header[data-v-79125ff6] {
|
|
||||||
flex-grow: 1;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.p-card-body[data-v-79125ff6] {
|
|
||||||
padding-top: 0px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-v-cd6731d2] .p-steppanel {
|
|
||||||
background-color: transparent
|
|
||||||
}
|
|
8
web/assets/KeybindingPanel-CDYVPYDp.css
generated
vendored
@ -1,8 +0,0 @@
|
|||||||
|
|
||||||
[data-v-8454e24f] .p-datatable-tbody > tr > td {
|
|
||||||
padding: 0.25rem;
|
|
||||||
min-height: 2rem
|
|
||||||
}
|
|
||||||
[data-v-8454e24f] .p-datatable-row-selected .actions,[data-v-8454e24f] .p-datatable-selectable-row:hover .actions {
|
|
||||||
visibility: visible
|
|
||||||
}
|
|
292
web/assets/KeybindingPanel-oavhFdkz.js
generated
vendored
@ -1,292 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { d as defineComponent, c as computed, o as openBlock, f as createElementBlock, F as Fragment, D as renderList, k as createVNode, z as withCtx, a8 as createTextVNode, E as toDisplayString, j as unref, a5 as script, B as createCommentVNode, T as ref, dx as FilterMatchMode, ao as useKeybindingStore, J as useCommandStore, I as useI18n, X as normalizeI18nKey, w as watchEffect, aV as useToast, r as resolveDirective, y as createBlock, dy as SearchBox, m as createBaseVNode, l as script$2, bk as script$4, as as withModifiers, bn as script$5, ac as script$6, i as withDirectives, dz as _sfc_main$2, dA as KeyComboImpl, dB as KeybindingImpl, _ as _export_sfc } from "./index-Bv0b06LE.js";
|
|
||||||
import { g as script$1, h as script$3 } from "./index-CgMyWf7n.js";
|
|
||||||
import { u as useKeybindingService } from "./keybindingService-DyjX-nxF.js";
|
|
||||||
import "./index-Dzu9WL4p.js";
|
|
||||||
const _hoisted_1$1 = {
|
|
||||||
key: 0,
|
|
||||||
class: "px-2"
|
|
||||||
};
|
|
||||||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "KeyComboDisplay",
|
|
||||||
props: {
|
|
||||||
keyCombo: {},
|
|
||||||
isModified: { type: Boolean, default: false }
|
|
||||||
},
|
|
||||||
setup(__props) {
|
|
||||||
const props = __props;
|
|
||||||
const keySequences = computed(() => props.keyCombo.getKeySequences());
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createElementBlock("span", null, [
|
|
||||||
(openBlock(true), createElementBlock(Fragment, null, renderList(keySequences.value, (sequence, index) => {
|
|
||||||
return openBlock(), createElementBlock(Fragment, { key: index }, [
|
|
||||||
createVNode(unref(script), {
|
|
||||||
severity: _ctx.isModified ? "info" : "secondary"
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createTextVNode(toDisplayString(sequence), 1)
|
|
||||||
]),
|
|
||||||
_: 2
|
|
||||||
}, 1032, ["severity"]),
|
|
||||||
index < keySequences.value.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_1$1, "+")) : createCommentVNode("", true)
|
|
||||||
], 64);
|
|
||||||
}), 128))
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const _hoisted_1 = { class: "actions invisible flex flex-row" };
|
|
||||||
const _hoisted_2 = ["title"];
|
|
||||||
const _hoisted_3 = { key: 1 };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "KeybindingPanel",
|
|
||||||
setup(__props) {
|
|
||||||
const filters = ref({
|
|
||||||
global: { value: "", matchMode: FilterMatchMode.CONTAINS }
|
|
||||||
});
|
|
||||||
const keybindingStore = useKeybindingStore();
|
|
||||||
const keybindingService = useKeybindingService();
|
|
||||||
const commandStore = useCommandStore();
|
|
||||||
const { t } = useI18n();
|
|
||||||
const commandsData = computed(() => {
|
|
||||||
return Object.values(commandStore.commands).map((command) => ({
|
|
||||||
id: command.id,
|
|
||||||
label: t(`commands.${normalizeI18nKey(command.id)}.label`, command.label),
|
|
||||||
keybinding: keybindingStore.getKeybindingByCommandId(command.id)
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
const selectedCommandData = ref(null);
|
|
||||||
const editDialogVisible = ref(false);
|
|
||||||
const newBindingKeyCombo = ref(null);
|
|
||||||
const currentEditingCommand = ref(null);
|
|
||||||
const keybindingInput = ref(null);
|
|
||||||
const existingKeybindingOnCombo = computed(() => {
|
|
||||||
if (!currentEditingCommand.value) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (currentEditingCommand.value.keybinding?.combo?.equals(
|
|
||||||
newBindingKeyCombo.value
|
|
||||||
)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (!newBindingKeyCombo.value) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return keybindingStore.getKeybinding(newBindingKeyCombo.value);
|
|
||||||
});
|
|
||||||
function editKeybinding(commandData) {
|
|
||||||
currentEditingCommand.value = commandData;
|
|
||||||
newBindingKeyCombo.value = commandData.keybinding ? commandData.keybinding.combo : null;
|
|
||||||
editDialogVisible.value = true;
|
|
||||||
}
|
|
||||||
__name(editKeybinding, "editKeybinding");
|
|
||||||
watchEffect(() => {
|
|
||||||
if (editDialogVisible.value) {
|
|
||||||
setTimeout(() => {
|
|
||||||
keybindingInput.value?.$el?.focus();
|
|
||||||
}, 300);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
function removeKeybinding(commandData) {
|
|
||||||
if (commandData.keybinding) {
|
|
||||||
keybindingStore.unsetKeybinding(commandData.keybinding);
|
|
||||||
keybindingService.persistUserKeybindings();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__name(removeKeybinding, "removeKeybinding");
|
|
||||||
function captureKeybinding(event) {
|
|
||||||
if (!event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {
|
|
||||||
switch (event.key) {
|
|
||||||
case "Escape":
|
|
||||||
cancelEdit();
|
|
||||||
return;
|
|
||||||
case "Enter":
|
|
||||||
saveKeybinding();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const keyCombo = KeyComboImpl.fromEvent(event);
|
|
||||||
newBindingKeyCombo.value = keyCombo;
|
|
||||||
}
|
|
||||||
__name(captureKeybinding, "captureKeybinding");
|
|
||||||
function cancelEdit() {
|
|
||||||
editDialogVisible.value = false;
|
|
||||||
currentEditingCommand.value = null;
|
|
||||||
newBindingKeyCombo.value = null;
|
|
||||||
}
|
|
||||||
__name(cancelEdit, "cancelEdit");
|
|
||||||
function saveKeybinding() {
|
|
||||||
if (currentEditingCommand.value && newBindingKeyCombo.value) {
|
|
||||||
const updated = keybindingStore.updateKeybindingOnCommand(
|
|
||||||
new KeybindingImpl({
|
|
||||||
commandId: currentEditingCommand.value.id,
|
|
||||||
combo: newBindingKeyCombo.value
|
|
||||||
})
|
|
||||||
);
|
|
||||||
if (updated) {
|
|
||||||
keybindingService.persistUserKeybindings();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cancelEdit();
|
|
||||||
}
|
|
||||||
__name(saveKeybinding, "saveKeybinding");
|
|
||||||
const toast = useToast();
|
|
||||||
async function resetKeybindings() {
|
|
||||||
keybindingStore.resetKeybindings();
|
|
||||||
await keybindingService.persistUserKeybindings();
|
|
||||||
toast.add({
|
|
||||||
severity: "info",
|
|
||||||
summary: "Info",
|
|
||||||
detail: "Keybindings reset",
|
|
||||||
life: 3e3
|
|
||||||
});
|
|
||||||
}
|
|
||||||
__name(resetKeybindings, "resetKeybindings");
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
const _directive_tooltip = resolveDirective("tooltip");
|
|
||||||
return openBlock(), createBlock(_sfc_main$2, {
|
|
||||||
value: "Keybinding",
|
|
||||||
class: "keybinding-panel"
|
|
||||||
}, {
|
|
||||||
header: withCtx(() => [
|
|
||||||
createVNode(SearchBox, {
|
|
||||||
modelValue: filters.value["global"].value,
|
|
||||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => filters.value["global"].value = $event),
|
|
||||||
placeholder: _ctx.$t("g.searchKeybindings") + "..."
|
|
||||||
}, null, 8, ["modelValue", "placeholder"])
|
|
||||||
]),
|
|
||||||
default: withCtx(() => [
|
|
||||||
createVNode(unref(script$3), {
|
|
||||||
value: commandsData.value,
|
|
||||||
selection: selectedCommandData.value,
|
|
||||||
"onUpdate:selection": _cache[1] || (_cache[1] = ($event) => selectedCommandData.value = $event),
|
|
||||||
"global-filter-fields": ["id", "label"],
|
|
||||||
filters: filters.value,
|
|
||||||
selectionMode: "single",
|
|
||||||
stripedRows: "",
|
|
||||||
pt: {
|
|
||||||
header: "px-0"
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createVNode(unref(script$1), {
|
|
||||||
field: "actions",
|
|
||||||
header: ""
|
|
||||||
}, {
|
|
||||||
body: withCtx((slotProps) => [
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
createVNode(unref(script$2), {
|
|
||||||
icon: "pi pi-pencil",
|
|
||||||
class: "p-button-text",
|
|
||||||
onClick: /* @__PURE__ */ __name(($event) => editKeybinding(slotProps.data), "onClick")
|
|
||||||
}, null, 8, ["onClick"]),
|
|
||||||
createVNode(unref(script$2), {
|
|
||||||
icon: "pi pi-trash",
|
|
||||||
class: "p-button-text p-button-danger",
|
|
||||||
onClick: /* @__PURE__ */ __name(($event) => removeKeybinding(slotProps.data), "onClick"),
|
|
||||||
disabled: !slotProps.data.keybinding
|
|
||||||
}, null, 8, ["onClick", "disabled"])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}),
|
|
||||||
createVNode(unref(script$1), {
|
|
||||||
field: "id",
|
|
||||||
header: _ctx.$t("g.command"),
|
|
||||||
sortable: "",
|
|
||||||
class: "max-w-64 2xl:max-w-full"
|
|
||||||
}, {
|
|
||||||
body: withCtx((slotProps) => [
|
|
||||||
createBaseVNode("div", {
|
|
||||||
class: "overflow-hidden text-ellipsis whitespace-nowrap",
|
|
||||||
title: slotProps.data.id
|
|
||||||
}, toDisplayString(slotProps.data.label), 9, _hoisted_2)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["header"]),
|
|
||||||
createVNode(unref(script$1), {
|
|
||||||
field: "keybinding",
|
|
||||||
header: _ctx.$t("g.keybinding")
|
|
||||||
}, {
|
|
||||||
body: withCtx((slotProps) => [
|
|
||||||
slotProps.data.keybinding ? (openBlock(), createBlock(_sfc_main$1, {
|
|
||||||
key: 0,
|
|
||||||
keyCombo: slotProps.data.keybinding.combo,
|
|
||||||
isModified: unref(keybindingStore).isCommandKeybindingModified(slotProps.data.id)
|
|
||||||
}, null, 8, ["keyCombo", "isModified"])) : (openBlock(), createElementBlock("span", _hoisted_3, "-"))
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["header"])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["value", "selection", "filters"]),
|
|
||||||
createVNode(unref(script$6), {
|
|
||||||
class: "min-w-96",
|
|
||||||
visible: editDialogVisible.value,
|
|
||||||
"onUpdate:visible": _cache[2] || (_cache[2] = ($event) => editDialogVisible.value = $event),
|
|
||||||
modal: "",
|
|
||||||
header: currentEditingCommand.value?.label,
|
|
||||||
onHide: cancelEdit
|
|
||||||
}, {
|
|
||||||
footer: withCtx(() => [
|
|
||||||
createVNode(unref(script$2), {
|
|
||||||
label: "Save",
|
|
||||||
icon: "pi pi-check",
|
|
||||||
onClick: saveKeybinding,
|
|
||||||
disabled: !!existingKeybindingOnCombo.value,
|
|
||||||
autofocus: ""
|
|
||||||
}, null, 8, ["disabled"])
|
|
||||||
]),
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("div", null, [
|
|
||||||
createVNode(unref(script$4), {
|
|
||||||
class: "mb-2 text-center",
|
|
||||||
ref_key: "keybindingInput",
|
|
||||||
ref: keybindingInput,
|
|
||||||
modelValue: newBindingKeyCombo.value?.toString() ?? "",
|
|
||||||
placeholder: "Press keys for new binding",
|
|
||||||
onKeydown: withModifiers(captureKeybinding, ["stop", "prevent"]),
|
|
||||||
autocomplete: "off",
|
|
||||||
fluid: "",
|
|
||||||
invalid: !!existingKeybindingOnCombo.value
|
|
||||||
}, null, 8, ["modelValue", "invalid"]),
|
|
||||||
existingKeybindingOnCombo.value ? (openBlock(), createBlock(unref(script$5), {
|
|
||||||
key: 0,
|
|
||||||
severity: "error"
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
_cache[3] || (_cache[3] = createTextVNode(" Keybinding already exists on ")),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
severity: "secondary",
|
|
||||||
value: existingKeybindingOnCombo.value.commandId
|
|
||||||
}, null, 8, ["value"])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})) : createCommentVNode("", true)
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["visible", "header"]),
|
|
||||||
withDirectives(createVNode(unref(script$2), {
|
|
||||||
class: "mt-4",
|
|
||||||
label: _ctx.$t("g.reset"),
|
|
||||||
icon: "pi pi-trash",
|
|
||||||
severity: "danger",
|
|
||||||
fluid: "",
|
|
||||||
text: "",
|
|
||||||
onClick: resetKeybindings
|
|
||||||
}, null, 8, ["label"]), [
|
|
||||||
[_directive_tooltip, _ctx.$t("g.resetKeybindingsTooltip")]
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const KeybindingPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8454e24f"]]);
|
|
||||||
export {
|
|
||||||
KeybindingPanel as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=KeybindingPanel-oavhFdkz.js.map
|
|
25635
web/assets/MaintenanceView-Bh8OZpgl.js
generated
vendored
87
web/assets/MaintenanceView-DEJCj8SR.css
generated
vendored
@ -1,87 +0,0 @@
|
|||||||
|
|
||||||
.task-card-ok[data-v-c3bd7658] {
|
|
||||||
|
|
||||||
position: absolute;
|
|
||||||
|
|
||||||
right: -1rem;
|
|
||||||
|
|
||||||
bottom: -1rem;
|
|
||||||
|
|
||||||
grid-column: 1 / -1;
|
|
||||||
|
|
||||||
grid-row: 1 / -1;
|
|
||||||
|
|
||||||
--tw-text-opacity: 1;
|
|
||||||
|
|
||||||
color: rgb(150 206 76 / var(--tw-text-opacity));
|
|
||||||
|
|
||||||
opacity: 1;
|
|
||||||
|
|
||||||
transition-property: opacity;
|
|
||||||
|
|
||||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
||||||
|
|
||||||
transition-duration: 150ms;
|
|
||||||
|
|
||||||
font-size: 4rem;
|
|
||||||
text-shadow: 0.25rem 0 0.5rem black;
|
|
||||||
z-index: 10;
|
|
||||||
}
|
|
||||||
.p-card {
|
|
||||||
&[data-v-c3bd7658] {
|
|
||||||
|
|
||||||
transition-property: opacity;
|
|
||||||
|
|
||||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
||||||
|
|
||||||
transition-duration: 150ms;
|
|
||||||
|
|
||||||
--p-card-background: var(--p-button-secondary-background);
|
|
||||||
opacity: 0.9;
|
|
||||||
}
|
|
||||||
&.opacity-65[data-v-c3bd7658] {
|
|
||||||
opacity: 0.4;
|
|
||||||
}
|
|
||||||
&[data-v-c3bd7658]:hover {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[data-v-c3bd7658] .p-card-header {
|
|
||||||
z-index: 0;
|
|
||||||
}
|
|
||||||
[data-v-c3bd7658] .p-card-body {
|
|
||||||
z-index: 1;
|
|
||||||
flex-grow: 1;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
.task-div {
|
|
||||||
> i[data-v-c3bd7658] {
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
&:hover > i[data-v-c3bd7658] {
|
|
||||||
opacity: 0.2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-v-dd50a7dd] .p-tag {
|
|
||||||
--p-tag-gap: 0.375rem;
|
|
||||||
}
|
|
||||||
.backspan[data-v-dd50a7dd]::before {
|
|
||||||
position: absolute;
|
|
||||||
margin: 0px;
|
|
||||||
color: var(--p-text-muted-color);
|
|
||||||
font-family: 'primeicons';
|
|
||||||
top: -2rem;
|
|
||||||
right: -2rem;
|
|
||||||
speak: none;
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
font-variant: normal;
|
|
||||||
text-transform: none;
|
|
||||||
line-height: 1;
|
|
||||||
display: inline-block;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
opacity: 0.02;
|
|
||||||
font-size: min(14rem, 90vw);
|
|
||||||
z-index: 0;
|
|
||||||
}
|
|
7
web/assets/ManualConfigurationView-CsirlNfV.css
generated
vendored
@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
.p-tag[data-v-dc169863] {
|
|
||||||
--p-tag-gap: 0.5rem;
|
|
||||||
}
|
|
||||||
.comfy-installer[data-v-dc169863] {
|
|
||||||
margin-top: max(1rem, max(0px, calc((100vh - 42rem) * 0.5)));
|
|
||||||
}
|
|
74
web/assets/ManualConfigurationView-DTLyJ3VG.js
generated
vendored
@ -1,74 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { d as defineComponent, I as useI18n, T as ref, p as onMounted, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, a5 as script, b3 as script$1, l as script$2, b9 as electronAPI, _ as _export_sfc } from "./index-Bv0b06LE.js";
|
|
||||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-BTbuZf5t.js";
|
|
||||||
const _hoisted_1 = { class: "comfy-installer grow flex flex-col gap-4 text-neutral-300 max-w-110" };
|
|
||||||
const _hoisted_2 = { class: "text-2xl font-semibold text-neutral-100" };
|
|
||||||
const _hoisted_3 = { class: "m-1 text-neutral-300" };
|
|
||||||
const _hoisted_4 = { class: "ml-2" };
|
|
||||||
const _hoisted_5 = { class: "m-1 mb-4" };
|
|
||||||
const _hoisted_6 = { class: "m-0" };
|
|
||||||
const _hoisted_7 = { class: "m-1" };
|
|
||||||
const _hoisted_8 = { class: "font-mono" };
|
|
||||||
const _hoisted_9 = { class: "m-1" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "ManualConfigurationView",
|
|
||||||
setup(__props) {
|
|
||||||
const { t } = useI18n();
|
|
||||||
const electron = electronAPI();
|
|
||||||
const basePath = ref(null);
|
|
||||||
const sep = ref("/");
|
|
||||||
const restartApp = /* @__PURE__ */ __name((message) => electron.restartApp(message), "restartApp");
|
|
||||||
onMounted(async () => {
|
|
||||||
basePath.value = await electron.getBasePath();
|
|
||||||
if (basePath.value.indexOf("/") === -1) sep.value = "\\";
|
|
||||||
});
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createBlock(_sfc_main$1, { dark: "" }, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
createBaseVNode("h2", _hoisted_2, toDisplayString(_ctx.$t("install.manualConfiguration.title")), 1),
|
|
||||||
createBaseVNode("p", _hoisted_3, [
|
|
||||||
createVNode(unref(script), {
|
|
||||||
icon: "pi pi-exclamation-triangle",
|
|
||||||
severity: "warn",
|
|
||||||
value: unref(t)("icon.exclamation-triangle")
|
|
||||||
}, null, 8, ["value"]),
|
|
||||||
createBaseVNode("strong", _hoisted_4, toDisplayString(_ctx.$t("install.gpuSelection.customComfyNeedsPython")), 1)
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", null, [
|
|
||||||
createBaseVNode("p", _hoisted_5, toDisplayString(_ctx.$t("install.manualConfiguration.requirements")) + ": ", 1),
|
|
||||||
createBaseVNode("ul", _hoisted_6, [
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customManualVenv")), 1),
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customInstallRequirements")), 1)
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
createBaseVNode("p", _hoisted_7, toDisplayString(_ctx.$t("install.manualConfiguration.createVenv")) + ":", 1),
|
|
||||||
createVNode(unref(script$1), {
|
|
||||||
header: unref(t)("install.manualConfiguration.virtualEnvironmentPath")
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("span", _hoisted_8, toDisplayString(`${basePath.value}${sep.value}.venv${sep.value}`), 1)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
}, 8, ["header"]),
|
|
||||||
createBaseVNode("p", _hoisted_9, toDisplayString(_ctx.$t("install.manualConfiguration.restartWhenFinished")), 1),
|
|
||||||
createVNode(unref(script$2), {
|
|
||||||
class: "place-self-end",
|
|
||||||
label: unref(t)("menuLabels.Restart"),
|
|
||||||
severity: "warn",
|
|
||||||
icon: "pi pi-refresh",
|
|
||||||
onClick: _cache[0] || (_cache[0] = ($event) => restartApp("Manual configuration complete"))
|
|
||||||
}, null, 8, ["label"])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const ManualConfigurationView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-dc169863"]]);
|
|
||||||
export {
|
|
||||||
ManualConfigurationView as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=ManualConfigurationView-DTLyJ3VG.js.map
|
|
86
web/assets/MetricsConsentView-C80fk2cl.js
generated
vendored
@ -1,86 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-BTbuZf5t.js";
|
|
||||||
import { d as defineComponent, aV as useToast, I as useI18n, T as ref, bi as useRouter, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, a8 as createTextVNode, k as createVNode, j as unref, br as script, l as script$1, b9 as electronAPI } from "./index-Bv0b06LE.js";
|
|
||||||
const _hoisted_1 = { class: "h-full p-8 2xl:p-16 flex flex-col items-center justify-center" };
|
|
||||||
const _hoisted_2 = { class: "bg-neutral-800 rounded-lg shadow-lg p-6 w-full max-w-[600px] flex flex-col gap-6" };
|
|
||||||
const _hoisted_3 = { class: "text-3xl font-semibold text-neutral-100" };
|
|
||||||
const _hoisted_4 = { class: "text-neutral-400" };
|
|
||||||
const _hoisted_5 = { class: "text-neutral-400" };
|
|
||||||
const _hoisted_6 = {
|
|
||||||
href: "https://comfy.org/privacy",
|
|
||||||
target: "_blank",
|
|
||||||
class: "text-blue-400 hover:text-blue-300 underline"
|
|
||||||
};
|
|
||||||
const _hoisted_7 = { class: "flex items-center gap-4" };
|
|
||||||
const _hoisted_8 = {
|
|
||||||
id: "metricsDescription",
|
|
||||||
class: "text-neutral-100"
|
|
||||||
};
|
|
||||||
const _hoisted_9 = { class: "flex pt-6 justify-end" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "MetricsConsentView",
|
|
||||||
setup(__props) {
|
|
||||||
const toast = useToast();
|
|
||||||
const { t } = useI18n();
|
|
||||||
const allowMetrics = ref(true);
|
|
||||||
const router = useRouter();
|
|
||||||
const isUpdating = ref(false);
|
|
||||||
const updateConsent = /* @__PURE__ */ __name(async () => {
|
|
||||||
isUpdating.value = true;
|
|
||||||
try {
|
|
||||||
await electronAPI().setMetricsConsent(allowMetrics.value);
|
|
||||||
} catch (error) {
|
|
||||||
toast.add({
|
|
||||||
severity: "error",
|
|
||||||
summary: t("install.errorUpdatingConsent"),
|
|
||||||
detail: t("install.errorUpdatingConsentDetail"),
|
|
||||||
life: 3e3
|
|
||||||
});
|
|
||||||
} finally {
|
|
||||||
isUpdating.value = false;
|
|
||||||
}
|
|
||||||
router.push("/");
|
|
||||||
}, "updateConsent");
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
const _component_BaseViewTemplate = _sfc_main$1;
|
|
||||||
return openBlock(), createBlock(_component_BaseViewTemplate, { dark: "" }, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
createBaseVNode("div", _hoisted_2, [
|
|
||||||
createBaseVNode("h2", _hoisted_3, toDisplayString(_ctx.$t("install.helpImprove")), 1),
|
|
||||||
createBaseVNode("p", _hoisted_4, toDisplayString(_ctx.$t("install.updateConsent")), 1),
|
|
||||||
createBaseVNode("p", _hoisted_5, [
|
|
||||||
createTextVNode(toDisplayString(_ctx.$t("install.moreInfo")) + " ", 1),
|
|
||||||
createBaseVNode("a", _hoisted_6, toDisplayString(_ctx.$t("install.privacyPolicy")), 1),
|
|
||||||
_cache[1] || (_cache[1] = createTextVNode(". "))
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_7, [
|
|
||||||
createVNode(unref(script), {
|
|
||||||
modelValue: allowMetrics.value,
|
|
||||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => allowMetrics.value = $event),
|
|
||||||
"aria-describedby": "metricsDescription"
|
|
||||||
}, null, 8, ["modelValue"]),
|
|
||||||
createBaseVNode("span", _hoisted_8, toDisplayString(allowMetrics.value ? _ctx.$t("install.metricsEnabled") : _ctx.$t("install.metricsDisabled")), 1)
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_9, [
|
|
||||||
createVNode(unref(script$1), {
|
|
||||||
label: _ctx.$t("g.ok"),
|
|
||||||
icon: "pi pi-check",
|
|
||||||
loading: isUpdating.value,
|
|
||||||
iconPos: "right",
|
|
||||||
onClick: updateConsent
|
|
||||||
}, null, 8, ["label", "loading"])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
export {
|
|
||||||
_sfc_main as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=MetricsConsentView-C80fk2cl.js.map
|
|
86
web/assets/NotSupportedView-B78ZVR9Z.js
generated
vendored
@ -1,86 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { d as defineComponent, bi as useRouter, r as resolveDirective, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, l as script, i as withDirectives, _ as _export_sfc } from "./index-Bv0b06LE.js";
|
|
||||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-BTbuZf5t.js";
|
|
||||||
const _imports_0 = "" + new URL("images/sad_girl.png", import.meta.url).href;
|
|
||||||
const _hoisted_1 = { class: "sad-container" };
|
|
||||||
const _hoisted_2 = { class: "no-drag sad-text flex items-center" };
|
|
||||||
const _hoisted_3 = { class: "flex flex-col gap-8 p-8 min-w-110" };
|
|
||||||
const _hoisted_4 = { class: "text-4xl font-bold text-red-500" };
|
|
||||||
const _hoisted_5 = { class: "space-y-4" };
|
|
||||||
const _hoisted_6 = { class: "text-xl" };
|
|
||||||
const _hoisted_7 = { class: "list-disc list-inside space-y-1 text-neutral-800" };
|
|
||||||
const _hoisted_8 = { class: "flex gap-4" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "NotSupportedView",
|
|
||||||
setup(__props) {
|
|
||||||
const openDocs = /* @__PURE__ */ __name(() => {
|
|
||||||
window.open(
|
|
||||||
"https://github.com/Comfy-Org/desktop#currently-supported-platforms",
|
|
||||||
"_blank"
|
|
||||||
);
|
|
||||||
}, "openDocs");
|
|
||||||
const reportIssue = /* @__PURE__ */ __name(() => {
|
|
||||||
window.open("https://forum.comfy.org/c/v1-feedback/", "_blank");
|
|
||||||
}, "reportIssue");
|
|
||||||
const router = useRouter();
|
|
||||||
const continueToInstall = /* @__PURE__ */ __name(() => {
|
|
||||||
router.push("/install");
|
|
||||||
}, "continueToInstall");
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
const _directive_tooltip = resolveDirective("tooltip");
|
|
||||||
return openBlock(), createBlock(_sfc_main$1, null, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
_cache[0] || (_cache[0] = createBaseVNode("img", {
|
|
||||||
class: "sad-girl",
|
|
||||||
src: _imports_0,
|
|
||||||
alt: "Sad girl illustration"
|
|
||||||
}, null, -1)),
|
|
||||||
createBaseVNode("div", _hoisted_2, [
|
|
||||||
createBaseVNode("div", _hoisted_3, [
|
|
||||||
createBaseVNode("h1", _hoisted_4, toDisplayString(_ctx.$t("notSupported.title")), 1),
|
|
||||||
createBaseVNode("div", _hoisted_5, [
|
|
||||||
createBaseVNode("p", _hoisted_6, toDisplayString(_ctx.$t("notSupported.message")), 1),
|
|
||||||
createBaseVNode("ul", _hoisted_7, [
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.macos")), 1),
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.windows")), 1)
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_8, [
|
|
||||||
createVNode(unref(script), {
|
|
||||||
label: _ctx.$t("notSupported.learnMore"),
|
|
||||||
icon: "pi pi-github",
|
|
||||||
onClick: openDocs,
|
|
||||||
severity: "secondary"
|
|
||||||
}, null, 8, ["label"]),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
label: _ctx.$t("notSupported.reportIssue"),
|
|
||||||
icon: "pi pi-flag",
|
|
||||||
onClick: reportIssue,
|
|
||||||
severity: "secondary"
|
|
||||||
}, null, 8, ["label"]),
|
|
||||||
withDirectives(createVNode(unref(script), {
|
|
||||||
label: _ctx.$t("notSupported.continue"),
|
|
||||||
icon: "pi pi-arrow-right",
|
|
||||||
iconPos: "right",
|
|
||||||
onClick: continueToInstall,
|
|
||||||
severity: "danger"
|
|
||||||
}, null, 8, ["label"]), [
|
|
||||||
[_directive_tooltip, _ctx.$t("notSupported.continueTooltip")]
|
|
||||||
])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const NotSupportedView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-ebb20958"]]);
|
|
||||||
export {
|
|
||||||
NotSupportedView as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=NotSupportedView-B78ZVR9Z.js.map
|
|
19
web/assets/NotSupportedView-RFx6eCkN.css
generated
vendored
@ -1,19 +0,0 @@
|
|||||||
|
|
||||||
.sad-container {
|
|
||||||
&[data-v-ebb20958] {
|
|
||||||
display: grid;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-evenly;
|
|
||||||
grid-template-columns: 25rem 1fr;
|
|
||||||
}
|
|
||||||
&[data-v-ebb20958] > * {
|
|
||||||
grid-row: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.sad-text[data-v-ebb20958] {
|
|
||||||
grid-column: 1/3;
|
|
||||||
}
|
|
||||||
.sad-girl[data-v-ebb20958] {
|
|
||||||
grid-column: 2/3;
|
|
||||||
width: min(75vw, 100vh);
|
|
||||||
}
|
|
156
web/assets/ServerConfigPanel-BYrt6wyr.js
generated
vendored
@ -1,156 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { o as openBlock, f as createElementBlock, m as createBaseVNode, H as markRaw, d as defineComponent, a as useSettingStore, af as storeToRefs, N as watch, dJ as useCopyToClipboard, I as useI18n, y as createBlock, z as withCtx, j as unref, bn as script, E as toDisplayString, D as renderList, F as Fragment, k as createVNode, l as script$1, B as createCommentVNode, bl as script$2, dK as FormItem, dz as _sfc_main$1, b9 as electronAPI } from "./index-Bv0b06LE.js";
|
|
||||||
import { u as useServerConfigStore } from "./serverConfigStore-D2Vr0L0h.js";
|
|
||||||
const _hoisted_1$1 = {
|
|
||||||
viewBox: "0 0 24 24",
|
|
||||||
width: "1.2em",
|
|
||||||
height: "1.2em"
|
|
||||||
};
|
|
||||||
function render(_ctx, _cache) {
|
|
||||||
return openBlock(), createElementBlock("svg", _hoisted_1$1, _cache[0] || (_cache[0] = [
|
|
||||||
createBaseVNode("path", {
|
|
||||||
fill: "none",
|
|
||||||
stroke: "currentColor",
|
|
||||||
"stroke-linecap": "round",
|
|
||||||
"stroke-linejoin": "round",
|
|
||||||
"stroke-width": "2",
|
|
||||||
d: "m4 17l6-6l-6-6m8 14h8"
|
|
||||||
}, null, -1)
|
|
||||||
]));
|
|
||||||
}
|
|
||||||
__name(render, "render");
|
|
||||||
const __unplugin_components_0 = markRaw({ name: "lucide-terminal", render });
|
|
||||||
const _hoisted_1 = { class: "flex flex-col gap-2" };
|
|
||||||
const _hoisted_2 = { class: "flex justify-end gap-2" };
|
|
||||||
const _hoisted_3 = { class: "flex items-center justify-between" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "ServerConfigPanel",
|
|
||||||
setup(__props) {
|
|
||||||
const settingStore = useSettingStore();
|
|
||||||
const serverConfigStore = useServerConfigStore();
|
|
||||||
const {
|
|
||||||
serverConfigsByCategory,
|
|
||||||
serverConfigValues,
|
|
||||||
launchArgs,
|
|
||||||
commandLineArgs,
|
|
||||||
modifiedConfigs
|
|
||||||
} = storeToRefs(serverConfigStore);
|
|
||||||
const revertChanges = /* @__PURE__ */ __name(() => {
|
|
||||||
serverConfigStore.revertChanges();
|
|
||||||
}, "revertChanges");
|
|
||||||
const restartApp = /* @__PURE__ */ __name(() => {
|
|
||||||
electronAPI().restartApp();
|
|
||||||
}, "restartApp");
|
|
||||||
watch(launchArgs, (newVal) => {
|
|
||||||
settingStore.set("Comfy.Server.LaunchArgs", newVal);
|
|
||||||
});
|
|
||||||
watch(serverConfigValues, (newVal) => {
|
|
||||||
settingStore.set("Comfy.Server.ServerConfigValues", newVal);
|
|
||||||
});
|
|
||||||
const { copyToClipboard } = useCopyToClipboard();
|
|
||||||
const copyCommandLineArgs = /* @__PURE__ */ __name(async () => {
|
|
||||||
await copyToClipboard(commandLineArgs.value);
|
|
||||||
}, "copyCommandLineArgs");
|
|
||||||
const { t } = useI18n();
|
|
||||||
const translateItem = /* @__PURE__ */ __name((item) => {
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
name: t(`serverConfigItems.${item.id}.name`, item.name),
|
|
||||||
tooltip: item.tooltip ? t(`serverConfigItems.${item.id}.tooltip`, item.tooltip) : void 0
|
|
||||||
};
|
|
||||||
}, "translateItem");
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
const _component_i_lucide58terminal = __unplugin_components_0;
|
|
||||||
return openBlock(), createBlock(_sfc_main$1, {
|
|
||||||
value: "Server-Config",
|
|
||||||
class: "server-config-panel"
|
|
||||||
}, {
|
|
||||||
header: withCtx(() => [
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
unref(modifiedConfigs).length > 0 ? (openBlock(), createBlock(unref(script), {
|
|
||||||
key: 0,
|
|
||||||
severity: "info",
|
|
||||||
"pt:text": "w-full"
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("p", null, toDisplayString(_ctx.$t("serverConfig.modifiedConfigs")), 1),
|
|
||||||
createBaseVNode("ul", null, [
|
|
||||||
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(modifiedConfigs), (config) => {
|
|
||||||
return openBlock(), createElementBlock("li", {
|
|
||||||
key: config.id
|
|
||||||
}, toDisplayString(config.name) + ": " + toDisplayString(config.initialValue) + " → " + toDisplayString(config.value), 1);
|
|
||||||
}), 128))
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_2, [
|
|
||||||
createVNode(unref(script$1), {
|
|
||||||
label: _ctx.$t("serverConfig.revertChanges"),
|
|
||||||
onClick: revertChanges,
|
|
||||||
outlined: ""
|
|
||||||
}, null, 8, ["label"]),
|
|
||||||
createVNode(unref(script$1), {
|
|
||||||
label: _ctx.$t("serverConfig.restart"),
|
|
||||||
onClick: restartApp,
|
|
||||||
outlined: "",
|
|
||||||
severity: "danger"
|
|
||||||
}, null, 8, ["label"])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})) : createCommentVNode("", true),
|
|
||||||
unref(commandLineArgs) ? (openBlock(), createBlock(unref(script), {
|
|
||||||
key: 1,
|
|
||||||
severity: "secondary",
|
|
||||||
"pt:text": "w-full"
|
|
||||||
}, {
|
|
||||||
icon: withCtx(() => [
|
|
||||||
createVNode(_component_i_lucide58terminal, { class: "text-xl font-bold" })
|
|
||||||
]),
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("div", _hoisted_3, [
|
|
||||||
createBaseVNode("p", null, toDisplayString(unref(commandLineArgs)), 1),
|
|
||||||
createVNode(unref(script$1), {
|
|
||||||
icon: "pi pi-clipboard",
|
|
||||||
onClick: copyCommandLineArgs,
|
|
||||||
severity: "secondary",
|
|
||||||
text: ""
|
|
||||||
})
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})) : createCommentVNode("", true)
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
default: withCtx(() => [
|
|
||||||
(openBlock(true), createElementBlock(Fragment, null, renderList(Object.entries(unref(serverConfigsByCategory)), ([label, items], i) => {
|
|
||||||
return openBlock(), createElementBlock("div", { key: label }, [
|
|
||||||
i > 0 ? (openBlock(), createBlock(unref(script$2), { key: 0 })) : createCommentVNode("", true),
|
|
||||||
createBaseVNode("h3", null, toDisplayString(_ctx.$t(`serverConfigCategories.${label}`, label)), 1),
|
|
||||||
(openBlock(true), createElementBlock(Fragment, null, renderList(items, (item) => {
|
|
||||||
return openBlock(), createElementBlock("div", {
|
|
||||||
key: item.name,
|
|
||||||
class: "mb-4"
|
|
||||||
}, [
|
|
||||||
createVNode(FormItem, {
|
|
||||||
item: translateItem(item),
|
|
||||||
formValue: item.value,
|
|
||||||
"onUpdate:formValue": /* @__PURE__ */ __name(($event) => item.value = $event, "onUpdate:formValue"),
|
|
||||||
id: item.id,
|
|
||||||
labelClass: {
|
|
||||||
"text-highlight": item.initialValue !== item.value
|
|
||||||
}
|
|
||||||
}, null, 8, ["item", "formValue", "onUpdate:formValue", "id", "labelClass"])
|
|
||||||
]);
|
|
||||||
}), 128))
|
|
||||||
]);
|
|
||||||
}), 128))
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
export {
|
|
||||||
_sfc_main as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=ServerConfigPanel-BYrt6wyr.js.map
|
|
100
web/assets/ServerStartView-B7TlHxYo.js
generated
vendored
@ -1,100 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { d as defineComponent, I as useI18n, T as ref, bo as ProgressStatus, p as onMounted, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, a8 as createTextVNode, E as toDisplayString, j as unref, f as createElementBlock, B as createCommentVNode, k as createVNode, l as script, i as withDirectives, v as vShow, bp as BaseTerminal, b9 as electronAPI, _ as _export_sfc } from "./index-Bv0b06LE.js";
|
|
||||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-BTbuZf5t.js";
|
|
||||||
const _hoisted_1 = { class: "flex flex-col w-full h-full items-center" };
|
|
||||||
const _hoisted_2 = { class: "text-2xl font-bold" };
|
|
||||||
const _hoisted_3 = { key: 0 };
|
|
||||||
const _hoisted_4 = {
|
|
||||||
key: 0,
|
|
||||||
class: "flex flex-col items-center gap-4"
|
|
||||||
};
|
|
||||||
const _hoisted_5 = { class: "flex items-center my-4 gap-2" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "ServerStartView",
|
|
||||||
setup(__props) {
|
|
||||||
const electron = electronAPI();
|
|
||||||
const { t } = useI18n();
|
|
||||||
const status = ref(ProgressStatus.INITIAL_STATE);
|
|
||||||
const electronVersion = ref("");
|
|
||||||
let xterm;
|
|
||||||
const terminalVisible = ref(true);
|
|
||||||
const updateProgress = /* @__PURE__ */ __name(({ status: newStatus }) => {
|
|
||||||
status.value = newStatus;
|
|
||||||
if (newStatus === ProgressStatus.ERROR) terminalVisible.value = false;
|
|
||||||
else xterm?.clear();
|
|
||||||
}, "updateProgress");
|
|
||||||
const terminalCreated = /* @__PURE__ */ __name(({ terminal, useAutoSize }, root) => {
|
|
||||||
xterm = terminal;
|
|
||||||
useAutoSize({ root, autoRows: true, autoCols: true });
|
|
||||||
electron.onLogMessage((message) => {
|
|
||||||
terminal.write(message);
|
|
||||||
});
|
|
||||||
terminal.options.cursorBlink = false;
|
|
||||||
terminal.options.disableStdin = true;
|
|
||||||
terminal.options.cursorInactiveStyle = "block";
|
|
||||||
}, "terminalCreated");
|
|
||||||
const reinstall = /* @__PURE__ */ __name(() => electron.reinstall(), "reinstall");
|
|
||||||
const reportIssue = /* @__PURE__ */ __name(() => {
|
|
||||||
window.open("https://forum.comfy.org/c/v1-feedback/", "_blank");
|
|
||||||
}, "reportIssue");
|
|
||||||
const openLogs = /* @__PURE__ */ __name(() => electron.openLogsFolder(), "openLogs");
|
|
||||||
onMounted(async () => {
|
|
||||||
electron.sendReady();
|
|
||||||
electron.onProgressUpdate(updateProgress);
|
|
||||||
electronVersion.value = await electron.getElectronVersion();
|
|
||||||
});
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createBlock(_sfc_main$1, {
|
|
||||||
dark: "",
|
|
||||||
class: "flex-col"
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
createBaseVNode("h2", _hoisted_2, [
|
|
||||||
createTextVNode(toDisplayString(unref(t)(`serverStart.process.${status.value}`)) + " ", 1),
|
|
||||||
status.value === unref(ProgressStatus).ERROR ? (openBlock(), createElementBlock("span", _hoisted_3, " v" + toDisplayString(electronVersion.value), 1)) : createCommentVNode("", true)
|
|
||||||
]),
|
|
||||||
status.value === unref(ProgressStatus).ERROR ? (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
||||||
createBaseVNode("div", _hoisted_5, [
|
|
||||||
createVNode(unref(script), {
|
|
||||||
icon: "pi pi-flag",
|
|
||||||
severity: "secondary",
|
|
||||||
label: unref(t)("serverStart.reportIssue"),
|
|
||||||
onClick: reportIssue
|
|
||||||
}, null, 8, ["label"]),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
icon: "pi pi-file",
|
|
||||||
severity: "secondary",
|
|
||||||
label: unref(t)("serverStart.openLogs"),
|
|
||||||
onClick: openLogs
|
|
||||||
}, null, 8, ["label"]),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
icon: "pi pi-refresh",
|
|
||||||
label: unref(t)("serverStart.reinstall"),
|
|
||||||
onClick: reinstall
|
|
||||||
}, null, 8, ["label"])
|
|
||||||
]),
|
|
||||||
!terminalVisible.value ? (openBlock(), createBlock(unref(script), {
|
|
||||||
key: 0,
|
|
||||||
icon: "pi pi-search",
|
|
||||||
severity: "secondary",
|
|
||||||
label: unref(t)("serverStart.showTerminal"),
|
|
||||||
onClick: _cache[0] || (_cache[0] = ($event) => terminalVisible.value = true)
|
|
||||||
}, null, 8, ["label"])) : createCommentVNode("", true)
|
|
||||||
])) : createCommentVNode("", true),
|
|
||||||
withDirectives(createVNode(BaseTerminal, { onCreated: terminalCreated }, null, 512), [
|
|
||||||
[vShow, terminalVisible.value]
|
|
||||||
])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const ServerStartView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-e6ba9633"]]);
|
|
||||||
export {
|
|
||||||
ServerStartView as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=ServerStartView-B7TlHxYo.js.map
|
|
5
web/assets/ServerStartView-BZ7uhZHv.css
generated
vendored
@ -1,5 +0,0 @@
|
|||||||
|
|
||||||
[data-v-e6ba9633] .xterm-helper-textarea {
|
|
||||||
/* Hide this as it moves all over when uv is running */
|
|
||||||
display: none;
|
|
||||||
}
|
|
1061
web/assets/TerminalOutputDrawer-CKr7Br7O.js
generated
vendored
101
web/assets/UserSelectView-C703HOyO.js
generated
vendored
@ -1,101 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { d as defineComponent, ak as useUserStore, bi as useRouter, T as ref, c as computed, p as onMounted, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, bj as withKeys, j as unref, bk as script, bl as script$1, bm as script$2, bn as script$3, a8 as createTextVNode, B as createCommentVNode, l as script$4 } from "./index-Bv0b06LE.js";
|
|
||||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-BTbuZf5t.js";
|
|
||||||
const _hoisted_1 = {
|
|
||||||
id: "comfy-user-selection",
|
|
||||||
class: "min-w-84 relative rounded-lg bg-[var(--comfy-menu-bg)] p-5 px-10 shadow-lg"
|
|
||||||
};
|
|
||||||
const _hoisted_2 = { class: "flex w-full flex-col items-center" };
|
|
||||||
const _hoisted_3 = { class: "flex w-full flex-col gap-2" };
|
|
||||||
const _hoisted_4 = { for: "new-user-input" };
|
|
||||||
const _hoisted_5 = { class: "flex w-full flex-col gap-2" };
|
|
||||||
const _hoisted_6 = { for: "existing-user-select" };
|
|
||||||
const _hoisted_7 = { class: "mt-5" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "UserSelectView",
|
|
||||||
setup(__props) {
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const router = useRouter();
|
|
||||||
const selectedUser = ref(null);
|
|
||||||
const newUsername = ref("");
|
|
||||||
const loginError = ref("");
|
|
||||||
const createNewUser = computed(() => newUsername.value.trim() !== "");
|
|
||||||
const newUserExistsError = computed(() => {
|
|
||||||
return userStore.users.find((user) => user.username === newUsername.value) ? `User "${newUsername.value}" already exists` : "";
|
|
||||||
});
|
|
||||||
const error = computed(() => newUserExistsError.value || loginError.value);
|
|
||||||
const login = /* @__PURE__ */ __name(async () => {
|
|
||||||
try {
|
|
||||||
const user = createNewUser.value ? await userStore.createUser(newUsername.value) : selectedUser.value;
|
|
||||||
if (!user) {
|
|
||||||
throw new Error("No user selected");
|
|
||||||
}
|
|
||||||
userStore.login(user);
|
|
||||||
router.push("/");
|
|
||||||
} catch (err) {
|
|
||||||
loginError.value = err.message ?? JSON.stringify(err);
|
|
||||||
}
|
|
||||||
}, "login");
|
|
||||||
onMounted(async () => {
|
|
||||||
if (!userStore.initialized) {
|
|
||||||
await userStore.initialize();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createBlock(_sfc_main$1, { dark: "" }, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("main", _hoisted_1, [
|
|
||||||
_cache[2] || (_cache[2] = createBaseVNode("h1", { class: "my-2.5 mb-7 font-normal" }, "ComfyUI", -1)),
|
|
||||||
createBaseVNode("div", _hoisted_2, [
|
|
||||||
createBaseVNode("div", _hoisted_3, [
|
|
||||||
createBaseVNode("label", _hoisted_4, toDisplayString(_ctx.$t("userSelect.newUser")) + ":", 1),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
id: "new-user-input",
|
|
||||||
modelValue: newUsername.value,
|
|
||||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => newUsername.value = $event),
|
|
||||||
placeholder: _ctx.$t("userSelect.enterUsername"),
|
|
||||||
onKeyup: withKeys(login, ["enter"])
|
|
||||||
}, null, 8, ["modelValue", "placeholder"])
|
|
||||||
]),
|
|
||||||
createVNode(unref(script$1)),
|
|
||||||
createBaseVNode("div", _hoisted_5, [
|
|
||||||
createBaseVNode("label", _hoisted_6, toDisplayString(_ctx.$t("userSelect.existingUser")) + ":", 1),
|
|
||||||
createVNode(unref(script$2), {
|
|
||||||
modelValue: selectedUser.value,
|
|
||||||
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => selectedUser.value = $event),
|
|
||||||
class: "w-full",
|
|
||||||
inputId: "existing-user-select",
|
|
||||||
options: unref(userStore).users,
|
|
||||||
"option-label": "username",
|
|
||||||
placeholder: _ctx.$t("userSelect.selectUser"),
|
|
||||||
disabled: createNewUser.value
|
|
||||||
}, null, 8, ["modelValue", "options", "placeholder", "disabled"]),
|
|
||||||
error.value ? (openBlock(), createBlock(unref(script$3), {
|
|
||||||
key: 0,
|
|
||||||
severity: "error"
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createTextVNode(toDisplayString(error.value), 1)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})) : createCommentVNode("", true)
|
|
||||||
]),
|
|
||||||
createBaseVNode("footer", _hoisted_7, [
|
|
||||||
createVNode(unref(script$4), {
|
|
||||||
label: _ctx.$t("userSelect.next"),
|
|
||||||
onClick: login
|
|
||||||
}, null, 8, ["label"])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
export {
|
|
||||||
_sfc_main as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=UserSelectView-C703HOyO.js.map
|
|
36
web/assets/WelcomeView-Brz3-luE.css
generated
vendored
@ -1,36 +0,0 @@
|
|||||||
|
|
||||||
.animated-gradient-text[data-v-7dfaf74c] {
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: clamp(2rem, 8vw, 4rem);
|
|
||||||
background: linear-gradient(to right, #12c2e9, #c471ed, #f64f59, #12c2e9);
|
|
||||||
background-size: 300% auto;
|
|
||||||
background-clip: text;
|
|
||||||
-webkit-background-clip: text;
|
|
||||||
-webkit-text-fill-color: transparent;
|
|
||||||
animation: gradient-7dfaf74c 8s linear infinite;
|
|
||||||
}
|
|
||||||
.text-glow[data-v-7dfaf74c] {
|
|
||||||
filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.3));
|
|
||||||
}
|
|
||||||
@keyframes gradient-7dfaf74c {
|
|
||||||
0% {
|
|
||||||
background-position: 0% center;
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
background-position: 300% center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.fade-in-up[data-v-7dfaf74c] {
|
|
||||||
animation: fadeInUp-7dfaf74c 1.5s ease-out;
|
|
||||||
animation-fill-mode: both;
|
|
||||||
}
|
|
||||||
@keyframes fadeInUp-7dfaf74c {
|
|
||||||
0% {
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(20px);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
opacity: 1;
|
|
||||||
transform: translateY(0);
|
|
||||||
}
|
|
||||||
}
|
|
39
web/assets/WelcomeView-DIFvbWc2.js
generated
vendored
@ -1,39 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { d as defineComponent, bi as useRouter, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, l as script, _ as _export_sfc } from "./index-Bv0b06LE.js";
|
|
||||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-BTbuZf5t.js";
|
|
||||||
const _hoisted_1 = { class: "flex flex-col items-center justify-center gap-8 p-8" };
|
|
||||||
const _hoisted_2 = { class: "animated-gradient-text text-glow select-none" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "WelcomeView",
|
|
||||||
setup(__props) {
|
|
||||||
const router = useRouter();
|
|
||||||
const navigateTo = /* @__PURE__ */ __name((path) => {
|
|
||||||
router.push(path);
|
|
||||||
}, "navigateTo");
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createBlock(_sfc_main$1, { dark: "" }, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createBaseVNode("div", _hoisted_1, [
|
|
||||||
createBaseVNode("h1", _hoisted_2, toDisplayString(_ctx.$t("welcome.title")), 1),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
label: _ctx.$t("welcome.getStarted"),
|
|
||||||
icon: "pi pi-arrow-right",
|
|
||||||
iconPos: "right",
|
|
||||||
size: "large",
|
|
||||||
rounded: "",
|
|
||||||
onClick: _cache[0] || (_cache[0] = ($event) => navigateTo("/install")),
|
|
||||||
class: "p-4 text-lg fade-in-up"
|
|
||||||
}, null, 8, ["label"])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const WelcomeView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7dfaf74c"]]);
|
|
||||||
export {
|
|
||||||
WelcomeView as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=WelcomeView-DIFvbWc2.js.map
|
|
1
web/assets/images/Git-Logo-White.svg
generated
vendored
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="292" height="92pt" viewBox="0 0 219 92"><defs><clipPath id="a"><path d="M159 .79h25V69h-25Zm0 0"/></clipPath><clipPath id="b"><path d="M183 9h35.371v60H183Zm0 0"/></clipPath><clipPath id="c"><path d="M0 .79h92V92H0Zm0 0"/></clipPath></defs><path style="stroke:none;fill-rule:nonzero;fill:#fff;fill-opacity:1" d="M130.871 31.836c-4.785 0-8.351 2.352-8.351 8.008 0 4.261 2.347 7.222 8.093 7.222 4.871 0 8.18-2.867 8.18-7.398 0-5.133-2.961-7.832-7.922-7.832Zm-9.57 39.95c-1.133 1.39-2.262 2.87-2.262 4.612 0 3.48 4.434 4.524 10.527 4.524 5.051 0 11.926-.352 11.926-5.043 0-2.793-3.308-2.965-7.488-3.227Zm25.761-39.688c1.563 2.004 3.22 4.789 3.22 8.793 0 9.656-7.571 15.316-18.536 15.316-2.789 0-5.312-.348-6.879-.785l-2.87 4.613 8.526.52c15.059.96 23.934 1.398 23.934 12.968 0 10.008-8.789 15.665-23.934 15.665-15.75 0-21.757-4.004-21.757-10.88 0-3.917 1.742-6 4.789-8.878-2.875-1.211-3.828-3.387-3.828-5.739 0-1.914.953-3.656 2.523-5.312 1.566-1.652 3.305-3.305 5.395-5.219-4.262-2.09-7.485-6.617-7.485-13.058 0-10.008 6.613-16.88 19.93-16.88 3.742 0 6.004.344 8.008.872h16.972v7.394l-8.007.61"/><g clip-path="url(#a)"><path style="stroke:none;fill-rule:nonzero;fill:#fff;fill-opacity:1" d="M170.379 16.281c-4.961 0-7.832-2.87-7.832-7.836 0-4.957 2.871-7.656 7.832-7.656 5.05 0 7.922 2.7 7.922 7.656 0 4.965-2.871 7.836-7.922 7.836Zm-11.227 52.305V61.71l4.438-.606c1.219-.175 1.394-.437 1.394-1.746V33.773c0-.953-.261-1.566-1.132-1.824l-4.7-1.656.957-7.047h18.016V59.36c0 1.399.086 1.57 1.395 1.746l4.437.606v6.875h-24.805"/></g><g clip-path="url(#b)"><path style="stroke:none;fill-rule:nonzero;fill:#fff;fill-opacity:1" d="M218.371 65.21c-3.742 1.825-9.223 3.481-14.187 3.481-10.356 0-14.27-4.175-14.27-14.015V31.879c0-.524 0-.871-.7-.871h-6.093v-7.746c7.664-.871 10.707-4.703 11.664-14.188h8.27v12.36c0 .609 0 .87.695.87h12.27v8.704h-12.965v20.797c0 5.136 1.218 7.136 5.918 7.136 2.437 0 4.96-.609 7.047-1.39l2.351 7.66"/></g><g clip-path="url(#c)"><path style="stroke:none;fill-rule:nonzero;fill:#fff;fill-opacity:1" d="M89.422 42.371 49.629 2.582a5.868 5.868 0 0 0-8.3 0l-8.263 8.262 10.48 10.484a6.965 6.965 0 0 1 7.173 1.668 6.98 6.98 0 0 1 1.656 7.215l10.102 10.105a6.963 6.963 0 0 1 7.214 1.657 6.976 6.976 0 0 1 0 9.875 6.98 6.98 0 0 1-9.879 0 6.987 6.987 0 0 1-1.519-7.594l-9.422-9.422v24.793a6.979 6.979 0 0 1 1.848 1.32 6.988 6.988 0 0 1 0 9.88c-2.73 2.726-7.153 2.726-9.875 0a6.98 6.98 0 0 1 0-9.88 6.893 6.893 0 0 1 2.285-1.523V34.398a6.893 6.893 0 0 1-2.285-1.523 6.988 6.988 0 0 1-1.508-7.637L29.004 14.902 1.719 42.187a5.868 5.868 0 0 0 0 8.301l39.793 39.793a5.868 5.868 0 0 0 8.3 0l39.61-39.605a5.873 5.873 0 0 0 0-8.305"/></g></svg>
|
|
Before Width: | Height: | Size: 2.6 KiB |
BIN
web/assets/images/apple-mps-logo.png
generated
vendored
Before Width: | Height: | Size: 66 KiB |
5
web/assets/images/manual-configuration.svg
generated
vendored
@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="21.59mm" height="6.922mm" version="1.1" viewBox="0 0 21.59 6.922" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="m6.667 0.941v1.345h-0.305v-1.345h-0.699v1.345h-0.304v-1.651h0.304v0.291q3e-3 -0.06 0.027-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.393q0.06 0 0.114 0.023 0.054 0.021 0.096 0.062 0.041 0.038 0.066 0.093 0.026 0.052 0.027 0.113 3e-3 -0.06 0.026-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.393q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v1.347h-0.298v-1.345zm1.512 0.624q0-0.063 0.023-0.117 0.024-0.055 0.065-0.097 0.041-0.041 0.097-0.065 0.055-0.024 0.117-0.024h0.787v-0.321h-0.996v-0.305h0.996q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v1.346h-0.302v-0.279q-4e-3 0.057-0.031 0.108-0.026 0.051-0.068 0.089-0.04 0.037-0.093 0.058-0.052 0.021-0.111 0.021h-0.483q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm0.303 0.415h0.787v-0.415h-0.786zm3.063 0.306h-0.306v-1.345h-0.851v1.345h-0.304v-1.651h0.303v0.291q3e-3 -0.06 0.027-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.545q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119zm0.508-1.651h0.303v1.346h0.851v-1.346h0.305v1.651h-0.304v-0.279q-4e-3 0.057-0.031 0.108-0.026 0.051-0.068 0.089-0.04 0.037-0.093 0.058-0.052 0.021-0.111 0.021h-0.547q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm1.969 0.93q0-0.063 0.023-0.117 0.024-0.055 0.065-0.097 0.041-0.041 0.097-0.065 0.055-0.024 0.117-0.024h0.787v-0.321h-0.996v-0.305h0.996q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v1.346h-0.302v-0.279q-4e-3 0.057-0.031 0.108-0.026 0.051-0.068 0.089-0.04 0.037-0.093 0.058-0.052 0.021-0.111 0.021h-0.483q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm0.303 0.415h0.787v-0.415h-0.786zm1.906-1.98v2.286h-0.304v-2.286z" fill="#fff"/>
|
|
||||||
<path d="m0.303 4.909v1.04h0.787v-0.279h0.305v0.279q0 0.063-0.024 0.119-0.023 0.055-0.065 0.097-0.04 0.04-0.096 0.065-0.055 0.023-0.119 0.023h-0.788q-0.062 0-0.117-0.023-0.056-0.023-0.098-0.063-0.04-0.042-0.065-0.098-0.023-0.056-0.023-0.119v-1.04q0-0.063 0.023-0.119 0.024-0.055 0.065-0.096t0.097-0.065q0.055-0.024 0.117-0.024h0.787q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v0.279h-0.302v-0.279zm3.029 1.04q0 0.063-0.024 0.119-0.023 0.055-0.065 0.097-0.04 0.04-0.096 0.065-0.054 0.023-0.117 0.023h-0.821q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119v-1.04q0-0.063 0.023-0.119 0.024-0.055 0.065-0.096t0.097-0.065q0.055-0.024 0.117-0.024h0.82q0.063 0 0.117 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119zm-1.123-1.04v1.04h0.82v-1.04zm3.092 1.345h-0.305v-1.345h-0.851v1.345h-0.304v-1.651h0.303v0.291q3e-3 -0.06 0.027-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.545q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119zm1.12-1.981v0.33h0.542v0.305h-0.541v1.345h-0.305v-1.344h-0.403v-0.305h0.403v-0.33q0-0.063 0.023-0.117 0.024-0.055 0.066-0.097 0.041-0.041 0.097-0.065 0.055-0.024 0.117-0.024h0.542v0.305zm1.277 0.33v1.651h-0.305v-1.651zm-0.32-0.635h0.336v0.317h-0.336zm0.844 0.941q0-0.063 0.023-0.119 0.024-0.055 0.065-0.096t0.097-0.065q0.055-0.024 0.117-0.024h0.547q0.06 0 0.114 0.023 0.054 0.021 0.094 0.062 0.041 0.038 0.066 0.093 0.026 0.052 0.027 0.113v-0.291h0.305v2.012q0 0.063-0.024 0.119-0.023 0.055-0.065 0.096-0.04 0.041-0.096 0.065-0.055 0.024-0.119 0.024h-0.964v-0.305h0.964v-0.424h-0.851q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm1.154 0.976v-0.976h-0.851v0.976zm0.813-1.282h0.303v1.345h0.851v-1.345h0.305v1.651h-0.305v-0.279q-4e-3 0.057-0.031 0.108-0.026 0.051-0.068 0.089-0.04 0.037-0.093 0.058-0.052 0.021-0.111 0.021h-0.547q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm2.272 0.305v1.345h-0.303v-1.651h0.303v0.291q3e-3 -0.06 0.027-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.324q0.063 0 0.117 0.024 0.055 0.023 0.097 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v0.279h-0.305v-0.279zm1.314 0.624q0-0.063 0.023-0.117 0.024-0.055 0.065-0.097 0.041-0.041 0.097-0.065 0.055-0.024 0.117-0.024h0.787v-0.319h-0.996v-0.305h0.996q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v1.345h-0.305v-0.279q-4e-3 0.057-0.031 0.108-0.026 0.051-0.068 0.089-0.04 0.037-0.093 0.058-0.052 0.021-0.111 0.021h-0.483q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm0.303 0.415h0.787v-0.415h-0.787zm1.505-1.345h0.403v-0.508h0.305v0.508h0.542v0.305h-0.542v1.04h0.542v0.305h-0.542q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.041-0.041-0.066-0.097-0.023-0.055-0.023-0.119v-1.04h-0.403zm2.08 0v1.651h-0.299v-1.649zm-0.314-0.634h0.336v0.317h-0.336zm2.272 1.981q0 0.063-0.024 0.119-0.023 0.055-0.065 0.097-0.04 0.04-0.096 0.065-0.054 0.023-0.117 0.023h-0.82q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119v-1.04q0-0.063 0.023-0.119 0.024-0.055 0.065-0.096t0.097-0.065q0.055-0.024 0.117-0.024h0.82q0.063 0 0.117 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119zm-1.123-1.04v1.04h0.82v-1.04zm3.092 1.345h-0.305v-1.345h-0.851v1.345h-0.303v-1.651h0.303v0.291q3e-3 -0.06 0.027-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.545q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119z" fill="#fff"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 5.8 KiB |
6
web/assets/images/nvidia-logo.svg
generated
vendored
@ -1,6 +0,0 @@
|
|||||||
<svg enable-background="new 0 0 974.7 179.7" version="1.1" viewBox="0 0 974.7 179.7" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" width="110" height="44"><title> Artificial Intelligence Computing Leadership from NVIDIA</title>
|
|
||||||
<path fill="#FFFFFF" d="m962.1 144.1v-2.7h1.7c0.9 0 2.2 0.1 2.2 1.2s-0.7 1.5-1.8 1.5h-2.1m0 1.9h1.2l2.7 4.7h2.9l-3-4.9c1.5 0.1 2.7-1 2.8-2.5v-0.4c0-2.6-1.8-3.4-4.8-3.4h-4.3v11.2h2.5v-4.7m12.6-0.9c0-6.6-5.1-10.4-10.8-10.4s-10.8 3.8-10.8 10.4 5.1 10.4 10.8 10.4 10.8-3.8 10.8-10.4m-3.2 0c0.2 4.2-3.1 7.8-7.3 8h-0.3c-4.4 0.2-8.1-3.3-8.3-7.7s3.3-8.1 7.7-8.3 8.1 3.3 8.3 7.7c-0.1 0.1-0.1 0.2-0.1 0.3z"></path>
|
|
||||||
<path fill="#FFFFFF" d="m578.2 34v118h33.3v-118h-33.3zm-262-0.2v118.1h33.6v-91.7l26.2 0.1c8.6 0 14.6 2.1 18.7 6.5 5.3 5.6 7.4 14.7 7.4 31.2v53.9h32.6v-65.2c0-46.6-29.7-52.9-58.7-52.9h-59.8zm315.7 0.2v118h54c28.8 0 38.2-4.8 48.3-15.5 7.2-7.5 11.8-24.1 11.8-42.2 0-16.6-3.9-31.4-10.8-40.6-12.2-16.5-30-19.7-56.6-19.7h-46.7zm33 25.6h14.3c20.8 0 34.2 9.3 34.2 33.5s-13.4 33.6-34.2 33.6h-14.3v-67.1zm-134.7-25.6l-27.8 93.5-26.6-93.5h-36l38 118h48l38.4-118h-34zm231.4 118h33.3v-118h-33.3v118zm93.4-118l-46.5 117.9h32.8l7.4-20.9h55l7 20.8h35.7l-46.9-117.8h-44.5zm21.6 21.5l20.2 55.2h-41l20.8-55.2z">
|
|
||||||
</path>
|
|
||||||
<path fill="#76B900" d="m101.3 53.6v-16.2c1.6-0.1 3.2-0.2 4.8-0.2 44.4-1.4 73.5 38.2 73.5 38.2s-31.4 43.6-65.1 43.6c-4.5 0-8.9-0.7-13.1-2.1v-49.2c17.3 2.1 20.8 9.7 31.1 27l23.1-19.4s-16.9-22.1-45.3-22.1c-3-0.1-6 0.1-9 0.4m0-53.6v24.2l4.8-0.3c61.7-2.1 102 50.6 102 50.6s-46.2 56.2-94.3 56.2c-4.2 0-8.3-0.4-12.4-1.1v15c3.4 0.4 6.9 0.7 10.3 0.7 44.8 0 77.2-22.9 108.6-49.9 5.2 4.2 26.5 14.3 30.9 18.7-29.8 25-99.3 45.1-138.7 45.1-3.8 0-7.4-0.2-11-0.6v21.1h170.2v-179.7h-170.4zm0 116.9v12.8c-41.4-7.4-52.9-50.5-52.9-50.5s19.9-22 52.9-25.6v14h-0.1c-17.3-2.1-30.9 14.1-30.9 14.1s7.7 27.3 31 35.2m-73.5-39.5s24.5-36.2 73.6-40v-13.2c-54.4 4.4-101.4 50.4-101.4 50.4s26.6 77 101.3 84v-14c-54.8-6.8-73.5-67.2-73.5-67.2z"></path>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
web/assets/images/sad_girl.png
generated
vendored
Before Width: | Height: | Size: 174 KiB |
618
web/assets/index-A_bXPJCN.js
generated
vendored
54182
web/assets/index-B36GcHVN.js
generated
vendored
149
web/assets/index-BRhY6FpL.css
generated
vendored
@ -1,149 +0,0 @@
|
|||||||
.comfy-group-manage {
|
|
||||||
background: var(--bg-color);
|
|
||||||
color: var(--fg-color);
|
|
||||||
padding: 0;
|
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
|
||||||
border-color: black;
|
|
||||||
margin: 20vh auto;
|
|
||||||
max-height: 60vh;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-outer {
|
|
||||||
max-height: 60vh;
|
|
||||||
min-width: 500px;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-outer > header {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 10px;
|
|
||||||
justify-content: space-between;
|
|
||||||
background: var(--comfy-menu-bg);
|
|
||||||
padding: 15px 20px;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-outer > header select {
|
|
||||||
background: var(--comfy-input-bg);
|
|
||||||
border: 1px solid var(--border-color);
|
|
||||||
color: var(--input-text);
|
|
||||||
padding: 5px 10px;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
.comfy-group-manage h2 {
|
|
||||||
margin: 0;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
.comfy-group-manage main {
|
|
||||||
display: flex;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
.comfy-group-manage .drag-handle {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-list {
|
|
||||||
border-right: 1px solid var(--comfy-menu-bg);
|
|
||||||
}
|
|
||||||
.comfy-group-manage-list ul {
|
|
||||||
margin: 40px 0 0;
|
|
||||||
padding: 0;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-list-items {
|
|
||||||
max-height: calc(100% - 40px);
|
|
||||||
overflow-y: scroll;
|
|
||||||
overflow-x: hidden;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-list li {
|
|
||||||
display: flex;
|
|
||||||
padding: 10px 20px 10px 10px;
|
|
||||||
cursor: pointer;
|
|
||||||
align-items: center;
|
|
||||||
gap: 5px;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-list div {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-list li:not(.selected):hover div {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-list li.selected {
|
|
||||||
background: var(--border-color);
|
|
||||||
}
|
|
||||||
.comfy-group-manage-list li span {
|
|
||||||
opacity: 0.7;
|
|
||||||
font-size: smaller;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node {
|
|
||||||
flex: auto;
|
|
||||||
background: var(--border-color);
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node > div {
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node header {
|
|
||||||
display: flex;
|
|
||||||
background: var(--bg-color);
|
|
||||||
height: 40px;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node header a {
|
|
||||||
text-align: center;
|
|
||||||
flex: auto;
|
|
||||||
border-right: 1px solid var(--comfy-menu-bg);
|
|
||||||
border-bottom: 1px solid var(--comfy-menu-bg);
|
|
||||||
padding: 10px;
|
|
||||||
cursor: pointer;
|
|
||||||
font-size: 15px;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node header a:last-child {
|
|
||||||
border-right: none;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node header a:not(.active):hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node header a.active {
|
|
||||||
background: var(--border-color);
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node-page {
|
|
||||||
display: none;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node-page.active {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node-page div {
|
|
||||||
padding: 10px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 10px;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node-page input {
|
|
||||||
border: none;
|
|
||||||
color: var(--input-text);
|
|
||||||
background: var(--comfy-input-bg);
|
|
||||||
padding: 5px 10px;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node-page input[type="text"] {
|
|
||||||
flex: auto;
|
|
||||||
}
|
|
||||||
.comfy-group-manage-node-page label {
|
|
||||||
display: flex;
|
|
||||||
gap: 5px;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.comfy-group-manage footer {
|
|
||||||
border-top: 1px solid var(--comfy-menu-bg);
|
|
||||||
padding: 10px;
|
|
||||||
display: flex;
|
|
||||||
gap: 10px;
|
|
||||||
}
|
|
||||||
.comfy-group-manage footer button {
|
|
||||||
font-size: 14px;
|
|
||||||
padding: 5px 10px;
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
.comfy-group-manage footer button:first-child {
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
221040
web/assets/index-Bv0b06LE.js
generated
vendored
4993
web/assets/index-C068lYT4.js
generated
vendored
4922
web/assets/index-CBxvvAzM.css
generated
vendored
8790
web/assets/index-CgMyWf7n.js
generated
vendored
27
web/assets/index-Dzu9WL4p.js
generated
vendored
@ -1,27 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { bX as script$1, o as openBlock, f as createElementBlock, at as mergeProps, m as createBaseVNode } from "./index-Bv0b06LE.js";
|
|
||||||
var script = {
|
|
||||||
name: "BarsIcon",
|
|
||||||
"extends": script$1
|
|
||||||
};
|
|
||||||
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
||||||
return openBlock(), createElementBlock("svg", mergeProps({
|
|
||||||
width: "14",
|
|
||||||
height: "14",
|
|
||||||
viewBox: "0 0 14 14",
|
|
||||||
fill: "none",
|
|
||||||
xmlns: "http://www.w3.org/2000/svg"
|
|
||||||
}, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", {
|
|
||||||
"fill-rule": "evenodd",
|
|
||||||
"clip-rule": "evenodd",
|
|
||||||
d: "M13.3226 3.6129H0.677419C0.497757 3.6129 0.325452 3.54152 0.198411 3.41448C0.0713707 3.28744 0 3.11514 0 2.93548C0 2.75581 0.0713707 2.58351 0.198411 2.45647C0.325452 2.32943 0.497757 2.25806 0.677419 2.25806H13.3226C13.5022 2.25806 13.6745 2.32943 13.8016 2.45647C13.9286 2.58351 14 2.75581 14 2.93548C14 3.11514 13.9286 3.28744 13.8016 3.41448C13.6745 3.54152 13.5022 3.6129 13.3226 3.6129ZM13.3226 7.67741H0.677419C0.497757 7.67741 0.325452 7.60604 0.198411 7.479C0.0713707 7.35196 0 7.17965 0 6.99999C0 6.82033 0.0713707 6.64802 0.198411 6.52098C0.325452 6.39394 0.497757 6.32257 0.677419 6.32257H13.3226C13.5022 6.32257 13.6745 6.39394 13.8016 6.52098C13.9286 6.64802 14 6.82033 14 6.99999C14 7.17965 13.9286 7.35196 13.8016 7.479C13.6745 7.60604 13.5022 7.67741 13.3226 7.67741ZM0.677419 11.7419H13.3226C13.5022 11.7419 13.6745 11.6706 13.8016 11.5435C13.9286 11.4165 14 11.2442 14 11.0645C14 10.8848 13.9286 10.7125 13.8016 10.5855C13.6745 10.4585 13.5022 10.3871 13.3226 10.3871H0.677419C0.497757 10.3871 0.325452 10.4585 0.198411 10.5855C0.0713707 10.7125 0 10.8848 0 11.0645C0 11.2442 0.0713707 11.4165 0.198411 11.5435C0.325452 11.6706 0.497757 11.7419 0.677419 11.7419Z",
|
|
||||||
fill: "currentColor"
|
|
||||||
}, null, -1)]), 16);
|
|
||||||
}
|
|
||||||
__name(render, "render");
|
|
||||||
script.render = render;
|
|
||||||
export {
|
|
||||||
script as s
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=index-Dzu9WL4p.js.map
|
|
539
web/assets/index-SeIZOWJp.js
generated
vendored
250
web/assets/keybindingService-DyjX-nxF.js
generated
vendored
@ -1,250 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { ao as useKeybindingStore, J as useCommandStore, a as useSettingStore, dA as KeyComboImpl, dB as KeybindingImpl } from "./index-Bv0b06LE.js";
|
|
||||||
const CORE_KEYBINDINGS = [
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
ctrl: true,
|
|
||||||
key: "Enter"
|
|
||||||
},
|
|
||||||
commandId: "Comfy.QueuePrompt"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
ctrl: true,
|
|
||||||
shift: true,
|
|
||||||
key: "Enter"
|
|
||||||
},
|
|
||||||
commandId: "Comfy.QueuePromptFront"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
ctrl: true,
|
|
||||||
alt: true,
|
|
||||||
key: "Enter"
|
|
||||||
},
|
|
||||||
commandId: "Comfy.Interrupt"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "r"
|
|
||||||
},
|
|
||||||
commandId: "Comfy.RefreshNodeDefinitions"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "q"
|
|
||||||
},
|
|
||||||
commandId: "Workspace.ToggleSidebarTab.queue"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "w"
|
|
||||||
},
|
|
||||||
commandId: "Workspace.ToggleSidebarTab.workflows"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "n"
|
|
||||||
},
|
|
||||||
commandId: "Workspace.ToggleSidebarTab.node-library"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "m"
|
|
||||||
},
|
|
||||||
commandId: "Workspace.ToggleSidebarTab.model-library"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "s",
|
|
||||||
ctrl: true
|
|
||||||
},
|
|
||||||
commandId: "Comfy.SaveWorkflow"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "o",
|
|
||||||
ctrl: true
|
|
||||||
},
|
|
||||||
commandId: "Comfy.OpenWorkflow"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "Backspace"
|
|
||||||
},
|
|
||||||
commandId: "Comfy.ClearWorkflow"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "g",
|
|
||||||
ctrl: true
|
|
||||||
},
|
|
||||||
commandId: "Comfy.Graph.GroupSelectedNodes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: ",",
|
|
||||||
ctrl: true
|
|
||||||
},
|
|
||||||
commandId: "Comfy.ShowSettingsDialog"
|
|
||||||
},
|
|
||||||
// For '=' both holding shift and not holding shift
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "=",
|
|
||||||
alt: true
|
|
||||||
},
|
|
||||||
commandId: "Comfy.Canvas.ZoomIn",
|
|
||||||
targetElementId: "graph-canvas"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "+",
|
|
||||||
alt: true,
|
|
||||||
shift: true
|
|
||||||
},
|
|
||||||
commandId: "Comfy.Canvas.ZoomIn",
|
|
||||||
targetElementId: "graph-canvas"
|
|
||||||
},
|
|
||||||
// For number pad '+'
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "+",
|
|
||||||
alt: true
|
|
||||||
},
|
|
||||||
commandId: "Comfy.Canvas.ZoomIn",
|
|
||||||
targetElementId: "graph-canvas"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "-",
|
|
||||||
alt: true
|
|
||||||
},
|
|
||||||
commandId: "Comfy.Canvas.ZoomOut",
|
|
||||||
targetElementId: "graph-canvas"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "."
|
|
||||||
},
|
|
||||||
commandId: "Comfy.Canvas.FitView",
|
|
||||||
targetElementId: "graph-canvas"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "p"
|
|
||||||
},
|
|
||||||
commandId: "Comfy.Canvas.ToggleSelected.Pin",
|
|
||||||
targetElementId: "graph-canvas"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "c",
|
|
||||||
alt: true
|
|
||||||
},
|
|
||||||
commandId: "Comfy.Canvas.ToggleSelectedNodes.Collapse",
|
|
||||||
targetElementId: "graph-canvas"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "b",
|
|
||||||
ctrl: true
|
|
||||||
},
|
|
||||||
commandId: "Comfy.Canvas.ToggleSelectedNodes.Bypass",
|
|
||||||
targetElementId: "graph-canvas"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "m",
|
|
||||||
ctrl: true
|
|
||||||
},
|
|
||||||
commandId: "Comfy.Canvas.ToggleSelectedNodes.Mute",
|
|
||||||
targetElementId: "graph-canvas"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "`",
|
|
||||||
ctrl: true
|
|
||||||
},
|
|
||||||
commandId: "Workspace.ToggleBottomPanelTab.logs-terminal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
combo: {
|
|
||||||
key: "f"
|
|
||||||
},
|
|
||||||
commandId: "Workspace.ToggleFocusMode"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
const useKeybindingService = /* @__PURE__ */ __name(() => {
|
|
||||||
const keybindingStore = useKeybindingStore();
|
|
||||||
const commandStore = useCommandStore();
|
|
||||||
const settingStore = useSettingStore();
|
|
||||||
const keybindHandler = /* @__PURE__ */ __name(async function(event) {
|
|
||||||
const keyCombo = KeyComboImpl.fromEvent(event);
|
|
||||||
if (keyCombo.isModifier) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const target = event.composedPath()[0];
|
|
||||||
if (keyCombo.isReservedByTextInput && (target.tagName === "TEXTAREA" || target.tagName === "INPUT" || target.tagName === "SPAN" && target.classList.contains("property_value"))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const keybinding = keybindingStore.getKeybinding(keyCombo);
|
|
||||||
if (keybinding && keybinding.targetElementId !== "graph-canvas") {
|
|
||||||
event.preventDefault();
|
|
||||||
await commandStore.execute(keybinding.commandId);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (event.ctrlKey || event.altKey || event.metaKey) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (event.key === "Escape") {
|
|
||||||
const modals = document.querySelectorAll(".comfy-modal");
|
|
||||||
for (const modal of modals) {
|
|
||||||
const modalDisplay = window.getComputedStyle(modal).getPropertyValue("display");
|
|
||||||
if (modalDisplay !== "none") {
|
|
||||||
modal.style.display = "none";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (const d of document.querySelectorAll("dialog")) d.close();
|
|
||||||
}
|
|
||||||
}, "keybindHandler");
|
|
||||||
const registerCoreKeybindings = /* @__PURE__ */ __name(() => {
|
|
||||||
for (const keybinding of CORE_KEYBINDINGS) {
|
|
||||||
keybindingStore.addDefaultKeybinding(new KeybindingImpl(keybinding));
|
|
||||||
}
|
|
||||||
}, "registerCoreKeybindings");
|
|
||||||
function registerUserKeybindings() {
|
|
||||||
const unsetBindings = settingStore.get("Comfy.Keybinding.UnsetBindings");
|
|
||||||
for (const keybinding of unsetBindings) {
|
|
||||||
keybindingStore.unsetKeybinding(new KeybindingImpl(keybinding));
|
|
||||||
}
|
|
||||||
const newBindings = settingStore.get("Comfy.Keybinding.NewBindings");
|
|
||||||
for (const keybinding of newBindings) {
|
|
||||||
keybindingStore.addUserKeybinding(new KeybindingImpl(keybinding));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__name(registerUserKeybindings, "registerUserKeybindings");
|
|
||||||
async function persistUserKeybindings() {
|
|
||||||
await settingStore.set(
|
|
||||||
"Comfy.Keybinding.NewBindings",
|
|
||||||
Object.values(keybindingStore.getUserKeybindings())
|
|
||||||
);
|
|
||||||
await settingStore.set(
|
|
||||||
"Comfy.Keybinding.UnsetBindings",
|
|
||||||
Object.values(keybindingStore.getUserUnsetKeybindings())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
__name(persistUserKeybindings, "persistUserKeybindings");
|
|
||||||
return {
|
|
||||||
keybindHandler,
|
|
||||||
registerCoreKeybindings,
|
|
||||||
registerUserKeybindings,
|
|
||||||
persistUserKeybindings
|
|
||||||
};
|
|
||||||
}, "useKeybindingService");
|
|
||||||
export {
|
|
||||||
useKeybindingService as u
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=keybindingService-DyjX-nxF.js.map
|
|
BIN
web/assets/primeicons-C6QP2o4f.woff2
generated
vendored
BIN
web/assets/primeicons-DMOk5skT.eot
generated
vendored
345
web/assets/primeicons-Dr5RGzOO.svg
generated
vendored
Before Width: | Height: | Size: 334 KiB |
BIN
web/assets/primeicons-MpK4pl85.ttf
generated
vendored
BIN
web/assets/primeicons-WjwUDZjB.woff
generated
vendored
90
web/assets/serverConfigStore-D2Vr0L0h.js
generated
vendored
@ -1,90 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { a1 as defineStore, T as ref, c as computed } from "./index-Bv0b06LE.js";
|
|
||||||
const useServerConfigStore = defineStore("serverConfig", () => {
|
|
||||||
const serverConfigById = ref({});
|
|
||||||
const serverConfigs = computed(() => {
|
|
||||||
return Object.values(serverConfigById.value);
|
|
||||||
});
|
|
||||||
const modifiedConfigs = computed(
|
|
||||||
() => {
|
|
||||||
return serverConfigs.value.filter((config) => {
|
|
||||||
return config.initialValue !== config.value;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
||||||
const revertChanges = /* @__PURE__ */ __name(() => {
|
|
||||||
for (const config of modifiedConfigs.value) {
|
|
||||||
config.value = config.initialValue;
|
|
||||||
}
|
|
||||||
}, "revertChanges");
|
|
||||||
const serverConfigsByCategory = computed(() => {
|
|
||||||
return serverConfigs.value.reduce(
|
|
||||||
(acc, config) => {
|
|
||||||
const category = config.category?.[0] ?? "General";
|
|
||||||
acc[category] = acc[category] || [];
|
|
||||||
acc[category].push(config);
|
|
||||||
return acc;
|
|
||||||
},
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
const serverConfigValues = computed(() => {
|
|
||||||
return Object.fromEntries(
|
|
||||||
serverConfigs.value.map((config) => {
|
|
||||||
return [
|
|
||||||
config.id,
|
|
||||||
config.value === config.defaultValue || config.value === null || config.value === void 0 ? void 0 : config.value
|
|
||||||
];
|
|
||||||
})
|
|
||||||
);
|
|
||||||
});
|
|
||||||
const launchArgs = computed(() => {
|
|
||||||
const args = Object.assign(
|
|
||||||
{},
|
|
||||||
...serverConfigs.value.map((config) => {
|
|
||||||
if (config.value === config.defaultValue || config.value === null || config.value === void 0) {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
return config.getValue ? config.getValue(config.value) : { [config.id]: config.value };
|
|
||||||
})
|
|
||||||
);
|
|
||||||
return Object.fromEntries(
|
|
||||||
Object.entries(args).map(([key, value]) => {
|
|
||||||
if (value === true) {
|
|
||||||
return [key, ""];
|
|
||||||
}
|
|
||||||
return [key, value.toString()];
|
|
||||||
})
|
|
||||||
);
|
|
||||||
});
|
|
||||||
const commandLineArgs = computed(() => {
|
|
||||||
return Object.entries(launchArgs.value).map(([key, value]) => [`--${key}`, value]).flat().filter((arg) => arg !== "").join(" ");
|
|
||||||
});
|
|
||||||
function loadServerConfig(configs, values) {
|
|
||||||
for (const config of configs) {
|
|
||||||
const value = values[config.id] ?? config.defaultValue;
|
|
||||||
serverConfigById.value[config.id] = {
|
|
||||||
...config,
|
|
||||||
value,
|
|
||||||
initialValue: value
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__name(loadServerConfig, "loadServerConfig");
|
|
||||||
return {
|
|
||||||
serverConfigById,
|
|
||||||
serverConfigs,
|
|
||||||
modifiedConfigs,
|
|
||||||
serverConfigsByCategory,
|
|
||||||
serverConfigValues,
|
|
||||||
launchArgs,
|
|
||||||
commandLineArgs,
|
|
||||||
revertChanges,
|
|
||||||
loadServerConfig
|
|
||||||
};
|
|
||||||
});
|
|
||||||
export {
|
|
||||||
useServerConfigStore as u
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=serverConfigStore-D2Vr0L0h.js.map
|
|
2602
web/assets/sorted-custom-node-map.json
generated
vendored
16
web/assets/uvMirrors-B-HKMf6X.js
generated
vendored
@ -1,16 +0,0 @@
|
|||||||
const PYTHON_MIRROR = {
|
|
||||||
settingId: "Comfy-Desktop.UV.PythonInstallMirror",
|
|
||||||
mirror: "https://github.com/astral-sh/python-build-standalone/releases/download",
|
|
||||||
fallbackMirror: "https://bgithub.xyz/astral-sh/python-build-standalone/releases/download",
|
|
||||||
validationPathSuffix: "/20250115/cpython-3.10.16+20250115-aarch64-apple-darwin-debug-full.tar.zst.sha256"
|
|
||||||
};
|
|
||||||
const PYPI_MIRROR = {
|
|
||||||
settingId: "Comfy-Desktop.UV.PypiInstallMirror",
|
|
||||||
mirror: "https://pypi.org/simple/",
|
|
||||||
fallbackMirror: "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
|
||||||
};
|
|
||||||
export {
|
|
||||||
PYTHON_MIRROR as P,
|
|
||||||
PYPI_MIRROR as a
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=uvMirrors-B-HKMf6X.js.map
|
|
BIN
web/cursor/colorSelect.png
vendored
Before Width: | Height: | Size: 373 B |
BIN
web/cursor/paintBucket.png
vendored
Before Width: | Height: | Size: 410 B |
2
web/extensions/core/clipspace.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for extensions/core/clipspace.ts
|
|
||||||
export const ClipspaceDialog = window.comfyAPI.clipspace.ClipspaceDialog;
|
|
3
web/extensions/core/groupNode.js
vendored
@ -1,3 +0,0 @@
|
|||||||
// Shim for extensions/core/groupNode.ts
|
|
||||||
export const GroupNodeConfig = window.comfyAPI.groupNode.GroupNodeConfig;
|
|
||||||
export const GroupNodeHandler = window.comfyAPI.groupNode.GroupNodeHandler;
|
|
2
web/extensions/core/groupNodeManage.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for extensions/core/groupNodeManage.ts
|
|
||||||
export const ManageGroupDialog = window.comfyAPI.groupNodeManage.ManageGroupDialog;
|
|
2
web/extensions/core/maskEditorOld.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for extensions/core/maskEditorOld.ts
|
|
||||||
export const MaskEditorDialogOld = window.comfyAPI.maskEditorOld.MaskEditorDialogOld;
|
|
5
web/extensions/core/widgetInputs.js
vendored
@ -1,5 +0,0 @@
|
|||||||
// Shim for extensions/core/widgetInputs.ts
|
|
||||||
export const getWidgetConfig = window.comfyAPI.widgetInputs.getWidgetConfig;
|
|
||||||
export const convertToInput = window.comfyAPI.widgetInputs.convertToInput;
|
|
||||||
export const setWidgetConfig = window.comfyAPI.widgetInputs.setWidgetConfig;
|
|
||||||
export const mergeIfValid = window.comfyAPI.widgetInputs.mergeIfValid;
|
|
BIN
web/fonts/materialdesignicons-webfont.woff2
vendored
15
web/index.html
vendored
@ -1,15 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>ComfyUI</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
|
|
||||||
<link rel="stylesheet" type="text/css" href="user.css" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="materialdesignicons.min.css" />
|
|
||||||
<script type="module" crossorigin src="./assets/index-Bv0b06LE.js"></script>
|
|
||||||
<link rel="stylesheet" crossorigin href="./assets/index-CBxvvAzM.css">
|
|
||||||
</head>
|
|
||||||
<body class="litegraph grid">
|
|
||||||
<div id="vue-app"></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
3
web/materialdesignicons.min.css
vendored
3
web/scripts/api.js
vendored
@ -1,3 +0,0 @@
|
|||||||
// Shim for scripts/api.ts
|
|
||||||
export const ComfyApi = window.comfyAPI.api.ComfyApi;
|
|
||||||
export const api = window.comfyAPI.api.api;
|
|
4
web/scripts/app.js
vendored
@ -1,4 +0,0 @@
|
|||||||
// Shim for scripts/app.ts
|
|
||||||
export const ANIM_PREVIEW_WIDGET = window.comfyAPI.app.ANIM_PREVIEW_WIDGET;
|
|
||||||
export const ComfyApp = window.comfyAPI.app.ComfyApp;
|
|
||||||
export const app = window.comfyAPI.app.app;
|
|
2
web/scripts/changeTracker.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/changeTracker.ts
|
|
||||||
export const ChangeTracker = window.comfyAPI.changeTracker.ChangeTracker;
|
|
4
web/scripts/defaultGraph.js
vendored
@ -1,4 +0,0 @@
|
|||||||
// Shim for scripts/defaultGraph.ts
|
|
||||||
export const defaultGraph = window.comfyAPI.defaultGraph.defaultGraph;
|
|
||||||
export const defaultGraphJSON = window.comfyAPI.defaultGraph.defaultGraphJSON;
|
|
||||||
export const blankGraph = window.comfyAPI.defaultGraph.blankGraph;
|
|
2
web/scripts/domWidget.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/domWidget.ts
|
|
||||||
export const DOMWidgetImpl = window.comfyAPI.domWidget.DOMWidgetImpl;
|
|
3
web/scripts/metadata/flac.js
vendored
@ -1,3 +0,0 @@
|
|||||||
// Shim for scripts/metadata/flac.ts
|
|
||||||
export const getFromFlacBuffer = window.comfyAPI.flac.getFromFlacBuffer;
|
|
||||||
export const getFromFlacFile = window.comfyAPI.flac.getFromFlacFile;
|
|
3
web/scripts/metadata/png.js
vendored
@ -1,3 +0,0 @@
|
|||||||
// Shim for scripts/metadata/png.ts
|
|
||||||
export const getFromPngBuffer = window.comfyAPI.png.getFromPngBuffer;
|
|
||||||
export const getFromPngFile = window.comfyAPI.png.getFromPngFile;
|
|
6
web/scripts/pnginfo.js
vendored
@ -1,6 +0,0 @@
|
|||||||
// Shim for scripts/pnginfo.ts
|
|
||||||
export const getPngMetadata = window.comfyAPI.pnginfo.getPngMetadata;
|
|
||||||
export const getFlacMetadata = window.comfyAPI.pnginfo.getFlacMetadata;
|
|
||||||
export const getWebpMetadata = window.comfyAPI.pnginfo.getWebpMetadata;
|
|
||||||
export const getLatentMetadata = window.comfyAPI.pnginfo.getLatentMetadata;
|
|
||||||
export const importA1111 = window.comfyAPI.pnginfo.importA1111;
|
|
4
web/scripts/ui.js
vendored
@ -1,4 +0,0 @@
|
|||||||
// Shim for scripts/ui.ts
|
|
||||||
export const ComfyDialog = window.comfyAPI.ui.ComfyDialog;
|
|
||||||
export const $el = window.comfyAPI.ui.$el;
|
|
||||||
export const ComfyUI = window.comfyAPI.ui.ComfyUI;
|
|
2
web/scripts/ui/components/asyncDialog.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/ui/components/asyncDialog.ts
|
|
||||||
export const ComfyAsyncDialog = window.comfyAPI.asyncDialog.ComfyAsyncDialog;
|
|
2
web/scripts/ui/components/button.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/ui/components/button.ts
|
|
||||||
export const ComfyButton = window.comfyAPI.button.ComfyButton;
|
|
2
web/scripts/ui/components/buttonGroup.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/ui/components/buttonGroup.ts
|
|
||||||
export const ComfyButtonGroup = window.comfyAPI.buttonGroup.ComfyButtonGroup;
|
|
2
web/scripts/ui/components/popup.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/ui/components/popup.ts
|
|
||||||
export const ComfyPopup = window.comfyAPI.popup.ComfyPopup;
|
|
2
web/scripts/ui/components/splitButton.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/ui/components/splitButton.ts
|
|
||||||
export const ComfySplitButton = window.comfyAPI.splitButton.ComfySplitButton;
|
|
2
web/scripts/ui/dialog.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/ui/dialog.ts
|
|
||||||
export const ComfyDialog = window.comfyAPI.dialog.ComfyDialog;
|
|
2
web/scripts/ui/draggableList.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/ui/draggableList.ts
|
|
||||||
export const DraggableList = window.comfyAPI.draggableList.DraggableList;
|
|
3
web/scripts/ui/imagePreview.js
vendored
@ -1,3 +0,0 @@
|
|||||||
// Shim for scripts/ui/imagePreview.ts
|
|
||||||
export const calculateImageGrid = window.comfyAPI.imagePreview.calculateImageGrid;
|
|
||||||
export const createImageHost = window.comfyAPI.imagePreview.createImageHost;
|
|
2
web/scripts/ui/menu/index.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/ui/menu/index.ts
|
|
||||||
export const ComfyAppMenu = window.comfyAPI.index.ComfyAppMenu;
|
|
2
web/scripts/ui/settings.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/ui/settings.ts
|
|
||||||
export const ComfySettingsDialog = window.comfyAPI.settings.ComfySettingsDialog;
|
|
2
web/scripts/ui/toggleSwitch.js
vendored
@ -1,2 +0,0 @@
|
|||||||
// Shim for scripts/ui/toggleSwitch.ts
|
|
||||||
export const toggleSwitch = window.comfyAPI.toggleSwitch.toggleSwitch;
|
|
3
web/scripts/ui/utils.js
vendored
@ -1,3 +0,0 @@
|
|||||||
// Shim for scripts/ui/utils.ts
|
|
||||||
export const applyClasses = window.comfyAPI.utils.applyClasses;
|
|
||||||
export const toggleElement = window.comfyAPI.utils.toggleElement;
|
|
9
web/scripts/utils.js
vendored
@ -1,9 +0,0 @@
|
|||||||
// Shim for scripts/utils.ts
|
|
||||||
export const clone = window.comfyAPI.utils.clone;
|
|
||||||
export const applyTextReplacements = window.comfyAPI.utils.applyTextReplacements;
|
|
||||||
export const addStylesheet = window.comfyAPI.utils.addStylesheet;
|
|
||||||
export const downloadBlob = window.comfyAPI.utils.downloadBlob;
|
|
||||||
export const uploadFile = window.comfyAPI.utils.uploadFile;
|
|
||||||
export const prop = window.comfyAPI.utils.prop;
|
|
||||||
export const getStorageValue = window.comfyAPI.utils.getStorageValue;
|
|
||||||
export const setStorageValue = window.comfyAPI.utils.setStorageValue;
|
|
6
web/scripts/widgets.js
vendored
@ -1,6 +0,0 @@
|
|||||||
// Shim for scripts/widgets.ts
|
|
||||||
export const updateControlWidgetLabel = window.comfyAPI.widgets.updateControlWidgetLabel;
|
|
||||||
export const IS_CONTROL_WIDGET = window.comfyAPI.widgets.IS_CONTROL_WIDGET;
|
|
||||||
export const addValueControlWidget = window.comfyAPI.widgets.addValueControlWidget;
|
|
||||||
export const addValueControlWidgets = window.comfyAPI.widgets.addValueControlWidgets;
|
|
||||||
export const ComfyWidgets = window.comfyAPI.widgets.ComfyWidgets;
|
|
BIN
web/templates/default.jpg
vendored
Before Width: | Height: | Size: 20 KiB |
356
web/templates/default.json
vendored
@ -1,356 +0,0 @@
|
|||||||
{
|
|
||||||
"last_node_id": 9,
|
|
||||||
"last_link_id": 9,
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"id": 7,
|
|
||||||
"type": "CLIPTextEncode",
|
|
||||||
"pos": [
|
|
||||||
413,
|
|
||||||
389
|
|
||||||
],
|
|
||||||
"size": [
|
|
||||||
425.27801513671875,
|
|
||||||
180.6060791015625
|
|
||||||
],
|
|
||||||
"flags": {},
|
|
||||||
"order": 3,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "clip",
|
|
||||||
"type": "CLIP",
|
|
||||||
"link": 5
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "CONDITIONING",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"links": [
|
|
||||||
6
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {},
|
|
||||||
"widgets_values": [
|
|
||||||
"text, watermark"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 6,
|
|
||||||
"type": "CLIPTextEncode",
|
|
||||||
"pos": [
|
|
||||||
415,
|
|
||||||
186
|
|
||||||
],
|
|
||||||
"size": [
|
|
||||||
422.84503173828125,
|
|
||||||
164.31304931640625
|
|
||||||
],
|
|
||||||
"flags": {},
|
|
||||||
"order": 2,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "clip",
|
|
||||||
"type": "CLIP",
|
|
||||||
"link": 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "CONDITIONING",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"links": [
|
|
||||||
4
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {},
|
|
||||||
"widgets_values": [
|
|
||||||
"beautiful scenery nature glass bottle landscape, , purple galaxy bottle,"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 5,
|
|
||||||
"type": "EmptyLatentImage",
|
|
||||||
"pos": [
|
|
||||||
473,
|
|
||||||
609
|
|
||||||
],
|
|
||||||
"size": [
|
|
||||||
315,
|
|
||||||
106
|
|
||||||
],
|
|
||||||
"flags": {},
|
|
||||||
"order": 1,
|
|
||||||
"mode": 0,
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "LATENT",
|
|
||||||
"type": "LATENT",
|
|
||||||
"links": [
|
|
||||||
2
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {},
|
|
||||||
"widgets_values": [
|
|
||||||
512,
|
|
||||||
512,
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"type": "KSampler",
|
|
||||||
"pos": [
|
|
||||||
863,
|
|
||||||
186
|
|
||||||
],
|
|
||||||
"size": [
|
|
||||||
315,
|
|
||||||
262
|
|
||||||
],
|
|
||||||
"flags": {},
|
|
||||||
"order": 4,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "model",
|
|
||||||
"type": "MODEL",
|
|
||||||
"link": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "positive",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"link": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "negative",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"link": 6
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "latent_image",
|
|
||||||
"type": "LATENT",
|
|
||||||
"link": 2
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "LATENT",
|
|
||||||
"type": "LATENT",
|
|
||||||
"links": [
|
|
||||||
7
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {},
|
|
||||||
"widgets_values": [
|
|
||||||
156680208700286,
|
|
||||||
true,
|
|
||||||
20,
|
|
||||||
8,
|
|
||||||
"euler",
|
|
||||||
"normal",
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 8,
|
|
||||||
"type": "VAEDecode",
|
|
||||||
"pos": [
|
|
||||||
1209,
|
|
||||||
188
|
|
||||||
],
|
|
||||||
"size": [
|
|
||||||
210,
|
|
||||||
46
|
|
||||||
],
|
|
||||||
"flags": {},
|
|
||||||
"order": 5,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "samples",
|
|
||||||
"type": "LATENT",
|
|
||||||
"link": 7
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "vae",
|
|
||||||
"type": "VAE",
|
|
||||||
"link": 8
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "IMAGE",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"links": [
|
|
||||||
9
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 9,
|
|
||||||
"type": "SaveImage",
|
|
||||||
"pos": [
|
|
||||||
1451,
|
|
||||||
189
|
|
||||||
],
|
|
||||||
"size": [
|
|
||||||
210,
|
|
||||||
26
|
|
||||||
],
|
|
||||||
"flags": {},
|
|
||||||
"order": 6,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "images",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"link": 9
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 4,
|
|
||||||
"type": "CheckpointLoaderSimple",
|
|
||||||
"pos": [
|
|
||||||
26,
|
|
||||||
474
|
|
||||||
],
|
|
||||||
"size": [
|
|
||||||
315,
|
|
||||||
98
|
|
||||||
],
|
|
||||||
"flags": {},
|
|
||||||
"order": 0,
|
|
||||||
"mode": 0,
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "MODEL",
|
|
||||||
"type": "MODEL",
|
|
||||||
"links": [
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "CLIP",
|
|
||||||
"type": "CLIP",
|
|
||||||
"links": [
|
|
||||||
3,
|
|
||||||
5
|
|
||||||
],
|
|
||||||
"slot_index": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "VAE",
|
|
||||||
"type": "VAE",
|
|
||||||
"links": [
|
|
||||||
8
|
|
||||||
],
|
|
||||||
"slot_index": 2
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {},
|
|
||||||
"widgets_values": [
|
|
||||||
"v1-5-pruned-emaonly-fp16.safetensors"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"links": [
|
|
||||||
[
|
|
||||||
1,
|
|
||||||
4,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
"MODEL"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
2,
|
|
||||||
5,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
"LATENT"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
3,
|
|
||||||
4,
|
|
||||||
1,
|
|
||||||
6,
|
|
||||||
0,
|
|
||||||
"CLIP"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
4,
|
|
||||||
6,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
1,
|
|
||||||
"CONDITIONING"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
5,
|
|
||||||
4,
|
|
||||||
1,
|
|
||||||
7,
|
|
||||||
0,
|
|
||||||
"CLIP"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
6,
|
|
||||||
7,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
2,
|
|
||||||
"CONDITIONING"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
7,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
8,
|
|
||||||
0,
|
|
||||||
"LATENT"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
8,
|
|
||||||
4,
|
|
||||||
2,
|
|
||||||
8,
|
|
||||||
1,
|
|
||||||
"VAE"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
9,
|
|
||||||
8,
|
|
||||||
0,
|
|
||||||
9,
|
|
||||||
0,
|
|
||||||
"IMAGE"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"groups": [],
|
|
||||||
"config": {},
|
|
||||||
"extra": {},
|
|
||||||
"version": 0.4,
|
|
||||||
"models": [{
|
|
||||||
"name": "v1-5-pruned-emaonly-fp16.safetensors",
|
|
||||||
"url": "https://huggingface.co/Comfy-Org/stable-diffusion-v1-5-archive/resolve/main/v1-5-pruned-emaonly-fp16.safetensors?download=true",
|
|
||||||
"directory": "checkpoints"
|
|
||||||
}]
|
|
||||||
}
|
|
BIN
web/templates/flux_schnell.jpg
vendored
Before Width: | Height: | Size: 23 KiB |
420
web/templates/flux_schnell.json
vendored
@ -1,420 +0,0 @@
|
|||||||
{
|
|
||||||
"last_node_id": 36,
|
|
||||||
"last_link_id": 58,
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"id": 33,
|
|
||||||
"type": "CLIPTextEncode",
|
|
||||||
"pos": [
|
|
||||||
390,
|
|
||||||
400
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 422.84503173828125,
|
|
||||||
"1": 164.31304931640625
|
|
||||||
},
|
|
||||||
"flags": {
|
|
||||||
"collapsed": true
|
|
||||||
},
|
|
||||||
"order": 4,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "clip",
|
|
||||||
"type": "CLIP",
|
|
||||||
"link": 54,
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "CONDITIONING",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"links": [
|
|
||||||
55
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "CLIP Text Encode (Negative Prompt)",
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "CLIPTextEncode"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
""
|
|
||||||
],
|
|
||||||
"color": "#322",
|
|
||||||
"bgcolor": "#533"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 27,
|
|
||||||
"type": "EmptySD3LatentImage",
|
|
||||||
"pos": [
|
|
||||||
471,
|
|
||||||
455
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 315,
|
|
||||||
"1": 106
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 0,
|
|
||||||
"mode": 0,
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "LATENT",
|
|
||||||
"type": "LATENT",
|
|
||||||
"links": [
|
|
||||||
51
|
|
||||||
],
|
|
||||||
"shape": 3,
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "EmptySD3LatentImage"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
1024,
|
|
||||||
1024,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"color": "#323",
|
|
||||||
"bgcolor": "#535"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 8,
|
|
||||||
"type": "VAEDecode",
|
|
||||||
"pos": [
|
|
||||||
1151,
|
|
||||||
195
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 210,
|
|
||||||
"1": 46
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 6,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "samples",
|
|
||||||
"type": "LATENT",
|
|
||||||
"link": 52
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "vae",
|
|
||||||
"type": "VAE",
|
|
||||||
"link": 46
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "IMAGE",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"links": [
|
|
||||||
9
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "VAEDecode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 9,
|
|
||||||
"type": "SaveImage",
|
|
||||||
"pos": [
|
|
||||||
1375,
|
|
||||||
194
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 985.3012084960938,
|
|
||||||
"1": 1060.3828125
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 7,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "images",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"link": 9
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {},
|
|
||||||
"widgets_values": [
|
|
||||||
"ComfyUI"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 31,
|
|
||||||
"type": "KSampler",
|
|
||||||
"pos": [
|
|
||||||
816,
|
|
||||||
192
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 315,
|
|
||||||
"1": 262
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 5,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "model",
|
|
||||||
"type": "MODEL",
|
|
||||||
"link": 47
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "positive",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"link": 58
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "negative",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"link": 55
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "latent_image",
|
|
||||||
"type": "LATENT",
|
|
||||||
"link": 51
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "LATENT",
|
|
||||||
"type": "LATENT",
|
|
||||||
"links": [
|
|
||||||
52
|
|
||||||
],
|
|
||||||
"shape": 3,
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "KSampler"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
173805153958730,
|
|
||||||
"randomize",
|
|
||||||
4,
|
|
||||||
1,
|
|
||||||
"euler",
|
|
||||||
"simple",
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 30,
|
|
||||||
"type": "CheckpointLoaderSimple",
|
|
||||||
"pos": [
|
|
||||||
48,
|
|
||||||
192
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 315,
|
|
||||||
"1": 98
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 1,
|
|
||||||
"mode": 0,
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "MODEL",
|
|
||||||
"type": "MODEL",
|
|
||||||
"links": [
|
|
||||||
47
|
|
||||||
],
|
|
||||||
"shape": 3,
|
|
||||||
"slot_index": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "CLIP",
|
|
||||||
"type": "CLIP",
|
|
||||||
"links": [
|
|
||||||
45,
|
|
||||||
54
|
|
||||||
],
|
|
||||||
"shape": 3,
|
|
||||||
"slot_index": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "VAE",
|
|
||||||
"type": "VAE",
|
|
||||||
"links": [
|
|
||||||
46
|
|
||||||
],
|
|
||||||
"shape": 3,
|
|
||||||
"slot_index": 2
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "CheckpointLoaderSimple"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
"flux1-schnell-fp8.safetensors"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 6,
|
|
||||||
"type": "CLIPTextEncode",
|
|
||||||
"pos": [
|
|
||||||
384,
|
|
||||||
192
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 422.84503173828125,
|
|
||||||
"1": 164.31304931640625
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 3,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "clip",
|
|
||||||
"type": "CLIP",
|
|
||||||
"link": 45
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "CONDITIONING",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"links": [
|
|
||||||
58
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "CLIP Text Encode (Positive Prompt)",
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "CLIPTextEncode"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
"a bottle with a beautiful rainbow galaxy inside it on top of a wooden table in the middle of a modern kitchen beside a plate of vegetables and mushrooms and a wine glasse that contains a planet earth with a plate with a half eaten apple pie on it"
|
|
||||||
],
|
|
||||||
"color": "#232",
|
|
||||||
"bgcolor": "#353"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 34,
|
|
||||||
"type": "Note",
|
|
||||||
"pos": [
|
|
||||||
831,
|
|
||||||
501
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 282.8617858886719,
|
|
||||||
"1": 164.08004760742188
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 2,
|
|
||||||
"mode": 0,
|
|
||||||
"properties": {
|
|
||||||
"text": ""
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
"Note that Flux dev and schnell do not have any negative prompt so CFG should be set to 1.0. Setting CFG to 1.0 means the negative prompt is ignored.\n\nThe schnell model is a distilled model that can generate a good image with only 4 steps."
|
|
||||||
],
|
|
||||||
"color": "#432",
|
|
||||||
"bgcolor": "#653"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"links": [
|
|
||||||
[
|
|
||||||
9,
|
|
||||||
8,
|
|
||||||
0,
|
|
||||||
9,
|
|
||||||
0,
|
|
||||||
"IMAGE"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
45,
|
|
||||||
30,
|
|
||||||
1,
|
|
||||||
6,
|
|
||||||
0,
|
|
||||||
"CLIP"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
46,
|
|
||||||
30,
|
|
||||||
2,
|
|
||||||
8,
|
|
||||||
1,
|
|
||||||
"VAE"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
47,
|
|
||||||
30,
|
|
||||||
0,
|
|
||||||
31,
|
|
||||||
0,
|
|
||||||
"MODEL"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
51,
|
|
||||||
27,
|
|
||||||
0,
|
|
||||||
31,
|
|
||||||
3,
|
|
||||||
"LATENT"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
52,
|
|
||||||
31,
|
|
||||||
0,
|
|
||||||
8,
|
|
||||||
0,
|
|
||||||
"LATENT"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
54,
|
|
||||||
30,
|
|
||||||
1,
|
|
||||||
33,
|
|
||||||
0,
|
|
||||||
"CLIP"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
55,
|
|
||||||
33,
|
|
||||||
0,
|
|
||||||
31,
|
|
||||||
2,
|
|
||||||
"CONDITIONING"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
58,
|
|
||||||
6,
|
|
||||||
0,
|
|
||||||
31,
|
|
||||||
1,
|
|
||||||
"CONDITIONING"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"groups": [],
|
|
||||||
"config": {},
|
|
||||||
"extra": {
|
|
||||||
"ds": {
|
|
||||||
"scale": 1.1,
|
|
||||||
"offset": [
|
|
||||||
0.6836674124529055,
|
|
||||||
1.8290357611967831
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"models": [
|
|
||||||
{
|
|
||||||
"name": "flux1-schnell-fp8.safetensors",
|
|
||||||
"url": "https://huggingface.co/Comfy-Org/flux1-schnell/resolve/main/flux1-schnell-fp8.safetensors?download=true",
|
|
||||||
"directory": "checkpoints"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"version": 0.4
|
|
||||||
}
|
|
BIN
web/templates/image2image.jpg
vendored
Before Width: | Height: | Size: 25 KiB |
447
web/templates/image2image.json
vendored
@ -1,447 +0,0 @@
|
|||||||
{
|
|
||||||
"last_node_id": 14,
|
|
||||||
"last_link_id": 17,
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"id": 7,
|
|
||||||
"type": "CLIPTextEncode",
|
|
||||||
"pos": [
|
|
||||||
413,
|
|
||||||
389
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 425.27801513671875,
|
|
||||||
"1": 180.6060791015625
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 3,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "clip",
|
|
||||||
"type": "CLIP",
|
|
||||||
"link": 15
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "CONDITIONING",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"links": [
|
|
||||||
6
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "CLIPTextEncode"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
"watermark, text\n"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 6,
|
|
||||||
"type": "CLIPTextEncode",
|
|
||||||
"pos": [
|
|
||||||
415,
|
|
||||||
186
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 422.84503173828125,
|
|
||||||
"1": 164.31304931640625
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 2,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "clip",
|
|
||||||
"type": "CLIP",
|
|
||||||
"link": 14
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "CONDITIONING",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"links": [
|
|
||||||
4
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "CLIPTextEncode"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
"photograph of victorian woman with wings, sky clouds, meadow grass\n"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 8,
|
|
||||||
"type": "VAEDecode",
|
|
||||||
"pos": [
|
|
||||||
1209,
|
|
||||||
188
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 210,
|
|
||||||
"1": 46
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 6,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "samples",
|
|
||||||
"type": "LATENT",
|
|
||||||
"link": 7
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "vae",
|
|
||||||
"type": "VAE",
|
|
||||||
"link": 17
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "IMAGE",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"links": [
|
|
||||||
9
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "VAEDecode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 9,
|
|
||||||
"type": "SaveImage",
|
|
||||||
"pos": [
|
|
||||||
1451,
|
|
||||||
189
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 210,
|
|
||||||
"1": 58
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 7,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "images",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"link": 9
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {},
|
|
||||||
"widgets_values": [
|
|
||||||
"ComfyUI"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 10,
|
|
||||||
"type": "LoadImage",
|
|
||||||
"pos": [
|
|
||||||
215.9799597167969,
|
|
||||||
703.6800268554688
|
|
||||||
],
|
|
||||||
"size": [
|
|
||||||
315,
|
|
||||||
314.00002670288086
|
|
||||||
],
|
|
||||||
"flags": {},
|
|
||||||
"order": 0,
|
|
||||||
"mode": 0,
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "IMAGE",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"links": [
|
|
||||||
10
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "MASK",
|
|
||||||
"type": "MASK",
|
|
||||||
"links": null,
|
|
||||||
"shape": 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "LoadImage"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
"example.png",
|
|
||||||
"image"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 12,
|
|
||||||
"type": "VAEEncode",
|
|
||||||
"pos": [
|
|
||||||
614.979959716797,
|
|
||||||
707.6800268554688
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 210,
|
|
||||||
"1": 46
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 4,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "pixels",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"link": 10
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "vae",
|
|
||||||
"type": "VAE",
|
|
||||||
"link": 16
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "LATENT",
|
|
||||||
"type": "LATENT",
|
|
||||||
"links": [
|
|
||||||
11
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "VAEEncode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"type": "KSampler",
|
|
||||||
"pos": [
|
|
||||||
863,
|
|
||||||
186
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 315,
|
|
||||||
"1": 262
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 5,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "model",
|
|
||||||
"type": "MODEL",
|
|
||||||
"link": 13
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "positive",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"link": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "negative",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"link": 6
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "latent_image",
|
|
||||||
"type": "LATENT",
|
|
||||||
"link": 11
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "LATENT",
|
|
||||||
"type": "LATENT",
|
|
||||||
"links": [
|
|
||||||
7
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "KSampler"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
280823642470253,
|
|
||||||
"randomize",
|
|
||||||
20,
|
|
||||||
8,
|
|
||||||
"dpmpp_2m",
|
|
||||||
"normal",
|
|
||||||
0.8700000000000001
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 14,
|
|
||||||
"type": "CheckpointLoaderSimple",
|
|
||||||
"pos": [
|
|
||||||
19,
|
|
||||||
433
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 315,
|
|
||||||
"1": 98
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 1,
|
|
||||||
"mode": 0,
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "MODEL",
|
|
||||||
"type": "MODEL",
|
|
||||||
"links": [
|
|
||||||
13
|
|
||||||
],
|
|
||||||
"shape": 3,
|
|
||||||
"slot_index": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "CLIP",
|
|
||||||
"type": "CLIP",
|
|
||||||
"links": [
|
|
||||||
14,
|
|
||||||
15
|
|
||||||
],
|
|
||||||
"shape": 3,
|
|
||||||
"slot_index": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "VAE",
|
|
||||||
"type": "VAE",
|
|
||||||
"links": [
|
|
||||||
16,
|
|
||||||
17
|
|
||||||
],
|
|
||||||
"shape": 3,
|
|
||||||
"slot_index": 2
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "CheckpointLoaderSimple"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
"v1-5-pruned-emaonly-fp16.safetensors"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"links": [
|
|
||||||
[
|
|
||||||
4,
|
|
||||||
6,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
1,
|
|
||||||
"CONDITIONING"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
6,
|
|
||||||
7,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
2,
|
|
||||||
"CONDITIONING"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
7,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
8,
|
|
||||||
0,
|
|
||||||
"LATENT"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
9,
|
|
||||||
8,
|
|
||||||
0,
|
|
||||||
9,
|
|
||||||
0,
|
|
||||||
"IMAGE"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
10,
|
|
||||||
10,
|
|
||||||
0,
|
|
||||||
12,
|
|
||||||
0,
|
|
||||||
"IMAGE"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
11,
|
|
||||||
12,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
"LATENT"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
13,
|
|
||||||
14,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
"MODEL"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
14,
|
|
||||||
14,
|
|
||||||
1,
|
|
||||||
6,
|
|
||||||
0,
|
|
||||||
"CLIP"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
15,
|
|
||||||
14,
|
|
||||||
1,
|
|
||||||
7,
|
|
||||||
0,
|
|
||||||
"CLIP"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
16,
|
|
||||||
14,
|
|
||||||
2,
|
|
||||||
12,
|
|
||||||
1,
|
|
||||||
"VAE"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
17,
|
|
||||||
14,
|
|
||||||
2,
|
|
||||||
8,
|
|
||||||
1,
|
|
||||||
"VAE"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"groups": [
|
|
||||||
{
|
|
||||||
"title": "Loading images",
|
|
||||||
"bounding": [
|
|
||||||
150,
|
|
||||||
630,
|
|
||||||
726,
|
|
||||||
171
|
|
||||||
],
|
|
||||||
"color": "#3f789e"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"config": {},
|
|
||||||
"extra": {},
|
|
||||||
"version": 0.4,
|
|
||||||
"models": [{
|
|
||||||
"name": "v1-5-pruned-emaonly-fp16.safetensors",
|
|
||||||
"url": "https://huggingface.co/Comfy-Org/stable-diffusion-v1-5-archive/resolve/main/v1-5-pruned-emaonly-fp16.safetensors?download=true",
|
|
||||||
"directory": "checkpoints"
|
|
||||||
}]
|
|
||||||
}
|
|
BIN
web/templates/upscale.jpg
vendored
Before Width: | Height: | Size: 30 KiB |
652
web/templates/upscale.json
vendored
@ -1,652 +0,0 @@
|
|||||||
{
|
|
||||||
"last_node_id": 16,
|
|
||||||
"last_link_id": 23,
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"id": 8,
|
|
||||||
"type": "VAEDecode",
|
|
||||||
"pos": [
|
|
||||||
1235.7215957031258,
|
|
||||||
577.1878720703122
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 210,
|
|
||||||
"1": 46
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 5,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "samples",
|
|
||||||
"type": "LATENT",
|
|
||||||
"link": 7
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "vae",
|
|
||||||
"type": "VAE",
|
|
||||||
"link": 21
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "IMAGE",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"links": [
|
|
||||||
9
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "VAEDecode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 10,
|
|
||||||
"type": "LatentUpscale",
|
|
||||||
"pos": [
|
|
||||||
1238,
|
|
||||||
170
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 315,
|
|
||||||
"1": 130
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 6,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "samples",
|
|
||||||
"type": "LATENT",
|
|
||||||
"link": 10
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "LATENT",
|
|
||||||
"type": "LATENT",
|
|
||||||
"links": [
|
|
||||||
14
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "LatentUpscale"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
"nearest-exact",
|
|
||||||
1152,
|
|
||||||
1152,
|
|
||||||
"disabled"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 13,
|
|
||||||
"type": "VAEDecode",
|
|
||||||
"pos": [
|
|
||||||
1961,
|
|
||||||
125
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 210,
|
|
||||||
"1": 46
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 9,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "samples",
|
|
||||||
"type": "LATENT",
|
|
||||||
"link": 15
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "vae",
|
|
||||||
"type": "VAE",
|
|
||||||
"link": 22
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "IMAGE",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"links": [
|
|
||||||
17
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "VAEDecode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 6,
|
|
||||||
"type": "CLIPTextEncode",
|
|
||||||
"pos": [
|
|
||||||
374,
|
|
||||||
171
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 422.84503173828125,
|
|
||||||
"1": 164.31304931640625
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 2,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "clip",
|
|
||||||
"type": "CLIP",
|
|
||||||
"link": 19
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "CONDITIONING",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"links": [
|
|
||||||
4,
|
|
||||||
12
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "CLIPTextEncode"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
"masterpiece HDR victorian portrait painting of woman, blonde hair, mountain nature, blue sky\n"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 7,
|
|
||||||
"type": "CLIPTextEncode",
|
|
||||||
"pos": [
|
|
||||||
377,
|
|
||||||
381
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 425.27801513671875,
|
|
||||||
"1": 180.6060791015625
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 3,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "clip",
|
|
||||||
"type": "CLIP",
|
|
||||||
"link": 20
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "CONDITIONING",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"links": [
|
|
||||||
6,
|
|
||||||
13
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "CLIPTextEncode"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
"bad hands, text, watermark\n"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 5,
|
|
||||||
"type": "EmptyLatentImage",
|
|
||||||
"pos": [
|
|
||||||
435,
|
|
||||||
600
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 315,
|
|
||||||
"1": 106
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 0,
|
|
||||||
"mode": 0,
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "LATENT",
|
|
||||||
"type": "LATENT",
|
|
||||||
"links": [
|
|
||||||
2
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "EmptyLatentImage"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
768,
|
|
||||||
768,
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 11,
|
|
||||||
"type": "KSampler",
|
|
||||||
"pos": [
|
|
||||||
1585,
|
|
||||||
114
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 315,
|
|
||||||
"1": 262
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 8,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "model",
|
|
||||||
"type": "MODEL",
|
|
||||||
"link": 23,
|
|
||||||
"slot_index": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "positive",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"link": 12,
|
|
||||||
"slot_index": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "negative",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"link": 13,
|
|
||||||
"slot_index": 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "latent_image",
|
|
||||||
"type": "LATENT",
|
|
||||||
"link": 14,
|
|
||||||
"slot_index": 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "LATENT",
|
|
||||||
"type": "LATENT",
|
|
||||||
"links": [
|
|
||||||
15
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "KSampler"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
469771404043268,
|
|
||||||
"randomize",
|
|
||||||
14,
|
|
||||||
8,
|
|
||||||
"dpmpp_2m",
|
|
||||||
"simple",
|
|
||||||
0.5
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 12,
|
|
||||||
"type": "SaveImage",
|
|
||||||
"pos": [
|
|
||||||
2203,
|
|
||||||
123
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 407.53717041015625,
|
|
||||||
"1": 468.13226318359375
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 10,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "images",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"link": 17
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {},
|
|
||||||
"widgets_values": [
|
|
||||||
"ComfyUI"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"type": "KSampler",
|
|
||||||
"pos": [
|
|
||||||
845,
|
|
||||||
172
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 315,
|
|
||||||
"1": 262
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 4,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "model",
|
|
||||||
"type": "MODEL",
|
|
||||||
"link": 18
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "positive",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"link": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "negative",
|
|
||||||
"type": "CONDITIONING",
|
|
||||||
"link": 6
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "latent_image",
|
|
||||||
"type": "LATENT",
|
|
||||||
"link": 2
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "LATENT",
|
|
||||||
"type": "LATENT",
|
|
||||||
"links": [
|
|
||||||
7,
|
|
||||||
10
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "KSampler"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
89848141647836,
|
|
||||||
"randomize",
|
|
||||||
12,
|
|
||||||
8,
|
|
||||||
"dpmpp_sde",
|
|
||||||
"normal",
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 16,
|
|
||||||
"type": "CheckpointLoaderSimple",
|
|
||||||
"pos": [
|
|
||||||
24,
|
|
||||||
315
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"0": 315,
|
|
||||||
"1": 98
|
|
||||||
},
|
|
||||||
"flags": {},
|
|
||||||
"order": 1,
|
|
||||||
"mode": 0,
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "MODEL",
|
|
||||||
"type": "MODEL",
|
|
||||||
"links": [
|
|
||||||
18,
|
|
||||||
23
|
|
||||||
],
|
|
||||||
"slot_index": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "CLIP",
|
|
||||||
"type": "CLIP",
|
|
||||||
"links": [
|
|
||||||
19,
|
|
||||||
20
|
|
||||||
],
|
|
||||||
"slot_index": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "VAE",
|
|
||||||
"type": "VAE",
|
|
||||||
"links": [
|
|
||||||
21,
|
|
||||||
22
|
|
||||||
],
|
|
||||||
"slot_index": 2
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"Node name for S&R": "CheckpointLoaderSimple"
|
|
||||||
},
|
|
||||||
"widgets_values": [
|
|
||||||
"v2-1_768-ema-pruned.safetensors"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 9,
|
|
||||||
"type": "SaveImage",
|
|
||||||
"pos": [
|
|
||||||
1495.7215957031258,
|
|
||||||
576.1878720703122
|
|
||||||
],
|
|
||||||
"size": [
|
|
||||||
232.9403301043692,
|
|
||||||
282.4336258387117
|
|
||||||
],
|
|
||||||
"flags": {},
|
|
||||||
"order": 7,
|
|
||||||
"mode": 0,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "images",
|
|
||||||
"type": "IMAGE",
|
|
||||||
"link": 9
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {},
|
|
||||||
"widgets_values": [
|
|
||||||
"ComfyUI"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"links": [
|
|
||||||
[
|
|
||||||
2,
|
|
||||||
5,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
"LATENT"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
4,
|
|
||||||
6,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
1,
|
|
||||||
"CONDITIONING"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
6,
|
|
||||||
7,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
2,
|
|
||||||
"CONDITIONING"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
7,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
8,
|
|
||||||
0,
|
|
||||||
"LATENT"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
9,
|
|
||||||
8,
|
|
||||||
0,
|
|
||||||
9,
|
|
||||||
0,
|
|
||||||
"IMAGE"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
10,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
10,
|
|
||||||
0,
|
|
||||||
"LATENT"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
12,
|
|
||||||
6,
|
|
||||||
0,
|
|
||||||
11,
|
|
||||||
1,
|
|
||||||
"CONDITIONING"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
13,
|
|
||||||
7,
|
|
||||||
0,
|
|
||||||
11,
|
|
||||||
2,
|
|
||||||
"CONDITIONING"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
14,
|
|
||||||
10,
|
|
||||||
0,
|
|
||||||
11,
|
|
||||||
3,
|
|
||||||
"LATENT"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
15,
|
|
||||||
11,
|
|
||||||
0,
|
|
||||||
13,
|
|
||||||
0,
|
|
||||||
"LATENT"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
17,
|
|
||||||
13,
|
|
||||||
0,
|
|
||||||
12,
|
|
||||||
0,
|
|
||||||
"IMAGE"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
18,
|
|
||||||
16,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
"MODEL"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
19,
|
|
||||||
16,
|
|
||||||
1,
|
|
||||||
6,
|
|
||||||
0,
|
|
||||||
"CLIP"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
20,
|
|
||||||
16,
|
|
||||||
1,
|
|
||||||
7,
|
|
||||||
0,
|
|
||||||
"CLIP"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
21,
|
|
||||||
16,
|
|
||||||
2,
|
|
||||||
8,
|
|
||||||
1,
|
|
||||||
"VAE"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
22,
|
|
||||||
16,
|
|
||||||
2,
|
|
||||||
13,
|
|
||||||
1,
|
|
||||||
"VAE"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
23,
|
|
||||||
16,
|
|
||||||
0,
|
|
||||||
11,
|
|
||||||
0,
|
|
||||||
"MODEL"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"groups": [
|
|
||||||
{
|
|
||||||
"title": "Txt2Img",
|
|
||||||
"bounding": [
|
|
||||||
-1,
|
|
||||||
30,
|
|
||||||
1211,
|
|
||||||
708
|
|
||||||
],
|
|
||||||
"color": "#a1309b"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Save Intermediate Image",
|
|
||||||
"bounding": [
|
|
||||||
1225,
|
|
||||||
500,
|
|
||||||
516,
|
|
||||||
196
|
|
||||||
],
|
|
||||||
"color": "#3f789e"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Hires Fix",
|
|
||||||
"bounding": [
|
|
||||||
1224,
|
|
||||||
29,
|
|
||||||
710,
|
|
||||||
464
|
|
||||||
],
|
|
||||||
"color": "#b58b2a"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Save Final Image",
|
|
||||||
"bounding": [
|
|
||||||
1949,
|
|
||||||
31,
|
|
||||||
483,
|
|
||||||
199
|
|
||||||
],
|
|
||||||
"color": "#3f789e"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"config": {},
|
|
||||||
"extra": {},
|
|
||||||
"version": 0.4,
|
|
||||||
"models": [
|
|
||||||
{
|
|
||||||
"name": "v2-1_768-ema-pruned.safetensors",
|
|
||||||
"url": "https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.safetensors?download=true",
|
|
||||||
"directory": "checkpoints"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
1
web/user.css
vendored
@ -1 +0,0 @@
|
|||||||
/* Put custom styles here */
|
|