Files
fblissjr-ComfyUI-QwenImageW…/test_changes.py
T
Fred Bliss 4a091e9298 Fix coordinate handling and make object_ref optional
- Fixed generateTokens to properly handle different region types (bounding_box, polygon, object_reference)
- Added checkbox UI to control includeObjectRef for boxes/polygons
- Object references now correctly handle 2 coordinates instead of expecting 4
- Updated Python code to respect includeObjectRef flag from JavaScript
- Fixed coordinate format issues (x1,y1,x2,y2 for boxes, x,y pairs for polygons)
- Restored updateBasePromptWithTokens function for editable prompts
- Default behavior keeps object_ref (checkbox checked) for backward compatibility
- Without object_ref, generates pure spatial tokens like <|box_start|>0.1,0.2,0.3,0.4<|box_end|>
2025-09-06 09:33:32 -05:00

117 lines
4.2 KiB
Python

#!/usr/bin/env python3
"""
Simple test to verify our changes work in the ComfyUI environment.
Run this from within ComfyUI to test the patches and new features.
"""
def test_patch_application():
"""Test that our patches can be applied"""
try:
from nodes.qwen_encoder_patch import patch_qwen_encoder
result = patch_qwen_encoder()
print(f"Patch application: {'SUCCESS' if result else 'FAILED'}")
return result
except Exception as e:
print(f"Patch application failed: {e}")
return False
def test_node_imports():
"""Test that all our nodes can be imported"""
try:
from nodes.qwen_vl_loader import QwenVLCLIPLoader
from nodes.qwen_vl_encoder import QwenVLTextEncoder
from nodes.qwen_multi_reference import QwenMultiReferenceHandler
print("All node imports successful")
return True
except Exception as e:
print(f"Node import failed: {e}")
return False
def test_context_image_feature():
"""Test that context_image parameter is available"""
try:
from nodes.qwen_vl_encoder import QwenVLTextEncoder
input_types = QwenVLTextEncoder.INPUT_TYPES()
has_context = "context_image" in input_types["optional"]
print(f"Context image parameter: {'AVAILABLE' if has_context else 'MISSING'}")
# Check tooltip
if has_context:
tooltip = input_types["optional"]["context_image"][1].get("tooltip", "")
has_controlnet = "ControlNet" in tooltip
print(f"ControlNet tooltip: {'PRESENT' if has_controlnet else 'MISSING'}")
return has_context
except Exception as e:
print(f"Context image test failed: {e}")
return False
def test_multi_reference_warnings():
"""Test that multi-reference has proper warnings about spatial vs temporal"""
try:
from nodes.qwen_multi_reference import QwenMultiReferenceHandler
input_types = QwenMultiReferenceHandler.INPUT_TYPES()
# Check that description mentions spatial
desc = QwenMultiReferenceHandler.DESCRIPTION
has_spatial_warning = "spatial" in desc and "single-frame" in desc
print(f"Spatial warning in description: {'PRESENT' if has_spatial_warning else 'MISSING'}")
# Check tooltip mentions NOT temporal frames
tooltip = input_types["required"]["reference_method"][1]["tooltip"]
has_temporal_warning = "NOT temporal frames" in tooltip
print(f"Temporal frames warning: {'PRESENT' if has_temporal_warning else 'MISSING'}")
return has_spatial_warning and has_temporal_warning
except Exception as e:
print(f"Multi-reference warning test failed: {e}")
return False
def main():
"""Run all tests"""
print("Testing ComfyUI-QwenImageWanBridge improvements...")
print("=" * 50)
tests = [
test_node_imports,
test_patch_application,
test_context_image_feature,
test_multi_reference_warnings,
]
results = []
for test in tests:
try:
result = test()
results.append(result)
except Exception as e:
print(f"✗ Test {test.__name__} crashed: {e}")
results.append(False)
print()
passed = sum(results)
total = len(results)
print("=" * 50)
print(f"Results: {passed}/{total} tests passed")
if passed == total:
print("ALL TESTS PASSED - Implementation ready!")
else:
print("Some tests failed - check implementation")
print()
print("Key improvements implemented:")
print("- Fixed vision processing duplication (2x speedup)")
print("- Standardized template token dropping (DiffSynth consistency)")
print("- Added context_image for ControlNet-style conditioning")
print("- Clarified multi-reference spatial behavior")
print()
print("To use context_image:")
print("1. Connect control image (pose/depth/canny) to context_image input")
print("2. Connect edit_image for vision tokens (if needed)")
print("3. Both will be processed differently - context bypasses vision tokens")
if __name__ == "__main__":
main()