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
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>
328 lines
8.6 KiB
Bash
328 lines
8.6 KiB
Bash
#!/bin/bash
|
|
# Sequential Multi-Stage Wildcard Loading Test
|
|
# Tests transitive wildcards that load in multiple sequential stages
|
|
|
|
# Auto-detect paths
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
IMPACT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
PORT=8193
|
|
CONFIG_FILE="$IMPACT_DIR/impact-pack.ini"
|
|
|
|
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 "Sequential Multi-Stage Wildcard Loading Test"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Setup config for full cache mode
|
|
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_DIR/custom_wildcards
|
|
disable_gpu_opencv = True
|
|
wildcard_cache_limit_mb = 50
|
|
EOF
|
|
|
|
echo "Mode: Full cache mode (50MB limit)"
|
|
echo ""
|
|
|
|
# Kill existing servers
|
|
pkill -9 -f "python.*main.py" 2>/dev/null || true
|
|
sleep 3
|
|
|
|
# Start server
|
|
COMFYUI_DIR="$(cd "$IMPACT_DIR/../.." && pwd)"
|
|
cd "$COMFYUI_DIR"
|
|
echo "Starting ComfyUI server on port $PORT..."
|
|
bash run.sh --listen 127.0.0.1 --port $PORT > /tmp/sequential_test.log 2>&1 &
|
|
SERVER_PID=$!
|
|
|
|
# Wait for server
|
|
echo "Waiting 70 seconds for server startup..."
|
|
for i in {1..70}; do
|
|
sleep 1
|
|
if [ $((i % 10)) -eq 0 ]; then
|
|
echo " ... $i seconds"
|
|
fi
|
|
done
|
|
|
|
# Check server
|
|
if ! curl -s http://127.0.0.1:$PORT/ > /dev/null; then
|
|
echo "${RED}✗ Server failed to start${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "${GREEN}✓ Server started${NC}"
|
|
echo ""
|
|
|
|
# Test function with stage visualization
|
|
test_sequential() {
|
|
local TEST_NUM=$1
|
|
local RAW_PROMPT=$2
|
|
local SEED=$3
|
|
local DESCRIPTION=$4
|
|
local EXPECTED_STAGES=$5 # Number of expected expansion stages
|
|
|
|
echo "${BLUE}=== Test $TEST_NUM: $DESCRIPTION ===${NC}"
|
|
echo "Raw prompt: ${YELLOW}$RAW_PROMPT${NC}"
|
|
echo "Seed: $SEED"
|
|
echo "Expected stages: $EXPECTED_STAGES"
|
|
echo ""
|
|
|
|
# Test the prompt
|
|
RESULT=$(curl -s -X POST http://127.0.0.1:$PORT/impact/wildcards \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"text\": \"$RAW_PROMPT\", \"seed\": $SEED}" | \
|
|
python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))" 2>/dev/null || echo "ERROR")
|
|
|
|
echo "${CYAN}Stage Analysis:${NC}"
|
|
echo " Stage 0 (Input): $RAW_PROMPT"
|
|
|
|
# Check if result contains any wildcards (incomplete expansion)
|
|
if echo "$RESULT" | grep -q "__.*__"; then
|
|
echo " ${YELLOW}⚠ Result still contains wildcards (incomplete expansion)${NC}"
|
|
echo " Final Result: $RESULT"
|
|
else
|
|
echo " ${GREEN}✓ All wildcards fully expanded${NC}"
|
|
fi
|
|
|
|
echo " Final Output: ${GREEN}$RESULT${NC}"
|
|
echo ""
|
|
|
|
# Validate result
|
|
if [ "$RESULT" != "ERROR" ] && [ "$RESULT" != "" ]; then
|
|
# Check if result still has wildcards (shouldn't have)
|
|
if echo "$RESULT" | grep -q "__.*__"; then
|
|
echo "Status: ${YELLOW}⚠ PARTIAL - Wildcards remain${NC}"
|
|
else
|
|
echo "Status: ${GREEN}✅ SUCCESS - Complete expansion${NC}"
|
|
fi
|
|
else
|
|
echo "Status: ${RED}❌ FAILED - Error or empty result${NC}"
|
|
fi
|
|
echo ""
|
|
}
|
|
|
|
echo "=========================================="
|
|
echo "Sequential Loading Test Suite"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
echo "${CYAN}Test Category 1: Depth Verification${NC}"
|
|
echo "Testing different transitive depths with stage tracking"
|
|
echo ""
|
|
|
|
# Test 1: Depth 1 (Direct wildcard)
|
|
test_sequential "01" \
|
|
"__samples/flower__" \
|
|
42 \
|
|
"Depth 1 - Direct wildcard (no transitive)" \
|
|
1
|
|
|
|
# Test 2: Depth 2 (One level transitive)
|
|
test_sequential "02" \
|
|
"__dragon__" \
|
|
200 \
|
|
"Depth 2 - One level transitive" \
|
|
2
|
|
|
|
# Test 3: Depth 3 (Two levels transitive)
|
|
test_sequential "03" \
|
|
"__dragon__ warrior" \
|
|
200 \
|
|
"Depth 3 - Two levels with suffix" \
|
|
3
|
|
|
|
# Test 4: Depth 3 (Maximum verified depth)
|
|
test_sequential "04" \
|
|
"__adnd__ creature" \
|
|
222 \
|
|
"Depth 3 - Maximum transitive chain" \
|
|
3
|
|
|
|
echo ""
|
|
echo "${CYAN}Test Category 2: Mixed Transitive Scenarios${NC}"
|
|
echo "Testing wildcards mixed with dynamic prompts"
|
|
echo ""
|
|
|
|
# Test 5: Transitive with dynamic prompt
|
|
test_sequential "05" \
|
|
"{__dragon__|__adnd__} in battle" \
|
|
100 \
|
|
"Dynamic selection of transitive wildcards" \
|
|
3
|
|
|
|
# Test 6: Multiple transitive wildcards
|
|
test_sequential "06" \
|
|
"__dragon__ fights __adnd__" \
|
|
150 \
|
|
"Multiple transitive wildcards in one prompt" \
|
|
3
|
|
|
|
# Test 7: Nested transitive in dynamic
|
|
test_sequential "07" \
|
|
"powerful {__dragon__|__adnd__|simple warrior}" \
|
|
200 \
|
|
"Transitive wildcards nested in dynamic prompts" \
|
|
3
|
|
|
|
echo ""
|
|
echo "${CYAN}Test Category 3: Complex Sequential Scenarios${NC}"
|
|
echo "Testing complex multi-stage expansions"
|
|
echo ""
|
|
|
|
# Test 8: Transitive with weights
|
|
test_sequential "08" \
|
|
"{5::__dragon__|3::__adnd__|regular warrior}" \
|
|
250 \
|
|
"Weighted selection with transitive wildcards" \
|
|
3
|
|
|
|
# Test 9: Multi-select with transitive
|
|
test_sequential "09" \
|
|
"{2\$\$, \$\$__dragon__|__adnd__|warrior|mage}" \
|
|
300 \
|
|
"Multi-select including transitive wildcards" \
|
|
3
|
|
|
|
# Test 10: Quantified transitive
|
|
test_sequential "10" \
|
|
"{2\$\$, \$\$3#__dragon__}" \
|
|
350 \
|
|
"Quantified wildcard with transitive expansion" \
|
|
3
|
|
|
|
echo ""
|
|
echo "${CYAN}Test Category 4: Edge Cases${NC}"
|
|
echo "Testing boundary conditions and special cases"
|
|
echo ""
|
|
|
|
# Test 11: Transitive in compound grammar
|
|
test_sequential "11" \
|
|
"1{girl holding __samples/flower__|boy riding __dragon__}" \
|
|
400 \
|
|
"Compound grammar with mixed transitive depths" \
|
|
3
|
|
|
|
# Test 12: Multiple wildcards, different depths
|
|
test_sequential "12" \
|
|
"__samples/flower__ and __dragon__ with __colors__" \
|
|
450 \
|
|
"Multiple wildcards with varying depths" \
|
|
3
|
|
|
|
# Test 13: YAML wildcard (no transitive)
|
|
test_sequential "13" \
|
|
"__colors__" \
|
|
333 \
|
|
"YAML wildcard (depth 1, no transitive)" \
|
|
1
|
|
|
|
# Test 14: Transitive + YAML combination
|
|
test_sequential "14" \
|
|
"__dragon__ with __colors__ armor" \
|
|
500 \
|
|
"Combination of transitive and YAML wildcards" \
|
|
3
|
|
|
|
echo ""
|
|
echo "${CYAN}Test Category 5: On-Demand Mode Verification${NC}"
|
|
echo "Testing sequential loading in on-demand mode"
|
|
echo ""
|
|
|
|
# Switch to on-demand mode
|
|
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_DIR/custom_wildcards
|
|
disable_gpu_opencv = True
|
|
wildcard_cache_limit_mb = 0.5
|
|
EOF
|
|
|
|
# Restart server
|
|
kill $SERVER_PID 2>/dev/null
|
|
pkill -9 -f "python.*main.py.*$PORT" 2>/dev/null
|
|
sleep 3
|
|
|
|
echo "Restarting server in on-demand mode (0.5MB limit)..."
|
|
cd "$COMFYUI_DIR"
|
|
bash run.sh --listen 127.0.0.1 --port $PORT > /tmp/sequential_ondemand.log 2>&1 &
|
|
SERVER_PID=$!
|
|
|
|
echo "Waiting 70 seconds for server restart..."
|
|
for i in {1..70}; do
|
|
sleep 1
|
|
if [ $((i % 10)) -eq 0 ]; then
|
|
echo " ... $i seconds"
|
|
fi
|
|
done
|
|
|
|
if ! curl -s http://127.0.0.1:$PORT/ > /dev/null; then
|
|
echo "${RED}✗ Server failed to restart${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "${GREEN}✓ Server restarted in on-demand mode${NC}"
|
|
echo ""
|
|
|
|
# Test 15: Same transitive in on-demand mode
|
|
test_sequential "15" \
|
|
"__adnd__ creature" \
|
|
222 \
|
|
"Depth 3 transitive in on-demand mode (should match full cache)" \
|
|
3
|
|
|
|
# Test 16: Complex scenario in on-demand
|
|
test_sequential "16" \
|
|
"{__dragon__|__adnd__} {warrior|mage}" \
|
|
100 \
|
|
"Complex transitive with dynamic in on-demand mode" \
|
|
3
|
|
|
|
# Test 17: Multiple transitive in on-demand
|
|
test_sequential "17" \
|
|
"__dragon__ and __adnd__ together" \
|
|
150 \
|
|
"Multiple transitive wildcards in on-demand mode" \
|
|
3
|
|
|
|
# Stop server
|
|
kill $SERVER_PID 2>/dev/null
|
|
pkill -9 -f "python.*main.py.*$PORT" 2>/dev/null
|
|
|
|
echo "=========================================="
|
|
echo "Test Summary"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "Total tests: 17"
|
|
echo "Categories:"
|
|
echo " - Depth Verification (4 tests)"
|
|
echo " - Mixed Transitive Scenarios (3 tests)"
|
|
echo " - Complex Sequential Scenarios (3 tests)"
|
|
echo " - Edge Cases (4 tests)"
|
|
echo " - On-Demand Mode Verification (3 tests)"
|
|
echo ""
|
|
echo "Test Focus:"
|
|
echo " ✓ Multi-stage transitive wildcard expansion"
|
|
echo " ✓ Sequential loading across different depths"
|
|
echo " ✓ Transitive wildcards in dynamic prompts"
|
|
echo " ✓ Transitive wildcards with weights and multi-select"
|
|
echo " ✓ On-demand mode sequential loading verification"
|
|
echo ""
|
|
echo "Log saved to:"
|
|
echo " - Full cache mode: /tmp/sequential_test.log"
|
|
echo " - On-demand mode: /tmp/sequential_ondemand.log"
|
|
echo ""
|