diff --git a/koboldcpp.py b/koboldcpp.py index 9724a7ddc..e18625b41 100644 --- a/koboldcpp.py +++ b/koboldcpp.py @@ -1495,40 +1495,35 @@ def sd_load_model(model_filename,vae_filename,lora_filename,t5xxl_filename,clipl def sd_comfyui_tranform_params(genparams): promptobj = genparams.get('prompt', None) if promptobj and isinstance(promptobj, dict): - temp = promptobj.get('3', {}) - temp = temp.get('inputs', {}) - genparams["seed"] = temp.get("seed", -1) - genparams["steps"] = temp.get("steps", 20) - genparams["cfg_scale"] = temp.get("cfg", 5) - genparams["sampler_name"] = temp.get("sampler_name", "euler") - temp = promptobj.get('5', {}) - temp = temp.get('inputs', {}) - genparams["width"] = temp.get("width", 512) - genparams["height"] = temp.get("height", 512) - temp = promptobj.get('6', {}) - temp = temp.get('inputs', {}) - genparams["prompt"] = temp.get("text", "") - temp = promptobj.get('7', {}) - temp = temp.get('inputs', {}) - genparams["negative_prompt"] = temp.get("text", "") + for node_id, node_data in promptobj.items(): + class_type = node_data.get("class_type","") + if class_type == "KSampler" or class_type == "KSamplerAdvanced": + inp = node_data.get("inputs",{}) - #okay, if the prompt is empty something likely went wrong. try find the prompt node dynamically - if genparams.get("prompt","")=="": - for node_id, node_data in promptobj.items(): - class_type = node_data.get("class_type","") - if class_type == "KSampler" or class_type == "KSamplerAdvanced": - inp = node_data.get("inputs",{}) - pos = inp.get("positive",[]) - neg = inp.get("negative",[]) - if neg and isinstance(neg, list) and len(neg) > 0: - temp = promptobj.get(str(neg[0]), {}) - temp = temp.get('inputs', {}) - genparams["negative_prompt"] = temp.get("text", "") - if pos and isinstance(pos, list) and len(pos) > 0: - temp = promptobj.get(str(pos[0]), {}) - temp = temp.get('inputs', {}) - genparams["prompt"] = temp.get("text", "") - break + # sampler settings from this node + genparams["seed"] = inp.get("seed", -1) + genparams["steps"] = inp.get("steps", 20) + genparams["cfg_scale"] = inp.get("cfg", 5) + genparams["sampler_name"] = inp.get("sampler_name", "euler") + + pos = inp.get("positive",[]) #positive prompt node + neg = inp.get("negative",[]) #negative prompt node + imgsize = inp.get("latent_image",[]) #image size node + + if imgsize and isinstance(imgsize, list) and len(imgsize) > 0: + temp = promptobj.get(str(imgsize[0]), {}) + temp = temp.get('inputs', {}) + genparams["width"] = temp.get("width", 512) + genparams["height"] = temp.get("height", 512) + if neg and isinstance(neg, list) and len(neg) > 0: + temp = promptobj.get(str(neg[0]), {}) + temp = temp.get('inputs', {}) + genparams["negative_prompt"] = temp.get("text", "") + if pos and isinstance(pos, list) and len(pos) > 0: + temp = promptobj.get(str(pos[0]), {}) + temp = temp.get('inputs', {}) + genparams["prompt"] = temp.get("text", "") + break if genparams.get("prompt","")=="": #give up, set generic prompt genparams["prompt"] = "high quality" else: