Browse Source

Merge pull request #4448 from JohnTheNerd/comfyui-async-fix

fix: ComfyUI generation no longer causes FastAPI to stall for all users
Timothy Jaeryang Baek 9 months ago
parent
commit
a7063a598d
2 changed files with 4 additions and 3 deletions
  1. 1 1
      backend/apps/images/main.py
  2. 3 2
      backend/apps/images/utils/comfyui.py

+ 1 - 1
backend/apps/images/main.py

@@ -514,7 +514,7 @@ async def image_generations(
 
 
             data = ImageGenerationPayload(**data)
             data = ImageGenerationPayload(**data)
 
 
-            res = comfyui_generate_image(
+            res = await comfyui_generate_image(
                 app.state.config.MODEL,
                 app.state.config.MODEL,
                 data,
                 data,
                 user.id,
                 user.id,

+ 3 - 2
backend/apps/images/utils/comfyui.py

@@ -1,3 +1,4 @@
+import asyncio
 import websocket  # NOTE: websocket-client (https://github.com/websocket-client/websocket-client)
 import websocket  # NOTE: websocket-client (https://github.com/websocket-client/websocket-client)
 import uuid
 import uuid
 import json
 import json
@@ -328,7 +329,7 @@ class ImageGenerationPayload(BaseModel):
     flux_fp8_clip: Optional[bool] = None
     flux_fp8_clip: Optional[bool] = None
 
 
 
 
-def comfyui_generate_image(
+async def comfyui_generate_image(
     model: str, payload: ImageGenerationPayload, client_id, base_url
     model: str, payload: ImageGenerationPayload, client_id, base_url
 ):
 ):
     ws_url = base_url.replace("http://", "ws://").replace("https://", "wss://")
     ws_url = base_url.replace("http://", "ws://").replace("https://", "wss://")
@@ -397,7 +398,7 @@ def comfyui_generate_image(
         return None
         return None
 
 
     try:
     try:
-        images = get_images(ws, comfyui_prompt, client_id, base_url)
+        images = await asyncio.to_thread(get_images, ws, comfyui_prompt, client_id, base_url)
     except Exception as e:
     except Exception as e:
         log.exception(f"Error while receiving images: {e}")
         log.exception(f"Error while receiving images: {e}")
         images = None
         images = None