Add custom nodes, Civitai loras (LFS), and vast.ai setup script
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
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>
This commit is contained in:
253
custom_nodes/ComfyUI-Impact-Pack/tests/test_dynamic_prompts_full.sh
Executable file
253
custom_nodes/ComfyUI-Impact-Pack/tests/test_dynamic_prompts_full.sh
Executable file
@@ -0,0 +1,253 @@
|
||||
#!/bin/bash
|
||||
# Comprehensive Dynamic Prompt Validation Test
|
||||
# Tests all dynamic prompt features with statistical validation
|
||||
|
||||
PORT=8188
|
||||
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
LOG_FILE="/tmp/dynamic_prompt_full_validation.log"
|
||||
|
||||
exec > >(tee -a "$LOG_FILE")
|
||||
exec 2>&1
|
||||
|
||||
echo "=========================================="
|
||||
echo "Dynamic Prompt Full Validation Test"
|
||||
echo "=========================================="
|
||||
echo "Validating: All dynamic prompt features"
|
||||
echo ""
|
||||
|
||||
# Check server
|
||||
if ! curl -s http://127.0.0.1:$PORT/ > /dev/null 2>&1; then
|
||||
echo "${RED}Server not running on port $PORT${NC}"
|
||||
echo "Start server with: cd /mnt/teratera/git/ComfyUI && bash run.sh --listen 127.0.0.1 --port $PORT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TOTAL_GROUPS=0
|
||||
PASSED_GROUPS=0
|
||||
FAILED_GROUPS=0
|
||||
|
||||
# Test function for multiselect with validation
|
||||
test_multiselect() {
|
||||
local TEST_NAME=$1
|
||||
local PROMPT=$2
|
||||
local EXPECTED_COUNT=$3
|
||||
local SEPARATOR=$4
|
||||
local ITERATIONS=$5
|
||||
shift 5
|
||||
local OPTIONS=("$@")
|
||||
|
||||
echo "${BLUE}=== $TEST_NAME ===${NC}"
|
||||
echo "Prompt: ${YELLOW}$PROMPT${NC}"
|
||||
echo "Expected: $EXPECTED_COUNT items per result, separator: '$SEPARATOR'"
|
||||
echo -n "Testing $ITERATIONS iterations: "
|
||||
|
||||
local PASSED=0
|
||||
local FAILED=0
|
||||
declare -a FAILURES
|
||||
|
||||
for i in $(seq 1 $ITERATIONS); do
|
||||
SEED=$((1000 + i * 100))
|
||||
RESULT=$(curl -s -X POST http://127.0.0.1:$PORT/impact/wildcards \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"text\": \"$PROMPT\", \"seed\": $SEED}" | \
|
||||
python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))" 2>/dev/null || echo "ERROR")
|
||||
|
||||
if [ "$RESULT" = "ERROR" ]; then
|
||||
echo -n "X"
|
||||
((FAILED++))
|
||||
FAILURES+=(" Iteration $i (seed $SEED): Server error")
|
||||
continue
|
||||
fi
|
||||
|
||||
# Count items based on separator
|
||||
if [ -z "$SEPARATOR" ]; then
|
||||
ITEM_COUNT=1
|
||||
else
|
||||
ITEM_COUNT=$(echo "$RESULT" | awk -F"$SEPARATOR" '{print NF}')
|
||||
fi
|
||||
|
||||
# Check if count matches
|
||||
if [ $ITEM_COUNT -ne $EXPECTED_COUNT ]; then
|
||||
echo -n "X"
|
||||
((FAILED++))
|
||||
FAILURES+=(" Iteration $i (seed $SEED): Expected $EXPECTED_COUNT items, got $ITEM_COUNT" " Result: $RESULT")
|
||||
continue
|
||||
fi
|
||||
|
||||
# Check for duplicates (split by separator and check uniqueness)
|
||||
if [ -n "$SEPARATOR" ]; then
|
||||
UNIQUE_COUNT=$(echo "$RESULT" | awk -F"$SEPARATOR" '{for(i=1;i<=NF;i++) print $i}' | sort -u | wc -l)
|
||||
if [ $UNIQUE_COUNT -ne $EXPECTED_COUNT ]; then
|
||||
echo -n "D"
|
||||
((FAILED++))
|
||||
FAILURES+=(" Iteration $i (seed $SEED): Duplicates detected" " Result: $RESULT")
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check that all items are from the option list
|
||||
VALID=1
|
||||
if [ -n "$SEPARATOR" ]; then
|
||||
while IFS= read -r item; do
|
||||
item=$(echo "$item" | xargs) # trim whitespace
|
||||
FOUND=0
|
||||
for opt in "${OPTIONS[@]}"; do
|
||||
if [ "$item" = "$opt" ]; then
|
||||
FOUND=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ $FOUND -eq 0 ]; then
|
||||
VALID=0
|
||||
break
|
||||
fi
|
||||
done < <(echo "$RESULT" | awk -F"$SEPARATOR" '{for(i=1;i<=NF;i++) print $i}')
|
||||
fi
|
||||
|
||||
if [ $VALID -eq 0 ]; then
|
||||
echo -n "?"
|
||||
((FAILED++))
|
||||
FAILURES+=(" Iteration $i (seed $SEED): Invalid items detected" " Result: $RESULT")
|
||||
continue
|
||||
fi
|
||||
|
||||
echo -n "."
|
||||
((PASSED++))
|
||||
done
|
||||
|
||||
echo " Done"
|
||||
echo "Results: ${GREEN}$PASSED passed${NC}, ${RED}$FAILED failed${NC}"
|
||||
|
||||
if [ $FAILED -gt 0 ]; then
|
||||
echo -e "${RED}Failures:${NC}"
|
||||
printf '%s\n' "${FAILURES[@]}"
|
||||
((FAILED_GROUPS++))
|
||||
else
|
||||
echo "${GREEN}✅ PASS${NC}"
|
||||
((PASSED_GROUPS++))
|
||||
fi
|
||||
echo ""
|
||||
((TOTAL_GROUPS++))
|
||||
}
|
||||
|
||||
# Test function for weighted selection with statistical validation
|
||||
test_weighted() {
|
||||
local TEST_NAME=$1
|
||||
local PROMPT=$2
|
||||
local ITERATIONS=$3
|
||||
shift 3
|
||||
local OPTIONS=("$@")
|
||||
|
||||
echo "${BLUE}=== $TEST_NAME ===${NC}"
|
||||
echo "Prompt: ${YELLOW}$PROMPT${NC}"
|
||||
echo -n "Testing $ITERATIONS iterations: "
|
||||
|
||||
declare -A COUNTS
|
||||
local TOTAL=0
|
||||
|
||||
for i in $(seq 1 $ITERATIONS); do
|
||||
SEED=$((1000 + i * 100))
|
||||
RESULT=$(curl -s -X POST http://127.0.0.1:$PORT/impact/wildcards \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"text\": \"$PROMPT\", \"seed\": $SEED}" | \
|
||||
python3 -c "import sys, json; print(json.load(sys.stdin).get('text','ERROR'))" 2>/dev/null || echo "ERROR")
|
||||
|
||||
if [ "$RESULT" = "ERROR" ]; then
|
||||
echo -n "X"
|
||||
continue
|
||||
fi
|
||||
|
||||
MATCHED=0
|
||||
for opt in "${OPTIONS[@]}"; do
|
||||
if echo "$RESULT" | grep -Fq "$opt"; then
|
||||
COUNTS[$opt]=$((${COUNTS[$opt]:-0} + 1))
|
||||
MATCHED=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $MATCHED -eq 1 ]; then
|
||||
((TOTAL++))
|
||||
echo -n "."
|
||||
else
|
||||
echo -n "?"
|
||||
fi
|
||||
done
|
||||
|
||||
echo " Done"
|
||||
echo "Distribution:"
|
||||
|
||||
for opt in "${OPTIONS[@]}"; do
|
||||
local COUNT=${COUNTS[$opt]:-0}
|
||||
local PERCENT=0
|
||||
if [ $TOTAL -gt 0 ]; then
|
||||
PERCENT=$(awk "BEGIN {printf \"%.1f\", ($COUNT / $TOTAL) * 100}")
|
||||
fi
|
||||
echo " $opt: $COUNT / $TOTAL (${PERCENT}%)"
|
||||
done
|
||||
|
||||
echo "${GREEN}✅ PASS${NC}"
|
||||
((PASSED_GROUPS++))
|
||||
((TOTAL_GROUPS++))
|
||||
echo ""
|
||||
}
|
||||
|
||||
echo "=========================================="
|
||||
echo "MULTISELECT VALIDATION"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
test_multiselect "Test 1: 2-item multiselect" "{2\$\$, \$\$red|blue|green|yellow}" 2 ", " 20 "red" "blue" "green" "yellow"
|
||||
|
||||
test_multiselect "Test 2: 3-item multiselect" "{3\$\$ and \$\$alpha|beta|gamma|delta|epsilon}" 3 " and " 20 "alpha" "beta" "gamma" "delta" "epsilon"
|
||||
|
||||
test_multiselect "Test 3: Single-item multiselect" "{1\$\$ \$\$one|two|three}" 1 " " 20 "one" "two" "three"
|
||||
|
||||
test_multiselect "Test 4: Max-item multiselect (all 4)" "{4\$\$-\$\$cat|dog|bird|fish}" 4 "-" 20 "cat" "dog" "bird" "fish"
|
||||
|
||||
echo "=========================================="
|
||||
echo "WEIGHTED SELECTION VALIDATION"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
test_weighted "Test 5: Heavy bias 10:1 (100 iterations)" "{10::common|1::rare}" 100 "common" "rare"
|
||||
|
||||
test_weighted "Test 6: Equal weights 1:1:1 (60 iterations)" "{1::alpha|1::beta|1::gamma}" 60 "alpha" "beta" "gamma"
|
||||
|
||||
test_weighted "Test 7: Extreme bias 100:1 (100 iterations)" "{100::very_common|1::very_rare}" 100 "very_common" "very_rare"
|
||||
|
||||
test_weighted "Test 8: Multi-level weights 5:3:2 (100 iterations)" "{5::high|3::medium|2::low}" 100 "high" "medium" "low"
|
||||
|
||||
test_weighted "Test 9: Default weight mixing (100 iterations)" "{10::weighted|unweighted}" 100 "weighted" "unweighted"
|
||||
|
||||
echo "=========================================="
|
||||
echo "BASIC SELECTION VALIDATION"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
test_weighted "Test 10: Simple random selection (50 iterations)" "{option_a|option_b|option_c}" 50 "option_a" "option_b" "option_c"
|
||||
|
||||
test_weighted "Test 11: Nested selection (50 iterations)" "{outer_{inner1|inner2}|simple}" 50 "outer_inner1" "outer_inner2" "simple"
|
||||
|
||||
echo "=========================================="
|
||||
echo "SUMMARY"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "Total test groups: $TOTAL_GROUPS"
|
||||
echo "${GREEN}Passed: $PASSED_GROUPS${NC}"
|
||||
echo "${RED}Failed: $FAILED_GROUPS${NC}"
|
||||
echo ""
|
||||
|
||||
if [ $FAILED_GROUPS -eq 0 ]; then
|
||||
echo "${GREEN}✅ All tests passed${NC}"
|
||||
exit 0
|
||||
else
|
||||
echo "${RED}❌ Some tests failed${NC}"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user