fix: upload status issues, and gif uploads
This commit is contained in:
parent
547d645a0c
commit
ac6e863b95
@ -79,7 +79,7 @@ COMFY_API_AVAILABLE_MAX_RETRIES = 500
|
|||||||
# Time to wait between poll attempts in milliseconds
|
# Time to wait between poll attempts in milliseconds
|
||||||
COMFY_POLLING_INTERVAL_MS = 250
|
COMFY_POLLING_INTERVAL_MS = 250
|
||||||
# Maximum number of poll attempts
|
# Maximum number of poll attempts
|
||||||
COMFY_POLLING_MAX_RETRIES = 500
|
COMFY_POLLING_MAX_RETRIES = 1000
|
||||||
# Host where ComfyUI is running
|
# Host where ComfyUI is running
|
||||||
COMFY_HOST = "127.0.0.1:8188"
|
COMFY_HOST = "127.0.0.1:8188"
|
||||||
|
|
||||||
|
@ -200,12 +200,10 @@ prompt_server = server.PromptServer.instance
|
|||||||
send_json = prompt_server.send_json
|
send_json = prompt_server.send_json
|
||||||
async def send_json_override(self, event, data, sid=None):
|
async def send_json_override(self, event, data, sid=None):
|
||||||
# print("INTERNAL:", event, data, sid)
|
# print("INTERNAL:", event, data, sid)
|
||||||
|
|
||||||
prompt_id = data.get('prompt_id')
|
prompt_id = data.get('prompt_id')
|
||||||
|
|
||||||
# now we send everything
|
# now we send everything
|
||||||
await send(event, data)
|
await asyncio.wait([send(event, data), self.send_json_original(event, data, sid)])
|
||||||
await self.send_json_original(event, data, sid)
|
|
||||||
|
|
||||||
if event == 'execution_start':
|
if event == 'execution_start':
|
||||||
update_run(prompt_id, Status.RUNNING)
|
update_run(prompt_id, Status.RUNNING)
|
||||||
@ -217,12 +215,13 @@ async def send_json_override(self, event, data, sid=None):
|
|||||||
update_run(prompt_id, Status.SUCCESS)
|
update_run(prompt_id, Status.SUCCESS)
|
||||||
|
|
||||||
if event == 'execution_error':
|
if event == 'execution_error':
|
||||||
|
# Careful this might not be fully awaited.
|
||||||
|
await update_run_with_output(prompt_id, data)
|
||||||
update_run(prompt_id, Status.FAILED)
|
update_run(prompt_id, Status.FAILED)
|
||||||
asyncio.create_task(update_run_with_output(prompt_id, data))
|
|
||||||
# await update_run_with_output(prompt_id, data)
|
# await update_run_with_output(prompt_id, data)
|
||||||
|
|
||||||
if event == 'executed' and 'node' in data and 'output' in data:
|
if event == 'executed' and 'node' in data and 'output' in data:
|
||||||
asyncio.create_task(update_run_with_output(prompt_id, data.get('output'), node_id=data.get('node')))
|
await update_run_with_output(prompt_id, data.get('output'), node_id=data.get('node'))
|
||||||
# await update_run_with_output(prompt_id, data.get('output'), node_id=data.get('node'))
|
# await update_run_with_output(prompt_id, data.get('output'), node_id=data.get('node'))
|
||||||
# update_run_with_output(prompt_id, data.get('output'))
|
# update_run_with_output(prompt_id, data.get('output'))
|
||||||
|
|
||||||
@ -329,6 +328,25 @@ def is_prompt_done(prompt_id):
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# Use to handle upload error and send back to ComfyDeploy
|
||||||
|
async def handle_error(prompt_id, data, e: Exception):
|
||||||
|
error_type = type(e).__name__
|
||||||
|
stack_trace = traceback.format_exc().strip()
|
||||||
|
body = {
|
||||||
|
"run_id": prompt_id,
|
||||||
|
"output_data": {
|
||||||
|
"error": {
|
||||||
|
"type": error_type,
|
||||||
|
"message": str(e),
|
||||||
|
"stack_trace": stack_trace
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await update_file_status(prompt_id, data, False, have_error=True)
|
||||||
|
print(body)
|
||||||
|
print(f"Error occurred while uploading file: {e}")
|
||||||
|
|
||||||
|
# Mark the current prompt requires upload, and block it from being marked as success
|
||||||
async def update_file_status(prompt_id, data, uploading, have_error=False, node_id=None):
|
async def update_file_status(prompt_id, data, uploading, have_error=False, node_id=None):
|
||||||
if 'uploading_nodes' not in prompt_metadata[prompt_id]:
|
if 'uploading_nodes' not in prompt_metadata[prompt_id]:
|
||||||
prompt_metadata[prompt_id]['uploading_nodes'] = set()
|
prompt_metadata[prompt_id]['uploading_nodes'] = set()
|
||||||
@ -366,6 +384,26 @@ async def update_file_status(prompt_id, data, uploading, have_error=False, node_
|
|||||||
"prompt_id": prompt_id,
|
"prompt_id": prompt_id,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
# Upload files in the background
|
||||||
|
async def upload_in_background(prompt_id, data, node_id=None, have_upload=True):
|
||||||
|
try:
|
||||||
|
images = data.get('images', [])
|
||||||
|
for image in images:
|
||||||
|
await upload_file(prompt_id, image.get("filename"), subfolder=image.get("subfolder"), type=image.get("type"), content_type=image.get("content_type", "image/png"))
|
||||||
|
|
||||||
|
files = data.get('files', [])
|
||||||
|
for file in files:
|
||||||
|
await upload_file(prompt_id, file.get("filename"), subfolder=file.get("subfolder"), type=file.get("type"), content_type=file.get("content_type", "image/png"))
|
||||||
|
|
||||||
|
gifs = data.get('gifs', [])
|
||||||
|
for gif in gifs:
|
||||||
|
await upload_file(prompt_id, gif.get("filename"), subfolder=gif.get("subfolder"), type=gif.get("type"), content_type=gif.get("format", "image/gif"))
|
||||||
|
|
||||||
|
if have_upload:
|
||||||
|
await update_file_status(prompt_id, data, False, node_id=node_id)
|
||||||
|
except Exception as e:
|
||||||
|
await handle_error(prompt_id, data, e)
|
||||||
|
|
||||||
async def update_run_with_output(prompt_id, data, node_id=None):
|
async def update_run_with_output(prompt_id, data, node_id=None):
|
||||||
if prompt_id in prompt_metadata:
|
if prompt_id in prompt_metadata:
|
||||||
status_endpoint = prompt_metadata[prompt_id]['status_endpoint']
|
status_endpoint = prompt_metadata[prompt_id]['status_endpoint']
|
||||||
@ -377,43 +415,16 @@ async def update_run_with_output(prompt_id, data, node_id=None):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
have_upload = 'images' in data or 'files' in data or 'gifs' in data
|
have_upload = 'images' in data or 'files' in data or 'gifs' in data
|
||||||
|
|
||||||
print("\nhave_upload", have_upload, node_id)
|
print("\nhave_upload", have_upload, node_id)
|
||||||
|
|
||||||
if have_upload:
|
if have_upload:
|
||||||
await update_file_status(prompt_id, data, True, node_id=node_id)
|
await update_file_status(prompt_id, data, True, node_id=node_id)
|
||||||
|
|
||||||
images = data.get('images', [])
|
asyncio.create_task(upload_in_background(prompt_id, data, node_id=node_id, have_upload=have_upload))
|
||||||
for image in images:
|
|
||||||
await upload_file(prompt_id, image.get("filename"), subfolder=image.get("subfolder"), type=image.get("type"), content_type=image.get("content_type", "image/png"))
|
|
||||||
|
|
||||||
files = data.get('files', [])
|
|
||||||
for file in files:
|
|
||||||
await upload_file(prompt_id, file.get("filename"), subfolder=file.get("subfolder"), type=file.get("type"), content_type=file.get("content_type", "image/png"))
|
|
||||||
|
|
||||||
gifs = data.get('gifs', [])
|
|
||||||
for gif in gifs:
|
|
||||||
await upload_file(prompt_id, file.get("filename"), subfolder=file.get("subfolder"), type=file.get("type"), content_type=file.get("format", "image/gif"))
|
|
||||||
|
|
||||||
if have_upload:
|
|
||||||
await update_file_status(prompt_id, data, False, node_id=node_id)
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
error_type = type(e).__name__
|
await handle_error(prompt_id, data, e)
|
||||||
stack_trace = traceback.format_exc().strip()
|
|
||||||
body = {
|
|
||||||
"run_id": prompt_id,
|
|
||||||
"output_data": {
|
|
||||||
"error": {
|
|
||||||
"type": error_type,
|
|
||||||
"message": str(e),
|
|
||||||
"stack_trace": stack_trace
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await update_file_status(prompt_id, data, False, have_error=True)
|
|
||||||
print(body)
|
|
||||||
print(f"Error occurred while uploading file: {e}")
|
|
||||||
|
|
||||||
requests.post(status_endpoint, json=body)
|
requests.post(status_endpoint, json=body)
|
||||||
|
|
||||||
|
@ -23,7 +23,9 @@ export async function RunOutputs({ run_id }: { run_id: string }) {
|
|||||||
<TableBody>
|
<TableBody>
|
||||||
{outputs?.map((run) => {
|
{outputs?.map((run) => {
|
||||||
const fileName =
|
const fileName =
|
||||||
run.data.images?.[0].filename || run.data.files?.[0].filename;
|
run.data.images?.[0].filename ||
|
||||||
|
run.data.files?.[0].filename ||
|
||||||
|
run.data.gifs?.[0].filename;
|
||||||
|
|
||||||
if (!fileName)
|
if (!fileName)
|
||||||
return (
|
return (
|
||||||
|
Loading…
x
Reference in New Issue
Block a user