Compare commits

..
18 Commits
Author SHA1 Message Date
xsl 82842d1b5c save code 2025-08-13 21:07:25 +08:00
xsl 59d132389d Merge branch '5090' of http://43.143.205.217:3000/xsl/change_cloth into 5090 2025-08-13 21:06:43 +08:00
xsl 2536be8828 save code 2025-08-13 21:05:28 +08:00
xsl 5290fc974a asdf 2025-08-12 22:38:40 +08:00
xsl ea55aaa0eb save code 2025-08-11 22:25:50 +08:00
xsl 9a28b272aa save code 2025-08-10 23:54:29 +08:00
xsl 7ac1bdde41 save code 2025-08-10 23:13:32 +08:00
xsl 8b55a66079 save code 2025-08-10 23:07:52 +08:00
xsl 30c624e5af save code 2025-08-10 20:55:26 +08:00
xsl 742974a786 save code 2025-08-10 20:53:46 +08:00
xsl 7a08f7eca8 save code 2025-08-10 20:37:27 +08:00
xsl 9dad88f8be save code 2025-08-10 14:11:34 +08:00
xsl 276066cabb save code 2025-08-09 23:34:32 +08:00
xsl 1104fb54d9 save code 2025-08-09 22:32:20 +08:00
xsl 4784464a5f save code 2025-08-09 22:23:23 +08:00
xsl b92fd5e782 save code 2025-08-09 21:41:35 +08:00
xsl a592c4a552 save code 2025-08-09 14:48:13 +08:00
xsl b9f85fc0df save code 2025-07-31 11:22:40 +08:00
22 changed files with 3918 additions and 72 deletions
+1 -1
View File
@@ -26,7 +26,7 @@ def queue_prompt(prompt):
request.urlopen(req) request.urlopen(req)
with open('/home/szlc/code/ComfyUI/change_cloth/basic_api.json', 'r', encoding='utf-8') as file: with open('/home/xsl/code/ComfyUI/change_cloth/basic_api.json', 'r', encoding='utf-8') as file:
prompt_text = file.read() prompt_text = file.read()
prompt = json.loads(prompt_text) prompt = json.loads(prompt_text)
+120 -34
View File
@@ -1,7 +1,7 @@
import os import os
import uuid import uuid
import requests import requests
from flask import Flask, request, jsonify from flask import Flask, request, jsonify, Response
from urllib.parse import urlparse from urllib.parse import urlparse
import json import json
import base64 import base64
@@ -14,7 +14,10 @@ import oss2
import redis import redis
# from check_img_body import is_thigh_visible # from check_img_body import is_thigh_visible
import logging import logging
from config import QUEUE_NAME, DEFAULT_TIMEOUT, KEY_QUEUE_LOCK_NAME, acquire_lock from config import *
import websockets
import asyncio
import traceback
APP_ROOT = os.path.dirname(os.path.abspath(__file__)) APP_ROOT = os.path.dirname(os.path.abspath(__file__))
@@ -123,12 +126,12 @@ def GetHumanDesDesc(img_url):
return text return text
def takeoff_cloth_first(human_name, is_girl): def takeoff_cloth_first(human_name, is_girl):
print('换泳装') print(f'换泳装 {change_with_add_cloth}')
queue = requests.get("http://localhost:8188/queue").json() queue = requests.get("http://localhost:8188/queue").json()
if queue["queue_running"] or queue["queue_pending"]: if queue["queue_running"] or queue["queue_pending"]:
return None, "cur gpu is busy" return None, "cur gpu is busy"
with open('/home/szlc/code/ComfyUI/change_cloth/change_new.json', 'r', encoding='utf-8') as file: with open(f'{APP_ROOT}/{change_with_add_cloth}', 'r', encoding='utf-8') as file:
prompt_text = file.read() prompt_text = file.read()
prompt = json.loads(prompt_text) prompt = json.loads(prompt_text)
@@ -140,9 +143,10 @@ def takeoff_cloth_first(human_name, is_girl):
#input cloth img #input cloth img
if is_girl: if is_girl:
prompt["22"]["inputs"]["image"] = 'girl_cloth.jpg' prompt["22"]["inputs"]["image"] = 'girl_cloth_new.jpg'
else: else:
prompt["22"]["inputs"]["image"] = 'man_cloth.jpg' prompt["22"]["inputs"]["image"] = 'man_cloth_grey.jpg'
# prompt["22"]["inputs"]["image"] = 'man_cloth.jpg'
#input human img #input human img
prompt["61"]["inputs"]["image"] = human_name prompt["61"]["inputs"]["image"] = human_name
@@ -181,12 +185,12 @@ def takeoff_cloth_first(human_name, is_girl):
return None return None
def generate_from_face(human_name, sex_girl): def generate_from_face(human_name, sex_girl):
print('生成写真') print(f'生成写真 {xiezhen_name}')
queue = requests.get("http://localhost:8188/queue").json() queue = requests.get("http://localhost:8188/queue").json()
if queue["queue_running"] or queue["queue_pending"]: if queue["queue_running"] or queue["queue_pending"]:
return None, "cur gpu is busy" return None, "cur gpu is busy"
with open('/home/szlc/code/ComfyUI/change_cloth/xiezhen_girl.json', 'r', encoding='utf-8') as file: with open(f'{APP_ROOT}/{xiezhen_name}', 'r', encoding='utf-8') as file:
prompt_text = file.read() prompt_text = file.read()
prompt = json.loads(prompt_text) prompt = json.loads(prompt_text)
@@ -195,9 +199,9 @@ def generate_from_face(human_name, sex_girl):
prompt["93"]["inputs"]["image"] = human_name prompt["93"]["inputs"]["image"] = human_name
if sex_girl: if sex_girl:
prompt["6"]["inputs"]["text"] = "asian girl,full body shot(1.9),complete figure,front-facing,model pose,hands are at the sides of the body,smile,wearing black tube top and micro skirt,simple ,white background,32k,high detail,and face is illuminated by soft side light and natural light. The sunlight spills over the white wall behind." prompt["6"]["inputs"]["text"] = "asian girl,knee-length shot ,model pose,hands are at the sides of the body,smile,wearing black tube top and micro skirt,simple ,white background,32k,high detail,and face is illuminated by soft side light and natural light. The sunlight spills over the white wall behind."
else: else:
prompt["6"]["inputs"]["text"] = "asian man,full body shot(1.9),complete figure,front-facing,model pose,hands are at the sides of the body,smile,wearing black tight shortst,simple white background,32k,high detail,and face is illuminated by soft side light and natural light. The sunlight spills over the white wall behind." prompt["6"]["inputs"]["text"] = "asian man,tall,knee-length shot,model pose,hands are at the sides of the body,smile,wearing black short pants,simple white background,The sunlight spills over the white wall behind,32k."
#out put name #out put name
out_img_name = str(uuid.uuid4())[:8] out_img_name = str(uuid.uuid4())[:8]
@@ -256,16 +260,16 @@ def change(human_name, cloth_name, c_width, c_height, cloth_url, human_url, no2)
print(f'不用第二部 no2{no2}') print(f'不用第二部 no2{no2}')
else: else:
print(f'要第二部 no2{no2} 先搞第一步') print(f'要第二部 no2{no2} 先搞第一步')
# thigh_visible = is_thigh_visible(f"/home/szlc/code/ComfyUI/input/{human_name}") if sgwzd >= 0.55:
if sgwzd >= 0.5:
#脱衣服 #脱衣服
takeoff_file_name = takeoff_cloth_first(human_name, sex_girl) takeoff_file_name = takeoff_cloth_first(human_name, sex_girl)
print(f"takeoff_file_name:{takeoff_file_name} human_name:{human_name} sex_girl:{sex_girl}")
if takeoff_file_name == None: if takeoff_file_name == None:
return None, None, sex_girl, f"takeoff_cloth_first error {human_name}" return None, None, sex_girl, f"takeoff_cloth_first error {human_name}"
else: else:
human_name = takeoff_file_name human_name = takeoff_file_name
takeoff_file_path_name = os.path.join('/home/szlc/code/ComfyUI/output', takeoff_file_name) takeoff_file_path_name = os.path.join(f'{APP_ROOT}/../output', takeoff_file_name)
takeoff_file_path_name_input = os.path.join('/home/szlc/code/ComfyUI/input', takeoff_file_name) takeoff_file_path_name_input = os.path.join(f'{APP_ROOT}/../input', takeoff_file_name)
shutil.copy(takeoff_file_path_name, takeoff_file_path_name_input) shutil.copy(takeoff_file_path_name, takeoff_file_path_name_input)
else: else:
#生成写真 #生成写真
@@ -274,16 +278,16 @@ def change(human_name, cloth_name, c_width, c_height, cloth_url, human_url, no2)
return None, None, sex_girl, f"xiezhen error {human_name}" return None, None, sex_girl, f"xiezhen error {human_name}"
else: else:
human_name = generate_name human_name = generate_name
generate_name_file_path_name = os.path.join('/home/szlc/code/ComfyUI/output', generate_name) generate_name_file_path_name = os.path.join(f'{APP_ROOT}/../output', generate_name)
generate_name_file_path_name_input = os.path.join('/home/szlc/code/ComfyUI/input', generate_name) generate_name_file_path_name_input = os.path.join(f'{APP_ROOT}/../input', generate_name)
shutil.copy(generate_name_file_path_name, generate_name_file_path_name_input) shutil.copy(generate_name_file_path_name, generate_name_file_path_name_input)
queue = requests.get("http://localhost:8188/queue").json() queue = requests.get("http://localhost:8188/queue").json()
if queue["queue_running"] or queue["queue_pending"]: if queue["queue_running"] or queue["queue_pending"]:
return None, None, sex_girl, "cur gpu is busy, Shou not happen" return None, None, sex_girl, "cur gpu is busy, Shou not happen"
print('开始换衣服') print(f'开始换衣服 {change_only_name}')
with open('/home/szlc/code/ComfyUI/change_cloth/change_new.json', 'r', encoding='utf-8') as file: with open(f'{APP_ROOT}/{change_only_name}', 'r', encoding='utf-8') as file:
prompt_text = file.read() prompt_text = file.read()
prompt = json.loads(prompt_text) prompt = json.loads(prompt_text)
@@ -311,8 +315,75 @@ def change(human_name, cloth_name, c_width, c_height, cloth_url, human_url, no2)
prompt_id = response.json()["prompt_id"] prompt_id = response.json()["prompt_id"]
# 2. 轮询队列,直到任务完成 async def listen_node_output(prompt_id, target_node_id):
uri = "ws://localhost:8188/ws"
async with websockets.connect(uri) as websocket:
await websocket.send(json.dumps({"prompt_id": prompt_id}))
while True:
message = await websocket.recv()
# 1. 处理二进制数据
if isinstance(message, bytes):
try:
message = message.decode("utf-8")
except UnicodeDecodeError:
print(f"[{datetime.now().strftime('%H:%M:%S')}] 收到二进制数据 (长度: {len(message)} bytes)")
continue
# 2. 解析JSON
try:
data = json.loads(message)
print(f"cur data {data}")
except json.JSONDecodeError:
print(f"[{datetime.now().strftime('%H:%M:%S')}] 非JSON数据: {message[:100]}...")
continue
if data.get("type") == "progress":
pdata = data.get('data', {})
print(f"cur progress {pdata}")
# if value >= max:
# return f"finished value:{value} max:{max}"
if data.get("type") == "progress_state":
nodes = data.get('data', {}).get('nodes', {})
for node in nodes:
if node.get("state", None) != 'finished':
print(f"progress_state node:{node}")
# 3. 输出运行状态
if data.get("type") == "status":
print(f"[{datetime.now().strftime('%H:%M:%S')}] 系统状态: {data.get('data', {}).get('status', {})}")
status = data.get('data', {}).get('status', None)
print(f"statue:{status}")
if status:
exec_info = status.get('exec_info', None)
print(f"exec_info:{exec_info}")
if exec_info:
queue_remaining = exec_info.get('queue_remaining', None)
print(f"queue_remaining:{queue_remaining}")
if queue_remaining == 0:
return "process end"
continue
if data.get("type") == "executing":
node_id = data.get("data", {}).get("node")
progress = data.get("data", {}).get("progress", 0)
print(f"[{datetime.now().strftime('%H:%M:%S')}] 正在执行节点 {node_id} (进度: {progress:.0%})")
# 4. 目标节点完成
if data.get("type") == "executed" and data.get("data", {}).get("node") == target_node_id:
output = data.get("data", {}).get("output")
print(f"[{datetime.now().strftime('%H:%M:%S')}] 节点 {target_node_id} 完成!")
return output
# output = asyncio.run(listen_node_output(prompt_id, "104"))
# print("最终输出:", output)
while True: while True:
# response = requests.post("http://localhost:8188/interrupt")
queue = requests.get("http://localhost:8188/queue").json() queue = requests.get("http://localhost:8188/queue").json()
# print(queue) # print(queue)
if not queue["queue_running"] and not queue["queue_pending"]: if not queue["queue_running"] and not queue["queue_pending"]:
@@ -360,13 +431,13 @@ def save_base64_image(base64_str, prefix):
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
unique_id = str(uuid.uuid4())[:8] unique_id = str(uuid.uuid4())[:8]
filename = f"{prefix}_{timestamp}_{unique_id}{file_ext}" filename = f"{prefix}_{timestamp}_{unique_id}{file_ext}"
filepath = os.path.join('/home/szlc/code/ComfyUI/change_cloth/static/imgs', filename) filepath = os.path.join(f'{APP_ROOT}/static/imgs', filename)
# 解码并保存图片 # 解码并保存图片
with open(filepath, 'wb') as f: with open(filepath, 'wb') as f:
f.write(base64.b64decode(data)) f.write(base64.b64decode(data))
input_filepath = os.path.join('/home/szlc/code/ComfyUI/input', filename) input_filepath = os.path.join(f'{APP_ROOT}/../input', filename)
# 解码并保存图片 # 解码并保存图片
with open(input_filepath, 'wb') as f: with open(input_filepath, 'wb') as f:
f.write(base64.b64decode(data)) f.write(base64.b64decode(data))
@@ -439,7 +510,7 @@ def upload_to_oss(image_path, object_name=None):
def process_change_cloth(human_filename, cloth_filename, output_format, img_url, human_url, no2): def process_change_cloth(human_filename, cloth_filename, output_format, img_url, human_url, no2):
w,h = get_image_dimensions(f'/home/szlc/code/ComfyUI/input/{human_filename}') w,h = get_image_dimensions(f'{APP_ROOT}/../input/{human_filename}')
out_put_name, out_human_name, is_girl, msg = change(human_filename, cloth_filename, w, h, img_url, human_url, no2) out_put_name, out_human_name, is_girl, msg = change(human_filename, cloth_filename, w, h, img_url, human_url, no2)
if out_put_name == None: if out_put_name == None:
@@ -449,19 +520,19 @@ def process_change_cloth(human_filename, cloth_filename, output_format, img_url,
if no2: if no2:
out_human_https_url = human_url out_human_https_url = human_url
else: else:
out_human_image = Image.open(f'/home/szlc/code/ComfyUI/output/{out_human_name}') out_human_image = Image.open(f'{APP_ROOT}/../output/{out_human_name}')
out_human_jpg_name = out_human_name.replace(".png", ".jpg") out_human_jpg_name = out_human_name.replace(".png", ".jpg")
out_human_jpg_path_name = f'/home/szlc/code/ComfyUI/change_cloth/static/imgs/{out_human_jpg_name}' out_human_jpg_path_name = f'{APP_ROOT}/static/imgs/{out_human_jpg_name}'
out_human_image.save(out_human_jpg_path_name, quality=95) out_human_image.save(out_human_jpg_path_name, quality=90)
upload_to_oss(out_human_jpg_path_name, out_human_jpg_name) # 第二个参数可选,指定OSS上的路径 upload_to_oss(out_human_jpg_path_name, out_human_jpg_name) # 第二个参数可选,指定OSS上的路径
out_human_https_url = f'https://llyz.oss-cn-beijing.aliyuncs.com/{out_human_jpg_name}' out_human_https_url = f'https://llyz.oss-cn-beijing.aliyuncs.com/{out_human_jpg_name}'
print(f"生成的第一步图片 HTTPS URL: {out_human_https_url}") print(f"生成的第一步图片 HTTPS URL: {out_human_https_url}")
image = Image.open(f'/home/szlc/code/ComfyUI/output/{out_put_name}') image = Image.open(f'{APP_ROOT}/../output/{out_put_name}')
jpg_name = out_put_name.replace(".png", ".jpg") jpg_name = out_put_name.replace(".png", ".jpg")
jpg_path_name = f'/home/szlc/code/ComfyUI/change_cloth/static/imgs/{jpg_name}' jpg_path_name = f'{APP_ROOT}/static/imgs/{jpg_name}'
image.save(jpg_path_name, quality=95) image.save(jpg_path_name, quality=90)
upload_to_oss(jpg_path_name, jpg_name) # 第二个参数可选,指定OSS上的路径 upload_to_oss(jpg_path_name, jpg_name) # 第二个参数可选,指定OSS上的路径
@@ -510,13 +581,13 @@ def save_image_from_url(image_url):
# 获取原始图片格式 # 获取原始图片格式
ext = get_file_extension(image_url) ext = get_file_extension(image_url)
filename = f"{uuid.uuid4()}{ext}" filename = f"{uuid.uuid4()}{ext}"
filepath = os.path.join('/home/szlc/code/ComfyUI/change_cloth/static/imgs', filename) filepath = os.path.join(f'{APP_ROOT}/static/imgs', filename)
with open(filepath, "wb") as f: with open(filepath, "wb") as f:
for chunk in response.iter_content(1024): for chunk in response.iter_content(1024):
f.write(chunk) f.write(chunk)
input_filepath = os.path.join('/home/szlc/code/ComfyUI/input', filename) input_filepath = os.path.join(f'{APP_ROOT}/../input', filename)
shutil.copy(filepath, input_filepath) shutil.copy(filepath, input_filepath)
return filename return filename
@@ -556,7 +627,9 @@ def do_change_cloth():
try: try:
return process_change_cloth(human_filename, cloth_filename, output_format, cloth_url, human_url, no2) return process_change_cloth(human_filename, cloth_filename, output_format, cloth_url, human_url, no2)
except: except Exception as e:
traceback.print_exc()
print(f"错误详情:{e}")
return jsonify({ return jsonify({
"ret":-1, "ret":-1,
"state": -1, "state": -1,
@@ -655,7 +728,7 @@ def change_cloth_base64():
return jsonify({"ret":-1, 'msg': 'Failed to save human image'}), 500 return jsonify({"ret":-1, 'msg': 'Failed to save human image'}), 500
data['human_img'] = None data['human_img'] = None
human_url = f"http://112.126.94.241:18888/static/imgs/{human_filename}" human_url = f"http://112.126.94.241:{base64_test_port}/static/imgs/{human_filename}"
# 保存服装图片 # 保存服装图片
cloth_filename = save_base64_image(cloth_img, 'cloth') cloth_filename = save_base64_image(cloth_img, 'cloth')
@@ -663,7 +736,7 @@ def change_cloth_base64():
return jsonify({"ret":-1, 'msg': 'Failed to save cloth image'}), 500 return jsonify({"ret":-1, 'msg': 'Failed to save cloth image'}), 500
data['cloth_img'] = None data['cloth_img'] = None
cloth_url = f"http://112.126.94.241:18888/static/imgs/{cloth_filename}" cloth_url = f"http://112.126.94.241:{base64_test_port}/static/imgs/{cloth_filename}"
data["human_url"] = human_url data["human_url"] = human_url
data["cloth_url"] = cloth_url data["cloth_url"] = cloth_url
@@ -672,7 +745,20 @@ def change_cloth_base64():
if not no2: if not no2:
data['no2'] = False data['no2'] = False
return queueCall(data) # 在内部调用第二个HTTP请求
try:
# 调用第二个API(可以是外部服务或自己的另一个端点)
response = requests.post(f'http://112.126.94.241:{base64_test_port}/do_change_cloth', json=data)
return Response(
response=response.content,
status=response.status_code,
headers=dict(response.headers)
)
except requests.exceptions.RequestException as e:
data['second_api_error'] = str(e)
return jsonify("error"), 500
if __name__ == '__main__': if __name__ == '__main__':
+16 -16
View File
@@ -1,7 +1,7 @@
{ {
"3": { "3": {
"inputs": { "inputs": {
"seed": 154943414582783, "seed": 940724765309123,
"steps": 20, "steps": 20,
"cfg": 1, "cfg": 1,
"sampler_name": "euler", "sampler_name": "euler",
@@ -73,7 +73,7 @@
}, },
"10": { "10": {
"inputs": { "inputs": {
"strength": 1, "strength": 1.0000000000000002,
"strength_type": "multiply", "strength_type": "multiply",
"conditioning": [ "conditioning": [
"11", "11",
@@ -196,7 +196,7 @@
}, },
"22": { "22": {
"inputs": { "inputs": {
"image": "cloth_20250715_232138_50414b8f.jpg" "image": "0b0a7d75-3241-49b5-be98-5dc87838322c.jpg"
}, },
"class_type": "LoadImage", "class_type": "LoadImage",
"_meta": { "_meta": {
@@ -254,7 +254,7 @@
"27": { "27": {
"inputs": { "inputs": {
"context_expand_pixels": 20, "context_expand_pixels": 20,
"context_expand_factor": 1, "context_expand_factor": 1.0000000000000002,
"fill_mask_holes": true, "fill_mask_holes": true,
"blur_mask_pixels": 10, "blur_mask_pixels": 10,
"invert_mask": false, "invert_mask": false,
@@ -263,7 +263,7 @@
"mode": "ranged size", "mode": "ranged size",
"force_width": 1024, "force_width": 1024,
"force_height": 1024, "force_height": 1024,
"rescale_factor": 1, "rescale_factor": 1.0000000000000002,
"min_width": 512, "min_width": 512,
"min_height": 512, "min_height": 512,
"max_width": 1800, "max_width": 1800,
@@ -467,9 +467,9 @@
"59": { "59": {
"inputs": { "inputs": {
"brightness": -1, "brightness": -1,
"contrast": 1, "contrast": 1.0000000000000002,
"saturation": 1, "saturation": 1.0000000000000002,
"sharpness": 1, "sharpness": 1.0000000000000002,
"blur": 0, "blur": 0,
"gaussian_blur": 48.1, "gaussian_blur": 48.1,
"edge_enhance": 0, "edge_enhance": 0,
@@ -486,7 +486,7 @@
}, },
"61": { "61": {
"inputs": { "inputs": {
"image": "75857233_00001_.png" "image": "c599a298-2992-487d-95f0-be5e6c08e8c8.png"
}, },
"class_type": "LoadImage", "class_type": "LoadImage",
"_meta": { "_meta": {
@@ -495,7 +495,7 @@
}, },
"75": { "75": {
"inputs": { "inputs": {
"model_path": "svdq-int4-flux.1-fill-dev", "model_path": "svdq-fp4_r32-flux.1-fill-dev.safetensors",
"cache_threshold": 0, "cache_threshold": 0,
"attention": "nunchaku-fp16", "attention": "nunchaku-fp16",
"cpu_offload": "auto", "cpu_offload": "auto",
@@ -639,7 +639,7 @@
}, },
"94": { "94": {
"inputs": { "inputs": {
"value": 1024 "value": 2048
}, },
"class_type": "PrimitiveInt", "class_type": "PrimitiveInt",
"_meta": { "_meta": {
@@ -668,7 +668,7 @@
"96": { "96": {
"inputs": { "inputs": {
"cloth_len": "小腿", "cloth_len": "小腿",
"line_len": 0.6000000000000001, "line_len": 0.4,
"cloth_short": true, "cloth_short": true,
"kps": [ "kps": [
"95", "95",
@@ -819,7 +819,7 @@
}, },
"110": { "110": {
"inputs": { "inputs": {
"preview": "1180672", "preview": "855040",
"source": [ "source": [
"106", "106",
0 0
@@ -832,7 +832,7 @@
}, },
"111": { "111": {
"inputs": { "inputs": {
"preview": "768", "preview": "522",
"source": [ "source": [
"108", "108",
0 0
@@ -858,7 +858,7 @@
}, },
"113": { "113": {
"inputs": { "inputs": {
"preview": "1793", "preview": "1547",
"source": [ "source": [
"107", "107",
0 0
@@ -975,7 +975,7 @@
"71:2": { "71:2": {
"inputs": { "inputs": {
"prompt": "cloth", "prompt": "cloth",
"threshold": 0.3, "threshold": 0.30000000000000004,
"sam_model": [ "sam_model": [
"71:0", "71:0",
0 0
+961
View File
@@ -0,0 +1,961 @@
{
"3": {
"inputs": {
"seed": 133974548609577,
"steps": 20,
"cfg": 1,
"sampler_name": "euler",
"scheduler": "simple",
"denoise": 1,
"model": [
"13",
0
],
"positive": [
"17",
0
],
"negative": [
"17",
1
],
"latent_image": [
"17",
2
]
},
"class_type": "KSampler",
"_meta": {
"title": "KSampler"
}
},
"6": {
"inputs": {
"text": "",
"clip": [
"12",
0
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"7": {
"inputs": {
"text": "",
"clip": [
"12",
0
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"8": {
"inputs": {
"samples": [
"3",
0
],
"vae": [
"16",
0
]
},
"class_type": "VAEDecode",
"_meta": {
"title": "VAE Decode"
}
},
"10": {
"inputs": {
"strength": 1.0000000000000002,
"strength_type": "multiply",
"conditioning": [
"11",
0
],
"style_model": [
"79",
0
],
"clip_vision_output": [
"20",
0
]
},
"class_type": "StyleModelApply",
"_meta": {
"title": "Apply Style Model"
}
},
"11": {
"inputs": {
"guidance": 30,
"conditioning": [
"6",
0
]
},
"class_type": "FluxGuidance",
"_meta": {
"title": "FluxGuidance"
}
},
"12": {
"inputs": {
"clip_name1": "flux/t5xxl_fp16.safetensors",
"clip_name2": "clip_l.safetensors",
"type": "flux",
"device": "default"
},
"class_type": "DualCLIPLoader",
"_meta": {
"title": "DualCLIPLoader"
}
},
"13": {
"inputs": {
"model": [
"75",
0
]
},
"class_type": "DifferentialDiffusion",
"_meta": {
"title": "Differential Diffusion"
}
},
"16": {
"inputs": {
"vae_name": "ae.safetensors"
},
"class_type": "VAELoader",
"_meta": {
"title": "Load VAE"
}
},
"17": {
"inputs": {
"noise_mask": false,
"positive": [
"10",
0
],
"negative": [
"7",
0
],
"vae": [
"16",
0
],
"pixels": [
"27",
1
],
"mask": [
"27",
2
]
},
"class_type": "InpaintModelConditioning",
"_meta": {
"title": "InpaintModelConditioning"
}
},
"20": {
"inputs": {
"crop": "center",
"clip_vision": [
"21",
0
],
"image": [
"25",
0
]
},
"class_type": "CLIPVisionEncode",
"_meta": {
"title": "CLIP Vision Encode"
}
},
"21": {
"inputs": {
"clip_name": "sigclip_vision_patch14_384.safetensors"
},
"class_type": "CLIPVisionLoader",
"_meta": {
"title": "Load CLIP Vision"
}
},
"22": {
"inputs": {
"image": "man_cloth.jpg"
},
"class_type": "LoadImage",
"_meta": {
"title": "Load Image"
}
},
"25": {
"inputs": {
"width": [
"94",
0
],
"height": [
"94",
0
],
"interpolation": "nearest",
"method": "keep proportion",
"condition": "always",
"multiple_of": 0,
"image": [
"22",
0
]
},
"class_type": "ImageResize+",
"_meta": {
"title": "🔧 Image Resize"
}
},
"26": {
"inputs": {
"width": [
"94",
0
],
"height": [
"94",
0
],
"interpolation": "nearest",
"method": "keep proportion",
"condition": "always",
"multiple_of": 0,
"image": [
"61",
0
]
},
"class_type": "ImageResize+",
"_meta": {
"title": "🔧 Image Resize"
}
},
"27": {
"inputs": {
"context_expand_pixels": 20,
"context_expand_factor": 1.0000000000000002,
"fill_mask_holes": true,
"blur_mask_pixels": 10,
"invert_mask": false,
"blend_pixels": 16,
"rescale_algorithm": "bicubic",
"mode": "ranged size",
"force_width": 1024,
"force_height": 1024,
"rescale_factor": 1.0000000000000002,
"min_width": 512,
"min_height": 512,
"max_width": 1800,
"max_height": 1800,
"padding": 32,
"image": [
"42",
0
],
"mask": [
"30",
0
],
"optional_context_mask": [
"40",
0
]
},
"class_type": "InpaintCrop",
"_meta": {
"title": "(OLD 💀, use the new ✂️ Inpaint Crop node)"
}
},
"28": {
"inputs": {
"mask": [
"127",
0
]
},
"class_type": "MaskToImage",
"_meta": {
"title": "Convert Mask to Image"
}
},
"29": {
"inputs": {
"width": [
"94",
0
],
"height": [
"94",
0
],
"interpolation": "nearest",
"method": "keep proportion",
"condition": "always",
"multiple_of": 0,
"image": [
"28",
0
]
},
"class_type": "ImageResize+",
"_meta": {
"title": "🔧 Image Resize"
}
},
"30": {
"inputs": {
"channel": "red",
"image": [
"43",
0
]
},
"class_type": "ImageToMask",
"_meta": {
"title": "Convert Image to Mask"
}
},
"34": {
"inputs": {
"rescale_algorithm": "bislerp",
"stitch": [
"27",
0
],
"inpainted_image": [
"8",
0
]
},
"class_type": "InpaintStitch",
"_meta": {
"title": "(OLD 💀, use the new ✂️ Inpaint Stitch node)"
}
},
"37": {
"inputs": {
"direction": "right",
"match_image_size": true,
"image1": [
"38",
0
],
"image2": [
"57",
0
]
},
"class_type": "ImageConcanate",
"_meta": {
"title": "Image Concatenate"
}
},
"38": {
"inputs": {
"mask": [
"71:2",
1
]
},
"class_type": "MaskToImage",
"_meta": {
"title": "Convert Mask to Image"
}
},
"40": {
"inputs": {
"channel": "red",
"image": [
"37",
0
]
},
"class_type": "ImageToMask",
"_meta": {
"title": "Convert Image to Mask"
}
},
"42": {
"inputs": {
"direction": "right",
"match_image_size": true,
"image1": [
"25",
0
],
"image2": [
"26",
0
]
},
"class_type": "ImageConcanate",
"_meta": {
"title": "Image Concatenate"
}
},
"43": {
"inputs": {
"direction": "right",
"match_image_size": true,
"image1": [
"59",
0
],
"image2": [
"29",
0
]
},
"class_type": "ImageConcanate",
"_meta": {
"title": "Image Concatenate"
}
},
"45": {
"inputs": {
"images": [
"42",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"57": {
"inputs": {
"brightness": -1,
"contrast": 0,
"saturation": 0,
"sharpness": 0,
"blur": 0,
"gaussian_blur": 0,
"edge_enhance": 0,
"detail_enhance": "false",
"image": [
"26",
0
]
},
"class_type": "Image Filter Adjustments",
"_meta": {
"title": "Image Filter Adjustments"
}
},
"59": {
"inputs": {
"brightness": -1,
"contrast": 1.0000000000000002,
"saturation": 1.0000000000000002,
"sharpness": 1.0000000000000002,
"blur": 0,
"gaussian_blur": 48.1,
"edge_enhance": 0,
"detail_enhance": "false",
"image": [
"25",
0
]
},
"class_type": "Image Filter Adjustments",
"_meta": {
"title": "Image Filter Adjustments"
}
},
"61": {
"inputs": {
"image": "微信图片_20250808213937_73.png"
},
"class_type": "LoadImage",
"_meta": {
"title": "Load Image"
}
},
"75": {
"inputs": {
"model_path": "svdq-int4-flux.1-fill-dev",
"cache_threshold": 0,
"attention": "nunchaku-fp16",
"cpu_offload": "auto",
"device_id": 0,
"data_type": "bfloat16",
"i2f_mode": "enabled"
},
"class_type": "NunchakuFluxDiTLoader",
"_meta": {
"title": "Nunchaku FLUX DiT Loader"
}
},
"79": {
"inputs": {
"style_model_name": "flux1-redux-dev.safetensors"
},
"class_type": "StyleModelLoader",
"_meta": {
"title": "Load Style Model"
}
},
"83": {
"inputs": {
"images": [
"29",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"84": {
"inputs": {
"images": [
"43",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"85": {
"inputs": {
"mask": [
"30",
0
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"86": {
"inputs": {
"mask": [
"71:2",
1
]
},
"class_type": "MaskPreview+",
"_meta": {
"title": "🔧 Mask Preview"
}
},
"87": {
"inputs": {
"images": [
"38",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"88": {
"inputs": {
"images": [
"37",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"89": {
"inputs": {
"images": [
"57",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"90": {
"inputs": {
"images": [
"59",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"91": {
"inputs": {
"images": [
"27",
1
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"93": {
"inputs": {
"mask": [
"27",
2
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"94": {
"inputs": {
"value": 1536
},
"class_type": "PrimitiveInt",
"_meta": {
"title": "Int"
}
},
"95": {
"inputs": {
"detect_hand": "disable",
"detect_body": "enable",
"detect_face": "disable",
"resolution": 512,
"bbox_detector": "yolo_nas_m_fp16.onnx",
"pose_estimator": "dw-ll_ucoco_384.onnx",
"scale_stick_for_xinsr_cn": "disable",
"image": [
"61",
0
]
},
"class_type": "DWPreprocessor",
"_meta": {
"title": "DWPose Estimator"
}
},
"96": {
"inputs": {
"cloth_len": "拖地",
"line_len": 0.4000000000000001,
"cloth_short": true,
"kps": [
"95",
1
]
},
"class_type": "RenderPeopleKpsMask",
"_meta": {
"title": "My RenderPeopleKps Mask"
}
},
"98": {
"inputs": {
"mask": [
"96",
0
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"99": {
"inputs": {
"width": [
"108",
0
],
"height": [
"107",
1
],
"x": [
"109",
0
],
"y": 0,
"image": [
"34",
0
]
},
"class_type": "ImageCrop",
"_meta": {
"title": "Image Crop"
}
},
"102": {
"inputs": {
"filename_prefix": "my_test_out",
"images": [
"99",
0
]
},
"class_type": "SaveImage",
"_meta": {
"title": "Save Image"
}
},
"104": {
"inputs": {
"image": [
"61",
0
]
},
"class_type": "GetImageSize",
"_meta": {
"title": "Get Image Size"
}
},
"106": {
"inputs": {
"op": "Mul",
"a": [
"107",
1
],
"b": [
"104",
0
]
},
"class_type": "CM_IntBinaryOperation",
"_meta": {
"title": "IntBinaryOperation"
}
},
"107": {
"inputs": {
"image": [
"34",
0
]
},
"class_type": "GetImageSize",
"_meta": {
"title": "Get Image Size"
}
},
"108": {
"inputs": {
"op": "Div",
"a": [
"106",
0
],
"b": [
"104",
1
]
},
"class_type": "CM_IntBinaryOperation",
"_meta": {
"title": "IntBinaryOperation"
}
},
"109": {
"inputs": {
"op": "Sub",
"a": [
"107",
0
],
"b": [
"108",
0
]
},
"class_type": "CM_IntBinaryOperation",
"_meta": {
"title": "IntBinaryOperation"
}
},
"119": {
"inputs": {
"anything": [
"10",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"120": {
"inputs": {
"anything": [
"10",
0
]
},
"class_type": "easy clearCacheAll",
"_meta": {
"title": "Clear Cache All"
}
},
"124": {
"inputs": {
"images": [
"95",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"125": {
"inputs": {
"prompt": "cloth",
"threshold": 0.30000000000000004,
"sam_model": [
"71:0",
0
],
"grounding_dino_model": [
"71:1",
0
],
"image": [
"61",
0
]
},
"class_type": "GroundingDinoSAMSegment (segment anything)",
"_meta": {
"title": "GroundingDinoSAMSegment (segment anything)"
}
},
"126": {
"inputs": {
"mask": [
"125",
1
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"127": {
"inputs": {
"x": 0,
"y": 0,
"operation": "add",
"destination": [
"96",
0
],
"source": [
"125",
1
]
},
"class_type": "MaskComposite",
"_meta": {
"title": "MaskComposite"
}
},
"128": {
"inputs": {
"mask": [
"127",
0
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"71:1": {
"inputs": {
"model_name": "GroundingDINO_SwinT_OGC (694MB)"
},
"class_type": "GroundingDinoModelLoader (segment anything)",
"_meta": {
"title": "GroundingDinoModelLoader (segment anything)"
}
},
"71:0": {
"inputs": {
"model_name": "sam_vit_h (2.56GB)"
},
"class_type": "SAMModelLoader (segment anything)",
"_meta": {
"title": "SAMModelLoader (segment anything)"
}
},
"71:2": {
"inputs": {
"prompt": "cloth",
"threshold": 0.30000000000000004,
"sam_model": [
"71:0",
0
],
"grounding_dino_model": [
"71:1",
0
],
"image": [
"25",
0
]
},
"class_type": "GroundingDinoSAMSegment (segment anything)",
"_meta": {
"title": "GroundingDinoSAMSegment (segment anything)"
}
},
"71:3": {
"inputs": {
"images": [
"71:2",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
}
}
+961
View File
@@ -0,0 +1,961 @@
{
"3": {
"inputs": {
"seed": 627869097640777,
"steps": 20,
"cfg": 1,
"sampler_name": "euler",
"scheduler": "simple",
"denoise": 1,
"model": [
"13",
0
],
"positive": [
"17",
0
],
"negative": [
"17",
1
],
"latent_image": [
"17",
2
]
},
"class_type": "KSampler",
"_meta": {
"title": "KSampler"
}
},
"6": {
"inputs": {
"text": "",
"clip": [
"12",
0
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"7": {
"inputs": {
"text": "",
"clip": [
"12",
0
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"8": {
"inputs": {
"samples": [
"3",
0
],
"vae": [
"16",
0
]
},
"class_type": "VAEDecode",
"_meta": {
"title": "VAE Decode"
}
},
"10": {
"inputs": {
"strength": 1.0000000000000002,
"strength_type": "multiply",
"conditioning": [
"11",
0
],
"style_model": [
"79",
0
],
"clip_vision_output": [
"20",
0
]
},
"class_type": "StyleModelApply",
"_meta": {
"title": "Apply Style Model"
}
},
"11": {
"inputs": {
"guidance": 30,
"conditioning": [
"6",
0
]
},
"class_type": "FluxGuidance",
"_meta": {
"title": "FluxGuidance"
}
},
"12": {
"inputs": {
"clip_name1": "flux/t5xxl_fp16.safetensors",
"clip_name2": "clip_l.safetensors",
"type": "flux",
"device": "default"
},
"class_type": "DualCLIPLoader",
"_meta": {
"title": "DualCLIPLoader"
}
},
"13": {
"inputs": {
"model": [
"75",
0
]
},
"class_type": "DifferentialDiffusion",
"_meta": {
"title": "Differential Diffusion"
}
},
"16": {
"inputs": {
"vae_name": "ae.safetensors"
},
"class_type": "VAELoader",
"_meta": {
"title": "Load VAE"
}
},
"17": {
"inputs": {
"noise_mask": false,
"positive": [
"10",
0
],
"negative": [
"7",
0
],
"vae": [
"16",
0
],
"pixels": [
"27",
1
],
"mask": [
"27",
2
]
},
"class_type": "InpaintModelConditioning",
"_meta": {
"title": "InpaintModelConditioning"
}
},
"20": {
"inputs": {
"crop": "center",
"clip_vision": [
"21",
0
],
"image": [
"25",
0
]
},
"class_type": "CLIPVisionEncode",
"_meta": {
"title": "CLIP Vision Encode"
}
},
"21": {
"inputs": {
"clip_name": "sigclip_vision_patch14_384.safetensors"
},
"class_type": "CLIPVisionLoader",
"_meta": {
"title": "Load CLIP Vision"
}
},
"22": {
"inputs": {
"image": "man_cloth.jpg"
},
"class_type": "LoadImage",
"_meta": {
"title": "Load Image"
}
},
"25": {
"inputs": {
"width": [
"94",
0
],
"height": [
"94",
0
],
"interpolation": "nearest",
"method": "keep proportion",
"condition": "always",
"multiple_of": 0,
"image": [
"22",
0
]
},
"class_type": "ImageResize+",
"_meta": {
"title": "🔧 Image Resize"
}
},
"26": {
"inputs": {
"width": [
"94",
0
],
"height": [
"94",
0
],
"interpolation": "nearest",
"method": "keep proportion",
"condition": "always",
"multiple_of": 0,
"image": [
"61",
0
]
},
"class_type": "ImageResize+",
"_meta": {
"title": "🔧 Image Resize"
}
},
"27": {
"inputs": {
"context_expand_pixels": 20,
"context_expand_factor": 1.0000000000000002,
"fill_mask_holes": true,
"blur_mask_pixels": 10,
"invert_mask": false,
"blend_pixels": 16,
"rescale_algorithm": "bicubic",
"mode": "ranged size",
"force_width": 1024,
"force_height": 1024,
"rescale_factor": 1.0000000000000002,
"min_width": 512,
"min_height": 512,
"max_width": 1800,
"max_height": 1800,
"padding": 32,
"image": [
"42",
0
],
"mask": [
"30",
0
],
"optional_context_mask": [
"40",
0
]
},
"class_type": "InpaintCrop",
"_meta": {
"title": "(OLD 💀, use the new ✂️ Inpaint Crop node)"
}
},
"28": {
"inputs": {
"mask": [
"127",
0
]
},
"class_type": "MaskToImage",
"_meta": {
"title": "Convert Mask to Image"
}
},
"29": {
"inputs": {
"width": [
"94",
0
],
"height": [
"94",
0
],
"interpolation": "nearest",
"method": "keep proportion",
"condition": "always",
"multiple_of": 0,
"image": [
"28",
0
]
},
"class_type": "ImageResize+",
"_meta": {
"title": "🔧 Image Resize"
}
},
"30": {
"inputs": {
"channel": "red",
"image": [
"43",
0
]
},
"class_type": "ImageToMask",
"_meta": {
"title": "Convert Image to Mask"
}
},
"34": {
"inputs": {
"rescale_algorithm": "bislerp",
"stitch": [
"27",
0
],
"inpainted_image": [
"8",
0
]
},
"class_type": "InpaintStitch",
"_meta": {
"title": "(OLD 💀, use the new ✂️ Inpaint Stitch node)"
}
},
"37": {
"inputs": {
"direction": "right",
"match_image_size": true,
"image1": [
"38",
0
],
"image2": [
"57",
0
]
},
"class_type": "ImageConcanate",
"_meta": {
"title": "Image Concatenate"
}
},
"38": {
"inputs": {
"mask": [
"71:2",
1
]
},
"class_type": "MaskToImage",
"_meta": {
"title": "Convert Mask to Image"
}
},
"40": {
"inputs": {
"channel": "red",
"image": [
"37",
0
]
},
"class_type": "ImageToMask",
"_meta": {
"title": "Convert Image to Mask"
}
},
"42": {
"inputs": {
"direction": "right",
"match_image_size": true,
"image1": [
"25",
0
],
"image2": [
"26",
0
]
},
"class_type": "ImageConcanate",
"_meta": {
"title": "Image Concatenate"
}
},
"43": {
"inputs": {
"direction": "right",
"match_image_size": true,
"image1": [
"59",
0
],
"image2": [
"29",
0
]
},
"class_type": "ImageConcanate",
"_meta": {
"title": "Image Concatenate"
}
},
"45": {
"inputs": {
"images": [
"42",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"57": {
"inputs": {
"brightness": -1,
"contrast": 0,
"saturation": 0,
"sharpness": 0,
"blur": 0,
"gaussian_blur": 0,
"edge_enhance": 0,
"detail_enhance": "false",
"image": [
"26",
0
]
},
"class_type": "Image Filter Adjustments",
"_meta": {
"title": "Image Filter Adjustments"
}
},
"59": {
"inputs": {
"brightness": -1,
"contrast": 1.0000000000000002,
"saturation": 1.0000000000000002,
"sharpness": 1.0000000000000002,
"blur": 0,
"gaussian_blur": 48.1,
"edge_enhance": 0,
"detail_enhance": "false",
"image": [
"25",
0
]
},
"class_type": "Image Filter Adjustments",
"_meta": {
"title": "Image Filter Adjustments"
}
},
"61": {
"inputs": {
"image": "微信图片_20250808213937_73.png"
},
"class_type": "LoadImage",
"_meta": {
"title": "Load Image"
}
},
"75": {
"inputs": {
"model_path": "svdq-fp4_r32-flux.1-fill-dev.safetensors",
"cache_threshold": 0,
"attention": "nunchaku-fp16",
"cpu_offload": "auto",
"device_id": 0,
"data_type": "bfloat16",
"i2f_mode": "enabled"
},
"class_type": "NunchakuFluxDiTLoader",
"_meta": {
"title": "Nunchaku FLUX DiT Loader"
}
},
"79": {
"inputs": {
"style_model_name": "flux1-redux-dev.safetensors"
},
"class_type": "StyleModelLoader",
"_meta": {
"title": "Load Style Model"
}
},
"83": {
"inputs": {
"images": [
"29",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"84": {
"inputs": {
"images": [
"43",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"85": {
"inputs": {
"mask": [
"30",
0
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"86": {
"inputs": {
"mask": [
"71:2",
1
]
},
"class_type": "MaskPreview+",
"_meta": {
"title": "🔧 Mask Preview"
}
},
"87": {
"inputs": {
"images": [
"38",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"88": {
"inputs": {
"images": [
"37",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"89": {
"inputs": {
"images": [
"57",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"90": {
"inputs": {
"images": [
"59",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"91": {
"inputs": {
"images": [
"27",
1
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"93": {
"inputs": {
"mask": [
"27",
2
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"94": {
"inputs": {
"value": 2048
},
"class_type": "PrimitiveInt",
"_meta": {
"title": "Int"
}
},
"95": {
"inputs": {
"detect_hand": "disable",
"detect_body": "enable",
"detect_face": "disable",
"resolution": 512,
"bbox_detector": "yolo_nas_m_fp16.onnx",
"pose_estimator": "dw-ll_ucoco_384.onnx",
"scale_stick_for_xinsr_cn": "disable",
"image": [
"61",
0
]
},
"class_type": "DWPreprocessor",
"_meta": {
"title": "DWPose Estimator"
}
},
"96": {
"inputs": {
"cloth_len": "拖地",
"line_len": 0.4000000000000001,
"cloth_short": true,
"kps": [
"95",
1
]
},
"class_type": "RenderPeopleKpsMask",
"_meta": {
"title": "My RenderPeopleKps Mask"
}
},
"98": {
"inputs": {
"mask": [
"96",
0
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"99": {
"inputs": {
"width": [
"108",
0
],
"height": [
"107",
1
],
"x": [
"109",
0
],
"y": 0,
"image": [
"34",
0
]
},
"class_type": "ImageCrop",
"_meta": {
"title": "Image Crop"
}
},
"102": {
"inputs": {
"filename_prefix": "my_test_out",
"images": [
"99",
0
]
},
"class_type": "SaveImage",
"_meta": {
"title": "Save Image"
}
},
"104": {
"inputs": {
"image": [
"61",
0
]
},
"class_type": "GetImageSize",
"_meta": {
"title": "Get Image Size"
}
},
"106": {
"inputs": {
"op": "Mul",
"a": [
"107",
1
],
"b": [
"104",
0
]
},
"class_type": "CM_IntBinaryOperation",
"_meta": {
"title": "IntBinaryOperation"
}
},
"107": {
"inputs": {
"image": [
"34",
0
]
},
"class_type": "GetImageSize",
"_meta": {
"title": "Get Image Size"
}
},
"108": {
"inputs": {
"op": "Div",
"a": [
"106",
0
],
"b": [
"104",
1
]
},
"class_type": "CM_IntBinaryOperation",
"_meta": {
"title": "IntBinaryOperation"
}
},
"109": {
"inputs": {
"op": "Sub",
"a": [
"107",
0
],
"b": [
"108",
0
]
},
"class_type": "CM_IntBinaryOperation",
"_meta": {
"title": "IntBinaryOperation"
}
},
"119": {
"inputs": {
"anything": [
"10",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"120": {
"inputs": {
"anything": [
"10",
0
]
},
"class_type": "easy clearCacheAll",
"_meta": {
"title": "Clear Cache All"
}
},
"124": {
"inputs": {
"images": [
"95",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"125": {
"inputs": {
"prompt": "cloth",
"threshold": 0.30000000000000004,
"sam_model": [
"71:0",
0
],
"grounding_dino_model": [
"71:1",
0
],
"image": [
"61",
0
]
},
"class_type": "GroundingDinoSAMSegment (segment anything)",
"_meta": {
"title": "GroundingDinoSAMSegment (segment anything)"
}
},
"126": {
"inputs": {
"mask": [
"125",
1
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"127": {
"inputs": {
"x": 0,
"y": 0,
"operation": "add",
"destination": [
"96",
0
],
"source": [
"125",
1
]
},
"class_type": "MaskComposite",
"_meta": {
"title": "MaskComposite"
}
},
"128": {
"inputs": {
"mask": [
"127",
0
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"71:1": {
"inputs": {
"model_name": "GroundingDINO_SwinT_OGC (694MB)"
},
"class_type": "GroundingDinoModelLoader (segment anything)",
"_meta": {
"title": "GroundingDinoModelLoader (segment anything)"
}
},
"71:0": {
"inputs": {
"model_name": "sam_vit_h (2.56GB)"
},
"class_type": "SAMModelLoader (segment anything)",
"_meta": {
"title": "SAMModelLoader (segment anything)"
}
},
"71:2": {
"inputs": {
"prompt": "cloth",
"threshold": 0.30000000000000004,
"sam_model": [
"71:0",
0
],
"grounding_dino_model": [
"71:1",
0
],
"image": [
"25",
0
]
},
"class_type": "GroundingDinoSAMSegment (segment anything)",
"_meta": {
"title": "GroundingDinoSAMSegment (segment anything)"
}
},
"71:3": {
"inputs": {
"images": [
"71:2",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
}
}
+908
View File
@@ -0,0 +1,908 @@
{
"3": {
"inputs": {
"seed": 953738907275871,
"steps": 20,
"cfg": 1,
"sampler_name": "euler",
"scheduler": "simple",
"denoise": 1,
"model": [
"13",
0
],
"positive": [
"17",
0
],
"negative": [
"17",
1
],
"latent_image": [
"17",
2
]
},
"class_type": "KSampler",
"_meta": {
"title": "KSampler"
}
},
"6": {
"inputs": {
"text": "",
"clip": [
"12",
0
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"7": {
"inputs": {
"text": "",
"clip": [
"12",
0
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"8": {
"inputs": {
"samples": [
"3",
0
],
"vae": [
"16",
0
]
},
"class_type": "VAEDecode",
"_meta": {
"title": "VAE Decode"
}
},
"10": {
"inputs": {
"strength": 1.0000000000000002,
"strength_type": "multiply",
"conditioning": [
"11",
0
],
"style_model": [
"79",
0
],
"clip_vision_output": [
"20",
0
]
},
"class_type": "StyleModelApply",
"_meta": {
"title": "Apply Style Model"
}
},
"11": {
"inputs": {
"guidance": 30,
"conditioning": [
"6",
0
]
},
"class_type": "FluxGuidance",
"_meta": {
"title": "FluxGuidance"
}
},
"12": {
"inputs": {
"clip_name1": "flux/t5xxl_fp16.safetensors",
"clip_name2": "clip_l.safetensors",
"type": "flux",
"device": "default"
},
"class_type": "DualCLIPLoader",
"_meta": {
"title": "DualCLIPLoader"
}
},
"13": {
"inputs": {
"model": [
"75",
0
]
},
"class_type": "DifferentialDiffusion",
"_meta": {
"title": "Differential Diffusion"
}
},
"16": {
"inputs": {
"vae_name": "ae.safetensors"
},
"class_type": "VAELoader",
"_meta": {
"title": "Load VAE"
}
},
"17": {
"inputs": {
"noise_mask": false,
"positive": [
"10",
0
],
"negative": [
"7",
0
],
"vae": [
"16",
0
],
"pixels": [
"27",
1
],
"mask": [
"27",
2
]
},
"class_type": "InpaintModelConditioning",
"_meta": {
"title": "InpaintModelConditioning"
}
},
"20": {
"inputs": {
"crop": "center",
"clip_vision": [
"21",
0
],
"image": [
"25",
0
]
},
"class_type": "CLIPVisionEncode",
"_meta": {
"title": "CLIP Vision Encode"
}
},
"21": {
"inputs": {
"clip_name": "sigclip_vision_patch14_384.safetensors"
},
"class_type": "CLIPVisionLoader",
"_meta": {
"title": "Load CLIP Vision"
}
},
"22": {
"inputs": {
"image": "微信图片_20250810123345_95.jpg"
},
"class_type": "LoadImage",
"_meta": {
"title": "Load Image"
}
},
"25": {
"inputs": {
"width": [
"94",
0
],
"height": [
"94",
0
],
"interpolation": "nearest",
"method": "keep proportion",
"condition": "always",
"multiple_of": 0,
"image": [
"22",
0
]
},
"class_type": "ImageResize+",
"_meta": {
"title": "🔧 Image Resize"
}
},
"26": {
"inputs": {
"width": [
"94",
0
],
"height": [
"94",
0
],
"interpolation": "nearest",
"method": "keep proportion",
"condition": "always",
"multiple_of": 0,
"image": [
"61",
0
]
},
"class_type": "ImageResize+",
"_meta": {
"title": "🔧 Image Resize"
}
},
"27": {
"inputs": {
"context_expand_pixels": 20,
"context_expand_factor": 1.0000000000000002,
"fill_mask_holes": true,
"blur_mask_pixels": 10,
"invert_mask": false,
"blend_pixels": 16,
"rescale_algorithm": "bicubic",
"mode": "ranged size",
"force_width": 1024,
"force_height": 1024,
"rescale_factor": 1.0000000000000002,
"min_width": 512,
"min_height": 512,
"max_width": 1800,
"max_height": 1800,
"padding": 32,
"image": [
"42",
0
],
"mask": [
"30",
0
],
"optional_context_mask": [
"40",
0
]
},
"class_type": "InpaintCrop",
"_meta": {
"title": "(OLD 💀, use the new ✂️ Inpaint Crop node)"
}
},
"28": {
"inputs": {
"mask": [
"96",
0
]
},
"class_type": "MaskToImage",
"_meta": {
"title": "Convert Mask to Image"
}
},
"29": {
"inputs": {
"width": [
"94",
0
],
"height": [
"94",
0
],
"interpolation": "nearest",
"method": "keep proportion",
"condition": "always",
"multiple_of": 0,
"image": [
"28",
0
]
},
"class_type": "ImageResize+",
"_meta": {
"title": "🔧 Image Resize"
}
},
"30": {
"inputs": {
"channel": "red",
"image": [
"43",
0
]
},
"class_type": "ImageToMask",
"_meta": {
"title": "Convert Image to Mask"
}
},
"34": {
"inputs": {
"rescale_algorithm": "bislerp",
"stitch": [
"27",
0
],
"inpainted_image": [
"8",
0
]
},
"class_type": "InpaintStitch",
"_meta": {
"title": "(OLD 💀, use the new ✂️ Inpaint Stitch node)"
}
},
"37": {
"inputs": {
"direction": "right",
"match_image_size": true,
"image1": [
"38",
0
],
"image2": [
"57",
0
]
},
"class_type": "ImageConcanate",
"_meta": {
"title": "Image Concatenate"
}
},
"38": {
"inputs": {
"mask": [
"71:2",
1
]
},
"class_type": "MaskToImage",
"_meta": {
"title": "Convert Mask to Image"
}
},
"40": {
"inputs": {
"channel": "red",
"image": [
"37",
0
]
},
"class_type": "ImageToMask",
"_meta": {
"title": "Convert Image to Mask"
}
},
"42": {
"inputs": {
"direction": "right",
"match_image_size": true,
"image1": [
"25",
0
],
"image2": [
"26",
0
]
},
"class_type": "ImageConcanate",
"_meta": {
"title": "Image Concatenate"
}
},
"43": {
"inputs": {
"direction": "right",
"match_image_size": true,
"image1": [
"59",
0
],
"image2": [
"29",
0
]
},
"class_type": "ImageConcanate",
"_meta": {
"title": "Image Concatenate"
}
},
"45": {
"inputs": {
"images": [
"42",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"57": {
"inputs": {
"brightness": -1,
"contrast": 0,
"saturation": 0,
"sharpness": 0,
"blur": 0,
"gaussian_blur": 0,
"edge_enhance": 0,
"detail_enhance": "false",
"image": [
"26",
0
]
},
"class_type": "Image Filter Adjustments",
"_meta": {
"title": "Image Filter Adjustments"
}
},
"59": {
"inputs": {
"brightness": -1,
"contrast": 1.0000000000000002,
"saturation": 1.0000000000000002,
"sharpness": 1.0000000000000002,
"blur": 0,
"gaussian_blur": 48.1,
"edge_enhance": 0,
"detail_enhance": "false",
"image": [
"25",
0
]
},
"class_type": "Image Filter Adjustments",
"_meta": {
"title": "Image Filter Adjustments"
}
},
"61": {
"inputs": {
"image": "微信图片_20250809133614_84.jpg"
},
"class_type": "LoadImage",
"_meta": {
"title": "Load Image"
}
},
"75": {
"inputs": {
"model_path": "svdq-fp4_r32-flux.1-fill-dev.safetensors",
"cache_threshold": 0,
"attention": "nunchaku-fp16",
"cpu_offload": "auto",
"device_id": 0,
"data_type": "bfloat16",
"i2f_mode": "enabled"
},
"class_type": "NunchakuFluxDiTLoader",
"_meta": {
"title": "Nunchaku FLUX DiT Loader"
}
},
"79": {
"inputs": {
"style_model_name": "flux1-redux-dev.safetensors"
},
"class_type": "StyleModelLoader",
"_meta": {
"title": "Load Style Model"
}
},
"83": {
"inputs": {
"images": [
"29",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"84": {
"inputs": {
"images": [
"43",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"85": {
"inputs": {
"mask": [
"30",
0
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"86": {
"inputs": {
"mask": [
"71:2",
1
]
},
"class_type": "MaskPreview+",
"_meta": {
"title": "🔧 Mask Preview"
}
},
"87": {
"inputs": {
"images": [
"38",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"88": {
"inputs": {
"images": [
"37",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"89": {
"inputs": {
"images": [
"57",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"90": {
"inputs": {
"images": [
"59",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"91": {
"inputs": {
"images": [
"27",
1
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"93": {
"inputs": {
"mask": [
"27",
2
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"94": {
"inputs": {
"value": 2048
},
"class_type": "PrimitiveInt",
"_meta": {
"title": "Int"
}
},
"95": {
"inputs": {
"detect_hand": "disable",
"detect_body": "enable",
"detect_face": "disable",
"resolution": 512,
"bbox_detector": "yolo_nas_m_fp16.onnx",
"pose_estimator": "dw-ll_ucoco_384.onnx",
"scale_stick_for_xinsr_cn": "disable",
"image": [
"61",
0
]
},
"class_type": "DWPreprocessor",
"_meta": {
"title": "DWPose Estimator"
}
},
"96": {
"inputs": {
"cloth_len": "腰",
"line_len": 0.4000000000000001,
"cloth_short": true,
"kps": [
"95",
1
]
},
"class_type": "RenderPeopleKpsMask",
"_meta": {
"title": "My RenderPeopleKps Mask"
}
},
"98": {
"inputs": {
"mask": [
"96",
0
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"99": {
"inputs": {
"width": [
"108",
0
],
"height": [
"107",
1
],
"x": [
"109",
0
],
"y": 0,
"image": [
"34",
0
]
},
"class_type": "ImageCrop",
"_meta": {
"title": "Image Crop"
}
},
"102": {
"inputs": {
"filename_prefix": "my_test_out",
"images": [
"99",
0
]
},
"class_type": "SaveImage",
"_meta": {
"title": "Save Image"
}
},
"104": {
"inputs": {
"image": [
"61",
0
]
},
"class_type": "GetImageSize",
"_meta": {
"title": "Get Image Size"
}
},
"106": {
"inputs": {
"op": "Mul",
"a": [
"107",
1
],
"b": [
"104",
0
]
},
"class_type": "CM_IntBinaryOperation",
"_meta": {
"title": "IntBinaryOperation"
}
},
"107": {
"inputs": {
"image": [
"34",
0
]
},
"class_type": "GetImageSize",
"_meta": {
"title": "Get Image Size"
}
},
"108": {
"inputs": {
"op": "Div",
"a": [
"106",
0
],
"b": [
"104",
1
]
},
"class_type": "CM_IntBinaryOperation",
"_meta": {
"title": "IntBinaryOperation"
}
},
"109": {
"inputs": {
"op": "Sub",
"a": [
"107",
0
],
"b": [
"108",
0
]
},
"class_type": "CM_IntBinaryOperation",
"_meta": {
"title": "IntBinaryOperation"
}
},
"119": {
"inputs": {
"anything": [
"10",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"120": {
"inputs": {
"anything": [
"10",
0
]
},
"class_type": "easy clearCacheAll",
"_meta": {
"title": "Clear Cache All"
}
},
"124": {
"inputs": {
"images": [
"95",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"128": {
"inputs": {
"mask": [
"96",
0
]
},
"class_type": "MaskPreview",
"_meta": {
"title": "MaskPreview"
}
},
"71:1": {
"inputs": {
"model_name": "GroundingDINO_SwinT_OGC (694MB)"
},
"class_type": "GroundingDinoModelLoader (segment anything)",
"_meta": {
"title": "GroundingDinoModelLoader (segment anything)"
}
},
"71:0": {
"inputs": {
"model_name": "sam_vit_h (2.56GB)"
},
"class_type": "SAMModelLoader (segment anything)",
"_meta": {
"title": "SAMModelLoader (segment anything)"
}
},
"71:2": {
"inputs": {
"prompt": "cloth",
"threshold": 0.30000000000000004,
"sam_model": [
"71:0",
0
],
"grounding_dino_model": [
"71:1",
0
],
"image": [
"25",
0
]
},
"class_type": "GroundingDinoSAMSegment (segment anything)",
"_meta": {
"title": "GroundingDinoSAMSegment (segment anything)"
}
},
"71:3": {
"inputs": {
"images": [
"71:2",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
}
}
+1 -1
View File
@@ -36,4 +36,4 @@ import mediapipe as mp
# return left_thigh_visible and right_thigh_visible # return left_thigh_visible and right_thigh_visible
# print(is_thigh_visible("/home/szlc/code/ComfyUI/change_cloth/static/imgs/fc74eded_00001_.jpg")) # print(is_thigh_visible("/home/xsl/code/ComfyUI/change_cloth/static/imgs/fc74eded_00001_.jpg"))
+18 -1
View File
@@ -4,7 +4,7 @@ import logging
QUEUE_NAME = 'task_queue' QUEUE_NAME = 'task_queue'
# 配置 # 配置
REDIS_HOST = '127.0.0.1' REDIS_HOST = '192.168.101.118'
REDIS_PORT = 6379 REDIS_PORT = 6379
REDIS_DB = 0 REDIS_DB = 0
DEFAULT_TIMEOUT = (60*20) DEFAULT_TIMEOUT = (60*20)
@@ -37,6 +37,23 @@ console_handler.setFormatter(console_formatter)
logger.addHandler(file_handler) logger.addHandler(file_handler)
logger.addHandler(console_handler) logger.addHandler(console_handler)
selfComputer = "5090"
if selfComputer == "5090":
change_only_name = "change_new_only_change.json"
# change_with_add_cloth = "change_new_debug.json"
change_with_add_cloth = change_only_name
xiezhen_name = "xiezhen-0812-40s_api.json"
base64_test_port = 28888
else:
change_only_name = "change_new_only_3090.json"
# change_with_add_cloth = "change_new_3090.json"
change_with_add_cloth = change_only_name
xiezhen_name = "xiezhen-0812-40s_api.json"
base64_test_port = 18888
def acquire_lock(redis_client, lock_name): def acquire_lock(redis_client, lock_name):
lock = Lock( lock = Lock(
redis_client, redis_client,
+212
View File
@@ -0,0 +1,212 @@
{
"6": {
"inputs": {
"text": "Using this elegant style, create a portrait of a swan wearing a pearl tiara and lace collar, maintaining the same refined quality and soft color tones.",
"clip": [
"38",
0
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Positive Prompt)"
}
},
"8": {
"inputs": {
"samples": [
"31",
0
],
"vae": [
"39",
0
]
},
"class_type": "VAEDecode",
"_meta": {
"title": "VAE Decode"
}
},
"31": {
"inputs": {
"seed": 331754788447825,
"steps": 20,
"cfg": 1,
"sampler_name": "euler",
"scheduler": "simple",
"denoise": 1,
"model": [
"37",
0
],
"positive": [
"35",
0
],
"negative": [
"135",
0
],
"latent_image": [
"124",
0
]
},
"class_type": "KSampler",
"_meta": {
"title": "KSampler"
}
},
"35": {
"inputs": {
"guidance": 2.5,
"conditioning": [
"177",
0
]
},
"class_type": "FluxGuidance",
"_meta": {
"title": "FluxGuidance"
}
},
"37": {
"inputs": {
"unet_name": "flux1-dev-kontext_fp8_scaled.safetensors",
"weight_dtype": "default"
},
"class_type": "UNETLoader",
"_meta": {
"title": "Load Diffusion Model"
}
},
"38": {
"inputs": {
"clip_name1": "clip_l.safetensors",
"clip_name2": "t5xxl_fp8_e4m3fn_scaled.safetensors",
"type": "flux",
"device": "default"
},
"class_type": "DualCLIPLoader",
"_meta": {
"title": "DualCLIPLoader"
}
},
"39": {
"inputs": {
"vae_name": "ae.safetensors"
},
"class_type": "VAELoader",
"_meta": {
"title": "Load VAE"
}
},
"42": {
"inputs": {
"image": [
"146",
0
]
},
"class_type": "FluxKontextImageScale",
"_meta": {
"title": "FluxKontextImageScale"
}
},
"124": {
"inputs": {
"pixels": [
"42",
0
],
"vae": [
"39",
0
]
},
"class_type": "VAEEncode",
"_meta": {
"title": "VAE Encode"
}
},
"135": {
"inputs": {
"conditioning": [
"6",
0
]
},
"class_type": "ConditioningZeroOut",
"_meta": {
"title": "ConditioningZeroOut"
}
},
"136": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": [
"8",
0
]
},
"class_type": "SaveImage",
"_meta": {
"title": "Save Image"
}
},
"142": {
"inputs": {
"image": "ComfyUI_00441_.png [output]",
"refresh": "refresh"
},
"class_type": "LoadImageOutput",
"_meta": {
"title": "Load Image (from Outputs)"
}
},
"146": {
"inputs": {
"direction": "right",
"match_image_size": true,
"spacing_width": 0,
"spacing_color": "white",
"image1": [
"142",
0
]
},
"class_type": "ImageStitch",
"_meta": {
"title": "Image Stitch"
}
},
"173": {
"inputs": {
"images": [
"42",
0
]
},
"class_type": "PreviewImage",
"_meta": {
"title": "Preview Image"
}
},
"177": {
"inputs": {
"conditioning": [
"6",
0
],
"latent": [
"124",
0
]
},
"class_type": "ReferenceLatent",
"_meta": {
"title": "ReferenceLatent"
}
}
}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

+11 -11
View File
@@ -56,7 +56,7 @@ def takeoff_cloth_first(human_name):
if queue["queue_running"] or queue["queue_pending"]: if queue["queue_running"] or queue["queue_pending"]:
return None, "cur gpu is busy" return None, "cur gpu is busy"
with open('/home/szlc/code/ComfyUI/change_cloth/change_new.json', 'r', encoding='utf-8') as file: with open('/home/xsl/code/ComfyUI/change_cloth/change_new.json', 'r', encoding='utf-8') as file:
prompt_text = file.read() prompt_text = file.read()
prompt = json.loads(prompt_text) prompt = json.loads(prompt_text)
@@ -122,15 +122,15 @@ def change(human_name, cloth_name, c_width, c_height, cloth_url, is_generated):
return None, f"takeoff_cloth_first error {human_name}" return None, f"takeoff_cloth_first error {human_name}"
else: else:
human_name = takeoff_file_name human_name = takeoff_file_name
takeoff_file_path_name = os.path.join('/home/szlc/code/ComfyUI/output', takeoff_file_name) takeoff_file_path_name = os.path.join('/home/xsl/code/ComfyUI/output', takeoff_file_name)
takeoff_file_path_name_input = os.path.join('/home/szlc/code/ComfyUI/input', takeoff_file_name) takeoff_file_path_name_input = os.path.join('/home/xsl/code/ComfyUI/input', takeoff_file_name)
shutil.copy(takeoff_file_path_name, takeoff_file_path_name_input) shutil.copy(takeoff_file_path_name, takeoff_file_path_name_input)
queue = requests.get("http://localhost:8188/queue").json() queue = requests.get("http://localhost:8188/queue").json()
if queue["queue_running"] or queue["queue_pending"]: if queue["queue_running"] or queue["queue_pending"]:
return None, "cur gpu is busy" return None, "cur gpu is busy"
with open('/home/szlc/code/ComfyUI/change_cloth/change_new.json', 'r', encoding='utf-8') as file: with open('/home/xsl/code/ComfyUI/change_cloth/change_new.json', 'r', encoding='utf-8') as file:
prompt_text = file.read() prompt_text = file.read()
prompt = json.loads(prompt_text) prompt = json.loads(prompt_text)
@@ -207,13 +207,13 @@ def save_base64_image(base64_str, prefix):
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
unique_id = str(uuid.uuid4())[:8] unique_id = str(uuid.uuid4())[:8]
filename = f"{prefix}_{timestamp}_{unique_id}{file_ext}" filename = f"{prefix}_{timestamp}_{unique_id}{file_ext}"
filepath = os.path.join('/home/szlc/code/ComfyUI/change_cloth/static/imgs', filename) filepath = os.path.join('/home/xsl/code/ComfyUI/change_cloth/static/imgs', filename)
# 解码并保存图片 # 解码并保存图片
with open(filepath, 'wb') as f: with open(filepath, 'wb') as f:
f.write(base64.b64decode(data)) f.write(base64.b64decode(data))
input_filepath = os.path.join('/home/szlc/code/ComfyUI/input', filename) input_filepath = os.path.join('/home/xsl/code/ComfyUI/input', filename)
# 解码并保存图片 # 解码并保存图片
with open(input_filepath, 'wb') as f: with open(input_filepath, 'wb') as f:
f.write(base64.b64decode(data)) f.write(base64.b64decode(data))
@@ -286,16 +286,16 @@ def upload_to_oss(image_path, object_name=None):
def process_change_cloth(human_filename, cloth_filename, output_format, img_url, is_generated): def process_change_cloth(human_filename, cloth_filename, output_format, img_url, is_generated):
w,h = get_image_dimensions(f'/home/szlc/code/ComfyUI/input/{human_filename}') w,h = get_image_dimensions(f'/home/xsl/code/ComfyUI/input/{human_filename}')
out_put_name, msg = change(human_filename, cloth_filename, w, h, img_url, is_generated) out_put_name, msg = change(human_filename, cloth_filename, w, h, img_url, is_generated)
if out_put_name == None: if out_put_name == None:
print(f'Failed to change cloth {msg}') print(f'Failed to change cloth {msg}')
return jsonify({"ret":-1, 'msg': f'Failed to change cloth {msg}'}), 200 return jsonify({"ret":-1, 'msg': f'Failed to change cloth {msg}'}), 200
image = Image.open(f'/home/szlc/code/ComfyUI/output/{out_put_name}') image = Image.open(f'/home/xsl/code/ComfyUI/output/{out_put_name}')
jpg_name = out_put_name.replace(".png", ".jpg") jpg_name = out_put_name.replace(".png", ".jpg")
jpg_path_name = f'/home/szlc/code/ComfyUI/change_cloth/static/imgs/{jpg_name}' jpg_path_name = f'/home/xsl/code/ComfyUI/change_cloth/static/imgs/{jpg_name}'
image.save(jpg_path_name, quality=95) image.save(jpg_path_name, quality=95)
@@ -376,13 +376,13 @@ def save_image_from_url(image_url):
# 获取原始图片格式 # 获取原始图片格式
ext = get_file_extension(image_url) ext = get_file_extension(image_url)
filename = f"{uuid.uuid4()}{ext}" filename = f"{uuid.uuid4()}{ext}"
filepath = os.path.join('/home/szlc/code/ComfyUI/change_cloth/static/imgs', filename) filepath = os.path.join('/home/xsl/code/ComfyUI/change_cloth/static/imgs', filename)
with open(filepath, "wb") as f: with open(filepath, "wb") as f:
for chunk in response.iter_content(1024): for chunk in response.iter_content(1024):
f.write(chunk) f.write(chunk)
input_filepath = os.path.join('/home/szlc/code/ComfyUI/input', filename) input_filepath = os.path.join('/home/xsl/code/ComfyUI/input', filename)
shutil.copy(filepath, input_filepath) shutil.copy(filepath, input_filepath)
return filename return filename
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

+1 -1
View File
@@ -32,7 +32,7 @@ def upload_to_oss(image_path, object_name=None):
return None return None
# 使用示例 # 使用示例
image_path = '/home/szlc/code/ComfyUI/change_cloth/girl8010.jpg' # 本地图片路径 image_path = '/home/xsl/code/ComfyUI/change_cloth/girl8010.jpg' # 本地图片路径
upload_to_oss(image_path, 'girl8011.jpg') # 第二个参数可选,指定OSS上的路径 upload_to_oss(image_path, 'girl8011.jpg') # 第二个参数可选,指定OSS上的路径
https_url = f'https://llyz.oss-cn-beijing.aliyuncs.com/girl8011.jpg' https_url = f'https://llyz.oss-cn-beijing.aliyuncs.com/girl8011.jpg'
print(f"生成的HTTPS URL: {https_url}") print(f"生成的HTTPS URL: {https_url}")
+1 -1
View File
@@ -171,7 +171,7 @@
console.log("准备发送的数据:", data); // 调试用 console.log("准备发送的数据:", data); // 调试用
// 调用API // 调用API
fetch('http://112.126.94.241:18888/change_cloth_base64', { fetch('http://112.126.94.241:28888/change_cloth_base64', {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
+1 -1
View File
@@ -4,7 +4,7 @@ import json
# 1. 提交任务 # 1. 提交任务
with open('/home/szlc/code/ComfyUI/change_cloth/basic_api.json', 'r', encoding='utf-8') as file: with open('/home/xsl/code/ComfyUI/change_cloth/basic_api.json', 'r', encoding='utf-8') as file:
prompt_text = file.read() prompt_text = file.read()
prompt = json.loads(prompt_text) prompt = json.loads(prompt_text)
+2 -2
View File
@@ -29,11 +29,11 @@ def image_to_base64(file_path, mime_type=None):
if __name__ == '__main__': if __name__ == '__main__':
url = 'http://112.126.94.241:18018/change_cloth_base64' url = 'http://112.126.94.241:18018/change_cloth_base64'
headers = {'Content-Type': 'application/json'} headers = {'Content-Type': 'application/json'}
img64_human_str = image_to_base64("/home/szlc/code/ComfyUI/input/girl_full.jpg") img64_human_str = image_to_base64("/home/xsl/code/ComfyUI/input/girl_full.jpg")
data = {} data = {}
data['human_img'] = img64_human_str data['human_img'] = img64_human_str
img64_cloth_str = image_to_base64("/home/szlc/code/ComfyUI/input/cloth_short.jpg") img64_cloth_str = image_to_base64("/home/xsl/code/ComfyUI/input/cloth_short.jpg")
data['cloth_img'] = img64_cloth_str data['cloth_img'] = img64_cloth_str
data['output_format'] = "url" data['output_format'] = "url"
+4 -3
View File
@@ -307,7 +307,7 @@ def main_worker():
serverindex = 0 serverindex = 0
def regServer(instance, ip): def regServer(instance, ip):
global serverindex global serverindex
registerGpuServer(f"s{serverindex}_1_{instance}", f"http://{ip}:8888", True) registerGpuServer(f"s{serverindex}_1_{instance}", f"http://{ip}", True)
serverindex += 1 serverindex += 1
@@ -316,7 +316,8 @@ if __name__ == '__main__':
print(f"[Worker] Starting with PID: {os.getpid()}") print(f"[Worker] Starting with PID: {os.getpid()}")
redis_conn.set(GPU_SERVER_LIST, "[]") redis_conn.set(GPU_SERVER_LIST, "[]")
regServer("一号", "192.168.101.118") # regServer("5090", "112.126.94.241:28888")
regServer("", "192.168.101.221") regServer("", "192.168.101.118:8888")
# regServer("二号", "192.168.101.221:8888")
main_worker() main_worker()
+345
View File
@@ -0,0 +1,345 @@
{
"6": {
"inputs": {
"text": "asian girl,knee-length shot ,model pose,hands are at the sides of the body,smile,wearing black tube top and micro skirt,simple ,white background,32k,high detail,and face is illuminated by soft side light and natural light. The sunlight spills over the white wall behind.",
"clip": [
"68",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"10": {
"inputs": {
"vae_name": "ae.safetensors"
},
"class_type": "VAELoader",
"_meta": {
"title": "Load VAE"
}
},
"16": {
"inputs": {
"sampler_name": "dpmpp_2m"
},
"class_type": "KSamplerSelect",
"_meta": {
"title": "KSamplerSelect"
}
},
"17": {
"inputs": {
"scheduler": "sgm_uniform",
"steps": 30,
"denoise": 1,
"model": [
"63",
0
]
},
"class_type": "BasicScheduler",
"_meta": {
"title": "BasicScheduler"
}
},
"25": {
"inputs": {
"noise_seed": 817211431292667
},
"class_type": "RandomNoise",
"_meta": {
"title": "RandomNoise"
}
},
"26": {
"inputs": {
"guidance": 10,
"conditioning": [
"6",
0
]
},
"class_type": "FluxGuidance",
"_meta": {
"title": "FluxGuidance"
}
},
"27": {
"inputs": {
"width": 768,
"height": 1024,
"batch_size": 1
},
"class_type": "EmptySD3LatentImage",
"_meta": {
"title": "EmptySD3LatentImage"
}
},
"45": {
"inputs": {
"pulid_file": "pulid_flux_v0.9.1.safetensors"
},
"class_type": "PulidFluxModelLoader",
"_meta": {
"title": "Load PuLID Flux Model"
}
},
"47": {
"inputs": {
"model": [
"62",
0
],
"conditioning": [
"26",
0
]
},
"class_type": "BasicGuider",
"_meta": {
"title": "BasicGuider"
}
},
"48": {
"inputs": {
"noise": [
"25",
0
],
"guider": [
"47",
0
],
"sampler": [
"16",
0
],
"sigmas": [
"17",
0
],
"latent_image": [
"27",
0
]
},
"class_type": "SamplerCustomAdvanced",
"_meta": {
"title": "SamplerCustomAdvanced"
}
},
"49": {
"inputs": {
"samples": [
"48",
0
],
"vae": [
"10",
0
]
},
"class_type": "VAEDecode",
"_meta": {
"title": "VAE Decode"
}
},
"51": {
"inputs": {},
"class_type": "PulidFluxEvaClipLoader",
"_meta": {
"title": "Load Eva Clip (PuLID Flux)"
}
},
"53": {
"inputs": {
"provider": "CUDA"
},
"class_type": "PulidFluxInsightFaceLoader",
"_meta": {
"title": "Load InsightFace (PuLID Flux)"
}
},
"62": {
"inputs": {
"weight": 1.0000000000000002,
"start_at": 0,
"end_at": 1,
"model": [
"68",
0
],
"pulid_flux": [
"45",
0
],
"eva_clip": [
"51",
0
],
"face_analysis": [
"53",
0
],
"image": [
"93",
0
]
},
"class_type": "ApplyPulidFlux",
"_meta": {
"title": "Apply PuLID Flux"
}
},
"63": {
"inputs": {
"unet_name": "flux1-dev-fp8.safetensors",
"weight_dtype": "fp8_e4m3fn"
},
"class_type": "UNETLoader",
"_meta": {
"title": "Load Diffusion Model"
}
},
"64": {
"inputs": {
"clip_name1": "flux/t5xxl_fp16.safetensors",
"clip_name2": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors",
"type": "flux",
"device": "default"
},
"class_type": "DualCLIPLoader",
"_meta": {
"title": "DualCLIPLoader"
}
},
"65": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": [
"49",
0
]
},
"class_type": "SaveImage",
"_meta": {
"title": "Save Image"
}
},
"68": {
"inputs": {
"PowerLoraLoaderHeaderWidget": {
"type": "PowerLoraLoaderHeaderWidget"
},
" Add Lora": "",
"model": [
"63",
0
],
"clip": [
"64",
0
]
},
"class_type": "Power Lora Loader (rgthree)",
"_meta": {
"title": "Power Lora Loader (rgthree)"
}
},
"86": {
"inputs": {
"anything": [
"17",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"87": {
"inputs": {
"anything": [
"68",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"88": {
"inputs": {
"anything": [
"62",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"89": {
"inputs": {
"anything": [
"47",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"90": {
"inputs": {
"anything": [
"48",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"91": {
"inputs": {
"anything": [
"49",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"92": {
"inputs": {
"anything": [
"49",
0
]
},
"class_type": "easy clearCacheAll",
"_meta": {
"title": "Clear Cache All"
}
},
"93": {
"inputs": {
"image": "qwerqwe.jpg"
},
"class_type": "LoadImage",
"_meta": {
"title": "Load Image"
}
}
}
File diff suppressed because one or more lines are too long
+354
View File
@@ -0,0 +1,354 @@
{
"6": {
"inputs": {
"text": "asian man,tall,knee-length shot,model pose,hands are at the sides of the body,smile,wearing black short pants,simple white background,The sunlight spills over the white wall behind,32k,",
"clip": [
"68",
1
]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"10": {
"inputs": {
"vae_name": "ae.safetensors"
},
"class_type": "VAELoader",
"_meta": {
"title": "Load VAE"
}
},
"16": {
"inputs": {
"sampler_name": "dpmpp_2m"
},
"class_type": "KSamplerSelect",
"_meta": {
"title": "KSamplerSelect"
}
},
"17": {
"inputs": {
"scheduler": "sgm_uniform",
"steps": 30,
"denoise": 1,
"model": [
"63",
0
]
},
"class_type": "BasicScheduler",
"_meta": {
"title": "BasicScheduler"
}
},
"25": {
"inputs": {
"noise_seed": 307959081040868
},
"class_type": "RandomNoise",
"_meta": {
"title": "RandomNoise"
}
},
"26": {
"inputs": {
"guidance": 10,
"conditioning": [
"6",
0
]
},
"class_type": "FluxGuidance",
"_meta": {
"title": "FluxGuidance"
}
},
"27": {
"inputs": {
"width": 768,
"height": 1024,
"batch_size": 1
},
"class_type": "EmptySD3LatentImage",
"_meta": {
"title": "EmptySD3LatentImage"
}
},
"45": {
"inputs": {
"pulid_file": "pulid_flux_v0.9.1.safetensors"
},
"class_type": "PulidFluxModelLoader",
"_meta": {
"title": "Load PuLID Flux Model"
}
},
"47": {
"inputs": {
"model": [
"62",
0
],
"conditioning": [
"26",
0
]
},
"class_type": "BasicGuider",
"_meta": {
"title": "BasicGuider"
}
},
"48": {
"inputs": {
"noise": [
"25",
0
],
"guider": [
"47",
0
],
"sampler": [
"16",
0
],
"sigmas": [
"17",
0
],
"latent_image": [
"27",
0
]
},
"class_type": "SamplerCustomAdvanced",
"_meta": {
"title": "SamplerCustomAdvanced"
}
},
"49": {
"inputs": {
"samples": [
"48",
0
],
"vae": [
"10",
0
]
},
"class_type": "VAEDecode",
"_meta": {
"title": "VAE Decode"
}
},
"51": {
"inputs": {},
"class_type": "PulidFluxEvaClipLoader",
"_meta": {
"title": "Load Eva Clip (PuLID Flux)"
}
},
"53": {
"inputs": {
"provider": "CUDA"
},
"class_type": "PulidFluxInsightFaceLoader",
"_meta": {
"title": "Load InsightFace (PuLID Flux)"
}
},
"62": {
"inputs": {
"weight": 1.0000000000000002,
"start_at": 0,
"end_at": 1,
"model": [
"68",
0
],
"pulid_flux": [
"45",
0
],
"eva_clip": [
"51",
0
],
"face_analysis": [
"53",
0
],
"image": [
"93",
0
]
},
"class_type": "ApplyPulidFlux",
"_meta": {
"title": "Apply PuLID Flux"
}
},
"63": {
"inputs": {
"unet_name": "flux1-dev-fp8.safetensors",
"weight_dtype": "fp8_e4m3fn"
},
"class_type": "UNETLoader",
"_meta": {
"title": "Load Diffusion Model"
}
},
"64": {
"inputs": {
"clip_name1": "flux/t5xxl_fp16.safetensors",
"clip_name2": "ViT-L-14-TEXT-detail-improved-hiT-GmP-HF.safetensors",
"type": "flux",
"device": "default"
},
"class_type": "DualCLIPLoader",
"_meta": {
"title": "DualCLIPLoader"
}
},
"65": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": [
"49",
0
]
},
"class_type": "SaveImage",
"_meta": {
"title": "Save Image"
}
},
"68": {
"inputs": {
"PowerLoraLoaderHeaderWidget": {
"type": "PowerLoraLoaderHeaderWidget"
},
" Add Lora": "",
"model": [
"63",
0
],
"clip": [
"64",
0
]
},
"class_type": "Power Lora Loader (rgthree)",
"_meta": {
"title": "Power Lora Loader (rgthree)"
}
},
"86": {
"inputs": {
"anything": [
"17",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"87": {
"inputs": {
"anything": [
"68",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"88": {
"inputs": {
"anything": [
"62",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"89": {
"inputs": {
"anything": [
"47",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"90": {
"inputs": {
"anything": [
"48",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"91": {
"inputs": {
"anything": [
"49",
0
]
},
"class_type": "easy cleanGpuUsed",
"_meta": {
"title": "Clean VRAM Used"
}
},
"92": {
"inputs": {
"anything": [
"49",
0
]
},
"class_type": "easy clearCacheAll",
"_meta": {
"title": "Clear Cache All"
}
},
"93": {
"inputs": {
"image": "微信图片_20250813204256_128.jpg"
},
"class_type": "LoadImage",
"_meta": {
"title": "Load Image"
}
},
"94": {
"inputs": {
"text": "sian girl,knee-length shot ,model pose,hands are at the sides of the body,smile,wearing black tube top and micro skirt,simple ,white background,32k,high detail,and face is illuminated by soft side light and natural light. The sunlight spills over the white wall behind."
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
}
}