Files
ComfyUI/custom_nodes/ComfyUI-Impact-Pack/tests/wildcards/test_progressive_ondemand.sh
jaidaken f09734b0ee
Some checks failed
Python Linting / Run Ruff (push) Has been cancelled
Python Linting / Run Pylint (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.10, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.11, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.12, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-unix-nightly (12.1, , linux, 3.11, [self-hosted Linux], nightly) (push) Has been cancelled
Execution Tests / test (macos-latest) (push) Has been cancelled
Execution Tests / test (ubuntu-latest) (push) Has been cancelled
Execution Tests / test (windows-latest) (push) Has been cancelled
Test server launches without errors / test (push) Has been cancelled
Unit Tests / test (macos-latest) (push) Has been cancelled
Unit Tests / test (ubuntu-latest) (push) Has been cancelled
Unit Tests / test (windows-2022) (push) Has been cancelled
Add custom nodes, Civitai loras (LFS), and vast.ai setup script
Includes 30 custom nodes committed directly, 7 Civitai-exclusive
loras stored via Git LFS, and a setup script that installs all
dependencies and downloads HuggingFace-hosted models on vast.ai.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 00:56:42 +00:00

271 lines
9.3 KiB
Bash
Executable File

#!/bin/bash
# Progressive On-Demand Wildcard Loading Test
# Verifies that wildcards are loaded progressively as they are accessed
set -e
# Auto-detect paths
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
IMPACT_PACK_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
COMFYUI_DIR="$(cd "$IMPACT_PACK_DIR/../.." && pwd)"
CONFIG_FILE="$IMPACT_PACK_DIR/impact-pack.ini"
BACKUP_CONFIG="$IMPACT_PACK_DIR/impact-pack.ini.backup"
PORT=8195
GREEN='\033[0;32m'
RED='\033[0;31m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'
echo "=========================================="
echo "Progressive On-Demand Loading Test"
echo "=========================================="
echo ""
echo "This test verifies that /wildcards/list/loaded"
echo "increases progressively as wildcards are accessed."
echo ""
# Backup original config
if [ -f "$CONFIG_FILE" ]; then
cp "$CONFIG_FILE" "$BACKUP_CONFIG"
echo "✓ Backed up original config"
fi
# Cleanup function
cleanup() {
echo ""
echo "Cleaning up..."
pkill -f "python.*main.py.*$PORT" 2>/dev/null || true
sleep 2
}
# Setup on-demand mode (low cache limit)
echo "${BLUE}Setting up on-demand mode configuration${NC}"
cat > "$CONFIG_FILE" << EOF
[default]
dependency_version = 24
mmdet_skip = True
sam_editor_cpu = False
sam_editor_model = sam_vit_h_4b8939.pth
custom_wildcards = $IMPACT_PACK_DIR/custom_wildcards
disable_gpu_opencv = True
wildcard_cache_limit_mb = 0.5
EOF
echo "✓ Configuration: on-demand mode (0.5MB limit)"
echo ""
# Start server
cleanup
cd "$COMFYUI_DIR"
echo "Starting ComfyUI server on port $PORT..."
bash run.sh --listen 127.0.0.1 --port $PORT > /tmp/progressive_test.log 2>&1 &
COMFYUI_PID=$!
echo "Waiting for server startup..."
sleep 15
# Check server
if ! curl -s http://127.0.0.1:$PORT/ > /dev/null; then
echo "${RED}✗ Server failed to start${NC}"
cat /tmp/progressive_test.log | grep -i "wildcard\|error" | tail -20
exit 1
fi
echo "${GREEN}✓ Server started${NC}"
echo ""
# Check loading mode from log
MODE_LOG=$(grep -i "wildcard.*mode" /tmp/progressive_test.log | tail -1)
echo "${YELLOW}$MODE_LOG${NC}"
echo ""
# Test Progressive Loading
echo "=========================================="
echo "Progressive Loading Verification"
echo "=========================================="
echo ""
# Step 1: Initial state (no wildcards accessed)
echo "${CYAN}Step 1: Initial state (before any wildcard access)${NC}"
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
LOADED_COUNT=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))" 2>/dev/null || echo "0")
ON_DEMAND=$(echo "$RESPONSE" | python3 -c "import sys, json; print(json.load(sys.stdin).get('on_demand_mode', False))" 2>/dev/null || echo "false")
TOTAL_AVAILABLE=$(echo "$RESPONSE" | python3 -c "import sys, json; print(json.load(sys.stdin).get('total_available', 0))" 2>/dev/null || echo "0")
echo " On-demand mode: $ON_DEMAND"
echo " Total available wildcards: $TOTAL_AVAILABLE"
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT${NC}"
if [ "$ON_DEMAND" != "True" ]; then
echo "${RED}✗ FAIL: On-demand mode not active!${NC}"
exit 1
fi
if [ "$LOADED_COUNT" -ne 0 ]; then
echo "${YELLOW}⚠ WARNING: Expected 0 loaded, got $LOADED_COUNT${NC}"
fi
echo ""
# Step 2: Access first wildcard
echo "${CYAN}Step 2: Access first wildcard (__samples/flower__)${NC}"
RESULT1=$(curl -s http://127.0.0.1:$PORT/impact/wildcards \
-X POST \
-H "Content-Type: application/json" \
-d '{"text": "__samples/flower__", "seed": 42}')
TEXT1=$(echo "$RESULT1" | python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))")
echo " Result: $TEXT1"
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
LOADED_COUNT_1=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))")
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT_1${NC}"
if [ "$LOADED_COUNT_1" -lt 1 ]; then
echo "${RED}✗ FAIL: Expected at least 1 loaded wildcard${NC}"
exit 1
fi
echo "${GREEN}✓ PASS: Wildcard count increased${NC}"
echo ""
# Step 3: Access second wildcard (different from first)
echo "${CYAN}Step 3: Access second wildcard (__dragon__)${NC}"
RESULT2=$(curl -s http://127.0.0.1:$PORT/impact/wildcards \
-X POST \
-H "Content-Type: application/json" \
-d '{"text": "__dragon__", "seed": 200}')
TEXT2=$(echo "$RESULT2" | python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))")
echo " Result: $TEXT2"
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
LOADED_COUNT_2=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))")
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT_2${NC}"
if [ "$LOADED_COUNT_2" -le "$LOADED_COUNT_1" ]; then
echo "${RED}✗ FAIL: Expected loaded count to increase (was $LOADED_COUNT_1, now $LOADED_COUNT_2)${NC}"
exit 1
fi
echo "${GREEN}✓ PASS: Wildcard count increased progressively${NC}"
echo ""
# Step 4: Access third wildcard (YAML)
echo "${CYAN}Step 4: Access third wildcard (__colors__)${NC}"
RESULT3=$(curl -s http://127.0.0.1:$PORT/impact/wildcards \
-X POST \
-H "Content-Type: application/json" \
-d '{"text": "__colors__", "seed": 333}')
TEXT3=$(echo "$RESULT3" | python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))")
echo " Result: $TEXT3"
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
LOADED_COUNT_3=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))")
LOADED_LIST=$(echo "$RESPONSE" | python3 -c "import sys, json; print(', '.join(json.load(sys.stdin)['data'][:10]))")
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT_3${NC}"
echo " Sample loaded: $LOADED_LIST"
if [ "$LOADED_COUNT_3" -le "$LOADED_COUNT_2" ]; then
echo "${RED}✗ FAIL: Expected loaded count to increase (was $LOADED_COUNT_2, now $LOADED_COUNT_3)${NC}"
exit 1
fi
echo "${GREEN}✓ PASS: Wildcard count increased progressively${NC}"
echo ""
# Step 5: Re-access first wildcard (should not increase count)
echo "${CYAN}Step 5: Re-access first wildcard (cached)${NC}"
RESULT4=$(curl -s http://127.0.0.1:$PORT/impact/wildcards \
-X POST \
-H "Content-Type: application/json" \
-d '{"text": "__samples/flower__", "seed": 42}')
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
LOADED_COUNT_4=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))")
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT_4${NC}"
if [ "$LOADED_COUNT_4" -ne "$LOADED_COUNT_3" ]; then
echo "${YELLOW}⚠ WARNING: Count changed on cache access (was $LOADED_COUNT_3, now $LOADED_COUNT_4)${NC}"
else
echo "${GREEN}✓ PASS: Cached access did not change count${NC}"
fi
echo ""
# Step 6: Deep transitive wildcard (should load multiple wildcards)
echo "${CYAN}Step 6: Deep transitive wildcard (__adnd__)${NC}"
RESULT5=$(curl -s http://127.0.0.1:$PORT/impact/wildcards \
-X POST \
-H "Content-Type: application/json" \
-d '{"text": "__adnd__ creature", "seed": 222}')
TEXT5=$(echo "$RESULT5" | python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))")
echo " Result: $TEXT5"
RESPONSE=$(curl -s http://127.0.0.1:$PORT/impact/wildcards/list/loaded)
LOADED_COUNT_5=$(echo "$RESPONSE" | python3 -c "import sys, json; print(len(json.load(sys.stdin)['data']))")
echo " Loaded wildcards: ${YELLOW}$LOADED_COUNT_5${NC}"
if [ "$LOADED_COUNT_5" -le "$LOADED_COUNT_4" ]; then
echo "${YELLOW}⚠ Transitive wildcards may already be loaded${NC}"
else
echo "${GREEN}✓ PASS: Transitive wildcards loaded progressively${NC}"
fi
echo ""
# Summary
echo "=========================================="
echo "Progressive Loading Summary"
echo "=========================================="
echo ""
echo "Total available wildcards: $TOTAL_AVAILABLE"
echo "Loading progression:"
echo " Initial: $LOADED_COUNT"
echo " After step 2: $LOADED_COUNT_1 (+$(($LOADED_COUNT_1 - $LOADED_COUNT)))"
echo " After step 3: $LOADED_COUNT_2 (+$(($LOADED_COUNT_2 - $LOADED_COUNT_1)))"
echo " After step 4: $LOADED_COUNT_3 (+$(($LOADED_COUNT_3 - $LOADED_COUNT_2)))"
echo " After step 5: $LOADED_COUNT_4 (cache, no change)"
echo " After step 6: $LOADED_COUNT_5 (+$(($LOADED_COUNT_5 - $LOADED_COUNT_4)))"
echo ""
# Validation
ALL_PASSED=true
if [ "$LOADED_COUNT_1" -le "$LOADED_COUNT" ]; then
echo "${RED}✗ FAIL: Step 2 did not increase count${NC}"
ALL_PASSED=false
fi
if [ "$LOADED_COUNT_2" -le "$LOADED_COUNT_1" ]; then
echo "${RED}✗ FAIL: Step 3 did not increase count${NC}"
ALL_PASSED=false
fi
if [ "$LOADED_COUNT_3" -le "$LOADED_COUNT_2" ]; then
echo "${RED}✗ FAIL: Step 4 did not increase count${NC}"
ALL_PASSED=false
fi
if [ "$ALL_PASSED" = true ]; then
echo "${GREEN}🎉 ALL TESTS PASSED${NC}"
echo "${GREEN}Progressive on-demand loading verified successfully!${NC}"
EXIT_CODE=0
else
echo "${RED}❌ TESTS FAILED${NC}"
echo "${RED}Progressive loading did not work as expected!${NC}"
EXIT_CODE=1
fi
echo ""
# Restore config
cleanup
if [ -f "$BACKUP_CONFIG" ]; then
mv "$BACKUP_CONFIG" "$CONFIG_FILE"
echo "✓ Restored original config"
fi
echo ""
echo "=========================================="
echo "Test Complete"
echo "=========================================="
echo "Log saved to: /tmp/progressive_test.log"
echo ""
exit $EXIT_CODE