#!/bin/bash # Test image generation via ComfyUI API # Workflow: Z-Image Turbo GGUF + Gemma2 CLIP + AE VAE API="http://127.0.0.1:8188" echo "=== Checking ComfyUI API ===" curl -s "$API/system_stats" | python3.11 -m json.tool 2>/dev/null | head -20 echo "" echo "=== Listing available models ===" curl -s "$API/models/unet" 2>/dev/null echo "" curl -s "$API/models/clip" 2>/dev/null echo "" curl -s "$API/models/vae" 2>/dev/null echo "" echo "=== Queueing image generation ===" WORKFLOW='{ "prompt": { "1": { "class_type": "UNETLoader", "inputs": { "unet_name": "z_image_turbo-Q5_K_S.gguf", "weight_dtype": "default" } }, "2": { "class_type": "DualCLIPLoader", "inputs": { "clip_name1": "gemma2_2b_lumina2.safetensors", "clip_name2": "gemma2_2b_lumina2.safetensors", "type": "lumina2" } }, "3": { "class_type": "CLIPTextEncode", "inputs": { "text": "a beautiful mountain landscape at sunset, golden light, detailed, 4k", "clip": ["2", 0] } }, "4": { "class_type": "CLIPTextEncode", "inputs": { "text": "blurry, ugly, distorted", "clip": ["2", 0] } }, "5": { "class_type": "EmptyLatentImage", "inputs": { "width": 512, "height": 512, "batch_size": 1 } }, "6": { "class_type": "KSampler", "inputs": { "model": ["1", 0], "positive": ["3", 0], "negative": ["4", 0], "latent_image": ["5", 0], "seed": 42, "steps": 8, "cfg": 3.0, "sampler_name": "euler", "scheduler": "normal", "denoise": 1.0 } }, "7": { "class_type": "VAELoader", "inputs": { "vae_name": "ae.safetensors" } }, "8": { "class_type": "VAEDecode", "inputs": { "samples": ["6", 0], "vae": ["7", 0] } }, "9": { "class_type": "SaveImage", "inputs": { "images": ["8", 0], "filename_prefix": "bc250_test" } } } }' RESPONSE=$(curl -s -X POST "$API/prompt" -H "Content-Type: application/json" -d "$WORKFLOW") echo "Queue response: $RESPONSE" PROMPT_ID=$(echo "$RESPONSE" | python3.11 -c "import sys,json; print(json.load(sys.stdin).get('prompt_id','NONE'))" 2>/dev/null) echo "Prompt ID: $PROMPT_ID" if [ "$PROMPT_ID" = "NONE" ] || [ -z "$PROMPT_ID" ]; then echo "ERROR: Failed to queue prompt!" exit 1 fi echo "" echo "=== Waiting for generation ===" for i in $(seq 1 60); do sleep 5 STATUS=$(curl -s "$API/history/$PROMPT_ID" 2>/dev/null) HAS_OUTPUT=$(echo "$STATUS" | python3.11 -c " import sys, json data = json.load(sys.stdin) if '$PROMPT_ID' in data: outputs = data['$PROMPT_ID'].get('outputs', {}) if '9' in outputs: images = outputs['9'].get('images', []) if images: print('DONE:' + images[0].get('filename', 'unknown')) else: print('PROCESSING') else: print('PROCESSING') else: print('WAITING') " 2>/dev/null) echo "[$((i*5))s] $HAS_OUTPUT" if [[ "$HAS_OUTPUT" == DONE:* ]]; then FILENAME=${HAS_OUTPUT#DONE:} echo "" echo "=== SUCCESS ===" echo "Image generated: $FILENAME" echo "File location: /home/fabian/ComfyUI/output/$FILENAME" ls -lh "/home/fabian/ComfyUI/output/$FILENAME" 2>/dev/null exit 0 fi done echo "TIMEOUT: Generation did not complete in 5 minutes" echo "=== Checking queue ===" curl -s "$API/queue" | python3.11 -m json.tool 2>/dev/null | head -20