mrdarkbr/wan22-code-backup
055
1import json2 3def convert_ui_to_api(ui_json):4 """5 Converte um workflow de UI do ComfyUI (com 'nodes' e 'links')6 para o formato de API do ComfyUI ({node_id: {inputs: {...}, class_type: ...}}).7 """8 nodes = ui_json.get("nodes", [])9 links = {l[0]: l for l in ui_json.get("links", [])}10 11 api_workflow = {}12 13 for node in nodes:14 nid = str(node["id"])15 ntype = node.get("type")16 if not ntype or ntype == "Note":17 continue18 19 inputs = {}20 21 # 1. Mapeia widgets_values22 wv = node.get("widgets_values")23 wv_named = node.get("widgets_values_named", {})24 25 if isinstance(wv_named, dict) and wv_named:26 for k, v in wv_named.items():27 inputs[k] = v28 elif isinstance(wv, dict):29 for k, v in wv.items():30 if k != "videopreview":31 inputs[k] = v32 elif isinstance(wv, list):33 # Se for lista, precisamos dos nomes dos inputs de widget do nó34 pass35 36 # 2. Mapeia links de entrada (conectados a outros nós)37 for inp in node.get("inputs", []):38 inp_name = inp.get("name")39 link_id = inp.get("link")40 if link_id and link_id in links:41 l = links[link_id]42 from_node_id = str(l[1])43 from_slot = l[2]44 inputs[inp_name] = [from_node_id, from_slot]45 46 api_workflow[nid] = {47 "inputs": inputs,48 "class_type": ntype,49 "_meta": {50 "title": node.get("title", ntype)51 }52 }53 54 return api_workflow55 56if __name__ == "__main__":57 with open("faceswap.json", "r", encoding="utf-8") as f:58 ui_data = json.load(f)59 60 api_wf = convert_ui_to_api(ui_data)61 print(f"Total de nós convertidos: {len(api_wf)}")62 with open("faceswap_api.json", "w", encoding="utf-8") as f:63 json.dump(api_wf, f, indent=2, ensure_ascii=False)64 print("Salvo em faceswap_api.json com sucesso!")65 