""" Test mesh generation locally before deployment. Verifies the complete pipeline works end-to-end. """ import sys from pathlib import Path # Add parent directory to path sys.path.insert(0, str(Path(__file__).parent)) from core import AssetPipeline, QUALITY_PRESETS from utils import MemoryManager def test_mesh_generation(): """Test complete mesh generation pipeline.""" print("=" * 80) print("๐Ÿงช MESH GENERATION TEST") print("=" * 80) print() # Initialize print("๐Ÿ“ฆ Initializing pipeline...") memory_manager = MemoryManager() memory_manager.setup_cuda_optimizations() pipeline = AssetPipeline() print(" โœ… Pipeline initialized") print() # Test configuration test_cases = [ { "name": "Fast Generation", "prompt": "medieval knight with detailed armor", "quality": "Fast", "expected_time": 45 }, { "name": "Balanced Generation", "prompt": "futuristic mech robot, game asset", "quality": "Balanced", "expected_time": 60 } ] results = [] for i, test in enumerate(test_cases, 1): print(f"๐ŸŽฏ Test {i}/{len(test_cases)}: {test['name']}") print(f" Prompt: {test['prompt']}") print(f" Quality: {test['quality']}") print(f" Expected time: ~{test['expected_time']}s") print() try: # Generate asset print(" ๐Ÿš€ Generating...") result = pipeline.generate( prompt=test['prompt'], quality=test['quality'] ) # Verify result if result.glb_path and result.glb_path.exists(): file_size_mb = result.glb_path.stat().st_size / 1e6 print(f" โœ… SUCCESS!") print(f" ๐Ÿ“Š Generation time: {result.metadata.generation_time_s:.1f}s") print(f" ๐Ÿ“ฆ File size: {file_size_mb:.2f} MB") print(f" ๐ŸŽจ FLUX steps: {result.metadata.flux_steps}") print(f" ๐ŸŽจ Hunyuan steps: {result.metadata.hunyuan_steps}") print(f" ๐Ÿ”ง Optimized: {result.metadata.optimized}") print(f" ๐Ÿ’พ Cached: {result.cached}") print(f" ๐Ÿ“ Output: {result.glb_path}") results.append({ "test": test['name'], "success": True, "time": result.metadata.generation_time_s, "size_mb": file_size_mb, "cached": result.cached }) else: print(f" โŒ FAILED: No output file") results.append({ "test": test['name'], "success": False, "error": "No output file" }) except Exception as e: print(f" โŒ FAILED: {e}") results.append({ "test": test['name'], "success": False, "error": str(e) }) print() # Summary print("=" * 80) print("๐Ÿ“Š TEST SUMMARY") print("=" * 80) print() success_count = sum(1 for r in results if r.get('success', False)) total_count = len(results) print(f"โœ… Passed: {success_count}/{total_count}") print(f"โŒ Failed: {total_count - success_count}/{total_count}") print() if success_count == total_count: print("๐ŸŽ‰ ALL TESTS PASSED!") print() print("โœจ Pipeline is ready for deployment!") print() print("Next steps:") print("1. Run: .\\FINAL_DEPLOYMENT.ps1") print("2. Wait 5-10 minutes for Space to build") print("3. Test on HF Space with same prompts") print() return True else: print("โš ๏ธ SOME TESTS FAILED") print() print("Failed tests:") for r in results: if not r.get('success', False): print(f" โ€ข {r['test']}: {r.get('error', 'Unknown error')}") print() print("Fix errors before deployment!") print() return False if __name__ == "__main__": try: success = test_mesh_generation() sys.exit(0 if success else 1) except KeyboardInterrupt: print("\n\nโš ๏ธ Test interrupted by user") sys.exit(1) except Exception as e: print(f"\n\nโŒ Test failed with error: {e}") import traceback traceback.print_exc() sys.exit(1)