diff --git a/nodes/latents.py b/nodes/latents.py index 33b356d..abe67ff 100644 --- a/nodes/latents.py +++ b/nodes/latents.py @@ -329,13 +329,18 @@ class ConditioningFromBase64: cond_data = torch.from_numpy(cond_data_np) cond_meta = {k: torch.from_numpy(v) if isinstance(v, np.ndarray) else v for k, v in cond_meta_serializable.items()} - # Reconstruct the conditioning object - conditioning = [[cond_data, cond_meta]] + # Check if we're dealing with the original format or the new embeds format + if cond_meta: + # Original format: [[cond, output]] + conditioning = [[cond_data, cond_meta]] + else: + # New format: embeds + conditioning = cond_data return (conditioning,) - except Exception as e: - raise ValueError(f"Failed to load conditioning from base64: {str(e)}") + print(f"Error in convert function: {str(e)}") + return None def align_text(align, img_height, text_height, text_pos_y, margins): if align == "center": @@ -461,19 +466,20 @@ class SaveImageWithBase64: OUTPUT_NODE = True CATEGORY = "image" TITLE = "save conds and latents" - def save_images(self, images, filename_prefix="ComfyUI", workflowName="", latent=None, positive_conditioning=None, negative_conditioning=None, prompt=None, extra_pnginfo=None): - def convertconditioning(conditioning): - cond_data, cond_meta = conditioning[0] - # Convert tensors to numpy arrays + if isinstance(conditioning, list) and len(conditioning) > 0 and isinstance(conditioning[0], list): + # Conditioning is a tuple (cond_data, cond_meta) + cond_data, cond_meta = conditioning[0] + else: + # Conditioning is a single tensor + cond_data = conditioning + cond_meta = {} cond_data_np = cond_data.cpu().numpy() cond_meta_serializable = {k: v.cpu().numpy() if isinstance(v, torch.Tensor) else v for k, v in cond_meta.items()} # Combine data and metadata into a single dictionary - combined_data = { - "cond_data": cond_data_np, - "cond_meta": cond_meta_serializable - } + combined_data = {"cond_data": cond_data_np, "cond_meta": cond_meta_serializable } + # Save the combined data to a bytes buffer buffer = io.BytesIO() np.savez_compressed(buffer, **combined_data) @@ -534,7 +540,7 @@ class SaveImageWithBase64: metadata.add_text("conditioning_base64", p_conditioning_base64) if negative_conditioning is not None: n_conditioning_base64 = convertconditioning(negative_conditioning) - metadata.add_text("conditioning_base64", n_conditioning_base64) + metadata.add_text("neg_conditioning_base64", n_conditioning_base64) filename_with_batch_num = filename.replace("%batch_num%", str(batch_number)) file = f"{filename_with_batch_num}_{counter:05}_.png" img.save(os.path.join(full_output_folder, file), pnginfo=metadata, compress_level=self.compress_level) diff --git a/nodes/simple.py b/nodes/simple.py index d383d3c..7c14b54 100644 --- a/nodes/simple.py +++ b/nodes/simple.py @@ -53,8 +53,8 @@ class FetchRemoteWithExtras(): }, } - RETURN_TYPES = ("IMAGE", "STRING", "STRING") - RETURN_NAMES = ("IMAGE", "latent_base64", "conditioning_base64") + RETURN_TYPES = ("IMAGE", "STRING", "STRING", "STRING") + RETURN_NAMES = ("IMAGE", "latent_base64", "P_conditioning_base64", "N_conditioning_base64") FUNCTION = "fetch" CATEGORY = "remote" TITLE = "Fetch from remote" @@ -68,9 +68,10 @@ class FetchRemoteWithExtras(): out = final_image[:1] * 0.0 # black image latent = metadata.get("latent_base64", None) - conditioning = metadata.get("conditioning_base64", None) + p_conditioning = metadata.get("conditioning_base64", None) + n_conditioning = metadata.get("neg_conditioning_base64", None) - return (out, latent, conditioning) + return (out, latent, p_conditioning, n_conditioning) import ast