Merge branch 'comfyanonymous:master' into master

This commit is contained in:
patientx 2024-08-16 23:16:25 +03:00 committed by GitHub
commit a0daedce41
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 11982 additions and 16302 deletions

View File

@ -141,6 +141,7 @@ class StableAudio1(LatentFormat):
latent_channels = 64 latent_channels = 64
class Flux(SD3): class Flux(SD3):
latent_channels = 16
def __init__(self): def __init__(self):
self.scale_factor = 0.3611 self.scale_factor = 0.3611
self.shift_factor = 0.1159 self.shift_factor = 0.1159
@ -162,6 +163,7 @@ class Flux(SD3):
[-0.0005, -0.0530, -0.0020], [-0.0005, -0.0530, -0.0020],
[-0.1273, -0.0932, -0.0680] [-0.1273, -0.0932, -0.0680]
] ]
self.taesd_decoder_name = "taef1_decoder"
def process_in(self, latent): def process_in(self, latent):
return (latent - self.shift_factor) * self.scale_factor return (latent - self.shift_factor) * self.scale_factor

View File

@ -49,9 +49,10 @@ class IsChangedCache:
input_data_all, _ = get_input_data(node["inputs"], class_def, node_id, self.outputs_cache) input_data_all, _ = get_input_data(node["inputs"], class_def, node_id, self.outputs_cache)
try: try:
is_changed = map_node_over_list(class_def, input_data_all, "IS_CHANGED") is_changed = _map_node_over_list(class_def, input_data_all, "IS_CHANGED")
node["is_changed"] = [None if isinstance(x, ExecutionBlocker) else x for x in is_changed] node["is_changed"] = [None if isinstance(x, ExecutionBlocker) else x for x in is_changed]
except: except Exception as e:
logging.warning("WARNING: {}".format(e))
node["is_changed"] = float("NaN") node["is_changed"] = float("NaN")
finally: finally:
self.is_changed[node_id] = node["is_changed"] self.is_changed[node_id] = node["is_changed"]
@ -126,7 +127,9 @@ def get_input_data(inputs, class_def, unique_id, outputs=None, dynprompt=None, e
input_data_all[x] = [unique_id] input_data_all[x] = [unique_id]
return input_data_all, missing_keys return input_data_all, missing_keys
def map_node_over_list(obj, input_data_all, func, allow_interrupt=False, execution_block_cb=None, pre_execute_cb=None): map_node_over_list = None #Don't hook this please
def _map_node_over_list(obj, input_data_all, func, allow_interrupt=False, execution_block_cb=None, pre_execute_cb=None):
# check if node wants the lists # check if node wants the lists
input_is_list = getattr(obj, "INPUT_IS_LIST", False) input_is_list = getattr(obj, "INPUT_IS_LIST", False)
@ -185,7 +188,7 @@ def get_output_data(obj, input_data_all, execution_block_cb=None, pre_execute_cb
results = [] results = []
uis = [] uis = []
subgraph_results = [] subgraph_results = []
return_values = map_node_over_list(obj, input_data_all, obj.FUNCTION, allow_interrupt=True, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb) return_values = _map_node_over_list(obj, input_data_all, obj.FUNCTION, allow_interrupt=True, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb)
has_subgraph = False has_subgraph = False
for i in range(len(return_values)): for i in range(len(return_values)):
r = return_values[i] r = return_values[i]
@ -280,7 +283,7 @@ def execute(server, dynprompt, caches, current_item, extra_data, executed, promp
caches.objects.set(unique_id, obj) caches.objects.set(unique_id, obj)
if hasattr(obj, "check_lazy_status"): if hasattr(obj, "check_lazy_status"):
required_inputs = map_node_over_list(obj, input_data_all, "check_lazy_status", allow_interrupt=True) required_inputs = _map_node_over_list(obj, input_data_all, "check_lazy_status", allow_interrupt=True)
required_inputs = set(sum([r for r in required_inputs if isinstance(r,list)], [])) required_inputs = set(sum([r for r in required_inputs if isinstance(r,list)], []))
required_inputs = [x for x in required_inputs if isinstance(x,str) and ( required_inputs = [x for x in required_inputs if isinstance(x,str) and (
x not in input_data_all or x in missing_keys x not in input_data_all or x in missing_keys
@ -711,7 +714,7 @@ def validate_inputs(prompt, item, validated):
input_filtered['input_types'] = [received_types] input_filtered['input_types'] = [received_types]
#ret = obj_class.VALIDATE_INPUTS(**input_filtered) #ret = obj_class.VALIDATE_INPUTS(**input_filtered)
ret = map_node_over_list(obj_class, input_filtered, "VALIDATE_INPUTS") ret = _map_node_over_list(obj_class, input_filtered, "VALIDATE_INPUTS")
for x in input_filtered: for x in input_filtered:
for i, r in enumerate(ret): for i, r in enumerate(ret):
if r is not True and not isinstance(r, ExecutionBlocker): if r is not True and not isinstance(r, ExecutionBlocker):

View File

@ -665,6 +665,8 @@ class VAELoader:
sd1_taesd_dec = False sd1_taesd_dec = False
sd3_taesd_enc = False sd3_taesd_enc = False
sd3_taesd_dec = False sd3_taesd_dec = False
f1_taesd_enc = False
f1_taesd_dec = False
for v in approx_vaes: for v in approx_vaes:
if v.startswith("taesd_decoder."): if v.startswith("taesd_decoder."):
@ -679,12 +681,18 @@ class VAELoader:
sd3_taesd_dec = True sd3_taesd_dec = True
elif v.startswith("taesd3_encoder."): elif v.startswith("taesd3_encoder."):
sd3_taesd_enc = True sd3_taesd_enc = True
elif v.startswith("taef1_encoder."):
f1_taesd_dec = True
elif v.startswith("taef1_decoder."):
f1_taesd_enc = True
if sd1_taesd_dec and sd1_taesd_enc: if sd1_taesd_dec and sd1_taesd_enc:
vaes.append("taesd") vaes.append("taesd")
if sdxl_taesd_dec and sdxl_taesd_enc: if sdxl_taesd_dec and sdxl_taesd_enc:
vaes.append("taesdxl") vaes.append("taesdxl")
if sd3_taesd_dec and sd3_taesd_enc: if sd3_taesd_dec and sd3_taesd_enc:
vaes.append("taesd3") vaes.append("taesd3")
if f1_taesd_dec and f1_taesd_enc:
vaes.append("taef1")
return vaes return vaes
@staticmethod @staticmethod
@ -712,6 +720,9 @@ class VAELoader:
elif name == "taesd3": elif name == "taesd3":
sd["vae_scale"] = torch.tensor(1.5305) sd["vae_scale"] = torch.tensor(1.5305)
sd["vae_shift"] = torch.tensor(0.0609) sd["vae_shift"] = torch.tensor(0.0609)
elif name == "taef1":
sd["vae_scale"] = torch.tensor(0.3611)
sd["vae_shift"] = torch.tensor(0.1159)
return sd return sd
@classmethod @classmethod
@ -724,7 +735,7 @@ class VAELoader:
#TODO: scale factor? #TODO: scale factor?
def load_vae(self, vae_name): def load_vae(self, vae_name):
if vae_name in ["taesd", "taesdxl", "taesd3"]: if vae_name in ["taesd", "taesdxl", "taesd3", "taef1"]:
sd = self.load_taesd(vae_name) sd = self.load_taesd(vae_name)
else: else:
vae_path = folder_paths.get_full_path("vae", vae_name) vae_path = folder_paths.get_full_path("vae", vae_name)

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -2909,7 +2909,7 @@ body {
resize: none; resize: none;
border: none; border: none;
box-sizing: border-box; box-sizing: border-box;
font-size: 10px; font-size: var(--comfy-textarea-font-size);
} }
.comfy-modal { .comfy-modal {
@ -3869,26 +3869,26 @@ audio.comfy-audio.empty-audio-widget {
color: var(--error-text); color: var(--error-text);
} }
.comfy-vue-node-search-container[data-v-9b4aa1b3] { .comfy-vue-node-search-container[data-v-b8a4ffdc] {
display: flex; display: flex;
width: 100%; width: 100%;
min-width: 24rem; min-width: 24rem;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.comfy-vue-node-search-container[data-v-9b4aa1b3] * { .comfy-vue-node-search-container[data-v-b8a4ffdc] * {
pointer-events: auto; pointer-events: auto;
} }
.comfy-vue-node-preview-container[data-v-9b4aa1b3] { .comfy-vue-node-preview-container[data-v-b8a4ffdc] {
position: absolute; position: absolute;
left: -350px; left: -350px;
top: 50px; top: 50px;
} }
.comfy-vue-node-search-box[data-v-9b4aa1b3] { .comfy-vue-node-search-box[data-v-b8a4ffdc] {
z-index: 10; z-index: 10;
flex-grow: 1; flex-grow: 1;
} }
.option-container[data-v-9b4aa1b3] { .option-container[data-v-b8a4ffdc] {
display: flex; display: flex;
width: 100%; width: 100%;
cursor: pointer; cursor: pointer;
@ -3899,10 +3899,10 @@ audio.comfy-audio.empty-audio-widget {
padding-top: 0.5rem; padding-top: 0.5rem;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
} }
.option-display-name[data-v-9b4aa1b3] { .option-display-name[data-v-b8a4ffdc] {
font-weight: 600; font-weight: 600;
} }
.option-category[data-v-9b4aa1b3] { .option-category[data-v-b8a4ffdc] {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
font-size: 0.875rem; font-size: 0.875rem;
@ -3912,29 +3912,29 @@ audio.comfy-audio.empty-audio-widget {
/* Keeps the text on a single line by default */ /* Keeps the text on a single line by default */
white-space: nowrap; white-space: nowrap;
} }
.i-badge[data-v-9b4aa1b3] { .i-badge[data-v-b8a4ffdc] {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(34 197 94 / var(--tw-bg-opacity)); background-color: rgb(34 197 94 / var(--tw-bg-opacity));
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity)); color: rgb(255 255 255 / var(--tw-text-opacity));
} }
.o-badge[data-v-9b4aa1b3] { .o-badge[data-v-b8a4ffdc] {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(239 68 68 / var(--tw-bg-opacity)); background-color: rgb(239 68 68 / var(--tw-bg-opacity));
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity)); color: rgb(255 255 255 / var(--tw-text-opacity));
} }
.c-badge[data-v-9b4aa1b3] { .c-badge[data-v-b8a4ffdc] {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(59 130 246 / var(--tw-bg-opacity)); background-color: rgb(59 130 246 / var(--tw-bg-opacity));
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity)); color: rgb(255 255 255 / var(--tw-text-opacity));
} }
.s-badge[data-v-9b4aa1b3] { .s-badge[data-v-b8a4ffdc] {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(234 179 8 / var(--tw-bg-opacity)); background-color: rgb(234 179 8 / var(--tw-bg-opacity));
} }
[data-v-9b4aa1b3] .highlight { [data-v-b8a4ffdc] .highlight {
background-color: var(--p-primary-color); background-color: var(--p-primary-color);
color: var(--p-primary-contrast-color); color: var(--p-primary-contrast-color);
font-weight: bold; font-weight: bold;
@ -3955,7 +3955,7 @@ audio.comfy-audio.empty-audio-widget {
align-items: flex-start !important; align-items: flex-start !important;
} }
.node-tooltip[data-v-d6edb6a0] { .node-tooltip[data-v-d5e6001c] {
background: var(--comfy-input-bg); background: var(--comfy-input-bg);
border-radius: 5px; border-radius: 5px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);
@ -3971,51 +3971,121 @@ audio.comfy-audio.empty-audio-widget {
z-index: 99999; z-index: 99999;
} }
.queue-tool-header-cell { .result-container[data-v-0fac61d9] {
aspect-ratio: 1 / 1;
overflow: hidden;
}
[data-v-0fac61d9] img {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100%;
height: 100%;
-o-object-fit: cover;
object-fit: cover;
}
.p-image-preview[data-v-0fac61d9] {
position: static;
display: contents;
}
[data-v-0fac61d9] .image-preview-mask {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: auto;
height: auto;
display: flex; display: flex;
justify-content: flex-end; align-items: center;
} justify-content: center;
.queue-tool-body-cell { opacity: 0;
display: table-cell; padding: 10px;
text-align: right !important; cursor: pointer;
background: rgba(0, 0, 0, 0.5);
color: var(--p-image-preview-mask-color);
transition:
opacity var(--p-image-transition-duration),
background var(--p-image-transition-duration);
border-radius: 50%;
} }
.queue-time-cell-content[data-v-89313500] { .task-result-preview[data-v-6cf8179c] {
width: -moz-fit-content; aspect-ratio: 1 / 1;
width: fit-content; overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
}
.task-result-preview i[data-v-6cf8179c],
.task-result-preview span[data-v-6cf8179c] {
font-size: 2rem;
}
.task-item[data-v-6cf8179c] {
display: flex;
flex-direction: column;
border-radius: 4px;
overflow: hidden;
position: relative;
}
.task-item-details[data-v-6cf8179c] {
position: absolute;
bottom: 0;
padding: 0.6rem;
display: flex;
justify-content: space-between;
width: 100%;
} }
.comfy-vue-side-bar-container[data-v-68eb78dd] { /* In dark mode, transparent background color for tags is not ideal for tags that
are floating on top of images. */
.tag-wrapper[data-v-6cf8179c] {
background-color: var(--p-primary-contrast-color);
border-radius: 6px;
display: inline-flex;
}
.comfy-vue-side-bar-container[data-v-bde767d2] {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
} }
.comfy-vue-side-bar-header[data-v-68eb78dd] { .comfy-vue-side-bar-header[data-v-bde767d2] {
flex-shrink: 0; flex-shrink: 0;
border-left: none; border-left: none;
border-right: none; border-right: none;
border-top: none; border-top: none;
border-radius: 0; border-radius: 0;
padding: 0.25rem 1rem; padding: 0.25rem 1rem;
min-height: 2.5rem;
} }
.comfy-vue-side-bar-header-span[data-v-68eb78dd] { .comfy-vue-side-bar-header-span[data-v-bde767d2] {
font-size: small; font-size: small;
} }
.comfy-vue-side-bar-body[data-v-68eb78dd] { .comfy-vue-side-bar-body[data-v-bde767d2] {
flex-grow: 1; flex-grow: 1;
overflow: auto; overflow: auto;
scrollbar-width: thin; scrollbar-width: thin;
scrollbar-color: transparent transparent; scrollbar-color: transparent transparent;
} }
.comfy-vue-side-bar-body[data-v-68eb78dd]::-webkit-scrollbar { .comfy-vue-side-bar-body[data-v-bde767d2]::-webkit-scrollbar {
width: 1px; width: 1px;
} }
.comfy-vue-side-bar-body[data-v-68eb78dd]::-webkit-scrollbar-thumb { .comfy-vue-side-bar-body[data-v-bde767d2]::-webkit-scrollbar-thumb {
background-color: transparent; background-color: transparent;
} }
.spinner[data-v-2a1001f4] { .queue-grid[data-v-7f831ee9] {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
padding: 0.5rem;
gap: 0.5rem;
}
.spinner[data-v-40c18658] {
position: absolute; position: absolute;
inset: 0px; inset: 0px;
display: flex; display: flex;

File diff suppressed because one or more lines are too long

1
web/assets/index-D8Zp4vRl.js.map generated vendored Normal file

File diff suppressed because one or more lines are too long

1
web/assets/index-DIiqwEjy.js.map generated vendored

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,5 @@
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __async = (__this, __arguments, generator) => { var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
var fulfilled = (value) => { var fulfilled = (value) => {
@ -18,8 +20,8 @@ var __async = (__this, __arguments, generator) => {
step((generator = generator.apply(__this, __arguments)).next()); step((generator = generator.apply(__this, __arguments)).next());
}); });
}; };
import { j as createSpinner, g as api, $ as $el } from "./index-DIiqwEjy.js"; import { j as createSpinner, g as api, $ as $el } from "./index-D8Zp4vRl.js";
class UserSelectionScreen { const _UserSelectionScreen = class _UserSelectionScreen {
show(users, user) { show(users, user) {
return __async(this, null, function* () { return __async(this, null, function* () {
const userSelection = document.getElementById("comfy-user-selection"); const userSelection = document.getElementById("comfy-user-selection");
@ -128,11 +130,13 @@ class UserSelectionScreen {
}); });
}); });
} }
} };
__name(_UserSelectionScreen, "UserSelectionScreen");
let UserSelectionScreen = _UserSelectionScreen;
window.comfyAPI = window.comfyAPI || {}; window.comfyAPI = window.comfyAPI || {};
window.comfyAPI.userSelection = window.comfyAPI.userSelection || {}; window.comfyAPI.userSelection = window.comfyAPI.userSelection || {};
window.comfyAPI.userSelection.UserSelectionScreen = UserSelectionScreen; window.comfyAPI.userSelection.UserSelectionScreen = UserSelectionScreen;
export { export {
UserSelectionScreen UserSelectionScreen
}; };
//# sourceMappingURL=userSelection-BifVfRyx.js.map //# sourceMappingURL=userSelection-CH4RQEqW.js.map

File diff suppressed because one or more lines are too long

8
web/index.html vendored
View File

@ -12,10 +12,10 @@
font-family: 'Roboto Mono', 'Noto Color Emoji'; font-family: 'Roboto Mono', 'Noto Color Emoji';
} }
</style> --> </style> -->
<link rel="stylesheet" type="text/css" href="/user.css" /> <link rel="stylesheet" type="text/css" href="user.css" />
<link rel="stylesheet" type="text/css" href="/materialdesignicons.min.css" /> <link rel="stylesheet" type="text/css" href="materialdesignicons.min.css" />
<script type="module" crossorigin src="/assets/index-DIiqwEjy.js"></script> <script type="module" crossorigin src="/assets/index-D8Zp4vRl.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-CwWW6Xjy.css"> <link rel="stylesheet" crossorigin href="/assets/index-BHzRuMlR.css">
</head> </head>
<body class="litegraph"> <body class="litegraph">
<div id="vue-app"></div> <div id="vue-app"></div>