From 0fa8040251298b5a1e1272bca9874259240f45cb Mon Sep 17 00:00:00 2001 From: William Gill Date: Sun, 19 Apr 2026 15:39:23 -0500 Subject: [PATCH] Eliminate first-inpaint timeout: preseed SAM/GroundingDINO + 600s default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two changes to address the timeout-and-retry loop the user hit on the first edit_image call: 1. comfyui-init-models.sh now fetches the three weights inpaint needs into /models/sams and /models/grounding-dino: - sam_hq_vit_h.pth (~2.5 GB) - groundingdino_swint_ogc.pth (~700 MB) - GroundingDINO_SwinT_OGC.cfg.py (~1 KB) Without preseeding these auto-download on first inpaint, which takes minutes and times out the tool call. The mkdir line gets the new subdirs added too. 2. Tool TIMEOUT_SECONDS valve default bumped 240s → 600s as defense-in-depth — even with weights preseeded, BERT-base auto-downloads via transformers on first GroundingDINO load (~30s) and a slow KSampler on a contended GPU can push past 4 minutes occasionally. Steady-state runs still finish in under a minute; the valve only matters for first-call latency. After comfyui-model-init re-runs (`docker compose up -d comfyui-model-init`), first inpaint should be near-instant. Co-Authored-By: Claude Opus 4.7 (1M context) --- deployments/ai-stack/comfyui-init-models.sh | 18 +++++++++++++++++- .../openwebui-tools/smart_image_gen.py | 13 ++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/deployments/ai-stack/comfyui-init-models.sh b/deployments/ai-stack/comfyui-init-models.sh index 5b982f2..c4696d3 100644 --- a/deployments/ai-stack/comfyui-init-models.sh +++ b/deployments/ai-stack/comfyui-init-models.sh @@ -14,7 +14,8 @@ set -e apk add --no-cache curl >/dev/null mkdir -p /models/checkpoints /models/vae /models/loras /models/controlnet \ - /models/clip /models/clip_vision /models/upscale_models /models/embeddings + /models/clip /models/clip_vision /models/upscale_models /models/embeddings \ + /models/sams /models/grounding-dino fetch() { dest="$1"; name="$2"; url="$3" @@ -65,4 +66,19 @@ fetch() { # fetch upscale_models 4x-UltraSharp.pth \ # https://huggingface.co/lokCX/4x-Ultrasharp/resolve/main/4x-UltraSharp.pth +# ─── Inpainting models (SAM-HQ + GroundingDINO) ───────────────────────────── +# Required by the smart_image_gen Tool's edit_image with mask_text. ComfyUI +# would auto-download these on first use, but that takes minutes and tends +# to time out in-flight tool calls — preseeding here makes the first inpaint +# instant. + +fetch sams sam_hq_vit_h.pth \ + https://huggingface.co/lkeab/hq-sam/resolve/main/sam_hq_vit_h.pth + +fetch grounding-dino groundingdino_swint_ogc.pth \ + https://huggingface.co/ShilongLiu/GroundingDINO/resolve/main/groundingdino_swint_ogc.pth + +fetch grounding-dino GroundingDINO_SwinT_OGC.cfg.py \ + https://huggingface.co/ShilongLiu/GroundingDINO/resolve/main/GroundingDINO_SwinT_OGC.cfg.py + echo "Done." diff --git a/deployments/ai-stack/openwebui-tools/smart_image_gen.py b/deployments/ai-stack/openwebui-tools/smart_image_gen.py index 1fee85a..681edf8 100644 --- a/deployments/ai-stack/openwebui-tools/smart_image_gen.py +++ b/deployments/ai-stack/openwebui-tools/smart_image_gen.py @@ -1,7 +1,7 @@ """ title: Smart Image Generator & Editor (ComfyUI) author: ai-stack -version: 0.7.3 +version: 0.7.4 description: Generate or edit images via ComfyUI with automatic SDXL checkpoint routing. Two methods — generate_image (txt2img) and edit_image (img2img on the user's most recently attached image). The @@ -684,8 +684,15 @@ class Tools: description="ComfyUI server URL reachable from the open-webui container.", ) TIMEOUT_SECONDS: int = Field( - default=240, - description="Maximum wait for a single generation to complete.", + default=600, + description=( + "Maximum wait for a single generation to complete. " + "Default 10 minutes — long enough to absorb a first-time " + "inpaint where SAM-HQ + GroundingDINO + BERT auto-download " + "(~3 GB). Steady-state runs finish in well under a minute; " + "if your KSampler routinely takes longer than that, lower " + "the per-style steps in STYLES." + ), ) def __init__(self):