Wire GPU-aware image gen into setup: auto-install, precision, ComfyUI
Previously display-only: IMG_TIER/IMG_MODELS were detected but never used. Now they drive actual behavior: - Both setup scripts call setup-image-models.sh --auto after model pulls, installing the right SD/SDXL/Flux model for the detected GPU - INVOKEAI_PRECISION is now GPU-aware: bfloat16 for Ampere+ (compute 8.0+), float16 for Pascal+, auto fallback for older cards. Was hardcoded to float16. - local-ai-setup.sh now includes ComfyUI service + Open WebUI integration (ENABLE_IMAGE_GENERATION=true, COMFYUI_BASE_URL) — was completely missing, only laptop_full_setup.sh had it - Added ComfyUI port 8188 to UFW firewall rules in local-ai-setup.sh - Added comfyui-data/comfyui-output directories to mkdir loop - Updated start.sh and final output to show ComfyUI URL https://claude.ai/code/session_01PtYTPherSJaxDEVPgF6Nxu
This commit is contained in:
+29
-1
@@ -105,6 +105,19 @@ else
|
|||||||
IMG_DEFAULT=""
|
IMG_DEFAULT=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ── InvokeAI precision (GPU-aware) ───────────────────────────────────────────
|
||||||
|
# Ampere+ (compute 8.0+) supports bfloat16 natively for better precision.
|
||||||
|
# All modern NVIDIA GPUs support float16. Fall back to auto if unsure.
|
||||||
|
GPU_COMPUTE=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader 2>/dev/null \
|
||||||
|
| head -1 | tr -d '.' || echo "0")
|
||||||
|
if [[ "$GPU_COMPUTE" -ge 80 ]]; then
|
||||||
|
INVOKEAI_PRECISION="bfloat16" # Ampere+ (RTX 30xx/40xx/50xx, A-series, H100)
|
||||||
|
elif [[ "$GPU_COMPUTE" -ge 60 ]]; then
|
||||||
|
INVOKEAI_PRECISION="float16" # Pascal+ (GTX 10xx, RTX 20xx, Tesla P40/V100)
|
||||||
|
else
|
||||||
|
INVOKEAI_PRECISION="auto" # Let InvokeAI decide
|
||||||
|
fi
|
||||||
|
|
||||||
# ── new vs update ─────────────────────────────────────────────────────────────
|
# ── new vs update ─────────────────────────────────────────────────────────────
|
||||||
IS_UPDATE=false
|
IS_UPDATE=false
|
||||||
[[ -f "$BASE/docker-compose.yml" ]] && IS_UPDATE=true
|
[[ -f "$BASE/docker-compose.yml" ]] && IS_UPDATE=true
|
||||||
@@ -1179,7 +1192,7 @@ IMGENV
|
|||||||
environment:
|
environment:
|
||||||
- INVOKEAI_HOST=0.0.0.0
|
- INVOKEAI_HOST=0.0.0.0
|
||||||
- INVOKEAI_PORT=9090
|
- INVOKEAI_PORT=9090
|
||||||
- INVOKEAI_PRECISION=float16
|
- INVOKEAI_PRECISION=$INVOKEAI_PRECISION
|
||||||
deploy:
|
deploy:
|
||||||
resources:
|
resources:
|
||||||
reservations:
|
reservations:
|
||||||
@@ -1470,6 +1483,21 @@ elif $INSTALL_AI; then
|
|||||||
info "Skipping model pull — run later: bash $BASE/pull-models.sh"
|
info "Skipping model pull — run later: bash $BASE/pull-models.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ── Install image generation base model (GPU-aware) ──────────────────────────
|
||||||
|
if $INSTALL_AI && ($SVC_INVOKEAI || $SVC_COMFYUI) && $PULL_MODELS; then
|
||||||
|
section "Image Generation Models"
|
||||||
|
info "GPU: ${TOTAL_VRAM}GB VRAM → $IMG_TIER"
|
||||||
|
if [[ -n "$IMG_DEFAULT" ]]; then
|
||||||
|
info "Auto-installing recommended model: $IMG_DEFAULT"
|
||||||
|
info "Supported on your GPU: $IMG_MODELS"
|
||||||
|
bash "$SCRIPT_DIR/setup-image-models.sh" --auto
|
||||||
|
else
|
||||||
|
warn "Not enough VRAM for image generation models (need at least 4GB)"
|
||||||
|
fi
|
||||||
|
elif $INSTALL_AI && ($SVC_INVOKEAI || $SVC_COMFYUI); then
|
||||||
|
info "Skipping image model install — run later: bash $SCRIPT_DIR/setup-image-models.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
# ── Start ZIM downloads (answer was captured upfront) ────────────────────────
|
# ── Start ZIM downloads (answer was captured upfront) ────────────────────────
|
||||||
if $SVC_KIWIX && [[ "$ZIM_CHOICE" != "3" ]]; then
|
if $SVC_KIWIX && [[ "$ZIM_CHOICE" != "3" ]]; then
|
||||||
section "Starting ZIM Downloads"
|
section "Starting ZIM Downloads"
|
||||||
|
|||||||
+50
-5
@@ -80,6 +80,17 @@ else
|
|||||||
IMG_DEFAULT=""
|
IMG_DEFAULT=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ── InvokeAI precision (GPU-aware) ───────────────────────────────────────────
|
||||||
|
GPU_COMPUTE=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader 2>/dev/null \
|
||||||
|
| head -1 | tr -d '.' || echo "0")
|
||||||
|
if [[ "$GPU_COMPUTE" -ge 80 ]]; then
|
||||||
|
INVOKEAI_PRECISION="bfloat16" # Ampere+ (RTX 30xx/40xx/50xx, A-series)
|
||||||
|
elif [[ "$GPU_COMPUTE" -ge 60 ]]; then
|
||||||
|
INVOKEAI_PRECISION="float16" # Pascal+ (GTX 10xx, RTX 20xx, Tesla P40/V100)
|
||||||
|
else
|
||||||
|
INVOKEAI_PRECISION="auto" # Let InvokeAI decide
|
||||||
|
fi
|
||||||
|
|
||||||
section "Local AI Stack — $($IS_UPDATE && echo UPDATE || echo NEW INSTALL)"
|
section "Local AI Stack — $($IS_UPDATE && echo UPDATE || echo NEW INSTALL)"
|
||||||
info "Base : $BASE"
|
info "Base : $BASE"
|
||||||
info "IP : $LOCAL_IP"
|
info "IP : $LOCAL_IP"
|
||||||
@@ -124,7 +135,7 @@ fi
|
|||||||
|
|
||||||
# ── directories ───────────────────────────────────────────────────────────────
|
# ── directories ───────────────────────────────────────────────────────────────
|
||||||
section "Directories"
|
section "Directories"
|
||||||
for d in papers repos workspace index invokeai-data invokeai-outputs kiwix gitea portainer-data logs; do
|
for d in papers repos workspace index invokeai-data invokeai-outputs comfyui-data comfyui-output kiwix gitea portainer-data logs; do
|
||||||
mkdir -p "$BASE/$d"
|
mkdir -p "$BASE/$d"
|
||||||
done
|
done
|
||||||
ok "Ready under $BASE"
|
ok "Ready under $BASE"
|
||||||
@@ -602,6 +613,9 @@ services:
|
|||||||
- WEBUI_AUTH=true
|
- WEBUI_AUTH=true
|
||||||
- ENABLE_RAG_WEB_SEARCH=true
|
- ENABLE_RAG_WEB_SEARCH=true
|
||||||
- RAG_WEB_SEARCH_ENGINE=duckduckgo
|
- RAG_WEB_SEARCH_ENGINE=duckduckgo
|
||||||
|
- ENABLE_IMAGE_GENERATION=true
|
||||||
|
- IMAGE_GENERATION_ENGINE=comfyui
|
||||||
|
- COMFYUI_BASE_URL=http://comfyui:8188
|
||||||
depends_on:
|
depends_on:
|
||||||
ollama: {condition: service_healthy}
|
ollama: {condition: service_healthy}
|
||||||
|
|
||||||
@@ -726,7 +740,26 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- INVOKEAI_HOST=0.0.0.0
|
- INVOKEAI_HOST=0.0.0.0
|
||||||
- INVOKEAI_PORT=9090
|
- INVOKEAI_PORT=9090
|
||||||
- INVOKEAI_PRECISION=float16
|
- INVOKEAI_PRECISION=$INVOKEAI_PRECISION
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: all
|
||||||
|
capabilities: [gpu]
|
||||||
|
|
||||||
|
comfyui:
|
||||||
|
image: ghcr.io/ai-dock/comfyui:latest
|
||||||
|
container_name: comfyui
|
||||||
|
restart: unless-stopped
|
||||||
|
ports: ["0.0.0.0:8188:8188"]
|
||||||
|
volumes:
|
||||||
|
- comfyui-models:/opt/ComfyUI/models
|
||||||
|
- $BASE/comfyui-output:/opt/ComfyUI/output
|
||||||
|
- $BASE/comfyui-data:/opt/ComfyUI/custom_nodes
|
||||||
|
environment:
|
||||||
|
- CLI_ARGS=--listen 0.0.0.0
|
||||||
deploy:
|
deploy:
|
||||||
resources:
|
resources:
|
||||||
reservations:
|
reservations:
|
||||||
@@ -748,6 +781,7 @@ volumes:
|
|||||||
ollama-models:
|
ollama-models:
|
||||||
open-webui-data:
|
open-webui-data:
|
||||||
invokeai-models:
|
invokeai-models:
|
||||||
|
comfyui-models:
|
||||||
COMPOSE
|
COMPOSE
|
||||||
ok "docker-compose.yml"
|
ok "docker-compose.yml"
|
||||||
|
|
||||||
@@ -759,7 +793,7 @@ if command -v ufw &>/dev/null && [[ ! -f "$BASE/.ufw-done" ]] || $FORCE; then
|
|||||||
[[ "$LAN" =~ /[0-9]+$ ]] || LAN="${LAN}/24"
|
[[ "$LAN" =~ /[0-9]+$ ]] || LAN="${LAN}/24"
|
||||||
for pc in "3000:Open WebUI" "11434:Ollama" "8001:RAG" "8002:MCP" \
|
for pc in "3000:Open WebUI" "11434:Ollama" "8001:RAG" "8002:MCP" \
|
||||||
"8000:ChromaDB" "8080:Aider" "8181:Kiwix" \
|
"8000:ChromaDB" "8080:Aider" "8181:Kiwix" \
|
||||||
"3001:Gitea" "2222:Gitea SSH" "9090:InvokeAI" \
|
"3001:Gitea" "2222:Gitea SSH" "9090:InvokeAI" "8188:ComfyUI" \
|
||||||
"9000:Portainer" "9443:Portainer S"; do
|
"9000:Portainer" "9443:Portainer S"; do
|
||||||
sudo ufw allow from "$LAN" to any port "${pc%%:*}" proto tcp comment "${pc##*:}" >/dev/null
|
sudo ufw allow from "$LAN" to any port "${pc%%:*}" proto tcp comment "${pc##*:}" >/dev/null
|
||||||
done
|
done
|
||||||
@@ -777,7 +811,8 @@ docker compose up -d
|
|||||||
echo ""
|
echo ""
|
||||||
echo " Open WebUI → http://$LOCAL_IP:3000"
|
echo " Open WebUI → http://$LOCAL_IP:3000"
|
||||||
echo " Aider UI → http://$LOCAL_IP:8080 (Claude Code-like editor)"
|
echo " Aider UI → http://$LOCAL_IP:8080 (Claude Code-like editor)"
|
||||||
echo " InvokeAI → http://$LOCAL_IP:9090"
|
echo " InvokeAI → http://$LOCAL_IP:9090 (inpainting, img2img)"
|
||||||
|
echo " ComfyUI → http://$LOCAL_IP:8188 (chat-integrated image gen)"
|
||||||
echo " Kiwix → http://$LOCAL_IP:8181 (run kiwix_download.sh first)"
|
echo " Kiwix → http://$LOCAL_IP:8181 (run kiwix_download.sh first)"
|
||||||
echo " Gitea → http://$LOCAL_IP:3001"
|
echo " Gitea → http://$LOCAL_IP:3001"
|
||||||
echo " RAG → http://$LOCAL_IP:8001/health"
|
echo " RAG → http://$LOCAL_IP:8001/health"
|
||||||
@@ -900,6 +935,15 @@ if ! $IS_UPDATE && ! $NO_PULL; then
|
|||||||
echo ""
|
echo ""
|
||||||
read -rp "Pull Ollama models now? (~15-30 min) [Y/n]: " DO_PULL
|
read -rp "Pull Ollama models now? (~15-30 min) [Y/n]: " DO_PULL
|
||||||
[[ "${DO_PULL,,}" != "n" ]] && bash "$BASE/pull-models.sh"
|
[[ "${DO_PULL,,}" != "n" ]] && bash "$BASE/pull-models.sh"
|
||||||
|
|
||||||
|
# Install image generation base model (GPU-aware)
|
||||||
|
if [[ -n "$IMG_DEFAULT" ]] && [[ -x "$SCRIPT_DIR/setup-image-models.sh" ]]; then
|
||||||
|
echo ""
|
||||||
|
section "Image Generation Models"
|
||||||
|
info "GPU: ${TOTAL_VRAM}GB VRAM → $IMG_TIER"
|
||||||
|
info "Auto-installing recommended model: $IMG_DEFAULT"
|
||||||
|
bash "$SCRIPT_DIR/setup-image-models.sh" --auto
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
@@ -911,7 +955,8 @@ echo -e "${GREEN}${BOLD}━━━━━━━━━━━━━━━━━━
|
|||||||
echo ""
|
echo ""
|
||||||
echo -e " ${CYAN}Open WebUI${NC} → http://$LOCAL_IP:3000"
|
echo -e " ${CYAN}Open WebUI${NC} → http://$LOCAL_IP:3000"
|
||||||
echo -e " ${CYAN}Aider UI${NC} → http://$LOCAL_IP:8080 (browser coding assistant)"
|
echo -e " ${CYAN}Aider UI${NC} → http://$LOCAL_IP:8080 (browser coding assistant)"
|
||||||
echo -e " ${CYAN}InvokeAI${NC} → http://$LOCAL_IP:9090"
|
echo -e " ${CYAN}InvokeAI${NC} → http://$LOCAL_IP:9090 (inpainting, img2img)"
|
||||||
|
echo -e " ${CYAN}ComfyUI${NC} → http://$LOCAL_IP:8188 (chat-integrated image gen)"
|
||||||
echo -e " ${CYAN}Kiwix${NC} → http://$LOCAL_IP:8181"
|
echo -e " ${CYAN}Kiwix${NC} → http://$LOCAL_IP:8181"
|
||||||
echo -e " ${CYAN}Gitea${NC} → http://$LOCAL_IP:3001"
|
echo -e " ${CYAN}Gitea${NC} → http://$LOCAL_IP:3001"
|
||||||
echo -e " ${CYAN}RAG${NC} → http://$LOCAL_IP:8001/health"
|
echo -e " ${CYAN}RAG${NC} → http://$LOCAL_IP:8001/health"
|
||||||
|
|||||||
Reference in New Issue
Block a user