Files
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

166 lines
4.6 KiB
Python

#!/usr/bin/env python3
"""
Final comprehensive wildcard test - validates consistency between full cache and on-demand modes
Tests include:
1. Simple wildcard substitution
2. Nested wildcards (transitive loading)
3. Multiple wildcards in single prompt
4. Dynamic prompts combined with wildcards
5. YAML-based wildcards
"""
import subprocess
import time
import sys
from pathlib import Path
# Auto-detect paths
SCRIPT_DIR = Path(__file__).parent
IMPACT_PACK_DIR = SCRIPT_DIR.parent
COMFYUI_DIR = IMPACT_PACK_DIR.parent.parent
CONFIG_FILE = IMPACT_PACK_DIR / "impact-pack.ini"
def run_test(test_name, cache_limit, test_cases):
"""Run tests with specific cache limit"""
print(f"\n{'='*60}")
print(f"Testing: {test_name}")
print(f"Cache Limit: {cache_limit} MB")
print(f"{'='*60}\n")
# Update config
config_content = f"""[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 = {cache_limit}
"""
with open(CONFIG_FILE, 'w') as f:
f.write(config_content)
# Start ComfyUI
print("Starting ComfyUI...")
proc = subprocess.Popen(
['bash', 'run.sh', '--listen', '127.0.0.1', '--port', '8191'],
cwd=str(COMFYUI_DIR),
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True
)
# Wait for server to start
time.sleep(20)
# Check logs
import requests
try:
response = requests.get('http://127.0.0.1:8191/')
print("✓ Server started successfully\n")
except Exception:
print("✗ Server failed to start")
proc.terminate()
return {}
# Run test cases
results = {}
for i, (description, text, seed) in enumerate(test_cases, 1):
print(f"Test {i}: {description}")
print(f" Input: {text}")
try:
response = requests.post(
'http://127.0.0.1:8191/impact/wildcards',
json={'text': text, 'seed': seed},
timeout=5
)
result = response.json()
output = result.get('text', '')
print(f" Output: {output}")
results[f"test{i}"] = output
except Exception as e:
print(f" Error: {e}")
results[f"test{i}"] = f"ERROR: {e}"
print()
# Stop server
proc.terminate()
time.sleep(2)
return results
def main():
print("\n" + "="*60)
print("WILDCARD COMPREHENSIVE CONSISTENCY TEST")
print("="*60)
# Test cases: (description, wildcard text, seed)
test_cases = [
# Test 1: Simple wildcard
("Simple wildcard", "__samples/flower__", 42),
# Test 2: Multiple wildcards
("Multiple wildcards", "a __samples/flower__ and a __samples/jewel__", 123),
# Test 3: Dynamic prompt
("Dynamic prompt", "{red|blue|green} flower", 456),
# Test 4: Combined wildcard + dynamic
("Combined", "{beautiful|elegant} __samples/flower__ with {gold|silver} __samples/jewel__", 789),
# Test 5: Nested selection (multi-select)
("Multi-select", "{2$$, $$__samples/flower__|rose|tulip|daisy}", 111),
# Test 6: Transitive YAML wildcard (custom_wildcards/test.yaml)
# __colors__ → __cold__|__warm__ → blue|red|orange|yellow
("Transitive YAML wildcard", "__colors__", 222),
# Test 7: Transitive with text
("Transitive with context", "a {beautiful|vibrant} __colors__ flower", 333),
]
# Test with full cache mode
results_full = run_test("Full Cache Mode", 50, test_cases)
time.sleep(5)
# Test with on-demand mode
results_on_demand = run_test("On-Demand Mode", 1, test_cases)
# Compare results
print("\n" + "="*60)
print("RESULTS COMPARISON")
print("="*60 + "\n")
all_match = True
for key in results_full.keys():
full_result = results_full.get(key, "MISSING")
on_demand_result = results_on_demand.get(key, "MISSING")
match = full_result == on_demand_result
all_match = all_match and match
status = "✓ MATCH" if match else "✗ DIFFER"
print(f"{key}: {status}")
if not match:
print(f" Full cache: {full_result}")
print(f" On-demand: {on_demand_result}")
print()
# Final verdict
print("="*60)
if all_match:
print("✅ ALL TESTS PASSED - Results are identical")
print("="*60)
return 0
else:
print("❌ TESTS FAILED - Results differ between modes")
print("="*60)
return 1
if __name__ == "__main__":
sys.exit(main())