From 2a2c5d0296fa3858109412110b980e84c9440511 Mon Sep 17 00:00:00 2001 From: Francisco Serradilla Date: Tue, 14 Jan 2025 17:59:57 +0100 Subject: [PATCH 1/3] addedcompatibility with several comfyUI workflows --- scripts/iib/tool.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) mode change 100644 => 100755 scripts/iib/tool.py diff --git a/scripts/iib/tool.py b/scripts/iib/tool.py old mode 100644 new mode 100755 index 171610e..7c21de0 --- a/scripts/iib/tool.py +++ b/scripts/iib/tool.py @@ -394,7 +394,7 @@ def get_img_geninfo_txt_path(path: str): return txt_path def is_img_created_by_comfyui(img: Image): - return img.info.get('prompt') and img.info.get('workflow') + return img.info.get('prompt') #and img.info.get('workflow') # ermanitu def is_img_created_by_comfyui_with_webui_gen_info(img: Image): return is_img_created_by_comfyui(img) and img.info.get('parameters') @@ -415,11 +415,13 @@ def get_comfyui_exif_data(img: Image): pass meta = {} KSampler_entry = data[meta_key]["inputs"] + print(KSampler_entry) + # As a workaround to bypass parsing errors in the parser. # https://github.com/jiw0220/stable-diffusion-image-metadata/blob/00b8d42d4d1a536862bba0b07c332bdebb2a0ce5/src/index.ts#L130 - meta["Steps"] = "Unknown" + meta["Steps"] = KSampler_entry["steps"] meta["Sampler"] = KSampler_entry["sampler_name"] - meta["Model"] = data[KSampler_entry["model"][0]]["inputs"]["ckpt_name"] + meta["Model"] = data[KSampler_entry["model"][0]]["inputs"].get("ckpt_name") # ermanitu meta["Source Identifier"] = "ComfyUI" def get_text_from_clip(idx: str) : inputs = data[idx]["inputs"] @@ -427,7 +429,14 @@ def get_comfyui_exif_data(img: Image): if isinstance(text, list): # type:CLIPTextEncode (NSP) mode:Wildcards text = data[text[0]]["inputs"]["text"] return text.strip() - pos_prompt = get_text_from_clip(KSampler_entry["positive"][0]) + + # added by ermanitu + in_node = data[str(KSampler_entry["positive"][0])] + if in_node["class_type"] != "FluxGuidance": + pos_prompt = get_text_from_clip(KSampler_entry["positive"][0]) + else: + pos_prompt = get_text_from_clip(in_node["inputs"]["conditioning"][0]) + neg_prompt = get_text_from_clip(KSampler_entry["negative"][0]) pos_prompt_arr = unique_by(parse_prompt(pos_prompt)["pos_prompt"]) return { From 82e0a0a4ffde000955717a602cd4a2f9b742b309 Mon Sep 17 00:00:00 2001 From: Francisco Serradilla Date: Tue, 14 Jan 2025 19:31:49 +0100 Subject: [PATCH 2/3] improved searching for KSampler node --- scripts/iib/tool.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/iib/tool.py b/scripts/iib/tool.py index 7c21de0..1d4f741 100755 --- a/scripts/iib/tool.py +++ b/scripts/iib/tool.py @@ -394,7 +394,7 @@ def get_img_geninfo_txt_path(path: str): return txt_path def is_img_created_by_comfyui(img: Image): - return img.info.get('prompt') #and img.info.get('workflow') # ermanitu + return img.info.get('prompt') #and img.info.get('workflow') def is_img_created_by_comfyui_with_webui_gen_info(img: Image): return is_img_created_by_comfyui(img) and img.info.get('parameters') @@ -405,9 +405,8 @@ def get_comfyui_exif_data(img: Image): return {} meta_key = '3' data: Dict[str, any] = json.loads(prompt) - for i in range(3, 32): + for i in data.keys(): try: - i = str(i) if data[i]["class_type"].startswith("KSampler"): meta_key = i break @@ -415,13 +414,13 @@ def get_comfyui_exif_data(img: Image): pass meta = {} KSampler_entry = data[meta_key]["inputs"] - print(KSampler_entry) + #print(KSampler_entry) # for testing # As a workaround to bypass parsing errors in the parser. # https://github.com/jiw0220/stable-diffusion-image-metadata/blob/00b8d42d4d1a536862bba0b07c332bdebb2a0ce5/src/index.ts#L130 meta["Steps"] = KSampler_entry["steps"] meta["Sampler"] = KSampler_entry["sampler_name"] - meta["Model"] = data[KSampler_entry["model"][0]]["inputs"].get("ckpt_name") # ermanitu + meta["Model"] = data[KSampler_entry["model"][0]]["inputs"].get("ckpt_name") meta["Source Identifier"] = "ComfyUI" def get_text_from_clip(idx: str) : inputs = data[idx]["inputs"] @@ -430,7 +429,6 @@ def get_comfyui_exif_data(img: Image): text = data[text[0]]["inputs"]["text"] return text.strip() - # added by ermanitu in_node = data[str(KSampler_entry["positive"][0])] if in_node["class_type"] != "FluxGuidance": pos_prompt = get_text_from_clip(KSampler_entry["positive"][0]) From d037420f912a35256d6e2292216f915c1127c818 Mon Sep 17 00:00:00 2001 From: zanllp Date: Wed, 15 Jan 2025 02:34:44 +0800 Subject: [PATCH 3/3] Improve compatibility --- scripts/iib/tool.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/iib/tool.py b/scripts/iib/tool.py index 7c21de0..a9984b9 100755 --- a/scripts/iib/tool.py +++ b/scripts/iib/tool.py @@ -394,7 +394,8 @@ def get_img_geninfo_txt_path(path: str): return txt_path def is_img_created_by_comfyui(img: Image): - return img.info.get('prompt') #and img.info.get('workflow') # ermanitu + prompt = img.info.get('prompt') + return prompt and (img.info.get('workflow') or ("class_type" in prompt)) # ermanitu def is_img_created_by_comfyui_with_webui_gen_info(img: Image): return is_img_created_by_comfyui(img) and img.info.get('parameters') @@ -419,7 +420,7 @@ def get_comfyui_exif_data(img: Image): # As a workaround to bypass parsing errors in the parser. # https://github.com/jiw0220/stable-diffusion-image-metadata/blob/00b8d42d4d1a536862bba0b07c332bdebb2a0ce5/src/index.ts#L130 - meta["Steps"] = KSampler_entry["steps"] + meta["Steps"] = KSampler_entry.get("steps", "Unknown") meta["Sampler"] = KSampler_entry["sampler_name"] meta["Model"] = data[KSampler_entry["model"][0]]["inputs"].get("ckpt_name") # ermanitu meta["Source Identifier"] = "ComfyUI"