import json from loguru import logger as log def get_opaque_payload(): with open(r"autoexpress\resources\empty_bg.json", "r") as payload_file: return json.load(payload_file) def get_expression_list(): with open(r"autoexpress\resources\expressions.json", "r") as exp_file: return json.load(exp_file) def get_clip_expression_list(): with open(r"autoexpress\resources\clip_expressions.json", "r") as exp_file: return json.load(exp_file) def get_img2img_payload(): with open(r"autoexpress\resources\payload.json", "r") as payload_file: return json.load(payload_file) def update_nested_key(data, key_to_update, new_value): if isinstance(data, dict): for key, value in data.items(): if key == key_to_update: data[key] = new_value update_nested_key(value, key_to_update, new_value) elif isinstance(data, list): for item in data: update_nested_key(item, key_to_update, new_value) def find_nested_key(data, target_key): """Recursively search for a key in a nested structure (dictionary or list) and return its value.""" if isinstance(data, dict): if target_key in data: return data[target_key] return next( ( result for key, value in data.items() if (result := find_nested_key(value, target_key)) is not None ), None, ) elif isinstance(data, list): return next( ( result for item in data if isinstance(item, (dict, list)) and (result := find_nested_key(item, target_key)) is not None ), None, ) return None def edit_payload_body(b64_image_str: str, payload, settings=None, expression_tags=None): if settings: for key, value in settings.items(): update_nested_key(payload, key, value) prompt = find_nested_key(payload, "ad_prompt") if prompt: if prompt[-1] not in [","]: update_nested_key(payload, "ad_prompt", prompt + ", ") if expression_tags: update_nested_key( payload, "ad_prompt", find_nested_key(payload, "ad_prompt") + str(expression_tags), ) payload["prompt"] = payload["alwayson_scripts"]["ADetailer"]["args"][2]["ad_prompt"] payload["negative_prompt"] = payload["alwayson_scripts"]["ADetailer"]["args"][2][ "ad_negative_prompt" ] log.debug(f"{payload}") payload["init_images"][0] = b64_image_str json_payload = json.dumps(payload, indent=4) return json_payload if __name__ == "__main__": expression = get_expression_list() print(expression.keys())