mirror of
https://git.datalinker.icu/comfyanonymous/ComfyUI
synced 2026-11-12 12:13:29 +08:00
init
This commit is contained in:
parent
6c6a39251f
commit
81631456ed
655
.ipynb_checkpoints/server-checkpoint.py
Normal file
655
.ipynb_checkpoints/server-checkpoint.py
Normal file
@ -0,0 +1,655 @@
|
||||
import os
|
||||
import sys
|
||||
import asyncio
|
||||
import traceback
|
||||
|
||||
import nodes
|
||||
import folder_paths
|
||||
import execution
|
||||
import uuid
|
||||
import urllib
|
||||
import json
|
||||
import glob
|
||||
import struct
|
||||
import ssl
|
||||
from PIL import Image, ImageOps
|
||||
from PIL.PngImagePlugin import PngInfo
|
||||
from io import BytesIO
|
||||
|
||||
import aiohttp
|
||||
from aiohttp import web
|
||||
import logging
|
||||
|
||||
import mimetypes
|
||||
from comfy.cli_args import args
|
||||
import comfy.utils
|
||||
import comfy.model_management
|
||||
|
||||
from app.user_manager import UserManager
|
||||
|
||||
class BinaryEventTypes:
|
||||
PREVIEW_IMAGE = 1
|
||||
UNENCODED_PREVIEW_IMAGE = 2
|
||||
|
||||
async def send_socket_catch_exception(function, message):
|
||||
try:
|
||||
await function(message)
|
||||
except (aiohttp.ClientError, aiohttp.ClientPayloadError, ConnectionResetError) as err:
|
||||
logging.warning("send error: {}".format(err))
|
||||
|
||||
@web.middleware
|
||||
async def cache_control(request: web.Request, handler):
|
||||
response: web.Response = await handler(request)
|
||||
if request.path.endswith('.js') or request.path.endswith('.css'):
|
||||
response.headers.setdefault('Cache-Control', 'no-cache')
|
||||
return response
|
||||
|
||||
def create_cors_middleware(allowed_origin: str):
|
||||
@web.middleware
|
||||
async def cors_middleware(request: web.Request, handler):
|
||||
if request.method == "OPTIONS":
|
||||
# Pre-flight request. Reply successfully:
|
||||
response = web.Response()
|
||||
else:
|
||||
response = await handler(request)
|
||||
|
||||
response.headers['Access-Control-Allow-Origin'] = allowed_origin
|
||||
response.headers['Access-Control-Allow-Methods'] = 'POST, GET, DELETE, PUT, OPTIONS'
|
||||
response.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization'
|
||||
response.headers['Access-Control-Allow-Credentials'] = 'true'
|
||||
return response
|
||||
|
||||
return cors_middleware
|
||||
|
||||
class PromptServer():
|
||||
def __init__(self, loop):
|
||||
PromptServer.instance = self
|
||||
|
||||
mimetypes.init()
|
||||
mimetypes.types_map['.js'] = 'application/javascript; charset=utf-8'
|
||||
|
||||
self.user_manager = UserManager()
|
||||
self.supports = ["custom_nodes_from_web"]
|
||||
self.prompt_queue = None
|
||||
self.loop = loop
|
||||
self.messages = asyncio.Queue()
|
||||
self.number = 0
|
||||
|
||||
middlewares = [cache_control]
|
||||
if args.enable_cors_header:
|
||||
middlewares.append(create_cors_middleware(args.enable_cors_header))
|
||||
|
||||
max_upload_size = round(args.max_upload_size * 1024 * 1024)
|
||||
self.app = web.Application(client_max_size=max_upload_size, middlewares=middlewares)
|
||||
self.sockets = dict()
|
||||
self.web_root = os.path.join(os.path.dirname(
|
||||
os.path.realpath(__file__)), "web")
|
||||
routes = web.RouteTableDef()
|
||||
self.routes = routes
|
||||
self.last_node_id = None
|
||||
self.client_id = None
|
||||
|
||||
self.on_prompt_handlers = []
|
||||
|
||||
@routes.get('/ws')
|
||||
async def websocket_handler(request):
|
||||
ws = web.WebSocketResponse()
|
||||
await ws.prepare(request)
|
||||
sid = request.rel_url.query.get('clientId', '')
|
||||
if sid:
|
||||
# Reusing existing session, remove old
|
||||
self.sockets.pop(sid, None)
|
||||
else:
|
||||
sid = uuid.uuid4().hex
|
||||
|
||||
self.sockets[sid] = ws
|
||||
|
||||
try:
|
||||
# Send initial state to the new client
|
||||
await self.send("status", { "status": self.get_queue_info(), 'sid': sid }, sid)
|
||||
# On reconnect if we are the currently executing client send the current node
|
||||
if self.client_id == sid and self.last_node_id is not None:
|
||||
await self.send("executing", { "node": self.last_node_id }, sid)
|
||||
|
||||
async for msg in ws:
|
||||
if msg.type == aiohttp.WSMsgType.ERROR:
|
||||
logging.warning('ws connection closed with exception %s' % ws.exception())
|
||||
finally:
|
||||
self.sockets.pop(sid, None)
|
||||
return ws
|
||||
|
||||
@routes.get("/")
|
||||
async def get_root(request):
|
||||
return web.FileResponse(os.path.join(self.web_root, "index.html"))
|
||||
|
||||
@routes.get("/embeddings")
|
||||
def get_embeddings(self):
|
||||
embeddings = folder_paths.get_filename_list("embeddings")
|
||||
return web.json_response(list(map(lambda a: os.path.splitext(a)[0], embeddings)))
|
||||
|
||||
@routes.get("/extensions")
|
||||
async def get_extensions(request):
|
||||
files = glob.glob(os.path.join(
|
||||
glob.escape(self.web_root), 'extensions/**/*.js'), recursive=True)
|
||||
|
||||
extensions = list(map(lambda f: "/" + os.path.relpath(f, self.web_root).replace("\\", "/"), files))
|
||||
|
||||
for name, dir in nodes.EXTENSION_WEB_DIRS.items():
|
||||
files = glob.glob(os.path.join(glob.escape(dir), '**/*.js'), recursive=True)
|
||||
extensions.extend(list(map(lambda f: "/extensions/" + urllib.parse.quote(
|
||||
name) + "/" + os.path.relpath(f, dir).replace("\\", "/"), files)))
|
||||
|
||||
return web.json_response(extensions)
|
||||
|
||||
def get_dir_by_type(dir_type):
|
||||
if dir_type is None:
|
||||
dir_type = "input"
|
||||
|
||||
if dir_type == "input":
|
||||
type_dir = folder_paths.get_input_directory()
|
||||
elif dir_type == "temp":
|
||||
type_dir = folder_paths.get_temp_directory()
|
||||
elif dir_type == "output":
|
||||
type_dir = folder_paths.get_output_directory()
|
||||
|
||||
return type_dir, dir_type
|
||||
|
||||
def image_upload(post, image_save_function=None):
|
||||
image = post.get("image")
|
||||
overwrite = post.get("overwrite")
|
||||
|
||||
image_upload_type = post.get("type")
|
||||
upload_dir, image_upload_type = get_dir_by_type(image_upload_type)
|
||||
|
||||
if image and image.file:
|
||||
filename = image.filename
|
||||
if not filename:
|
||||
return web.Response(status=400)
|
||||
|
||||
subfolder = post.get("subfolder", "")
|
||||
full_output_folder = os.path.join(upload_dir, os.path.normpath(subfolder))
|
||||
filepath = os.path.abspath(os.path.join(full_output_folder, filename))
|
||||
|
||||
if os.path.commonpath((upload_dir, filepath)) != upload_dir:
|
||||
return web.Response(status=400)
|
||||
|
||||
if not os.path.exists(full_output_folder):
|
||||
os.makedirs(full_output_folder)
|
||||
|
||||
split = os.path.splitext(filename)
|
||||
|
||||
if overwrite is not None and (overwrite == "true" or overwrite == "1"):
|
||||
pass
|
||||
else:
|
||||
i = 1
|
||||
while os.path.exists(filepath):
|
||||
filename = f"{split[0]} ({i}){split[1]}"
|
||||
filepath = os.path.join(full_output_folder, filename)
|
||||
i += 1
|
||||
|
||||
if image_save_function is not None:
|
||||
image_save_function(image, post, filepath)
|
||||
else:
|
||||
with open(filepath, "wb") as f:
|
||||
f.write(image.file.read())
|
||||
|
||||
return web.json_response({"name" : filename, "subfolder": subfolder, "type": image_upload_type})
|
||||
else:
|
||||
return web.Response(status=400)
|
||||
|
||||
@routes.post("/upload/image")
|
||||
async def upload_image(request):
|
||||
post = await request.post()
|
||||
return image_upload(post)
|
||||
|
||||
|
||||
@routes.post("/upload/mask")
|
||||
async def upload_mask(request):
|
||||
post = await request.post()
|
||||
|
||||
def image_save_function(image, post, filepath):
|
||||
original_ref = json.loads(post.get("original_ref"))
|
||||
filename, output_dir = folder_paths.annotated_filepath(original_ref['filename'])
|
||||
|
||||
# validation for security: prevent accessing arbitrary path
|
||||
if filename[0] == '/' or '..' in filename:
|
||||
return web.Response(status=400)
|
||||
|
||||
if output_dir is None:
|
||||
type = original_ref.get("type", "output")
|
||||
output_dir = folder_paths.get_directory_by_type(type)
|
||||
|
||||
if output_dir is None:
|
||||
return web.Response(status=400)
|
||||
|
||||
if original_ref.get("subfolder", "") != "":
|
||||
full_output_dir = os.path.join(output_dir, original_ref["subfolder"])
|
||||
if os.path.commonpath((os.path.abspath(full_output_dir), output_dir)) != output_dir:
|
||||
return web.Response(status=403)
|
||||
output_dir = full_output_dir
|
||||
|
||||
file = os.path.join(output_dir, filename)
|
||||
|
||||
if os.path.isfile(file):
|
||||
with Image.open(file) as original_pil:
|
||||
metadata = PngInfo()
|
||||
if hasattr(original_pil,'text'):
|
||||
for key in original_pil.text:
|
||||
metadata.add_text(key, original_pil.text[key])
|
||||
original_pil = original_pil.convert('RGBA')
|
||||
mask_pil = Image.open(image.file).convert('RGBA')
|
||||
|
||||
# alpha copy
|
||||
new_alpha = mask_pil.getchannel('A')
|
||||
original_pil.putalpha(new_alpha)
|
||||
original_pil.save(filepath, compress_level=4, pnginfo=metadata)
|
||||
|
||||
return image_upload(post, image_save_function)
|
||||
|
||||
@routes.get("/view")
|
||||
async def view_image(request):
|
||||
if "filename" in request.rel_url.query:
|
||||
filename = request.rel_url.query["filename"]
|
||||
filename,output_dir = folder_paths.annotated_filepath(filename)
|
||||
|
||||
# validation for security: prevent accessing arbitrary path
|
||||
if filename[0] == '/' or '..' in filename:
|
||||
return web.Response(status=400)
|
||||
|
||||
if output_dir is None:
|
||||
type = request.rel_url.query.get("type", "output")
|
||||
output_dir = folder_paths.get_directory_by_type(type)
|
||||
|
||||
if output_dir is None:
|
||||
return web.Response(status=400)
|
||||
|
||||
if "subfolder" in request.rel_url.query:
|
||||
full_output_dir = os.path.join(output_dir, request.rel_url.query["subfolder"])
|
||||
if os.path.commonpath((os.path.abspath(full_output_dir), output_dir)) != output_dir:
|
||||
return web.Response(status=403)
|
||||
output_dir = full_output_dir
|
||||
|
||||
filename = os.path.basename(filename)
|
||||
file = os.path.join(output_dir, filename)
|
||||
|
||||
if os.path.isfile(file):
|
||||
if 'preview' in request.rel_url.query:
|
||||
with Image.open(file) as img:
|
||||
preview_info = request.rel_url.query['preview'].split(';')
|
||||
image_format = preview_info[0]
|
||||
if image_format not in ['webp', 'jpeg'] or 'a' in request.rel_url.query.get('channel', ''):
|
||||
image_format = 'webp'
|
||||
|
||||
quality = 90
|
||||
if preview_info[-1].isdigit():
|
||||
quality = int(preview_info[-1])
|
||||
|
||||
buffer = BytesIO()
|
||||
if image_format in ['jpeg'] or request.rel_url.query.get('channel', '') == 'rgb':
|
||||
img = img.convert("RGB")
|
||||
img.save(buffer, format=image_format, quality=quality)
|
||||
buffer.seek(0)
|
||||
|
||||
return web.Response(body=buffer.read(), content_type=f'image/{image_format}',
|
||||
headers={"Content-Disposition": f"filename=\"{filename}\""})
|
||||
|
||||
if 'channel' not in request.rel_url.query:
|
||||
channel = 'rgba'
|
||||
else:
|
||||
channel = request.rel_url.query["channel"]
|
||||
|
||||
if channel == 'rgb':
|
||||
with Image.open(file) as img:
|
||||
if img.mode == "RGBA":
|
||||
r, g, b, a = img.split()
|
||||
new_img = Image.merge('RGB', (r, g, b))
|
||||
else:
|
||||
new_img = img.convert("RGB")
|
||||
|
||||
buffer = BytesIO()
|
||||
new_img.save(buffer, format='PNG')
|
||||
buffer.seek(0)
|
||||
|
||||
return web.Response(body=buffer.read(), content_type='image/png',
|
||||
headers={"Content-Disposition": f"filename=\"{filename}\""})
|
||||
|
||||
elif channel == 'a':
|
||||
with Image.open(file) as img:
|
||||
if img.mode == "RGBA":
|
||||
_, _, _, a = img.split()
|
||||
else:
|
||||
a = Image.new('L', img.size, 255)
|
||||
|
||||
# alpha img
|
||||
alpha_img = Image.new('RGBA', img.size)
|
||||
alpha_img.putalpha(a)
|
||||
alpha_buffer = BytesIO()
|
||||
alpha_img.save(alpha_buffer, format='PNG')
|
||||
alpha_buffer.seek(0)
|
||||
|
||||
return web.Response(body=alpha_buffer.read(), content_type='image/png',
|
||||
headers={"Content-Disposition": f"filename=\"{filename}\""})
|
||||
else:
|
||||
return web.FileResponse(file, headers={"Content-Disposition": f"filename=\"{filename}\""})
|
||||
|
||||
return web.Response(status=404)
|
||||
|
||||
@routes.get("/view_metadata/{folder_name}")
|
||||
async def view_metadata(request):
|
||||
folder_name = request.match_info.get("folder_name", None)
|
||||
if folder_name is None:
|
||||
return web.Response(status=404)
|
||||
if not "filename" in request.rel_url.query:
|
||||
return web.Response(status=404)
|
||||
|
||||
filename = request.rel_url.query["filename"]
|
||||
if not filename.endswith(".safetensors"):
|
||||
return web.Response(status=404)
|
||||
|
||||
safetensors_path = folder_paths.get_full_path(folder_name, filename)
|
||||
if safetensors_path is None:
|
||||
return web.Response(status=404)
|
||||
out = comfy.utils.safetensors_header(safetensors_path, max_size=1024*1024)
|
||||
if out is None:
|
||||
return web.Response(status=404)
|
||||
dt = json.loads(out)
|
||||
if not "__metadata__" in dt:
|
||||
return web.Response(status=404)
|
||||
return web.json_response(dt["__metadata__"])
|
||||
|
||||
@routes.get("/system_stats")
|
||||
async def get_queue(request):
|
||||
device = comfy.model_management.get_torch_device()
|
||||
device_name = comfy.model_management.get_torch_device_name(device)
|
||||
vram_total, torch_vram_total = comfy.model_management.get_total_memory(device, torch_total_too=True)
|
||||
vram_free, torch_vram_free = comfy.model_management.get_free_memory(device, torch_free_too=True)
|
||||
system_stats = {
|
||||
"system": {
|
||||
"os": os.name,
|
||||
"python_version": sys.version,
|
||||
"embedded_python": os.path.split(os.path.split(sys.executable)[0])[1] == "python_embeded"
|
||||
},
|
||||
"devices": [
|
||||
{
|
||||
"name": device_name,
|
||||
"type": device.type,
|
||||
"index": device.index,
|
||||
"vram_total": vram_total,
|
||||
"vram_free": vram_free,
|
||||
"torch_vram_total": torch_vram_total,
|
||||
"torch_vram_free": torch_vram_free,
|
||||
}
|
||||
]
|
||||
}
|
||||
return web.json_response(system_stats)
|
||||
|
||||
@routes.get("/prompt")
|
||||
async def get_prompt(request):
|
||||
return web.json_response(self.get_queue_info())
|
||||
|
||||
def node_info(node_class):
|
||||
obj_class = nodes.NODE_CLASS_MAPPINGS[node_class]
|
||||
info = {}
|
||||
info['input'] = obj_class.INPUT_TYPES()
|
||||
info['output'] = obj_class.RETURN_TYPES
|
||||
info['output_is_list'] = obj_class.OUTPUT_IS_LIST if hasattr(obj_class, 'OUTPUT_IS_LIST') else [False] * len(obj_class.RETURN_TYPES)
|
||||
info['output_name'] = obj_class.RETURN_NAMES if hasattr(obj_class, 'RETURN_NAMES') else info['output']
|
||||
info['name'] = node_class
|
||||
info['display_name'] = nodes.NODE_DISPLAY_NAME_MAPPINGS[node_class] if node_class in nodes.NODE_DISPLAY_NAME_MAPPINGS.keys() else node_class
|
||||
info['description'] = obj_class.DESCRIPTION if hasattr(obj_class,'DESCRIPTION') else ''
|
||||
info['category'] = 'sd'
|
||||
if hasattr(obj_class, 'OUTPUT_NODE') and obj_class.OUTPUT_NODE == True:
|
||||
info['output_node'] = True
|
||||
else:
|
||||
info['output_node'] = False
|
||||
|
||||
if hasattr(obj_class, 'CATEGORY'):
|
||||
info['category'] = obj_class.CATEGORY
|
||||
return info
|
||||
|
||||
@routes.get("/object_info")
|
||||
async def get_object_info(request):
|
||||
out = {}
|
||||
for x in nodes.NODE_CLASS_MAPPINGS:
|
||||
try:
|
||||
out[x] = node_info(x)
|
||||
except Exception as e:
|
||||
logging.error(f"[ERROR] An error occurred while retrieving information for the '{x}' node.")
|
||||
logging.error(traceback.format_exc())
|
||||
return web.json_response(out)
|
||||
|
||||
@routes.get("/object_info/{node_class}")
|
||||
async def get_object_info_node(request):
|
||||
node_class = request.match_info.get("node_class", None)
|
||||
out = {}
|
||||
if (node_class is not None) and (node_class in nodes.NODE_CLASS_MAPPINGS):
|
||||
out[node_class] = node_info(node_class)
|
||||
return web.json_response(out)
|
||||
|
||||
@routes.get("/history")
|
||||
async def get_history(request):
|
||||
max_items = request.rel_url.query.get("max_items", None)
|
||||
if max_items is not None:
|
||||
max_items = int(max_items)
|
||||
return web.json_response(self.prompt_queue.get_history(max_items=max_items))
|
||||
|
||||
@routes.get("/history/{prompt_id}")
|
||||
async def get_history(request):
|
||||
prompt_id = request.match_info.get("prompt_id", None)
|
||||
return web.json_response(self.prompt_queue.get_history(prompt_id=prompt_id))
|
||||
|
||||
@routes.get("/queue")
|
||||
async def get_queue(request):
|
||||
queue_info = {}
|
||||
current_queue = self.prompt_queue.get_current_queue()
|
||||
queue_info['queue_running'] = current_queue[0]
|
||||
queue_info['queue_pending'] = current_queue[1]
|
||||
return web.json_response(queue_info)
|
||||
|
||||
@routes.post("/prompt")
|
||||
async def post_prompt(request):
|
||||
logging.info("got prompt")
|
||||
resp_code = 200
|
||||
out_string = ""
|
||||
json_data = await request.json()
|
||||
json_data = self.trigger_on_prompt(json_data)
|
||||
|
||||
if "number" in json_data:
|
||||
number = float(json_data['number'])
|
||||
else:
|
||||
number = self.number
|
||||
if "front" in json_data:
|
||||
if json_data['front']:
|
||||
number = -number
|
||||
|
||||
self.number += 1
|
||||
|
||||
if "prompt" in json_data:
|
||||
prompt = json_data["prompt"]
|
||||
valid = execution.validate_prompt(prompt)
|
||||
extra_data = {}
|
||||
if "extra_data" in json_data:
|
||||
extra_data = json_data["extra_data"]
|
||||
|
||||
if "client_id" in json_data:
|
||||
extra_data["client_id"] = json_data["client_id"]
|
||||
if valid[0]:
|
||||
prompt_id = str(uuid.uuid4())
|
||||
outputs_to_execute = valid[2]
|
||||
self.prompt_queue.put((number, prompt_id, prompt, extra_data, outputs_to_execute))
|
||||
response = {"prompt_id": prompt_id, "number": number, "node_errors": valid[3]}
|
||||
return web.json_response(response)
|
||||
else:
|
||||
logging.warning("invalid prompt: {}".format(valid[1]))
|
||||
return web.json_response({"error": valid[1], "node_errors": valid[3]}, status=400)
|
||||
else:
|
||||
return web.json_response({"error": "no prompt", "node_errors": []}, status=400)
|
||||
|
||||
@routes.post("/queue")
|
||||
async def post_queue(request):
|
||||
json_data = await request.json()
|
||||
if "clear" in json_data:
|
||||
if json_data["clear"]:
|
||||
self.prompt_queue.wipe_queue()
|
||||
if "delete" in json_data:
|
||||
to_delete = json_data['delete']
|
||||
for id_to_delete in to_delete:
|
||||
delete_func = lambda a: a[1] == id_to_delete
|
||||
self.prompt_queue.delete_queue_item(delete_func)
|
||||
|
||||
return web.Response(status=200)
|
||||
|
||||
@routes.post("/interrupt")
|
||||
async def post_interrupt(request):
|
||||
nodes.interrupt_processing()
|
||||
return web.Response(status=200)
|
||||
|
||||
@routes.post("/free")
|
||||
async def post_free(request):
|
||||
json_data = await request.json()
|
||||
unload_models = json_data.get("unload_models", False)
|
||||
free_memory = json_data.get("free_memory", False)
|
||||
if unload_models:
|
||||
self.prompt_queue.set_flag("unload_models", unload_models)
|
||||
if free_memory:
|
||||
self.prompt_queue.set_flag("free_memory", free_memory)
|
||||
return web.Response(status=200)
|
||||
|
||||
@routes.post("/history")
|
||||
async def post_history(request):
|
||||
json_data = await request.json()
|
||||
if "clear" in json_data:
|
||||
if json_data["clear"]:
|
||||
self.prompt_queue.wipe_history()
|
||||
if "delete" in json_data:
|
||||
to_delete = json_data['delete']
|
||||
for id_to_delete in to_delete:
|
||||
self.prompt_queue.delete_history_item(id_to_delete)
|
||||
|
||||
return web.Response(status=200)
|
||||
|
||||
def add_routes(self):
|
||||
self.user_manager.add_routes(self.routes)
|
||||
self.app.add_routes(self.routes)
|
||||
|
||||
for name, dir in nodes.EXTENSION_WEB_DIRS.items():
|
||||
self.app.add_routes([
|
||||
web.static('/extensions/' + urllib.parse.quote(name), dir),
|
||||
])
|
||||
|
||||
self.app.add_routes([
|
||||
web.static('/', self.web_root),
|
||||
])
|
||||
|
||||
def get_queue_info(self):
|
||||
prompt_info = {}
|
||||
exec_info = {}
|
||||
exec_info['queue_remaining'] = self.prompt_queue.get_tasks_remaining()
|
||||
prompt_info['exec_info'] = exec_info
|
||||
return prompt_info
|
||||
|
||||
async def send(self, event, data, sid=None):
|
||||
if event == BinaryEventTypes.UNENCODED_PREVIEW_IMAGE:
|
||||
await self.send_image(data, sid=sid)
|
||||
elif isinstance(data, (bytes, bytearray)):
|
||||
await self.send_bytes(event, data, sid)
|
||||
else:
|
||||
await self.send_json(event, data, sid)
|
||||
|
||||
def encode_bytes(self, event, data):
|
||||
if not isinstance(event, int):
|
||||
raise RuntimeError(f"Binary event types must be integers, got {event}")
|
||||
|
||||
packed = struct.pack(">I", event)
|
||||
message = bytearray(packed)
|
||||
message.extend(data)
|
||||
return message
|
||||
|
||||
async def send_image(self, image_data, sid=None):
|
||||
image_type = image_data[0]
|
||||
image = image_data[1]
|
||||
max_size = image_data[2]
|
||||
if max_size is not None:
|
||||
if hasattr(Image, 'Resampling'):
|
||||
resampling = Image.Resampling.BILINEAR
|
||||
else:
|
||||
resampling = Image.ANTIALIAS
|
||||
|
||||
image = ImageOps.contain(image, (max_size, max_size), resampling)
|
||||
type_num = 1
|
||||
if image_type == "JPEG":
|
||||
type_num = 1
|
||||
elif image_type == "PNG":
|
||||
type_num = 2
|
||||
|
||||
bytesIO = BytesIO()
|
||||
header = struct.pack(">I", type_num)
|
||||
bytesIO.write(header)
|
||||
image.save(bytesIO, format=image_type, quality=95, compress_level=1)
|
||||
preview_bytes = bytesIO.getvalue()
|
||||
await self.send_bytes(BinaryEventTypes.PREVIEW_IMAGE, preview_bytes, sid=sid)
|
||||
|
||||
async def send_bytes(self, event, data, sid=None):
|
||||
message = self.encode_bytes(event, data)
|
||||
|
||||
if sid is None:
|
||||
sockets = list(self.sockets.values())
|
||||
for ws in sockets:
|
||||
await send_socket_catch_exception(ws.send_bytes, message)
|
||||
elif sid in self.sockets:
|
||||
await send_socket_catch_exception(self.sockets[sid].send_bytes, message)
|
||||
|
||||
async def send_json(self, event, data, sid=None):
|
||||
message = {"type": event, "data": data}
|
||||
|
||||
if sid is None:
|
||||
sockets = list(self.sockets.values())
|
||||
for ws in sockets:
|
||||
await send_socket_catch_exception(ws.send_json, message)
|
||||
elif sid in self.sockets:
|
||||
await send_socket_catch_exception(self.sockets[sid].send_json, message)
|
||||
|
||||
def send_sync(self, event, data, sid=None):
|
||||
self.loop.call_soon_threadsafe(
|
||||
self.messages.put_nowait, (event, data, sid))
|
||||
|
||||
def queue_updated(self):
|
||||
self.send_sync("status", { "status": self.get_queue_info() })
|
||||
|
||||
async def publish_loop(self):
|
||||
while True:
|
||||
msg = await self.messages.get()
|
||||
await self.send(*msg)
|
||||
|
||||
async def start(self, address, port, verbose=True, call_on_start=None):
|
||||
runner = web.AppRunner(self.app, access_log=None)
|
||||
await runner.setup()
|
||||
ssl_ctx = None
|
||||
scheme = "http"
|
||||
if args.tls_keyfile and args.tls_certfile:
|
||||
ssl_ctx = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_SERVER, verify_mode=ssl.CERT_NONE)
|
||||
ssl_ctx.load_cert_chain(certfile=args.tls_certfile,
|
||||
keyfile=args.tls_keyfile)
|
||||
scheme = "https"
|
||||
|
||||
site = web.TCPSite(runner, address, port, ssl_context=ssl_ctx)
|
||||
await site.start()
|
||||
|
||||
if verbose:
|
||||
logging.info("Starting server\n")
|
||||
logging.info("To see the GUI go to: {}://{}:{}".format(scheme, address, port))
|
||||
if call_on_start is not None:
|
||||
call_on_start(scheme, address, port)
|
||||
|
||||
def add_on_prompt_handler(self, handler):
|
||||
self.on_prompt_handlers.append(handler)
|
||||
|
||||
def trigger_on_prompt(self, json_data):
|
||||
for handler in self.on_prompt_handlers:
|
||||
try:
|
||||
json_data = handler(json_data)
|
||||
except Exception as e:
|
||||
logging.warning(f"[ERROR] An error occurred during the on_prompt_handler processing")
|
||||
logging.warning(traceback.format_exc())
|
||||
|
||||
return json_data
|
||||
198
comfy/.ipynb_checkpoints/cli_args-checkpoint.py
Normal file
198
comfy/.ipynb_checkpoints/cli_args-checkpoint.py
Normal file
@ -0,0 +1,198 @@
|
||||
import logging
|
||||
import argparse
|
||||
import enum
|
||||
import comfy.options
|
||||
|
||||
|
||||
class EnumAction(argparse.Action):
|
||||
"""
|
||||
Argparse action for handling Enums
|
||||
"""
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
# Pop off the type value
|
||||
enum_type = kwargs.pop("type", None)
|
||||
|
||||
# Ensure an Enum subclass is provided
|
||||
if enum_type is None:
|
||||
raise ValueError(
|
||||
"type must be assigned an Enum when using EnumAction")
|
||||
if not issubclass(enum_type, enum.Enum):
|
||||
raise TypeError("type must be an Enum when using EnumAction")
|
||||
|
||||
# Generate choices from the Enum
|
||||
choices = tuple(e.value for e in enum_type)
|
||||
kwargs.setdefault("choices", choices)
|
||||
kwargs.setdefault("metavar", f"[{','.join(list(choices))}]")
|
||||
|
||||
super(EnumAction, self).__init__(**kwargs)
|
||||
|
||||
self._enum = enum_type
|
||||
|
||||
def __call__(self, parser, namespace, values, option_string=None):
|
||||
# Convert value back into an Enum
|
||||
value = self._enum(values)
|
||||
setattr(namespace, self.dest, value)
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument("--listen", type=str, default="127.0.0.1", metavar="IP", nargs="?", const="0.0.0.0",
|
||||
help="Specify the IP address to listen on (default: 127.0.0.1). If --listen is provided without an argument, it defaults to 0.0.0.0. (listens on all)")
|
||||
parser.add_argument("--port", type=int, default=8188,
|
||||
help="Set the listen port.")
|
||||
parser.add_argument("--tls-keyfile", type=str,
|
||||
help="Path to TLS (SSL) key file. Enables TLS, makes app accessible at https://... requires --tls-certfile to function")
|
||||
parser.add_argument("--tls-certfile", type=str,
|
||||
help="Path to TLS (SSL) certificate file. Enables TLS, makes app accessible at https://... requires --tls-keyfile to function")
|
||||
parser.add_argument("--enable-cors-header", type=str, default=None, metavar="ORIGIN", nargs="?", const="*",
|
||||
help="Enable CORS (Cross-Origin Resource Sharing) with optional origin or allow all with default '*'.")
|
||||
parser.add_argument("--max-upload-size", type=float,
|
||||
default=100, help="Set the maximum upload size in MB.")
|
||||
|
||||
parser.add_argument("--extra-model-paths-config", type=str, default=None, metavar="PATH",
|
||||
nargs='+', action='append', help="Load one or more extra_model_paths.yaml files.")
|
||||
parser.add_argument("--output-directory", type=str,
|
||||
default=None, help="Set the ComfyUI output directory.")
|
||||
parser.add_argument("--temp-directory", type=str, default=None,
|
||||
help="Set the ComfyUI temp directory (default is in the ComfyUI directory).")
|
||||
parser.add_argument("--input-directory", type=str,
|
||||
default=None, help="Set the ComfyUI input directory.")
|
||||
parser.add_argument("--auto-launch", action="store_true",
|
||||
help="Automatically launch ComfyUI in the default browser.")
|
||||
parser.add_argument("--disable-auto-launch", action="store_true",
|
||||
help="Disable auto launching the browser.")
|
||||
parser.add_argument("--cuda-device", type=int, default=None, metavar="DEVICE_ID",
|
||||
help="Set the id of the cuda device this instance will use.")
|
||||
cm_group = parser.add_mutually_exclusive_group()
|
||||
cm_group.add_argument("--cuda-malloc", action="store_true",
|
||||
help="Enable cudaMallocAsync (enabled by default for torch 2.0 and up).")
|
||||
cm_group.add_argument("--disable-cuda-malloc",
|
||||
action="store_true", help="Disable cudaMallocAsync.")
|
||||
|
||||
|
||||
fp_group = parser.add_mutually_exclusive_group()
|
||||
fp_group.add_argument("--force-fp32", action="store_true",
|
||||
help="Force fp32 (If this makes your GPU work better please report it).")
|
||||
fp_group.add_argument("--force-fp16", action="store_true", help="Force fp16.")
|
||||
|
||||
fpunet_group = parser.add_mutually_exclusive_group()
|
||||
fpunet_group.add_argument("--bf16-unet", action="store_true",
|
||||
help="Run the UNET in bf16. This should only be used for testing stuff.")
|
||||
fpunet_group.add_argument(
|
||||
"--fp16-unet", action="store_true", help="Store unet weights in fp16.")
|
||||
fpunet_group.add_argument("--fp8_e4m3fn-unet", action="store_true",
|
||||
help="Store unet weights in fp8_e4m3fn.")
|
||||
fpunet_group.add_argument(
|
||||
"--fp8_e5m2-unet", action="store_true", help="Store unet weights in fp8_e5m2.")
|
||||
|
||||
fpvae_group = parser.add_mutually_exclusive_group()
|
||||
fpvae_group.add_argument("--fp16-vae", action="store_true",
|
||||
help="Run the VAE in fp16, might cause black images.")
|
||||
fpvae_group.add_argument("--fp32-vae", action="store_true",
|
||||
help="Run the VAE in full precision fp32.")
|
||||
fpvae_group.add_argument(
|
||||
"--bf16-vae", action="store_true", help="Run the VAE in bf16.")
|
||||
|
||||
parser.add_argument("--cpu-vae", action="store_true",
|
||||
help="Run the VAE on the CPU.")
|
||||
|
||||
fpte_group = parser.add_mutually_exclusive_group()
|
||||
fpte_group.add_argument("--fp8_e4m3fn-text-enc", action="store_true",
|
||||
help="Store text encoder weights in fp8 (e4m3fn variant).")
|
||||
fpte_group.add_argument("--fp8_e5m2-text-enc", action="store_true",
|
||||
help="Store text encoder weights in fp8 (e5m2 variant).")
|
||||
fpte_group.add_argument("--fp16-text-enc", action="store_true",
|
||||
help="Store text encoder weights in fp16.")
|
||||
fpte_group.add_argument("--fp32-text-enc", action="store_true",
|
||||
help="Store text encoder weights in fp32.")
|
||||
|
||||
|
||||
parser.add_argument("--directml", type=int, nargs="?",
|
||||
metavar="DIRECTML_DEVICE", const=-1, help="Use torch-directml.")
|
||||
|
||||
parser.add_argument("--disable-ipex-optimize", action="store_true",
|
||||
help="Disables ipex.optimize when loading models with Intel GPUs.")
|
||||
|
||||
|
||||
class LatentPreviewMethod(enum.Enum):
|
||||
NoPreviews = "none"
|
||||
Auto = "auto"
|
||||
Latent2RGB = "latent2rgb"
|
||||
TAESD = "taesd"
|
||||
|
||||
|
||||
parser.add_argument("--preview-method", type=LatentPreviewMethod, default=LatentPreviewMethod.NoPreviews,
|
||||
help="Default preview method for sampler nodes.", action=EnumAction)
|
||||
|
||||
attn_group = parser.add_mutually_exclusive_group()
|
||||
attn_group.add_argument("--use-split-cross-attention", action="store_true",
|
||||
help="Use the split cross attention optimization. Ignored when xformers is used.")
|
||||
attn_group.add_argument("--use-quad-cross-attention", action="store_true",
|
||||
help="Use the sub-quadratic cross attention optimization . Ignored when xformers is used.")
|
||||
attn_group.add_argument("--use-pytorch-cross-attention", action="store_true",
|
||||
help="Use the new pytorch 2.0 cross attention function.")
|
||||
|
||||
parser.add_argument("--disable-xformers",
|
||||
action="store_true", help="Disable xformers.")
|
||||
|
||||
upcast = parser.add_mutually_exclusive_group()
|
||||
upcast.add_argument("--force-upcast-attention", action="store_true",
|
||||
help="Force enable attention upcasting, please report if it fixes black images.")
|
||||
upcast.add_argument("--dont-upcast-attention", action="store_true",
|
||||
help="Disable all upcasting of attention. Should be unnecessary except for debugging.")
|
||||
|
||||
|
||||
vram_group = parser.add_mutually_exclusive_group()
|
||||
vram_group.add_argument("--gpu-only", action="store_true",
|
||||
help="Store and run everything (text encoders/CLIP models, etc... on the GPU).")
|
||||
vram_group.add_argument("--highvram", action="store_true",
|
||||
help="By default models will be unloaded to CPU memory after being used. This option keeps them in GPU memory.")
|
||||
vram_group.add_argument("--normalvram", action="store_true",
|
||||
help="Used to force normal vram use if lowvram gets automatically enabled.")
|
||||
vram_group.add_argument("--lowvram", action="store_true",
|
||||
help="Split the unet in parts to use less vram.")
|
||||
vram_group.add_argument("--novram", action="store_true",
|
||||
help="When lowvram isn't enough.")
|
||||
vram_group.add_argument("--cpu", action="store_true",
|
||||
help="To use the CPU for everything (slow).")
|
||||
|
||||
|
||||
parser.add_argument("--disable-smart-memory", action="store_true",
|
||||
help="Force ComfyUI to agressively offload to regular ram instead of keeping models in vram when it can.")
|
||||
parser.add_argument("--deterministic", action="store_true",
|
||||
help="Make pytorch use slower deterministic algorithms when it can. Note that this might not make images deterministic in all cases.")
|
||||
|
||||
parser.add_argument("--dont-print-server", action="store_true",
|
||||
help="Don't print server output.")
|
||||
parser.add_argument("--quick-test-for-ci",
|
||||
action="store_true", help="Quick test for CI.")
|
||||
parser.add_argument("--windows-standalone-build", action="store_true",
|
||||
help="Windows standalone build: Enable convenient things that most people using the standalone windows build will probably enjoy (like auto opening the page on startup).")
|
||||
|
||||
parser.add_argument("--disable-metadata", action="store_true",
|
||||
help="Disable saving prompt metadata in files.")
|
||||
|
||||
parser.add_argument("--multi-user", action="store_true",
|
||||
help="Enables per-user storage.")
|
||||
|
||||
parser.add_argument("--verbose", action="store_true",
|
||||
help="Enables more debug prints.")
|
||||
|
||||
|
||||
if comfy.options.args_parsing:
|
||||
args = parser.parse_args()
|
||||
else:
|
||||
args = parser.parse_args([])
|
||||
|
||||
if args.windows_standalone_build:
|
||||
args.auto_launch = True
|
||||
|
||||
if args.disable_auto_launch:
|
||||
args.auto_launch = False
|
||||
|
||||
logging_level = logging.INFO
|
||||
if args.verbose:
|
||||
logging_level = logging.DEBUG
|
||||
|
||||
logging.basicConfig(format="%(message)s", level=logging_level)
|
||||
@ -1,18 +1,22 @@
|
||||
import logging
|
||||
import argparse
|
||||
import enum
|
||||
import comfy.options
|
||||
|
||||
|
||||
class EnumAction(argparse.Action):
|
||||
"""
|
||||
Argparse action for handling Enums
|
||||
"""
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
# Pop off the type value
|
||||
enum_type = kwargs.pop("type", None)
|
||||
|
||||
# Ensure an Enum subclass is provided
|
||||
if enum_type is None:
|
||||
raise ValueError("type must be assigned an Enum when using EnumAction")
|
||||
raise ValueError(
|
||||
"type must be assigned an Enum when using EnumAction")
|
||||
if not issubclass(enum_type, enum.Enum):
|
||||
raise TypeError("type must be an Enum when using EnumAction")
|
||||
|
||||
@ -33,51 +37,83 @@ class EnumAction(argparse.Action):
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument("--listen", type=str, default="127.0.0.1", metavar="IP", nargs="?", const="0.0.0.0", help="Specify the IP address to listen on (default: 127.0.0.1). If --listen is provided without an argument, it defaults to 0.0.0.0. (listens on all)")
|
||||
parser.add_argument("--port", type=int, default=8188, help="Set the listen port.")
|
||||
parser.add_argument("--enable-cors-header", type=str, default=None, metavar="ORIGIN", nargs="?", const="*", help="Enable CORS (Cross-Origin Resource Sharing) with optional origin or allow all with default '*'.")
|
||||
parser.add_argument("--max-upload-size", type=float, default=100, help="Set the maximum upload size in MB.")
|
||||
parser.add_argument("--listen", type=str, default="127.0.0.1", metavar="IP", nargs="?", const="0.0.0.0",
|
||||
help="Specify the IP address to listen on (default: 127.0.0.1). If --listen is provided without an argument, it defaults to 0.0.0.0. (listens on all)")
|
||||
parser.add_argument("--port", type=int, default=8188,
|
||||
help="Set the listen port.")
|
||||
parser.add_argument("--tls-keyfile", type=str,
|
||||
help="Path to TLS (SSL) key file. Enables TLS, makes app accessible at https://... requires --tls-certfile to function")
|
||||
parser.add_argument("--tls-certfile", type=str,
|
||||
help="Path to TLS (SSL) certificate file. Enables TLS, makes app accessible at https://... requires --tls-keyfile to function")
|
||||
parser.add_argument("--enable-cors-header", type=str, default=None, metavar="ORIGIN", nargs="?", const="*",
|
||||
help="Enable CORS (Cross-Origin Resource Sharing) with optional origin or allow all with default '*'.")
|
||||
parser.add_argument("--max-upload-size", type=float,
|
||||
default=100, help="Set the maximum upload size in MB.")
|
||||
|
||||
parser.add_argument("--extra-model-paths-config", type=str, default=None, metavar="PATH", nargs='+', action='append', help="Load one or more extra_model_paths.yaml files.")
|
||||
parser.add_argument("--output-directory", type=str, default=None, help="Set the ComfyUI output directory.")
|
||||
parser.add_argument("--temp-directory", type=str, default=None, help="Set the ComfyUI temp directory (default is in the ComfyUI directory).")
|
||||
parser.add_argument("--input-directory", type=str, default=None, help="Set the ComfyUI input directory.")
|
||||
parser.add_argument("--auto-launch", action="store_true", help="Automatically launch ComfyUI in the default browser.")
|
||||
parser.add_argument("--disable-auto-launch", action="store_true", help="Disable auto launching the browser.")
|
||||
parser.add_argument("--cuda-device", type=int, default=None, metavar="DEVICE_ID", help="Set the id of the cuda device this instance will use.")
|
||||
parser.add_argument("--extra-model-paths-config", type=str, default=None, metavar="PATH",
|
||||
nargs='+', action='append', help="Load one or more extra_model_paths.yaml files.")
|
||||
parser.add_argument("--output-directory", type=str,
|
||||
default=None, help="Set the ComfyUI output directory.")
|
||||
parser.add_argument("--temp-directory", type=str, default=None,
|
||||
help="Set the ComfyUI temp directory (default is in the ComfyUI directory).")
|
||||
parser.add_argument("--input-directory", type=str,
|
||||
default=None, help="Set the ComfyUI input directory.")
|
||||
parser.add_argument("--auto-launch", action="store_true",
|
||||
help="Automatically launch ComfyUI in the default browser.")
|
||||
parser.add_argument("--disable-auto-launch", action="store_true",
|
||||
help="Disable auto launching the browser.")
|
||||
parser.add_argument("--cuda-device", type=int, default=None, metavar="DEVICE_ID",
|
||||
help="Set the id of the cuda device this instance will use.")
|
||||
cm_group = parser.add_mutually_exclusive_group()
|
||||
cm_group.add_argument("--cuda-malloc", action="store_true", help="Enable cudaMallocAsync (enabled by default for torch 2.0 and up).")
|
||||
cm_group.add_argument("--disable-cuda-malloc", action="store_true", help="Disable cudaMallocAsync.")
|
||||
cm_group.add_argument("--cuda-malloc", action="store_true",
|
||||
help="Enable cudaMallocAsync (enabled by default for torch 2.0 and up).")
|
||||
cm_group.add_argument("--disable-cuda-malloc",
|
||||
action="store_true", help="Disable cudaMallocAsync.")
|
||||
|
||||
parser.add_argument("--dont-upcast-attention", action="store_true", help="Disable upcasting of attention. Can boost speed but increase the chances of black images.")
|
||||
|
||||
fp_group = parser.add_mutually_exclusive_group()
|
||||
fp_group.add_argument("--force-fp32", action="store_true", help="Force fp32 (If this makes your GPU work better please report it).")
|
||||
fp_group.add_argument("--force-fp32", action="store_true",
|
||||
help="Force fp32 (If this makes your GPU work better please report it).")
|
||||
fp_group.add_argument("--force-fp16", action="store_true", help="Force fp16.")
|
||||
|
||||
fpunet_group = parser.add_mutually_exclusive_group()
|
||||
fpunet_group.add_argument("--bf16-unet", action="store_true", help="Run the UNET in bf16. This should only be used for testing stuff.")
|
||||
fpunet_group.add_argument("--fp16-unet", action="store_true", help="Store unet weights in fp16.")
|
||||
fpunet_group.add_argument("--fp8_e4m3fn-unet", action="store_true", help="Store unet weights in fp8_e4m3fn.")
|
||||
fpunet_group.add_argument("--fp8_e5m2-unet", action="store_true", help="Store unet weights in fp8_e5m2.")
|
||||
fpunet_group.add_argument("--bf16-unet", action="store_true",
|
||||
help="Run the UNET in bf16. This should only be used for testing stuff.")
|
||||
fpunet_group.add_argument(
|
||||
"--fp16-unet", action="store_true", help="Store unet weights in fp16.")
|
||||
fpunet_group.add_argument("--fp8_e4m3fn-unet", action="store_true",
|
||||
help="Store unet weights in fp8_e4m3fn.")
|
||||
fpunet_group.add_argument(
|
||||
"--fp8_e5m2-unet", action="store_true", help="Store unet weights in fp8_e5m2.")
|
||||
|
||||
fpvae_group = parser.add_mutually_exclusive_group()
|
||||
fpvae_group.add_argument("--fp16-vae", action="store_true", help="Run the VAE in fp16, might cause black images.")
|
||||
fpvae_group.add_argument("--fp32-vae", action="store_true", help="Run the VAE in full precision fp32.")
|
||||
fpvae_group.add_argument("--bf16-vae", action="store_true", help="Run the VAE in bf16.")
|
||||
fpvae_group.add_argument("--fp16-vae", action="store_true",
|
||||
help="Run the VAE in fp16, might cause black images.")
|
||||
fpvae_group.add_argument("--fp32-vae", action="store_true",
|
||||
help="Run the VAE in full precision fp32.")
|
||||
fpvae_group.add_argument(
|
||||
"--bf16-vae", action="store_true", help="Run the VAE in bf16.")
|
||||
|
||||
parser.add_argument("--cpu-vae", action="store_true", help="Run the VAE on the CPU.")
|
||||
parser.add_argument("--cpu-vae", action="store_true",
|
||||
help="Run the VAE on the CPU.")
|
||||
|
||||
fpte_group = parser.add_mutually_exclusive_group()
|
||||
fpte_group.add_argument("--fp8_e4m3fn-text-enc", action="store_true", help="Store text encoder weights in fp8 (e4m3fn variant).")
|
||||
fpte_group.add_argument("--fp8_e5m2-text-enc", action="store_true", help="Store text encoder weights in fp8 (e5m2 variant).")
|
||||
fpte_group.add_argument("--fp16-text-enc", action="store_true", help="Store text encoder weights in fp16.")
|
||||
fpte_group.add_argument("--fp32-text-enc", action="store_true", help="Store text encoder weights in fp32.")
|
||||
fpte_group.add_argument("--fp8_e4m3fn-text-enc", action="store_true",
|
||||
help="Store text encoder weights in fp8 (e4m3fn variant).")
|
||||
fpte_group.add_argument("--fp8_e5m2-text-enc", action="store_true",
|
||||
help="Store text encoder weights in fp8 (e5m2 variant).")
|
||||
fpte_group.add_argument("--fp16-text-enc", action="store_true",
|
||||
help="Store text encoder weights in fp16.")
|
||||
fpte_group.add_argument("--fp32-text-enc", action="store_true",
|
||||
help="Store text encoder weights in fp32.")
|
||||
|
||||
|
||||
parser.add_argument("--directml", type=int, nargs="?", metavar="DIRECTML_DEVICE", const=-1, help="Use torch-directml.")
|
||||
parser.add_argument("--directml", type=int, nargs="?",
|
||||
metavar="DIRECTML_DEVICE", const=-1, help="Use torch-directml.")
|
||||
|
||||
parser.add_argument("--disable-ipex-optimize", action="store_true",
|
||||
help="Disables ipex.optimize when loading models with Intel GPUs.")
|
||||
|
||||
parser.add_argument("--disable-ipex-optimize", action="store_true", help="Disables ipex.optimize when loading models with Intel GPUs.")
|
||||
|
||||
class LatentPreviewMethod(enum.Enum):
|
||||
NoPreviews = "none"
|
||||
@ -85,36 +121,63 @@ class LatentPreviewMethod(enum.Enum):
|
||||
Latent2RGB = "latent2rgb"
|
||||
TAESD = "taesd"
|
||||
|
||||
parser.add_argument("--preview-method", type=LatentPreviewMethod, default=LatentPreviewMethod.NoPreviews, help="Default preview method for sampler nodes.", action=EnumAction)
|
||||
|
||||
parser.add_argument("--preview-method", type=LatentPreviewMethod, default=LatentPreviewMethod.NoPreviews,
|
||||
help="Default preview method for sampler nodes.", action=EnumAction)
|
||||
|
||||
attn_group = parser.add_mutually_exclusive_group()
|
||||
attn_group.add_argument("--use-split-cross-attention", action="store_true", help="Use the split cross attention optimization. Ignored when xformers is used.")
|
||||
attn_group.add_argument("--use-quad-cross-attention", action="store_true", help="Use the sub-quadratic cross attention optimization . Ignored when xformers is used.")
|
||||
attn_group.add_argument("--use-pytorch-cross-attention", action="store_true", help="Use the new pytorch 2.0 cross attention function.")
|
||||
attn_group.add_argument("--use-split-cross-attention", action="store_true",
|
||||
help="Use the split cross attention optimization. Ignored when xformers is used.")
|
||||
attn_group.add_argument("--use-quad-cross-attention", action="store_true",
|
||||
help="Use the sub-quadratic cross attention optimization . Ignored when xformers is used.")
|
||||
attn_group.add_argument("--use-pytorch-cross-attention", action="store_true",
|
||||
help="Use the new pytorch 2.0 cross attention function.")
|
||||
|
||||
parser.add_argument("--disable-xformers",
|
||||
action="store_true", help="Disable xformers.")
|
||||
|
||||
upcast = parser.add_mutually_exclusive_group()
|
||||
upcast.add_argument("--force-upcast-attention", action="store_true",
|
||||
help="Force enable attention upcasting, please report if it fixes black images.")
|
||||
upcast.add_argument("--dont-upcast-attention", action="store_true",
|
||||
help="Disable all upcasting of attention. Should be unnecessary except for debugging.")
|
||||
|
||||
parser.add_argument("--disable-xformers", action="store_true", help="Disable xformers.")
|
||||
|
||||
vram_group = parser.add_mutually_exclusive_group()
|
||||
vram_group.add_argument("--gpu-only", action="store_true", help="Store and run everything (text encoders/CLIP models, etc... on the GPU).")
|
||||
vram_group.add_argument("--highvram", action="store_true", help="By default models will be unloaded to CPU memory after being used. This option keeps them in GPU memory.")
|
||||
vram_group.add_argument("--normalvram", action="store_true", help="Used to force normal vram use if lowvram gets automatically enabled.")
|
||||
vram_group.add_argument("--lowvram", action="store_true", help="Split the unet in parts to use less vram.")
|
||||
vram_group.add_argument("--novram", action="store_true", help="When lowvram isn't enough.")
|
||||
vram_group.add_argument("--cpu", action="store_true", help="To use the CPU for everything (slow).")
|
||||
vram_group.add_argument("--gpu-only", action="store_true",
|
||||
help="Store and run everything (text encoders/CLIP models, etc... on the GPU).")
|
||||
vram_group.add_argument("--highvram", action="store_true",
|
||||
help="By default models will be unloaded to CPU memory after being used. This option keeps them in GPU memory.")
|
||||
vram_group.add_argument("--normalvram", action="store_true",
|
||||
help="Used to force normal vram use if lowvram gets automatically enabled.")
|
||||
vram_group.add_argument("--lowvram", action="store_true",
|
||||
help="Split the unet in parts to use less vram.")
|
||||
vram_group.add_argument("--novram", action="store_true",
|
||||
help="When lowvram isn't enough.")
|
||||
vram_group.add_argument("--cpu", action="store_true",
|
||||
help="To use the CPU for everything (slow).")
|
||||
|
||||
|
||||
parser.add_argument("--disable-smart-memory", action="store_true", help="Force ComfyUI to agressively offload to regular ram instead of keeping models in vram when it can.")
|
||||
parser.add_argument("--deterministic", action="store_true", help="Make pytorch use slower deterministic algorithms when it can. Note that this might not make images deterministic in all cases.")
|
||||
parser.add_argument("--disable-smart-memory", action="store_true",
|
||||
help="Force ComfyUI to agressively offload to regular ram instead of keeping models in vram when it can.")
|
||||
parser.add_argument("--deterministic", action="store_true",
|
||||
help="Make pytorch use slower deterministic algorithms when it can. Note that this might not make images deterministic in all cases.")
|
||||
|
||||
parser.add_argument("--dont-print-server", action="store_true", help="Don't print server output.")
|
||||
parser.add_argument("--quick-test-for-ci", action="store_true", help="Quick test for CI.")
|
||||
parser.add_argument("--windows-standalone-build", action="store_true", help="Windows standalone build: Enable convenient things that most people using the standalone windows build will probably enjoy (like auto opening the page on startup).")
|
||||
parser.add_argument("--dont-print-server", action="store_true",
|
||||
help="Don't print server output.")
|
||||
parser.add_argument("--quick-test-for-ci",
|
||||
action="store_true", help="Quick test for CI.")
|
||||
parser.add_argument("--windows-standalone-build", action="store_true",
|
||||
help="Windows standalone build: Enable convenient things that most people using the standalone windows build will probably enjoy (like auto opening the page on startup).")
|
||||
|
||||
parser.add_argument("--disable-metadata", action="store_true", help="Disable saving prompt metadata in files.")
|
||||
parser.add_argument("--disable-metadata", action="store_true",
|
||||
help="Disable saving prompt metadata in files.")
|
||||
|
||||
parser.add_argument("--multi-user", action="store_true", help="Enables per-user storage.")
|
||||
parser.add_argument("--multi-user", action="store_true",
|
||||
help="Enables per-user storage.")
|
||||
|
||||
parser.add_argument("--verbose", action="store_true", help="Enables more debug prints.")
|
||||
parser.add_argument("--verbose", action="store_true",
|
||||
help="Enables more debug prints.")
|
||||
|
||||
|
||||
if comfy.options.args_parsing:
|
||||
@ -128,7 +191,6 @@ if args.windows_standalone_build:
|
||||
if args.disable_auto_launch:
|
||||
args.auto_launch = False
|
||||
|
||||
import logging
|
||||
logging_level = logging.INFO
|
||||
if args.verbose:
|
||||
logging_level = logging.DEBUG
|
||||
|
||||
6413
comfyui_6006.log
Normal file
6413
comfyui_6006.log
Normal file
File diff suppressed because it is too large
Load Diff
246
comfyui_6006.prev.log
Normal file
246
comfyui_6006.prev.log
Normal file
@ -0,0 +1,246 @@
|
||||
** ComfyUI startup time: 2024-07-04 23:22:02.847062
|
||||
[2024-07-04 23:22] ** Platform: Linux
|
||||
[2024-07-04 23:22] ** Python version: 3.10.8 (main, Nov 24 2022, 14:13:03) [GCC 11.2.0]
|
||||
[2024-07-04 23:22] ** Python executable: /root/miniconda3/bin/python
|
||||
[2024-07-04 23:22] ** Log path: /root/ComfyUI/comfyui.log
|
||||
[2024-07-04 23:22]
|
||||
Prestartup times for custom nodes:
|
||||
[2024-07-04 23:22] 0.3 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Manager
|
||||
[2024-07-04 23:22]
|
||||
Total VRAM 24217 MB, total RAM 515689 MB
|
||||
[2024-07-04 23:22] xformers version: 0.0.22.post4
|
||||
[2024-07-04 23:22] Set vram state to: NORMAL_VRAM
|
||||
[2024-07-04 23:22] Device: cuda:0 NVIDIA GeForce RTX 4090 : cudaMallocAsync
|
||||
[2024-07-04 23:22] VAE dtype: torch.bfloat16
|
||||
[2024-07-04 23:22] Using xformers cross attention
|
||||
[2024-07-04 23:22] Adding extra search path checkpoints /root/autodl-tmp/models/checkpoint
|
||||
[2024-07-04 23:22] Adding extra search path configs /root/autodl-tmp/models/checkpoint
|
||||
[2024-07-04 23:22] Adding extra search path vae /root/autodl-tmp/models/vae
|
||||
[2024-07-04 23:22] Adding extra search path loras /root/autodl-tmp/models/lora
|
||||
[2024-07-04 23:22] Adding extra search path loras /root/autodl-tmp/models/ip_adapter_faceid/lora
|
||||
[2024-07-04 23:22] Adding extra search path upscale_models /root/autodl-tmp/models/upscaler
|
||||
[2024-07-04 23:22] Adding extra search path embeddings /root/autodl-tmp/models/embeddings
|
||||
[2024-07-04 23:22] Adding extra search path hypernetworks /root/autodl-tmp/models/embeddings
|
||||
[2024-07-04 23:22] Adding extra search path controlnet /root/autodl-tmp/models/controlnet
|
||||
[2024-07-04 23:22] Adding extra search path ipadapter /root/autodl-tmp/models/ip_adapter_faceid/models
|
||||
[2024-07-04 23:22] Adding extra search path ipadapter /root/autodl-tmp/models/ip_adapter
|
||||
[2024-07-04 23:22] Adding extra search path clip_vision /root/autodl-tmp/models/clip_vision
|
||||
[2024-07-04 23:22] Adding extra search path checkpoints /root/autodl-fs/models/checkpoint
|
||||
[2024-07-04 23:22] Adding extra search path configs /root/autodl-fs/models/checkpoint
|
||||
[2024-07-04 23:22] Adding extra search path vae /root/autodl-fs/models/vae
|
||||
[2024-07-04 23:22] Adding extra search path loras /root/autodl-fs/models/lora
|
||||
[2024-07-04 23:22] Adding extra search path loras /root/autodl-fs/models/ip_adapter_faceid/lora
|
||||
[2024-07-04 23:22] Adding extra search path upscale_models /root/autodl-fs/models/upscaler
|
||||
[2024-07-04 23:22] Adding extra search path embeddings /root/autodl-fs/models/embeddings
|
||||
[2024-07-04 23:22] Adding extra search path hypernetworks /root/autodl-fs/models/embeddings
|
||||
[2024-07-04 23:22] Adding extra search path controlnet /root/autodl-fs/models/controlnet
|
||||
[2024-07-04 23:22] Adding extra search path ipadapter /root/autodl-fs/models/ip_adapter_faceid/models
|
||||
[2024-07-04 23:22] Adding extra search path ipadapter /root/autodl-fs/models/ip_adapter
|
||||
[2024-07-04 23:22] Adding extra search path clip_vision /root/autodl-fs/models/clip_vision
|
||||
[2024-07-04 23:22] ### Loading: ComfyUI-Impact-Pack (V4.85.2)
|
||||
[2024-07-04 23:22] ### Loading: ComfyUI-Impact-Pack (Subpack: V0.4)
|
||||
[2024-07-04 23:22] [Impact Pack] Wildcards loading done.
|
||||
[2024-07-04 23:22] [34mWAS Node Suite: [0mBlenderNeko's Advanced CLIP Text Encode found, attempting to enable `CLIPTextEncode` support.[0m
|
||||
[2024-07-04 23:22] [34mWAS Node Suite: [0m`CLIPTextEncode (BlenderNeko Advanced + NSP)` node enabled under `WAS Suite/Conditioning` menu.[0m
|
||||
[2024-07-04 23:22] [34mWAS Node Suite: [0mOpenCV Python FFMPEG support is enabled[0m
|
||||
[2024-07-04 23:22] [34mWAS Node Suite [93mWarning: [0m`ffmpeg_bin_path` is not set in `/root/ComfyUI/custom_nodes/was-node-suite-comfyui/was_suite_config.json` config file. Will attempt to use system ffmpeg binaries if available.[0m
|
||||
[2024-07-04 23:22] [34mWAS Node Suite: [0mFinished.[0m [32mLoaded[0m [0m212[0m [32mnodes successfully.[0m
|
||||
[2024-07-04 23:22]
|
||||
[3m[93m"Life is 10% what happens to us and 90% how we react to it."[0m[3m - Charles R. Swindoll[0m
|
||||
[2024-07-04 23:22]
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/numba/np/ufunc/parallel.py:371: NumbaWarning: The TBB threading layer requires TBB version 2021 update 6 or later i.e., TBB_INTERFACE_VERSION >= 12060. Found TBB_INTERFACE_VERSION = 12050. The TBB threading layer is disabled.
|
||||
warnings.warn(problem)
|
||||
[2024-07-04 23:22] [92m[tinyterraNodes] [32mLoaded[0m
|
||||
[2024-07-04 23:22] [36;20m[comfyui_controlnet_aux] | INFO -> Using ckpts path: /root/ComfyUI/custom_nodes/comfyui_controlnet_aux/ckpts[0m
|
||||
[2024-07-04 23:22] [36;20m[comfyui_controlnet_aux] | INFO -> Using symlinks: False[0m
|
||||
[2024-07-04 23:22] [36;20m[comfyui_controlnet_aux] | INFO -> Using ort providers: ['CUDAExecutionProvider', 'DirectMLExecutionProvider', 'OpenVINOExecutionProvider', 'ROCMExecutionProvider', 'CPUExecutionProvider', 'CoreMLExecutionProvider'][0m
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:249: FutureWarning: `AutoencoderTinyBlock` is deprecated and will be removed in version 0.29. Importing `AutoencoderTinyBlock` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AutoencoderTinyBlock`, instead.
|
||||
deprecate("AutoencoderTinyBlock", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:254: FutureWarning: `UNetMidBlock2D` is deprecated and will be removed in version 0.29. Importing `UNetMidBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import UNetMidBlock2D`, instead.
|
||||
deprecate("UNetMidBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:259: FutureWarning: `UNetMidBlock2DCrossAttn` is deprecated and will be removed in version 0.29. Importing `UNetMidBlock2DCrossAttn` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import UNetMidBlock2DCrossAttn`, instead.
|
||||
deprecate("UNetMidBlock2DCrossAttn", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:264: FutureWarning: `UNetMidBlock2DSimpleCrossAttn` is deprecated and will be removed in version 0.29. Importing `UNetMidBlock2DSimpleCrossAttn` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import UNetMidBlock2DSimpleCrossAttn`, instead.
|
||||
deprecate("UNetMidBlock2DSimpleCrossAttn", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:269: FutureWarning: `AttnDownBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnDownBlock2D`, instead.
|
||||
deprecate("AttnDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:274: FutureWarning: `CrossAttnDownBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import CrossAttnDownBlock2D`, instead.
|
||||
deprecate("CrossAttnDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:279: FutureWarning: `DownBlock2D` is deprecated and will be removed in version 0.29. Importing `DownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import DownBlock2D`, instead.
|
||||
deprecate("DownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:284: FutureWarning: `AttnDownEncoderBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnDownEncoderBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnDownEncoderBlock2D`, instead.
|
||||
deprecate("AttnDownEncoderBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:289: FutureWarning: `AttnSkipDownBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnSkipDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnSkipDownBlock2D`, instead.
|
||||
deprecate("AttnSkipDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:294: FutureWarning: `SkipDownBlock2D` is deprecated and will be removed in version 0.29. Importing `SkipDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import SkipDownBlock2D`, instead.
|
||||
deprecate("SkipDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:299: FutureWarning: `ResnetDownsampleBlock2D` is deprecated and will be removed in version 0.29. Importing `ResnetDownsampleBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import ResnetDownsampleBlock2D`, instead.
|
||||
deprecate("ResnetDownsampleBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:304: FutureWarning: `SimpleCrossAttnDownBlock2D` is deprecated and will be removed in version 0.29. Importing `SimpleCrossAttnDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import SimpleCrossAttnDownBlock2D`, instead.
|
||||
deprecate("SimpleCrossAttnDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:309: FutureWarning: `KDownBlock2D` is deprecated and will be removed in version 0.29. Importing `KDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import KDownBlock2D`, instead.
|
||||
deprecate("KDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:314: FutureWarning: `KCrossAttnDownBlock2D` is deprecated and will be removed in version 0.29. Importing `KCrossAttnDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import KCrossAttnDownBlock2D`, instead.
|
||||
deprecate("KCrossAttnDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:319: FutureWarning: `AttnUpBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnUpBlock2D`, instead.
|
||||
deprecate("AttnUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:324: FutureWarning: `CrossAttnUpBlock2D` is deprecated and will be removed in version 0.29. Importing `CrossAttnUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import CrossAttnUpBlock2D`, instead.
|
||||
deprecate("CrossAttnUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:329: FutureWarning: `UpBlock2D` is deprecated and will be removed in version 0.29. Importing `UpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import UpBlock2D`, instead.
|
||||
deprecate("UpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:334: FutureWarning: `UpDecoderBlock2D` is deprecated and will be removed in version 0.29. Importing `UpDecoderBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import UpDecoderBlock2D`, instead.
|
||||
deprecate("UpDecoderBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:339: FutureWarning: `AttnUpDecoderBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnUpDecoderBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnUpDecoderBlock2D`, instead.
|
||||
deprecate("AttnUpDecoderBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:344: FutureWarning: `AttnSkipUpBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnSkipUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnSkipUpBlock2D`, instead.
|
||||
deprecate("AttnSkipUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:349: FutureWarning: `SkipUpBlock2D` is deprecated and will be removed in version 0.29. Importing `SkipUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import SkipUpBlock2D`, instead.
|
||||
deprecate("SkipUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:354: FutureWarning: `ResnetUpsampleBlock2D` is deprecated and will be removed in version 0.29. Importing `ResnetUpsampleBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import ResnetUpsampleBlock2D`, instead.
|
||||
deprecate("ResnetUpsampleBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:359: FutureWarning: `SimpleCrossAttnUpBlock2D` is deprecated and will be removed in version 0.29. Importing `SimpleCrossAttnUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import SimpleCrossAttnUpBlock2D`, instead.
|
||||
deprecate("SimpleCrossAttnUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:364: FutureWarning: `KUpBlock2D` is deprecated and will be removed in version 0.29. Importing `KUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import KUpBlock2D`, instead.
|
||||
deprecate("KUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:369: FutureWarning: `KCrossAttnUpBlock2D` is deprecated and will be removed in version 0.29. Importing `KCrossAttnUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import KCrossAttnUpBlock2D`, instead.
|
||||
deprecate("KCrossAttnUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:375: FutureWarning: `KAttentionBlock` is deprecated and will be removed in version 0.29. Importing `KAttentionBlock` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import KAttentionBlock`, instead.
|
||||
deprecate("KAttentionBlock", "0.29", deprecation_message)
|
||||
[2024-07-04 23:22] [34mFizzleDorf Custom Nodes: [92mLoaded[0m
|
||||
[2024-07-04 23:22] ### Loading: ComfyUI-Inspire-Pack (V0.69.2)
|
||||
[2024-07-04 23:22] [1;32m[Power Noise Suite]: 🦚🦚🦚 [93m[3mSup.[0m 🦚🦚🦚
|
||||
[2024-07-04 23:22] [1;32m[Power Noise Suite]:[0m Tamed [93m11[0m wild nodes.
|
||||
[2024-07-04 23:22] (pysssss:WD14Tagger) [DEBUG] Available ORT providers: TensorrtExecutionProvider, CUDAExecutionProvider, AzureExecutionProvider, CPUExecutionProvider
|
||||
[2024-07-04 23:22] (pysssss:WD14Tagger) [DEBUG] Using ORT providers: CUDAExecutionProvider, CPUExecutionProvider
|
||||
[2024-07-04 23:22] Use STYLE:weight_interpretation:normalization at the start of a prompt to use advanced encodings
|
||||
[2024-07-04 23:22] Weight interpretations available: comfy,A1111,compel,comfy++,down_weight,perp
|
||||
[2024-07-04 23:22] Normalization types available: none,mean,length,length+mean
|
||||
[2024-07-04 23:22] Total VRAM 24217 MB, total RAM 515689 MB
|
||||
[2024-07-04 23:22] xformers version: 0.0.22.post4
|
||||
[2024-07-04 23:22] Set vram state to: NORMAL_VRAM
|
||||
[2024-07-04 23:22] Device: cuda:0 NVIDIA GeForce RTX 4090 : cudaMallocAsync
|
||||
[2024-07-04 23:22] VAE dtype: torch.bfloat16
|
||||
[2024-07-04 23:22] ### Loading: ComfyUI-Manager (V2.13.1)
|
||||
[2024-07-04 23:22] ### ComfyUI Revision: 2096 [6c6a3925] | Released on '2024-04-02'
|
||||
[2024-07-04 23:22]
[36mEfficiency Nodes:[0m Attempting to add Control Net options to the 'HiRes-Fix Script' Node (comfyui_controlnet_aux add-on)...[92mSuccess![0m
|
||||
[2024-07-04 23:22] [Crystools [0;32mINFO[0m] Crystools version: 1.12.0
|
||||
[2024-07-04 23:22] [Crystools [0;32mINFO[0m] CPU: AMD EPYC 7T83 64-Core Processor - Arch: x86_64 - OS: Linux 5.4.0-153-generic
|
||||
[2024-07-04 23:22] [Crystools [0;32mINFO[0m] GPU/s:
|
||||
[2024-07-04 23:22] [Crystools [0;32mINFO[0m] 0) NVIDIA GeForce RTX 4090
|
||||
[2024-07-04 23:22] [Crystools [0;32mINFO[0m] NVIDIA Driver: 535.54.03
|
||||
[2024-07-04 23:22] ------------------------------------------
|
||||
[2024-07-04 23:22] [34mComfyroll Studio v1.76 : [92m 175 Nodes Loaded[0m
|
||||
[2024-07-04 23:22] ------------------------------------------
|
||||
[2024-07-04 23:22] ** For changes, please see patch notes at https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes/blob/main/Patch_Notes.md
|
||||
[2024-07-04 23:22] ** For help, please see the wiki at https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes/wiki
|
||||
[2024-07-04 23:22] ------------------------------------------
|
||||
[2024-07-04 23:22] #fix sys.stdout.isatty
|
||||
[2024-07-04 23:22] --------------
|
||||
[2024-07-04 23:22] [91m ### Mixlab Nodes: [93mLoaded
|
||||
[2024-07-04 23:22] ChatGPT.available True
|
||||
[2024-07-04 23:22] edit_mask.available False
|
||||
[2024-07-04 23:22] ## lama torchscript model not found: /root/ComfyUI/models/lama/big-lama.pt,pls download from https://github.com/enesmsahin/simple-lama-inpainting/releases/download/v0.1.0/big-lama.pt
|
||||
[2024-07-04 23:22] LaMaInpainting.available True
|
||||
[2024-07-04 23:22] ## clip_interrogator_model not found: /root/ComfyUI/models/clip_interrogator/Salesforce/blip-image-captioning-base, pls download from https://huggingface.co/Salesforce/blip-image-captioning-base
|
||||
[2024-07-04 23:22] ClipInterrogator.available True
|
||||
[2024-07-04 23:22] ## text_generator_model not found: /root/ComfyUI/models/prompt_generator/text2image-prompt-generator, pls download from https://huggingface.co/succinctly/text2image-prompt-generator/tree/main
|
||||
[2024-07-04 23:22] ## zh_en_model not found: /root/ComfyUI/models/prompt_generator/opus-mt-zh-en, pls download from https://huggingface.co/Helsinki-NLP/opus-mt-zh-en/tree/main
|
||||
[2024-07-04 23:22] PromptGenerate.available True
|
||||
[2024-07-04 23:22] ChinesePrompt.available True
|
||||
[2024-07-04 23:22] RembgNode_.available True
|
||||
[2024-07-04 23:22] TripoSR.available
|
||||
[2024-07-04 23:22] [93m -------------- [0m
|
||||
[2024-07-04 23:22] Looking in indexes: http://mirrors.aliyun.com/pypi/simple
|
||||
[2024-07-04 23:22] [2024-07-04 23:22] WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
|
||||
[2024-07-04 23:22] Looking in indexes: http://mirrors.aliyun.com/pypi/simple
|
||||
[2024-07-04 23:22] WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
|
||||
[2024-07-04 23:22]
|
||||
Import times for custom nodes:
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/websocket_image_save.py
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/AIGODLIKE-COMFYUI-TRANSLATION
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-AutomaticCFG
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUi_NNLatentUpscale
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI_ADV_CLIP_emb
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUi_PromptStylers
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-WD14-Tagger
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/masquerade-nodes-comfyui
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/PowerNoiseSuite
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/comfyui-portrait-master
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Custom-Scripts
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/Derfuu_ComfyUI_ModdedNodes
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Advanced-ControlNet
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Frame-Interpolation
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/comfyui-browser
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Coziness
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI_UltimateSDUpscale
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-AnimateDiff-Evolved
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-KJNodes
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/efficiency-nodes-comfyui
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/comfyui_controlnet_aux
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI_Comfyroll_CustomNodes
|
||||
[2024-07-04 23:22] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI_smZNodes
|
||||
[2024-07-04 23:22] 0.1 seconds: /root/ComfyUI/custom_nodes/ComfyUI-VideoHelperSuite
|
||||
[2024-07-04 23:22] 0.1 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Manager
|
||||
[2024-07-04 23:22] 0.1 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Inspire-Pack
|
||||
[2024-07-04 23:22] 0.1 seconds: /root/ComfyUI/custom_nodes/comfyui-prompt-control
|
||||
[2024-07-04 23:22] 0.1 seconds: /root/ComfyUI/custom_nodes/ComfyUI-layerdiffuse
|
||||
[2024-07-04 23:22] 0.1 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Gemini
|
||||
[2024-07-04 23:22] 0.1 seconds: /root/ComfyUI/custom_nodes/comfyui_segment_anything
|
||||
[2024-07-04 23:22] 0.4 seconds: /root/ComfyUI/custom_nodes/ComfyUI_FizzNodes
|
||||
[2024-07-04 23:22] 0.4 seconds: /root/ComfyUI/custom_nodes/ComfyUI_tinyterraNodes
|
||||
[2024-07-04 23:22] 1.1 seconds: /root/ComfyUI/custom_nodes/comfyui-mixlab-nodes
|
||||
[2024-07-04 23:22] 1.2 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Impact-Pack
|
||||
[2024-07-04 23:22] 1.4 seconds: /root/ComfyUI/custom_nodes/was-node-suite-comfyui
|
||||
[2024-07-04 23:22] 2.4 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Crystools
|
||||
[2024-07-04 23:22] 3.2 seconds: /root/ComfyUI/custom_nodes/ComfyUi-Ollama-YN
|
||||
[2024-07-04 23:22] 3.2 seconds: /root/ComfyUI/custom_nodes/comfyui-ollama
|
||||
[2024-07-04 23:22]
|
||||
https_key OK: /root/ComfyUI/custom_nodes/comfyui-mixlab-nodes/https/certificate.crt /root/ComfyUI/custom_nodes/comfyui-mixlab-nodes/https/private.key
|
||||
[2024-07-04 23:22]
|
||||
|
||||
[2024-07-04 23:22]
|
||||
|
||||
Starting server
|
||||
[2024-07-04 23:22] [93mTo see the GUI go to: http://127.0.0.1:6006
|
||||
[2024-07-04 23:22] [93mTo see the GUI go to: https://127.0.0.1:6008[0m
|
||||
[2024-07-04 23:22] [ComfyUI-Manager] default cache updated: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/model-list.json
|
||||
[2024-07-04 23:22] [ComfyUI-Manager] default cache updated: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/extension-node-map.json
|
||||
[2024-07-04 23:22] [ComfyUI-Manager] default cache updated: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/custom-node-list.json
|
||||
[2024-07-04 23:22] [ComfyUI-Manager] default cache updated: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/alter-list.json
|
||||
[2024-07-04 23:22] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/extension-node-map.json
|
||||
[2024-07-04 23:22] #clip_model_path chatml None
|
||||
[2024-07-04 23:22] #model
|
||||
[2024-07-04 23:22] start_local_llm error
|
||||
[2024-07-04 23:22] data_path: /root/ComfyUI/custom_nodes/comfyui-mixlab-nodes/data
|
||||
[2024-07-04 23:22] #read_workflow_json_files_all /root/ComfyUI/custom_nodes/comfyui-mixlab-nodes/app/
|
||||
[2024-07-04 23:27] Use Proxy: http://172.20.0.113:12798
|
||||
[2024-07-04 23:27] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1514988643_custom-node-list.json
|
||||
[2024-07-04 23:27] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1742899825_extension-node-map.json
|
||||
[2024-07-04 23:27] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1742899825_extension-node-map.json
|
||||
[2024-07-04 23:27] Install custom node 'ComfyUI Essentials'
|
||||
[2024-07-04 23:27] install: ['https://github.com/cubiq/ComfyUI_essentials']
|
||||
[2024-07-04 23:27] Download: git clone 'https://github.com/cubiq/ComfyUI_essentials'
|
||||
[2024-07-04 23:27]
0it [00:00, ?it/s]
100%|█████████████████████████████████████| 133.0/133.0 [00:23<00:00, 5.76it/s]
100%|█████████████████████████████████████| 133.0/133.0 [00:23<00:00, 5.76it/s]
100%|███████████████████████████████████████| 58.0/58.0 [00:23<00:00, 2.51it/s]
100%|███████████████████████████████████████| 58.0/58.0 [00:23<00:00, 2.51it/s]
100%|█████████████████████████████████████| 292.0/292.0 [00:23<00:00, 12.41it/s]
100%|█████████████████████████████████████| 292.0/292.0 [00:23<00:00, 12.41it/s]
100%|█████████████████████████████████████| 167.0/167.0 [00:23<00:00, 7.09it/s]
100%|█████████████████████████████████████| 167.0/167.0 [00:23<00:00, 7.09it/s]
100%|█████████████████████████████████████| 167.0/167.0 [00:23<00:00, 7.08it/s]
|
||||
[2024-07-04 23:27] Install: pip packages
|
||||
[2024-07-04 23:27]
|
||||
## ComfyUI-Manager: EXECUTE => ['/root/miniconda3/bin/python', '-m', 'pip', 'install', 'numba']
|
||||
[2024-07-04 23:27] Looking in indexes: http://mirrors.aliyun.com/pypi/simple
|
||||
[2024-07-04 23:27] [2024-07-04 23:27] [!] WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
|
||||
[2024-07-04 23:27]
|
||||
## ComfyUI-Manager: EXECUTE => ['/root/miniconda3/bin/python', '-m', 'pip', 'install', 'colour-science']
|
||||
[2024-07-04 23:27] Looking in indexes: http://mirrors.aliyun.com/pypi/simple
|
||||
[2024-07-04 23:27] [!] WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
|
||||
[2024-07-04 23:27]
|
||||
## ComfyUI-Manager: EXECUTE => ['/root/miniconda3/bin/python', '-m', 'pip', 'install', 'rembg']
|
||||
[2024-07-04 23:27] Looking in indexes: http://mirrors.aliyun.com/pypi/simple
|
||||
[2024-07-04 23:27] [!] WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
|
||||
[2024-07-04 23:27]
|
||||
## ComfyUI-Manager: EXECUTE => ['/root/miniconda3/bin/python', '-m', 'pip', 'install', 'pixeloe']
|
||||
[2024-07-04 23:28] Looking in indexes: http://mirrors.aliyun.com/pypi/simple
|
||||
[2024-07-04 23:28] [!] WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
|
||||
[2024-07-04 23:28] Installation was successful.
|
||||
[2024-07-04 23:28] After restarting ComfyUI, please refresh the browser.
|
||||
[2024-07-04 23:28] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1514988643_custom-node-list.json
|
||||
[2024-07-04 23:28] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1742899825_extension-node-map.json
|
||||
[2024-07-04 23:28] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1742899825_extension-node-map.json
|
||||
249
comfyui_6006.prev2.log
Normal file
249
comfyui_6006.prev2.log
Normal file
@ -0,0 +1,249 @@
|
||||
** ComfyUI startup time: 2024-07-04 23:16:15.674671
|
||||
[2024-07-04 23:16] ** Platform: Linux
|
||||
[2024-07-04 23:16] ** Python version: 3.10.8 (main, Nov 24 2022, 14:13:03) [GCC 11.2.0]
|
||||
[2024-07-04 23:16] ** Python executable: /root/miniconda3/bin/python
|
||||
[2024-07-04 23:16] ** Log path: /root/ComfyUI/comfyui.log
|
||||
[2024-07-04 23:16]
|
||||
#######################################################################
|
||||
[2024-07-04 23:16] [ComfyUI-Manager] Starting dependency installation/(de)activation for the extension
|
||||
[2024-07-04 23:16]
|
||||
[2024-07-04 23:16] Install: pip packages for '/root/ComfyUI/custom_nodes/ComfyUI_essentials'
|
||||
[2024-07-04 23:16]
|
||||
[ComfyUI-Manager] Startup script completed.
|
||||
[2024-07-04 23:16] #######################################################################
|
||||
[2024-07-04 23:16]
|
||||
[2024-07-04 23:16]
|
||||
Prestartup times for custom nodes:
|
||||
[2024-07-04 23:16] 1.1 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Manager
|
||||
[2024-07-04 23:16]
|
||||
Total VRAM 24217 MB, total RAM 515689 MB
|
||||
[2024-07-04 23:16] xformers version: 0.0.22.post4
|
||||
[2024-07-04 23:16] Set vram state to: NORMAL_VRAM
|
||||
[2024-07-04 23:16] Device: cuda:0 NVIDIA GeForce RTX 4090 : cudaMallocAsync
|
||||
[2024-07-04 23:16] VAE dtype: torch.bfloat16
|
||||
[2024-07-04 23:16] Using xformers cross attention
|
||||
[2024-07-04 23:16] Adding extra search path checkpoints /root/autodl-tmp/models/checkpoint
|
||||
[2024-07-04 23:16] Adding extra search path configs /root/autodl-tmp/models/checkpoint
|
||||
[2024-07-04 23:16] Adding extra search path vae /root/autodl-tmp/models/vae
|
||||
[2024-07-04 23:16] Adding extra search path loras /root/autodl-tmp/models/lora
|
||||
[2024-07-04 23:16] Adding extra search path loras /root/autodl-tmp/models/ip_adapter_faceid/lora
|
||||
[2024-07-04 23:16] Adding extra search path upscale_models /root/autodl-tmp/models/upscaler
|
||||
[2024-07-04 23:16] Adding extra search path embeddings /root/autodl-tmp/models/embeddings
|
||||
[2024-07-04 23:16] Adding extra search path hypernetworks /root/autodl-tmp/models/embeddings
|
||||
[2024-07-04 23:16] Adding extra search path controlnet /root/autodl-tmp/models/controlnet
|
||||
[2024-07-04 23:16] Adding extra search path ipadapter /root/autodl-tmp/models/ip_adapter_faceid/models
|
||||
[2024-07-04 23:16] Adding extra search path ipadapter /root/autodl-tmp/models/ip_adapter
|
||||
[2024-07-04 23:16] Adding extra search path clip_vision /root/autodl-tmp/models/clip_vision
|
||||
[2024-07-04 23:16] Adding extra search path checkpoints /root/autodl-fs/models/checkpoint
|
||||
[2024-07-04 23:16] Adding extra search path configs /root/autodl-fs/models/checkpoint
|
||||
[2024-07-04 23:16] Adding extra search path vae /root/autodl-fs/models/vae
|
||||
[2024-07-04 23:16] Adding extra search path loras /root/autodl-fs/models/lora
|
||||
[2024-07-04 23:16] Adding extra search path loras /root/autodl-fs/models/ip_adapter_faceid/lora
|
||||
[2024-07-04 23:16] Adding extra search path upscale_models /root/autodl-fs/models/upscaler
|
||||
[2024-07-04 23:16] Adding extra search path embeddings /root/autodl-fs/models/embeddings
|
||||
[2024-07-04 23:16] Adding extra search path hypernetworks /root/autodl-fs/models/embeddings
|
||||
[2024-07-04 23:16] Adding extra search path controlnet /root/autodl-fs/models/controlnet
|
||||
[2024-07-04 23:16] Adding extra search path ipadapter /root/autodl-fs/models/ip_adapter_faceid/models
|
||||
[2024-07-04 23:16] Adding extra search path ipadapter /root/autodl-fs/models/ip_adapter
|
||||
[2024-07-04 23:16] Adding extra search path clip_vision /root/autodl-fs/models/clip_vision
|
||||
[2024-07-04 23:16] ### Loading: ComfyUI-Impact-Pack (V4.85.2)
|
||||
[2024-07-04 23:16] ### Loading: ComfyUI-Impact-Pack (Subpack: V0.4)
|
||||
[2024-07-04 23:16] [Impact Pack] Wildcards loading done.
|
||||
[2024-07-04 23:16] [34mWAS Node Suite: [0mBlenderNeko's Advanced CLIP Text Encode found, attempting to enable `CLIPTextEncode` support.[0m
|
||||
[2024-07-04 23:16] [34mWAS Node Suite: [0m`CLIPTextEncode (BlenderNeko Advanced + NSP)` node enabled under `WAS Suite/Conditioning` menu.[0m
|
||||
[2024-07-04 23:16] [34mWAS Node Suite: [0mOpenCV Python FFMPEG support is enabled[0m
|
||||
[2024-07-04 23:16] [34mWAS Node Suite [93mWarning: [0m`ffmpeg_bin_path` is not set in `/root/ComfyUI/custom_nodes/was-node-suite-comfyui/was_suite_config.json` config file. Will attempt to use system ffmpeg binaries if available.[0m
|
||||
[2024-07-04 23:16] [34mWAS Node Suite: [0mFinished.[0m [32mLoaded[0m [0m212[0m [32mnodes successfully.[0m
|
||||
[2024-07-04 23:16]
|
||||
[3m[93m"The biggest risk is not taking any risk. In a world that is changing quickly, the only strategy that is guaranteed to fail is not taking risks."[0m[3m - Mark Zuckerberg[0m
|
||||
[2024-07-04 23:16]
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/numba/np/ufunc/parallel.py:371: NumbaWarning: The TBB threading layer requires TBB version 2021 update 6 or later i.e., TBB_INTERFACE_VERSION >= 12060. Found TBB_INTERFACE_VERSION = 12050. The TBB threading layer is disabled.
|
||||
warnings.warn(problem)
|
||||
[2024-07-04 23:16] [92m[tinyterraNodes] [32mLoaded[0m
|
||||
[2024-07-04 23:16] [36;20m[comfyui_controlnet_aux] | INFO -> Using ckpts path: /root/ComfyUI/custom_nodes/comfyui_controlnet_aux/ckpts[0m
|
||||
[2024-07-04 23:16] [36;20m[comfyui_controlnet_aux] | INFO -> Using symlinks: False[0m
|
||||
[2024-07-04 23:16] [36;20m[comfyui_controlnet_aux] | INFO -> Using ort providers: ['CUDAExecutionProvider', 'DirectMLExecutionProvider', 'OpenVINOExecutionProvider', 'ROCMExecutionProvider', 'CPUExecutionProvider', 'CoreMLExecutionProvider'][0m
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:249: FutureWarning: `AutoencoderTinyBlock` is deprecated and will be removed in version 0.29. Importing `AutoencoderTinyBlock` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AutoencoderTinyBlock`, instead.
|
||||
deprecate("AutoencoderTinyBlock", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:254: FutureWarning: `UNetMidBlock2D` is deprecated and will be removed in version 0.29. Importing `UNetMidBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import UNetMidBlock2D`, instead.
|
||||
deprecate("UNetMidBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:259: FutureWarning: `UNetMidBlock2DCrossAttn` is deprecated and will be removed in version 0.29. Importing `UNetMidBlock2DCrossAttn` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import UNetMidBlock2DCrossAttn`, instead.
|
||||
deprecate("UNetMidBlock2DCrossAttn", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:264: FutureWarning: `UNetMidBlock2DSimpleCrossAttn` is deprecated and will be removed in version 0.29. Importing `UNetMidBlock2DSimpleCrossAttn` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import UNetMidBlock2DSimpleCrossAttn`, instead.
|
||||
deprecate("UNetMidBlock2DSimpleCrossAttn", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:269: FutureWarning: `AttnDownBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnDownBlock2D`, instead.
|
||||
deprecate("AttnDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:274: FutureWarning: `CrossAttnDownBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import CrossAttnDownBlock2D`, instead.
|
||||
deprecate("CrossAttnDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:279: FutureWarning: `DownBlock2D` is deprecated and will be removed in version 0.29. Importing `DownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import DownBlock2D`, instead.
|
||||
deprecate("DownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:284: FutureWarning: `AttnDownEncoderBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnDownEncoderBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnDownEncoderBlock2D`, instead.
|
||||
deprecate("AttnDownEncoderBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:289: FutureWarning: `AttnSkipDownBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnSkipDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnSkipDownBlock2D`, instead.
|
||||
deprecate("AttnSkipDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:294: FutureWarning: `SkipDownBlock2D` is deprecated and will be removed in version 0.29. Importing `SkipDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import SkipDownBlock2D`, instead.
|
||||
deprecate("SkipDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:299: FutureWarning: `ResnetDownsampleBlock2D` is deprecated and will be removed in version 0.29. Importing `ResnetDownsampleBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import ResnetDownsampleBlock2D`, instead.
|
||||
deprecate("ResnetDownsampleBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:304: FutureWarning: `SimpleCrossAttnDownBlock2D` is deprecated and will be removed in version 0.29. Importing `SimpleCrossAttnDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import SimpleCrossAttnDownBlock2D`, instead.
|
||||
deprecate("SimpleCrossAttnDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:309: FutureWarning: `KDownBlock2D` is deprecated and will be removed in version 0.29. Importing `KDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import KDownBlock2D`, instead.
|
||||
deprecate("KDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:314: FutureWarning: `KCrossAttnDownBlock2D` is deprecated and will be removed in version 0.29. Importing `KCrossAttnDownBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import KCrossAttnDownBlock2D`, instead.
|
||||
deprecate("KCrossAttnDownBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:319: FutureWarning: `AttnUpBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnUpBlock2D`, instead.
|
||||
deprecate("AttnUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:324: FutureWarning: `CrossAttnUpBlock2D` is deprecated and will be removed in version 0.29. Importing `CrossAttnUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import CrossAttnUpBlock2D`, instead.
|
||||
deprecate("CrossAttnUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:329: FutureWarning: `UpBlock2D` is deprecated and will be removed in version 0.29. Importing `UpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import UpBlock2D`, instead.
|
||||
deprecate("UpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:334: FutureWarning: `UpDecoderBlock2D` is deprecated and will be removed in version 0.29. Importing `UpDecoderBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import UpDecoderBlock2D`, instead.
|
||||
deprecate("UpDecoderBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:339: FutureWarning: `AttnUpDecoderBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnUpDecoderBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnUpDecoderBlock2D`, instead.
|
||||
deprecate("AttnUpDecoderBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:344: FutureWarning: `AttnSkipUpBlock2D` is deprecated and will be removed in version 0.29. Importing `AttnSkipUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import AttnSkipUpBlock2D`, instead.
|
||||
deprecate("AttnSkipUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:349: FutureWarning: `SkipUpBlock2D` is deprecated and will be removed in version 0.29. Importing `SkipUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import SkipUpBlock2D`, instead.
|
||||
deprecate("SkipUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:354: FutureWarning: `ResnetUpsampleBlock2D` is deprecated and will be removed in version 0.29. Importing `ResnetUpsampleBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import ResnetUpsampleBlock2D`, instead.
|
||||
deprecate("ResnetUpsampleBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:359: FutureWarning: `SimpleCrossAttnUpBlock2D` is deprecated and will be removed in version 0.29. Importing `SimpleCrossAttnUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import SimpleCrossAttnUpBlock2D`, instead.
|
||||
deprecate("SimpleCrossAttnUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:364: FutureWarning: `KUpBlock2D` is deprecated and will be removed in version 0.29. Importing `KUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import KUpBlock2D`, instead.
|
||||
deprecate("KUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:369: FutureWarning: `KCrossAttnUpBlock2D` is deprecated and will be removed in version 0.29. Importing `KCrossAttnUpBlock2D` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import KCrossAttnUpBlock2D`, instead.
|
||||
deprecate("KCrossAttnUpBlock2D", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] /root/miniconda3/lib/python3.10/site-packages/diffusers/models/unet_2d_blocks.py:375: FutureWarning: `KAttentionBlock` is deprecated and will be removed in version 0.29. Importing `KAttentionBlock` from `diffusers.models.unet_2d_blocks` is deprecated and this will be removed in a future version. Please use `from diffusers.models.unets.unet_2d_blocks import KAttentionBlock`, instead.
|
||||
deprecate("KAttentionBlock", "0.29", deprecation_message)
|
||||
[2024-07-04 23:16] [34mFizzleDorf Custom Nodes: [92mLoaded[0m
|
||||
[2024-07-04 23:16] ### Loading: ComfyUI-Inspire-Pack (V0.69.2)
|
||||
[2024-07-04 23:16] [1;32m[Power Noise Suite]: 🦚🦚🦚 [93m[3mCock-a-doodle-dooo![0m 🦚🦚🦚
|
||||
[2024-07-04 23:16] [1;32m[Power Noise Suite]:[0m Tamed [93m11[0m wild nodes.
|
||||
[2024-07-04 23:16] (pysssss:WD14Tagger) [DEBUG] Available ORT providers: TensorrtExecutionProvider, CUDAExecutionProvider, AzureExecutionProvider, CPUExecutionProvider
|
||||
[2024-07-04 23:16] (pysssss:WD14Tagger) [DEBUG] Using ORT providers: CUDAExecutionProvider, CPUExecutionProvider
|
||||
[2024-07-04 23:16] Use STYLE:weight_interpretation:normalization at the start of a prompt to use advanced encodings
|
||||
[2024-07-04 23:16] Weight interpretations available: comfy,A1111,compel,comfy++,down_weight,perp
|
||||
[2024-07-04 23:16] Normalization types available: none,mean,length,length+mean
|
||||
[2024-07-04 23:16] Total VRAM 24217 MB, total RAM 515689 MB
|
||||
[2024-07-04 23:16] xformers version: 0.0.22.post4
|
||||
[2024-07-04 23:16] Set vram state to: NORMAL_VRAM
|
||||
[2024-07-04 23:16] Device: cuda:0 NVIDIA GeForce RTX 4090 : cudaMallocAsync
|
||||
[2024-07-04 23:16] VAE dtype: torch.bfloat16
|
||||
[2024-07-04 23:16] ### Loading: ComfyUI-Manager (V2.13.1)
|
||||
[2024-07-04 23:16] ### ComfyUI Revision: 2096 [6c6a3925] | Released on '2024-04-02'
|
||||
[2024-07-04 23:16]
[36mEfficiency Nodes:[0m Attempting to add Control Net options to the 'HiRes-Fix Script' Node (comfyui_controlnet_aux add-on)...[92mSuccess![0m
|
||||
[2024-07-04 23:16] [Crystools [0;32mINFO[0m] Crystools version: 1.12.0
|
||||
[2024-07-04 23:16] [Crystools [0;32mINFO[0m] CPU: AMD EPYC 7T83 64-Core Processor - Arch: x86_64 - OS: Linux 5.4.0-153-generic
|
||||
[2024-07-04 23:16] [Crystools [0;32mINFO[0m] GPU/s:
|
||||
[2024-07-04 23:16] [Crystools [0;32mINFO[0m] 0) NVIDIA GeForce RTX 4090
|
||||
[2024-07-04 23:16] [Crystools [0;32mINFO[0m] NVIDIA Driver: 535.54.03
|
||||
[2024-07-04 23:16] ------------------------------------------
|
||||
[2024-07-04 23:16] [34mComfyroll Studio v1.76 : [92m 175 Nodes Loaded[0m
|
||||
[2024-07-04 23:16] ------------------------------------------
|
||||
[2024-07-04 23:16] ** For changes, please see patch notes at https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes/blob/main/Patch_Notes.md
|
||||
[2024-07-04 23:16] ** For help, please see the wiki at https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes/wiki
|
||||
[2024-07-04 23:16] ------------------------------------------
|
||||
[2024-07-04 23:16] #fix sys.stdout.isatty
|
||||
[2024-07-04 23:16] --------------
|
||||
[2024-07-04 23:16] [91m ### Mixlab Nodes: [93mLoaded
|
||||
[2024-07-04 23:16] ChatGPT.available True
|
||||
[2024-07-04 23:16] edit_mask.available False
|
||||
[2024-07-04 23:16] ## lama torchscript model not found: /root/ComfyUI/models/lama/big-lama.pt,pls download from https://github.com/enesmsahin/simple-lama-inpainting/releases/download/v0.1.0/big-lama.pt
|
||||
[2024-07-04 23:16] LaMaInpainting.available True
|
||||
[2024-07-04 23:16] ## clip_interrogator_model not found: /root/ComfyUI/models/clip_interrogator/Salesforce/blip-image-captioning-base, pls download from https://huggingface.co/Salesforce/blip-image-captioning-base
|
||||
[2024-07-04 23:16] ClipInterrogator.available True
|
||||
[2024-07-04 23:16] ## text_generator_model not found: /root/ComfyUI/models/prompt_generator/text2image-prompt-generator, pls download from https://huggingface.co/succinctly/text2image-prompt-generator/tree/main
|
||||
[2024-07-04 23:16] ## zh_en_model not found: /root/ComfyUI/models/prompt_generator/opus-mt-zh-en, pls download from https://huggingface.co/Helsinki-NLP/opus-mt-zh-en/tree/main
|
||||
[2024-07-04 23:16] PromptGenerate.available True
|
||||
[2024-07-04 23:16] ChinesePrompt.available True
|
||||
[2024-07-04 23:16] RembgNode_.available True
|
||||
[2024-07-04 23:16] TripoSR.available
|
||||
[2024-07-04 23:16] [93m -------------- [0m
|
||||
[2024-07-04 23:16] Looking in indexes: http://mirrors.aliyun.com/pypi/simple
|
||||
[2024-07-04 23:16] [2024-07-04 23:16] WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
|
||||
[2024-07-04 23:16] Looking in indexes: http://mirrors.aliyun.com/pypi/simple
|
||||
[2024-07-04 23:16] WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
|
||||
[2024-07-04 23:16] Traceback (most recent call last):
|
||||
File "/root/ComfyUI/nodes.py", line 1889, in load_custom_node
|
||||
module_spec.loader.exec_module(module)
|
||||
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
|
||||
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
|
||||
File "/root/ComfyUI/custom_nodes/ComfyUI_essentials/__init__.py", line 2, in <module>
|
||||
from .image import IMAGE_CLASS_MAPPINGS, IMAGE_NAME_MAPPINGS
|
||||
File "/root/ComfyUI/custom_nodes/ComfyUI_essentials/image.py", line 5, in <module>
|
||||
from node_helpers import pillow
|
||||
ModuleNotFoundError: No module named 'node_helpers'
|
||||
|
||||
[2024-07-04 23:16] Cannot import /root/ComfyUI/custom_nodes/ComfyUI_essentials module for custom nodes: No module named 'node_helpers'
|
||||
[2024-07-04 23:16]
|
||||
Import times for custom nodes:
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/websocket_image_save.py
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-AutomaticCFG
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/AIGODLIKE-COMFYUI-TRANSLATION
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUi_NNLatentUpscale
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUi_PromptStylers
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/masquerade-nodes-comfyui
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-WD14-Tagger
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/comfyui-portrait-master
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI_ADV_CLIP_emb
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/PowerNoiseSuite
|
||||
[2024-07-04 23:16] 0.0 seconds (IMPORT FAILED): /root/ComfyUI/custom_nodes/ComfyUI_essentials
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Custom-Scripts
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/Derfuu_ComfyUI_ModdedNodes
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Frame-Interpolation
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/comfyui-browser
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI_UltimateSDUpscale
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Advanced-ControlNet
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Coziness
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-AnimateDiff-Evolved
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-KJNodes
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/efficiency-nodes-comfyui
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI_Comfyroll_CustomNodes
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/comfyui_controlnet_aux
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI_smZNodes
|
||||
[2024-07-04 23:16] 0.0 seconds: /root/ComfyUI/custom_nodes/ComfyUI-VideoHelperSuite
|
||||
[2024-07-04 23:16] 0.1 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Manager
|
||||
[2024-07-04 23:16] 0.1 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Inspire-Pack
|
||||
[2024-07-04 23:16] 0.1 seconds: /root/ComfyUI/custom_nodes/comfyui-prompt-control
|
||||
[2024-07-04 23:16] 0.1 seconds: /root/ComfyUI/custom_nodes/ComfyUI-layerdiffuse
|
||||
[2024-07-04 23:16] 0.1 seconds: /root/ComfyUI/custom_nodes/comfyui_segment_anything
|
||||
[2024-07-04 23:16] 0.1 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Gemini
|
||||
[2024-07-04 23:16] 0.3 seconds: /root/ComfyUI/custom_nodes/ComfyUI_FizzNodes
|
||||
[2024-07-04 23:16] 0.4 seconds: /root/ComfyUI/custom_nodes/ComfyUI_tinyterraNodes
|
||||
[2024-07-04 23:16] 1.1 seconds: /root/ComfyUI/custom_nodes/comfyui-mixlab-nodes
|
||||
[2024-07-04 23:16] 1.3 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Impact-Pack
|
||||
[2024-07-04 23:16] 1.4 seconds: /root/ComfyUI/custom_nodes/was-node-suite-comfyui
|
||||
[2024-07-04 23:16] 2.4 seconds: /root/ComfyUI/custom_nodes/ComfyUI-Crystools
|
||||
[2024-07-04 23:16] 3.2 seconds: /root/ComfyUI/custom_nodes/comfyui-ollama
|
||||
[2024-07-04 23:16] 3.2 seconds: /root/ComfyUI/custom_nodes/ComfyUi-Ollama-YN
|
||||
[2024-07-04 23:16]
|
||||
https_key OK: /root/ComfyUI/custom_nodes/comfyui-mixlab-nodes/https/certificate.crt /root/ComfyUI/custom_nodes/comfyui-mixlab-nodes/https/private.key
|
||||
[2024-07-04 23:16]
|
||||
|
||||
[2024-07-04 23:16]
|
||||
|
||||
Starting server
|
||||
[2024-07-04 23:16] [93mTo see the GUI go to: http://127.0.0.1:6006
|
||||
[2024-07-04 23:16] [93mTo see the GUI go to: https://127.0.0.1:6008[0m
|
||||
[2024-07-04 23:16] [ComfyUI-Manager] default cache updated: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/model-list.json
|
||||
[2024-07-04 23:16] [ComfyUI-Manager] default cache updated: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/custom-node-list.json
|
||||
[2024-07-04 23:16] [ComfyUI-Manager] default cache updated: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/extension-node-map.json
|
||||
[2024-07-04 23:16] [ComfyUI-Manager] default cache updated: https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/alter-list.json
|
||||
[2024-07-04 23:17] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/extension-node-map.json
|
||||
[2024-07-04 23:17] #clip_model_path chatml None
|
||||
[2024-07-04 23:17] #model
|
||||
[2024-07-04 23:17] start_local_llm error
|
||||
[2024-07-04 23:17] data_path: /root/ComfyUI/custom_nodes/comfyui-mixlab-nodes/data
|
||||
[2024-07-04 23:17] #read_workflow_json_files_all /root/ComfyUI/custom_nodes/comfyui-mixlab-nodes/app/
|
||||
[2024-07-04 23:21] Use Proxy: http://172.20.0.113:12798
|
||||
[2024-07-04 23:21] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1514988643_custom-node-list.json
|
||||
[2024-07-04 23:21] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1742899825_extension-node-map.json
|
||||
[2024-07-04 23:21] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1742899825_extension-node-map.json
|
||||
[2024-07-04 23:21] Uninstall custom node 'ComfyUI Essentials'
|
||||
[2024-07-04 23:21] uninstall: ['https://github.com/cubiq/ComfyUI_essentials']
|
||||
[2024-07-04 23:21] Uninstallation was successful.
|
||||
[2024-07-04 23:21] After restarting ComfyUI, please refresh the browser.
|
||||
[2024-07-04 23:21] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1514988643_custom-node-list.json
|
||||
[2024-07-04 23:21] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1742899825_extension-node-map.json
|
||||
[2024-07-04 23:21] FETCH DATA from: /root/ComfyUI/custom_nodes/ComfyUI-Manager/.cache/1742899825_extension-node-map.json
|
||||
15
server.py
15
server.py
@ -11,6 +11,7 @@ import urllib
|
||||
import json
|
||||
import glob
|
||||
import struct
|
||||
import ssl
|
||||
from PIL import Image, ImageOps
|
||||
from PIL.PngImagePlugin import PngInfo
|
||||
from io import BytesIO
|
||||
@ -623,14 +624,22 @@ class PromptServer():
|
||||
async def start(self, address, port, verbose=True, call_on_start=None):
|
||||
runner = web.AppRunner(self.app, access_log=None)
|
||||
await runner.setup()
|
||||
site = web.TCPSite(runner, address, port)
|
||||
ssl_ctx = None
|
||||
scheme = "http"
|
||||
if args.tls_keyfile and args.tls_certfile:
|
||||
ssl_ctx = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_SERVER, verify_mode=ssl.CERT_NONE)
|
||||
ssl_ctx.load_cert_chain(certfile=args.tls_certfile,
|
||||
keyfile=args.tls_keyfile)
|
||||
scheme = "https"
|
||||
|
||||
site = web.TCPSite(runner, address, port, ssl_context=ssl_ctx)
|
||||
await site.start()
|
||||
|
||||
if verbose:
|
||||
logging.info("Starting server\n")
|
||||
logging.info("To see the GUI go to: http://{}:{}".format(address, port))
|
||||
logging.info("To see the GUI go to: {}://{}:{}".format(scheme, address, port))
|
||||
if call_on_start is not None:
|
||||
call_on_start(address, port)
|
||||
call_on_start(scheme, address, port)
|
||||
|
||||
def add_on_prompt_handler(self, handler):
|
||||
self.on_prompt_handlers.append(handler)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user