Files
ComfyUI/custom_nodes/ComfyUI-Impact-Pack/tests/wildcards/test_sequential_loading.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

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 ""