diff --git a/dev/windows-cpu/index.html b/dev/windows-cpu/index.html
index 14af589..d8d1c1b 100644
--- a/dev/windows-cpu/index.html
+++ b/dev/windows-cpu/index.html
@@ -935,7 +935,7 @@
@@ -974,7 +974,7 @@
pass
- 208.90s
+ 179.69s
@@ -1040,9 +1040,9 @@
});
}
- const workflowData = {"merge_splats": {"src": "screenshots/merge_splats_executed.png", "title": "merge_splats", "status": "pass", "duration": "208.90", "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.6s)\n [capture-node] freeze=134ms shot=205ms unfreeze=6ms saved=True\n Frame 3 saved (frame_002.jpg, t=4.2s)\n [capture-periodic] freeze=2071ms shot=2185ms unfreeze=8ms saved=True\n Frame 4 saved (frame_003.jpg, t=16.9s)\n [capture-periodic] freeze=2070ms shot=2181ms unfreeze=7ms saved=True\n Frame 5 saved (frame_004.jpg, t=23.3s)\n [capture-periodic] freeze=2385ms shot=1827ms unfreeze=4ms saved=True\n [ComfyUI] Loading PLY: D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] Initial splats: 200000\n [ComfyUI] Pruned splats: 200000, target: 100000\n [ComfyUI] Opacity Mean: 0.53443545 Median: 0.48362076\n [ComfyUI] Pruning splats with opacity below 0.0000\n [ComfyUI] Original count: 200000, after opacity pruning: 200000\n [ComfyUI] After opacity pruning, 200000 splats remain.\n [ComfyUI] Pass 1: 200000 splats\n [ComfyUI] \n [ComfyUI] Edge costs: 0%| | 0/27 [00:00, ?it/s]\n [ComfyUI] Edge costs: 4%|3 | 1/27 [00:01<00:33, 1.29s/it]\n [ComfyUI] Edge costs: 7%|7 | 2/27 [00:02<00:31, 1.26s/it]\n [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:03<00:31, 1.30s/it]\n [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:05<00:31, 1.37s/it]\n [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:06<00:30, 1.40s/it]\n [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:08<00:29, 1.40s/it]\n [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:08<00:23, 1.18s/it]\n [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:09<00:21, 1.14s/it]\n [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:11<00:21, 1.18s/it]\n [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:12<00:21, 1.28s/it]\n [ComfyUI] Edge costs: 41%|#### | 11/27 [00:14<00:23, 1.47s/it]\n [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:16<00:21, 1.44s/it]\n [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:16<00:17, 1.24s/it]\n [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:18<00:16, 1.25s/it]\n [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:19<00:15, 1.27s/it]\n [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:20<00:14, 1.33s/it]\n [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:22<00:13, 1.33s/it]\n [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:23<00:10, 1.18s/it]\n [ComfyUI] Edge costs: 70%|####### | 19/27 [00:24<00:09, 1.15s/it]\n [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:25<00:08, 1.21s/it]\n [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:26<00:07, 1.26s/it]\n [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:28<00:06, 1.28s/it]\n [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:29<00:05, 1.31s/it]\n [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:30<00:03, 1.33s/it]\n [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:31<00:02, 1.18s/it]\n [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:01, 1.23s/it]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.24s/it]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.27s/it]\n [ComfyUI] edges: 2697139, pairs: 97792 (need 100000)\n [ComfyUI] \n [ComfyUI] Merging 97792 pairs\n [ComfyUI] Pass 2: 102208 splats\n [ComfyUI] Edge costs: 0%| | 0/14 [00:00, ?it/s]\n [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:14, 1.13s/it]\n [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:16, 1.34s/it]\n [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:14, 1.34s/it]\n [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:05<00:13, 1.37s/it]\n [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:06<00:12, 1.35s/it]\n [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:07<00:10, 1.34s/it]\n [ComfyUI] Edge costs: 50%|##### | 7/14 [00:08<00:07, 1.11s/it]\n [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:09<00:06, 1.16s/it]\n [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:11<00:06, 1.20s/it]\n [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:12<00:05, 1.27s/it]\n [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:13<00:03, 1.28s/it]\n [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:14<00:02, 1.10s/it]\n [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:15<00:01, 1.08s/it]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:16<00:00, 1.14it/s]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:16<00:00, 1.15s/it]\n [ComfyUI] GaussianMerge: wrote D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\output\\merged.ply (100000 splats, 23.7 MB)\n [ComfyUI] Prompt executed in 180.12 seconds\n Node executed (2 total), capturing...\n Frame 6 saved (frame_005.jpg, t=184.0s)\n [capture-node] freeze=1584ms shot=1971ms unfreeze=0ms saved=True\n Execution complete (t=184.0s)\n [3d-wait] Phase 1: Waiting for 'Loading 3D Model' text to disappear...\n [3d-wait] Phase 1 done in 0.0s\n [3d-wait] Phase 2: iframes=2\n [3d-wait] iframe viewer_ready=True (matched 1 console logs)\n [3d-wait] Unfrozen in 0.005s, rendering for 5s...\n [3d-wait] JS halted via CDP after 5.4s\n [3d-wait] Re-frozen in 10.2s\n [3d-wait] Total 3D wait: 10.2s\n Captured 6 unique frames over 197.84s\n [debug] iframes: 2\n [debug] iframe[0]: src=http://127.0.0.1:41895/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True\n [debug] iframe[1]: src=http://127.0.0.1:41895/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True\n [timing] trigger_3d_previews: 0.0s\n Saved high-quality screenshot: merge_splats_executed.png\n [timing] final_screenshot: 0.2s\n Captured 7 video frames", "hardware": {"os": "Windows-10-10.0.26100-SP0", "cpu": "AMD64 Family 25 Model 1 Stepping 1, AuthenticAMD"}}};
+ const workflowData = {"merge_splats": {"src": "screenshots/merge_splats_executed.png", "title": "merge_splats", "status": "pass", "duration": "179.69", "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: ac2dda84-5259-4578-950a-77005c0dded4\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.5s)\n [capture-node] freeze=30ms shot=337ms unfreeze=5ms saved=True\n Frame 3 saved (frame_002.jpg, t=3.9s)\n [capture-periodic] freeze=1762ms shot=1873ms unfreeze=4ms saved=True\n [ComfyUI] Loading PLY: D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] Initial splats: 200000\n [ComfyUI] Pruned splats: 200000, target: 100000\n [ComfyUI] Opacity Mean: 0.53443545 Median: 0.48362076\n [ComfyUI] Pruning splats with opacity below 0.0000\n [ComfyUI] Original count: 200000, after opacity pruning: 200000\n [ComfyUI] After opacity pruning, 200000 splats remain.\n [ComfyUI] Pass 1: 200000 splats\n [ComfyUI] \n [ComfyUI] Edge costs: 0%| | 0/27 [00:00, ?it/s]\n [ComfyUI] Edge costs: 4%|3 | 1/27 [00:02<00:58, 2.26s/it]\n [ComfyUI] Edge costs: 7%|7 | 2/27 [00:03<00:38, 1.55s/it]\n [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:04<00:36, 1.52s/it]\n [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:06<00:34, 1.51s/it]\n [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:07<00:33, 1.52s/it]\n [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:09<00:32, 1.56s/it]\n [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:10<00:26, 1.34s/it]\n [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:12<00:29, 1.56s/it]\n [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:14<00:30, 1.70s/it]\n [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:15<00:28, 1.67s/it]\n [ComfyUI] Edge costs: 41%|#### | 11/27 [00:17<00:25, 1.61s/it]\n [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:18<00:21, 1.43s/it]\n [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:20<00:21, 1.54s/it]\n [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:21<00:19, 1.53s/it]\n [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:23<00:18, 1.53s/it]\n [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:24<00:16, 1.53s/it]\n [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:25<00:12, 1.25s/it]\n [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:26<00:10, 1.13s/it]\n [ComfyUI] Edge costs: 70%|####### | 19/27 [00:27<00:08, 1.07s/it]\n [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:28<00:07, 1.05s/it]\n [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:29<00:06, 1.03s/it]\n [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:30<00:05, 1.03s/it]\n [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:31<00:04, 1.00s/it]\n [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:32<00:02, 1.04it/s]\n [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:32<00:01, 1.13it/s]\n [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:00, 1.01it/s]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.06it/s]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.29s/it]\n [ComfyUI] edges: 2697139, pairs: 97792 (need 100000)\n [ComfyUI] \n [ComfyUI] Merging 97792 pairs\n [ComfyUI] Pass 2: 102208 splats\n [ComfyUI] Edge costs: 0%| | 0/14 [00:00, ?it/s]\n [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:15, 1.15s/it]\n [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:12, 1.03s/it]\n [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:11, 1.09s/it]\n [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:04<00:10, 1.04s/it]\n [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:05<00:09, 1.03s/it]\n [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:06<00:07, 1.00it/s]\n [ComfyUI] Edge costs: 50%|##### | 7/14 [00:07<00:06, 1.01it/s]\n [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:07<00:05, 1.15it/s]\n [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:08<00:04, 1.17it/s]\n [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:09<00:03, 1.10it/s]\n [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:10<00:02, 1.07it/s]\n [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:11<00:01, 1.05it/s]\n [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:12<00:01, 1.01s/it]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.23it/s]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.07it/s]\n [ComfyUI] GaussianMerge: wrote D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\output\\merged.ply (100000 splats, 23.7 MB)\n [ComfyUI] Prompt executed in 148.96 seconds\n Frame 4 saved (frame_003.jpg, t=148.6s)\n [capture-periodic] freeze=1782ms shot=1867ms unfreeze=67ms saved=True\n [capture-loop] iter=50 t=153.9s state={'complete': True, 'error': None, 'executedCount': 2, 'wsState': 1} eval_ms=1389 ram=4.3/16.0GB (27%) swap=0.2/2.9GB (7%) cpu=88% browser_rss=0.79GB\n Node executed (2 total), capturing...\n Frame 5 saved (frame_004.jpg, t=155.0s)\n [capture-node] freeze=672ms shot=1785ms unfreeze=0ms saved=True\n Execution complete (t=155.0s)\n [3d-wait] Phase 1: Waiting for 'Loading 3D Model' text to disappear...\n [3d-wait] Phase 1 done in 0.0s\n [3d-wait] Phase 2: iframes=2\n [3d-wait] iframe viewer_ready=True (matched 2 console logs)\n [3d-wait] Unfrozen in 0.003s, rendering for 5s...\n [3d-wait] JS halted via CDP after 6.4s\n [3d-wait] Re-frozen in 11.2s\n [3d-wait] Total 3D wait: 11.2s\n Captured 5 unique frames over 168.66s\n [debug] iframes: 2\n [debug] iframe[0]: src=http://127.0.0.1:41894/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True\n [debug] iframe[1]: src=http://127.0.0.1:41894/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True\n [timing] trigger_3d_previews: 0.0s\n Saved high-quality screenshot: merge_splats_executed.png\n [timing] final_screenshot: 0.2s\n Captured 6 video frames", "hardware": {"os": "Windows-2025Server-10.0.26100-SP0", "cpu": "AMD64 Family 25 Model 17 Stepping 1, AuthenticAMD"}}};
const workflowNames = Object.keys(workflowData);
- const videoData = {"merge_splats": {"frames": [{"file": "frame_000.jpg", "time": 0.0, "log": "Capturing execution frames: merge_splats.json"}, {"file": "frame_001.jpg", "time": 0.59, "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply"}, {"file": "frame_002.jpg", "time": 4.25, "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.6s)\n [capture-node] freeze=134ms shot=205ms unfreeze=6ms saved=True"}, {"file": "frame_003.jpg", "time": 16.92, "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.6s)\n [capture-node] freeze=134ms shot=205ms unfreeze=6ms saved=True\n Frame 3 saved (frame_002.jpg, t=4.2s)\n [capture-periodic] freeze=2071ms shot=2185ms unfreeze=8ms saved=True"}, {"file": "frame_004.jpg", "time": 23.28, "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.6s)\n [capture-node] freeze=134ms shot=205ms unfreeze=6ms saved=True\n Frame 3 saved (frame_002.jpg, t=4.2s)\n [capture-periodic] freeze=2071ms shot=2185ms unfreeze=8ms saved=True\n Frame 4 saved (frame_003.jpg, t=16.9s)\n [capture-periodic] freeze=2070ms shot=2181ms unfreeze=7ms saved=True"}, {"file": "frame_005.jpg", "time": 184.0, "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.6s)\n [capture-node] freeze=134ms shot=205ms unfreeze=6ms saved=True\n Frame 3 saved (frame_002.jpg, t=4.2s)\n [capture-periodic] freeze=2071ms shot=2185ms unfreeze=8ms saved=True\n Frame 4 saved (frame_003.jpg, t=16.9s)\n [capture-periodic] freeze=2070ms shot=2181ms unfreeze=7ms saved=True\n Frame 5 saved (frame_004.jpg, t=23.3s)\n [capture-periodic] freeze=2385ms shot=1827ms unfreeze=4ms saved=True\n [ComfyUI] Loading PLY: D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] Initial splats: 200000\n [ComfyUI] Pruned splats: 200000, target: 100000\n [ComfyUI] Opacity Mean: 0.53443545 Median: 0.48362076\n [ComfyUI] Pruning splats with opacity below 0.0000\n [ComfyUI] Original count: 200000, after opacity pruning: 200000\n [ComfyUI] After opacity pruning, 200000 splats remain.\n [ComfyUI] Pass 1: 200000 splats\n [ComfyUI] \n [ComfyUI] Edge costs: 0%| | 0/27 [00:00, ?it/s]\n [ComfyUI] Edge costs: 4%|3 | 1/27 [00:01<00:33, 1.29s/it]\n [ComfyUI] Edge costs: 7%|7 | 2/27 [00:02<00:31, 1.26s/it]\n [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:03<00:31, 1.30s/it]\n [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:05<00:31, 1.37s/it]\n [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:06<00:30, 1.40s/it]\n [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:08<00:29, 1.40s/it]\n [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:08<00:23, 1.18s/it]\n [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:09<00:21, 1.14s/it]\n [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:11<00:21, 1.18s/it]\n [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:12<00:21, 1.28s/it]\n [ComfyUI] Edge costs: 41%|#### | 11/27 [00:14<00:23, 1.47s/it]\n [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:16<00:21, 1.44s/it]\n [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:16<00:17, 1.24s/it]\n [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:18<00:16, 1.25s/it]\n [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:19<00:15, 1.27s/it]\n [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:20<00:14, 1.33s/it]\n [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:22<00:13, 1.33s/it]\n [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:23<00:10, 1.18s/it]\n [ComfyUI] Edge costs: 70%|####### | 19/27 [00:24<00:09, 1.15s/it]\n [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:25<00:08, 1.21s/it]\n [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:26<00:07, 1.26s/it]\n [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:28<00:06, 1.28s/it]\n [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:29<00:05, 1.31s/it]\n [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:30<00:03, 1.33s/it]\n [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:31<00:02, 1.18s/it]\n [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:01, 1.23s/it]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.24s/it]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.27s/it]\n [ComfyUI] edges: 2697139, pairs: 97792 (need 100000)\n [ComfyUI] \n [ComfyUI] Merging 97792 pairs\n [ComfyUI] Pass 2: 102208 splats\n [ComfyUI] Edge costs: 0%| | 0/14 [00:00, ?it/s]\n [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:14, 1.13s/it]\n [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:16, 1.34s/it]\n [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:14, 1.34s/it]\n [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:05<00:13, 1.37s/it]\n [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:06<00:12, 1.35s/it]\n [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:07<00:10, 1.34s/it]\n [ComfyUI] Edge costs: 50%|##### | 7/14 [00:08<00:07, 1.11s/it]\n [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:09<00:06, 1.16s/it]\n [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:11<00:06, 1.20s/it]\n [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:12<00:05, 1.27s/it]\n [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:13<00:03, 1.28s/it]\n [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:14<00:02, 1.10s/it]\n [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:15<00:01, 1.08s/it]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:16<00:00, 1.14it/s]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:16<00:00, 1.15s/it]\n [ComfyUI] GaussianMerge: wrote D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\output\\merged.ply (100000 splats, 23.7 MB)\n [ComfyUI] Prompt executed in 180.12 seconds"}, {"file": "frame_006.jpg", "time": 200.10514163970947, "log": "Final screenshot"}], "total_time": 197.84}};
+ const videoData = {"merge_splats": {"frames": [{"file": "frame_000.jpg", "time": 0.0, "log": "Capturing execution frames: merge_splats.json"}, {"file": "frame_001.jpg", "time": 0.45, "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: ac2dda84-5259-4578-950a-77005c0dded4\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply"}, {"file": "frame_002.jpg", "time": 3.89, "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: ac2dda84-5259-4578-950a-77005c0dded4\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.5s)\n [capture-node] freeze=30ms shot=337ms unfreeze=5ms saved=True"}, {"file": "frame_003.jpg", "time": 148.61, "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: ac2dda84-5259-4578-950a-77005c0dded4\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.5s)\n [capture-node] freeze=30ms shot=337ms unfreeze=5ms saved=True\n Frame 3 saved (frame_002.jpg, t=3.9s)\n [capture-periodic] freeze=1762ms shot=1873ms unfreeze=4ms saved=True\n [ComfyUI] Loading PLY: D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] Initial splats: 200000\n [ComfyUI] Pruned splats: 200000, target: 100000\n [ComfyUI] Opacity Mean: 0.53443545 Median: 0.48362076\n [ComfyUI] Pruning splats with opacity below 0.0000\n [ComfyUI] Original count: 200000, after opacity pruning: 200000\n [ComfyUI] After opacity pruning, 200000 splats remain.\n [ComfyUI] Pass 1: 200000 splats\n [ComfyUI] \n [ComfyUI] Edge costs: 0%| | 0/27 [00:00, ?it/s]\n [ComfyUI] Edge costs: 4%|3 | 1/27 [00:02<00:58, 2.26s/it]\n [ComfyUI] Edge costs: 7%|7 | 2/27 [00:03<00:38, 1.55s/it]\n [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:04<00:36, 1.52s/it]\n [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:06<00:34, 1.51s/it]\n [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:07<00:33, 1.52s/it]\n [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:09<00:32, 1.56s/it]\n [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:10<00:26, 1.34s/it]\n [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:12<00:29, 1.56s/it]\n [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:14<00:30, 1.70s/it]\n [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:15<00:28, 1.67s/it]\n [ComfyUI] Edge costs: 41%|#### | 11/27 [00:17<00:25, 1.61s/it]\n [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:18<00:21, 1.43s/it]\n [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:20<00:21, 1.54s/it]\n [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:21<00:19, 1.53s/it]\n [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:23<00:18, 1.53s/it]\n [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:24<00:16, 1.53s/it]\n [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:25<00:12, 1.25s/it]\n [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:26<00:10, 1.13s/it]\n [ComfyUI] Edge costs: 70%|####### | 19/27 [00:27<00:08, 1.07s/it]\n [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:28<00:07, 1.05s/it]\n [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:29<00:06, 1.03s/it]\n [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:30<00:05, 1.03s/it]\n [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:31<00:04, 1.00s/it]\n [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:32<00:02, 1.04it/s]\n [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:32<00:01, 1.13it/s]\n [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:00, 1.01it/s]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.06it/s]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.29s/it]\n [ComfyUI] edges: 2697139, pairs: 97792 (need 100000)\n [ComfyUI] \n [ComfyUI] Merging 97792 pairs\n [ComfyUI] Pass 2: 102208 splats\n [ComfyUI] Edge costs: 0%| | 0/14 [00:00, ?it/s]\n [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:15, 1.15s/it]\n [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:12, 1.03s/it]\n [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:11, 1.09s/it]\n [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:04<00:10, 1.04s/it]\n [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:05<00:09, 1.03s/it]\n [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:06<00:07, 1.00it/s]\n [ComfyUI] Edge costs: 50%|##### | 7/14 [00:07<00:06, 1.01it/s]\n [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:07<00:05, 1.15it/s]\n [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:08<00:04, 1.17it/s]\n [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:09<00:03, 1.10it/s]\n [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:10<00:02, 1.07it/s]\n [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:11<00:01, 1.05it/s]\n [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:12<00:01, 1.01s/it]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.23it/s]"}, {"file": "frame_004.jpg", "time": 154.98, "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: ac2dda84-5259-4578-950a-77005c0dded4\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.5s)\n [capture-node] freeze=30ms shot=337ms unfreeze=5ms saved=True\n Frame 3 saved (frame_002.jpg, t=3.9s)\n [capture-periodic] freeze=1762ms shot=1873ms unfreeze=4ms saved=True\n [ComfyUI] Loading PLY: D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] Initial splats: 200000\n [ComfyUI] Pruned splats: 200000, target: 100000\n [ComfyUI] Opacity Mean: 0.53443545 Median: 0.48362076\n [ComfyUI] Pruning splats with opacity below 0.0000\n [ComfyUI] Original count: 200000, after opacity pruning: 200000\n [ComfyUI] After opacity pruning, 200000 splats remain.\n [ComfyUI] Pass 1: 200000 splats\n [ComfyUI] \n [ComfyUI] Edge costs: 0%| | 0/27 [00:00, ?it/s]\n [ComfyUI] Edge costs: 4%|3 | 1/27 [00:02<00:58, 2.26s/it]\n [ComfyUI] Edge costs: 7%|7 | 2/27 [00:03<00:38, 1.55s/it]\n [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:04<00:36, 1.52s/it]\n [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:06<00:34, 1.51s/it]\n [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:07<00:33, 1.52s/it]\n [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:09<00:32, 1.56s/it]\n [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:10<00:26, 1.34s/it]\n [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:12<00:29, 1.56s/it]\n [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:14<00:30, 1.70s/it]\n [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:15<00:28, 1.67s/it]\n [ComfyUI] Edge costs: 41%|#### | 11/27 [00:17<00:25, 1.61s/it]\n [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:18<00:21, 1.43s/it]\n [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:20<00:21, 1.54s/it]\n [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:21<00:19, 1.53s/it]\n [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:23<00:18, 1.53s/it]\n [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:24<00:16, 1.53s/it]\n [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:25<00:12, 1.25s/it]\n [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:26<00:10, 1.13s/it]\n [ComfyUI] Edge costs: 70%|####### | 19/27 [00:27<00:08, 1.07s/it]\n [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:28<00:07, 1.05s/it]\n [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:29<00:06, 1.03s/it]\n [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:30<00:05, 1.03s/it]\n [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:31<00:04, 1.00s/it]\n [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:32<00:02, 1.04it/s]\n [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:32<00:01, 1.13it/s]\n [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:00, 1.01it/s]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.06it/s]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.29s/it]\n [ComfyUI] edges: 2697139, pairs: 97792 (need 100000)\n [ComfyUI] \n [ComfyUI] Merging 97792 pairs\n [ComfyUI] Pass 2: 102208 splats\n [ComfyUI] Edge costs: 0%| | 0/14 [00:00, ?it/s]\n [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:15, 1.15s/it]\n [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:12, 1.03s/it]\n [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:11, 1.09s/it]\n [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:04<00:10, 1.04s/it]\n [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:05<00:09, 1.03s/it]\n [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:06<00:07, 1.00it/s]\n [ComfyUI] Edge costs: 50%|##### | 7/14 [00:07<00:06, 1.01it/s]\n [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:07<00:05, 1.15it/s]\n [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:08<00:04, 1.17it/s]\n [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:09<00:03, 1.10it/s]\n [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:10<00:02, 1.07it/s]\n [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:11<00:01, 1.05it/s]\n [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:12<00:01, 1.01s/it]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.23it/s]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.07it/s]\n [ComfyUI] GaussianMerge: wrote D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\output\\merged.ply (100000 splats, 23.7 MB)\n [ComfyUI] Prompt executed in 148.96 seconds\n Frame 4 saved (frame_003.jpg, t=148.6s)\n [capture-periodic] freeze=1782ms shot=1867ms unfreeze=67ms saved=True"}, {"file": "frame_005.jpg", "time": 170.92007398605347, "log": "Final screenshot"}], "total_time": 168.66}};
const inIframe = window !== window.top;
let currentWorkflow = null;
diff --git a/dev/windows-cpu/logs/merge_splats.log b/dev/windows-cpu/logs/merge_splats.log
index 89a6b5a..2f6dc91 100644
--- a/dev/windows-cpu/logs/merge_splats.log
+++ b/dev/windows-cpu/logs/merge_splats.log
@@ -7,29 +7,25 @@ Capturing execution frames: merge_splats.json
[ComfyUI] Node 1: LoadPLY
[ComfyUI] Inputs: {"ply_file": "apple.ply"}
[ComfyUI] Node 2: PreviewGaussians
+ Queuing workflow for execution...
[ComfyUI] Inputs: {"fov_degrees": 50, "image_width": 512, "image_height": 512, "renderer": "spark", "transport_format": "ply", "ply_path": ["1", 0]}
[ComfyUI] Node 3: GaussianMerge
- Queuing workflow for execution...
[ComfyUI] Inputs: {"target_count": 100000, "output_filename": "merged", "opacity_threshold": 0, "k": 24, "ply_path": ["1", 0]}
[ComfyUI] Node 4: PreviewGaussians
[ComfyUI] Inputs: {"fov_degrees": 50, "image_width": 512, "image_height": 512, "renderer": "spark", "transport_format": "ply", "ply_path": ["3", 0]}
- [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59
+ [ComfyUI] Generated prompt_id: ac2dda84-5259-4578-950a-77005c0dded4
[ComfyUI] Calling execution.validate_prompt()...
[ComfyUI] Validation result: valid=True
[ComfyUI] === Validation PASSED ===
[ComfyUI] got prompt
- [ComfyUI] LoadPLY: apple.ply -> D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\input\apple.ply
- [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\input\apple.ply
+ [ComfyUI] LoadPLY: apple.ply -> D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\input\apple.ply
+ [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\input\apple.ply
Node executed (1 total), capturing...
- Frame 2 saved (frame_001.jpg, t=0.6s)
- [capture-node] freeze=134ms shot=205ms unfreeze=6ms saved=True
- Frame 3 saved (frame_002.jpg, t=4.2s)
- [capture-periodic] freeze=2071ms shot=2185ms unfreeze=8ms saved=True
- Frame 4 saved (frame_003.jpg, t=16.9s)
- [capture-periodic] freeze=2070ms shot=2181ms unfreeze=7ms saved=True
- Frame 5 saved (frame_004.jpg, t=23.3s)
- [capture-periodic] freeze=2385ms shot=1827ms unfreeze=4ms saved=True
- [ComfyUI] Loading PLY: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\input\apple.ply
+ Frame 2 saved (frame_001.jpg, t=0.5s)
+ [capture-node] freeze=30ms shot=337ms unfreeze=5ms saved=True
+ Frame 3 saved (frame_002.jpg, t=3.9s)
+ [capture-periodic] freeze=1762ms shot=1873ms unfreeze=4ms saved=True
+ [ComfyUI] Loading PLY: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\input\apple.ply
[ComfyUI] Initial splats: 200000
[ComfyUI] Pruned splats: 200000, target: 100000
[ComfyUI] Opacity Mean: 0.53443545 Median: 0.48362076
@@ -39,73 +35,76 @@ Capturing execution frames: merge_splats.json
[ComfyUI] Pass 1: 200000 splats
[ComfyUI]
[ComfyUI] Edge costs: 0%| | 0/27 [00:00, ?it/s]
- [ComfyUI] Edge costs: 4%|3 | 1/27 [00:01<00:33, 1.29s/it]
- [ComfyUI] Edge costs: 7%|7 | 2/27 [00:02<00:31, 1.26s/it]
- [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:03<00:31, 1.30s/it]
- [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:05<00:31, 1.37s/it]
- [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:06<00:30, 1.40s/it]
- [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:08<00:29, 1.40s/it]
- [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:08<00:23, 1.18s/it]
- [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:09<00:21, 1.14s/it]
- [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:11<00:21, 1.18s/it]
- [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:12<00:21, 1.28s/it]
- [ComfyUI] Edge costs: 41%|#### | 11/27 [00:14<00:23, 1.47s/it]
- [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:16<00:21, 1.44s/it]
- [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:16<00:17, 1.24s/it]
- [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:18<00:16, 1.25s/it]
- [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:19<00:15, 1.27s/it]
- [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:20<00:14, 1.33s/it]
- [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:22<00:13, 1.33s/it]
- [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:23<00:10, 1.18s/it]
- [ComfyUI] Edge costs: 70%|####### | 19/27 [00:24<00:09, 1.15s/it]
- [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:25<00:08, 1.21s/it]
- [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:26<00:07, 1.26s/it]
- [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:28<00:06, 1.28s/it]
- [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:29<00:05, 1.31s/it]
- [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:30<00:03, 1.33s/it]
- [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:31<00:02, 1.18s/it]
- [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:01, 1.23s/it]
- [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.24s/it]
- [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.27s/it]
+ [ComfyUI] Edge costs: 4%|3 | 1/27 [00:02<00:58, 2.26s/it]
+ [ComfyUI] Edge costs: 7%|7 | 2/27 [00:03<00:38, 1.55s/it]
+ [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:04<00:36, 1.52s/it]
+ [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:06<00:34, 1.51s/it]
+ [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:07<00:33, 1.52s/it]
+ [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:09<00:32, 1.56s/it]
+ [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:10<00:26, 1.34s/it]
+ [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:12<00:29, 1.56s/it]
+ [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:14<00:30, 1.70s/it]
+ [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:15<00:28, 1.67s/it]
+ [ComfyUI] Edge costs: 41%|#### | 11/27 [00:17<00:25, 1.61s/it]
+ [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:18<00:21, 1.43s/it]
+ [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:20<00:21, 1.54s/it]
+ [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:21<00:19, 1.53s/it]
+ [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:23<00:18, 1.53s/it]
+ [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:24<00:16, 1.53s/it]
+ [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:25<00:12, 1.25s/it]
+ [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:26<00:10, 1.13s/it]
+ [ComfyUI] Edge costs: 70%|####### | 19/27 [00:27<00:08, 1.07s/it]
+ [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:28<00:07, 1.05s/it]
+ [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:29<00:06, 1.03s/it]
+ [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:30<00:05, 1.03s/it]
+ [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:31<00:04, 1.00s/it]
+ [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:32<00:02, 1.04it/s]
+ [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:32<00:01, 1.13it/s]
+ [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:00, 1.01it/s]
+ [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.06it/s]
+ [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.29s/it]
[ComfyUI] edges: 2697139, pairs: 97792 (need 100000)
[ComfyUI]
[ComfyUI] Merging 97792 pairs
[ComfyUI] Pass 2: 102208 splats
[ComfyUI] Edge costs: 0%| | 0/14 [00:00, ?it/s]
- [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:14, 1.13s/it]
- [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:16, 1.34s/it]
- [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:14, 1.34s/it]
- [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:05<00:13, 1.37s/it]
- [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:06<00:12, 1.35s/it]
- [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:07<00:10, 1.34s/it]
- [ComfyUI] Edge costs: 50%|##### | 7/14 [00:08<00:07, 1.11s/it]
- [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:09<00:06, 1.16s/it]
- [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:11<00:06, 1.20s/it]
- [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:12<00:05, 1.27s/it]
- [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:13<00:03, 1.28s/it]
- [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:14<00:02, 1.10s/it]
- [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:15<00:01, 1.08s/it]
- [ComfyUI] Edge costs: 100%|##########| 14/14 [00:16<00:00, 1.14it/s]
- [ComfyUI] Edge costs: 100%|##########| 14/14 [00:16<00:00, 1.15s/it]
- [ComfyUI] GaussianMerge: wrote D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\output\merged.ply (100000 splats, 23.7 MB)
- [ComfyUI] Prompt executed in 180.12 seconds
+ [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:15, 1.15s/it]
+ [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:12, 1.03s/it]
+ [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:11, 1.09s/it]
+ [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:04<00:10, 1.04s/it]
+ [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:05<00:09, 1.03s/it]
+ [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:06<00:07, 1.00it/s]
+ [ComfyUI] Edge costs: 50%|##### | 7/14 [00:07<00:06, 1.01it/s]
+ [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:07<00:05, 1.15it/s]
+ [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:08<00:04, 1.17it/s]
+ [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:09<00:03, 1.10it/s]
+ [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:10<00:02, 1.07it/s]
+ [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:11<00:01, 1.05it/s]
+ [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:12<00:01, 1.01s/it]
+ [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.23it/s]
+ [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.07it/s]
+ [ComfyUI] GaussianMerge: wrote D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\output\merged.ply (100000 splats, 23.7 MB)
+ [ComfyUI] Prompt executed in 148.96 seconds
+ Frame 4 saved (frame_003.jpg, t=148.6s)
+ [capture-periodic] freeze=1782ms shot=1867ms unfreeze=67ms saved=True
+ [capture-loop] iter=50 t=153.9s state={'complete': True, 'error': None, 'executedCount': 2, 'wsState': 1} eval_ms=1389 ram=4.3/16.0GB (27%) swap=0.2/2.9GB (7%) cpu=88% browser_rss=0.79GB
Node executed (2 total), capturing...
- Frame 6 saved (frame_005.jpg, t=184.0s)
- [capture-node] freeze=1584ms shot=1971ms unfreeze=0ms saved=True
- Execution complete (t=184.0s)
+ Frame 5 saved (frame_004.jpg, t=155.0s)
+ [capture-node] freeze=672ms shot=1785ms unfreeze=0ms saved=True
+ Execution complete (t=155.0s)
[3d-wait] Phase 1: Waiting for 'Loading 3D Model' text to disappear...
[3d-wait] Phase 1 done in 0.0s
[3d-wait] Phase 2: iframes=2
- [3d-wait] iframe viewer_ready=True (matched 1 console logs)
- [3d-wait] Unfrozen in 0.005s, rendering for 5s...
- [3d-wait] JS halted via CDP after 5.4s
- [3d-wait] Re-frozen in 10.2s
- [3d-wait] Total 3D wait: 10.2s
- Captured 6 unique frames over 197.84s
+ [3d-wait] iframe viewer_ready=True (matched 2 console logs)
+ [3d-wait] Unfrozen in 0.003s, rendering for 5s...
+ [3d-wait] JS halted via CDP after 6.4s
+ [3d-wait] Re-frozen in 11.2s
+ [3d-wait] Total 3D wait: 11.2s
+ Captured 5 unique frames over 168.66s
[debug] iframes: 2
- [debug] iframe[0]: src=http://127.0.0.1:41895/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True
- [debug] iframe[1]: src=http://127.0.0.1:41895/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True
+ [debug] iframe[0]: src=http://127.0.0.1:41894/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True
+ [debug] iframe[1]: src=http://127.0.0.1:41894/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True
[timing] trigger_3d_previews: 0.0s
Saved high-quality screenshot: merge_splats_executed.png
[timing] final_screenshot: 0.2s
- Captured 7 video frames
\ No newline at end of file
+ Captured 6 video frames
\ No newline at end of file
diff --git a/dev/windows-cpu/logs/merge_splats_console.log b/dev/windows-cpu/logs/merge_splats_console.log
index 9867844..9d612e3 100644
--- a/dev/windows-cpu/logs/merge_splats_console.log
+++ b/dev/windows-cpu/logs/merge_splats_console.log
@@ -8,12 +8,12 @@
[Console-error] Failed to load resource: the server responded with a status of 404 (Not Found)
[Console-error] Failed to load resource: the server responded with a status of 404 (Not Found)
[Console-error] [vite:preloadError] {url: null, fileType: unknown, chunkName: null, message: Failed to resolve module specifier "three". Relati…ences must start with either "/", "./", or "../".}
+[Console-error] [vite:preloadError] {url: null, fileType: unknown, chunkName: null, message: Failed to resolve module specifier "three". Relati…ences must start with either "/", "./", or "../".}
[Console-warning] THREE.WARNING: Multiple instances of Three.js being imported.
-[Console-error] [vite:preloadError] {url: null, fileType: unknown, chunkName: null, message: Failed to resolve module specifier "three". Relati…ences must start with either "/", "./", or "../".}
[Console-error] [vite:preloadError] {url: null, fileType: unknown, chunkName: null, message: Failed to resolve module specifier "playcanvas". R…ences must start with either "/", "./", or "../".}
[Console-error] [vite:preloadError] {url: null, fileType: unknown, chunkName: null, message: Failed to resolve module specifier "playcanvas". R…ences must start with either "/", "./", or "../".}
-[Console-error] [vite:preloadError] {url: null, fileType: unknown, chunkName: null, message: Failed to resolve module specifier "three". Relati…ences must start with either "/", "./", or "../".}
[Console-log] [GaussianPack] Loading extension...
+[Console-error] [vite:preloadError] {url: null, fileType: unknown, chunkName: null, message: Failed to resolve module specifier "three". Relati…ences must start with either "/", "./", or "../".}
[Console-error] [vite:preloadError] {url: null, fileType: unknown, chunkName: null, message: Failed to resolve module specifier "playcanvas". R…ences must start with either "/", "./", or "../".}
[Console-warning] [MaskEditor] ComfyApp.open_maskeditor is deprecated. Plugins should migrate to using the command system or direct node context menu integration.
[Console-log] [GaussianPack] Registering Preview Gaussians node
@@ -24,14 +24,16 @@
[Console-log] [GaussianPack] Resized node to: 512 x 572 (aspect ratio: 1.00 )
[Console-log] [GaussianPack] fetch start: /view?filename=apple.ply&type=input&subfolder=
[Console-log] [GaussianPack] fetch response 200; content-length=49601531
-[Console-log] [GaussianPack] download 25% 11.9/47.3 MB
-[Console-log] [GaussianPack] download 35% 16.8/47.3 MB
-[Console-log] [GaussianPack] download 40% 18.9/47.3 MB
+[Console-log] [GaussianPack] download 10% 4.8/47.3 MB
+[Console-log] [GaussianPack] download 15% 7.5/47.3 MB
+[Console-log] [GaussianPack] download 25% 12.0/47.3 MB
+[Console-log] [GaussianPack] download 30% 14.4/47.3 MB
+[Console-log] [GaussianPack] download 40% 19.2/47.3 MB
+[Console-log] [GaussianPack] download 45% 21.4/47.3 MB
[Console-log] [GaussianPack] download 50% 24.0/47.3 MB
-[Console-log] [GaussianPack] download 70% 33.1/47.3 MB
[Console-log] [GaussianPack] download 80% 38.0/47.3 MB
[Console-log] [GaussianPack] download 100% 47.3/47.3 MB
-[Console-log] [GaussianPack] fetch done: 49601531 bytes in 195 ms (243.2 MB/s)
+[Console-log] [GaussianPack] fetch done: 49601531 bytes in 245 ms (192.8 MB/s)
[Console-log] [GaussianPack] posting LOAD_MESH_DATA to iframe, renderer: spark filename: apple.ply
[Console-log] [GaussianViewer] Received LOAD_MESH_DATA, size: 49601531 renderer: spark
[Console-log] [GaussianViewer] ensureRenderer('spark') starting...
@@ -41,16 +43,19 @@
[Console-log] [GaussianViewer] Adapter ready: spark
[Console-log] [GaussianViewer] Loading splat (49,601,531 bytes) via spark...
[Console-log] [Spark] new SplatMesh url=apple.ply
-[Console-warning] [.WebGL-0x514405ba6200]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
-[Console-warning] [.WebGL-0x514405ba6200]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
-[Console-warning] [.WebGL-0x514405ba6200]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
-[Console-warning] [.WebGL-0x514405ba6200]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels (this message will no longer repeat)
+[Console-warning] [.WebGL-0x648c05659400]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
+[Console-warning] [.WebGL-0x648c05659400]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
+[Console-warning] [.WebGL-0x648c05659400]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
+[Console-warning] [.WebGL-0x648c05659400]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels (this message will no longer repeat)
+[Console-log] [Spark] parse 0%
+[Console-log] [Spark] parse 1%
[Console-log] [Spark] parse 51%
+[Console-log] [Spark] parse 61%
[Console-log] [Spark] parse 70%
[Console-log] [Spark] parse 80%
[Console-log] [Spark] parse 100%
-[Console-log] [Spark] loaded 200000 splats in 1128 ms
-[Console-log] [GaussianViewer] adapter.loadSplat resolved in 1129 ms
+[Console-log] [Spark] loaded 200000 splats in 1115 ms
+[Console-log] [GaussianViewer] adapter.loadSplat resolved in 1116 ms
[Console-log] [GaussianViewer] frameOnBounds: bounds center=(0.002, -0.005, -0.015) size=(1.808, 1.857, 1.969)
[Console-log] [GaussianViewer] Framed: cam=(0.00, -0.01, -2.44) target=(0.00, -0.01, -0.02) maxExtent=1.97 radius=2.43 fov=50
[Console-log] [GaussianViewer] Loaded successfully
@@ -59,13 +64,10 @@
[Console-log] [GaussianPack] fetch start: /view?filename=merged.ply&type=output&subfolder=
[Console-log] [GaussianPack] fetch response 200; content-length=24801531
[Console-log] [GaussianPack] download 25% 6.0/23.7 MB
-[Console-log] [GaussianPack] download 35% 8.5/23.7 MB
-[Console-log] [GaussianPack] download 45% 10.8/23.7 MB
[Console-log] [GaussianPack] download 50% 12.0/23.7 MB
-[Console-log] [GaussianPack] download 60% 14.4/23.7 MB
-[Console-log] [GaussianPack] download 70% 16.6/23.7 MB
+[Console-log] [GaussianPack] download 95% 22.6/23.7 MB
[Console-log] [GaussianPack] download 100% 23.7/23.7 MB
-[Console-log] [GaussianPack] fetch done: 24801531 bytes in 3559 ms (6.6 MB/s)
+[Console-log] [GaussianPack] fetch done: 24801531 bytes in 106 ms (222.7 MB/s)
[Console-log] [GaussianPack] posting LOAD_MESH_DATA to iframe, renderer: spark filename: merged.ply
[Console-log] [GaussianViewer] Received LOAD_MESH_DATA, size: 24801531 renderer: spark
[Console-log] [GaussianViewer] ensureRenderer('spark') starting...
@@ -77,8 +79,8 @@
[Console-log] [Spark] new SplatMesh url=merged.ply
[Console-log] [Spark] parse 51%
[Console-log] [Spark] parse 100%
-[Console-log] [Spark] loaded 100000 splats in 3769 ms
-[Console-log] [GaussianViewer] adapter.loadSplat resolved in 3769 ms
+[Console-log] [Spark] loaded 100000 splats in 5052 ms
+[Console-log] [GaussianViewer] adapter.loadSplat resolved in 5053 ms
[Console-log] [GaussianViewer] frameOnBounds: bounds center=(0.001, -0.005, -0.015) size=(1.807, 1.857, 1.968)
[Console-log] [GaussianViewer] Framed: cam=(0.00, -0.01, -2.44) target=(0.00, -0.01, -0.02) maxExtent=1.97 radius=2.43 fov=50
[Console-log] [GaussianViewer] Loaded successfully
\ No newline at end of file
diff --git a/dev/windows-cpu/logs/merge_splats_resources.csv b/dev/windows-cpu/logs/merge_splats_resources.csv
index 2a7947a..798ea05 100644
--- a/dev/windows-cpu/logs/merge_splats_resources.csv
+++ b/dev/windows-cpu/logs/merge_splats_resources.csv
@@ -1,201 +1,173 @@
# total_ram_gb=16.0
t,ram_gb,vram_gb
-0.0,0.51,
-1.0,0.51,
-2.0,0.52,
-3.0,0.52,
-4.0,0.52,
-5.0,0.52,
-6.0,0.52,
-7.0,0.52,
-8.1,0.52,
-9.1,0.52,
-10.1,0.61,
-12.0,0.75,
-13.0,0.75,
-14.1,0.75,
-15.1,0.75,
-16.4,0.75,
-17.5,0.75,
-18.6,0.75,
-19.8,0.75,
-20.8,0.75,
-21.9,0.75,
-23.0,0.75,
-24.1,0.75,
-25.3,0.75,
-26.3,0.75,
-27.4,0.75,
-28.5,0.75,
-29.5,0.75,
-30.6,0.75,
-31.7,0.75,
-32.8,0.75,
-33.8,0.75,
-35.0,0.75,
-36.1,0.75,
-37.4,0.75,
-38.4,0.75,
-39.5,0.75,
-40.8,0.75,
-41.9,0.75,
-42.9,0.75,
-44.0,0.75,
-45.1,0.75,
-46.1,0.75,
-47.2,0.75,
-48.2,0.75,
-49.3,0.75,
-50.3,0.75,
-51.4,0.75,
-52.4,0.75,
-53.5,0.75,
-54.5,0.75,
-55.6,0.75,
-56.6,0.75,
-57.7,0.75,
-58.8,0.75,
-59.8,0.75,
-60.8,0.75,
-61.9,0.75,
-62.9,0.75,
-64.0,0.75,
-65.1,0.75,
-66.1,0.75,
-67.1,0.75,
-68.2,0.75,
-69.2,0.75,
-70.2,0.75,
-71.3,0.75,
-72.3,0.75,
-73.4,0.77,
-74.4,0.71,
-75.5,0.71,
-76.6,0.7,
-77.6,0.68,
-78.7,0.71,
-79.7,0.7,
-80.8,0.69,
-81.9,0.68,
-82.9,0.69,
-83.9,0.69,
-84.9,0.66,
-86.0,0.7,
-87.0,0.67,
-88.1,0.74,
-89.1,0.69,
-90.1,0.68,
-91.2,0.69,
-92.2,0.68,
-93.3,0.66,
-94.3,0.72,
-95.4,0.68,
-96.4,0.67,
-97.4,0.68,
-98.4,0.67,
-99.5,0.66,
-100.5,0.63,
-101.5,0.67,
-102.6,0.66,
-103.6,0.65,
-104.6,0.64,
-105.6,0.64,
-106.7,0.62,
-107.7,0.65,
-108.8,0.62,
-109.8,0.62,
-110.8,0.61,
-111.8,0.61,
-112.9,0.61,
-113.9,0.61,
-114.9,0.61,
-116.0,0.61,
-117.1,0.61,
-118.2,0.61,
-119.2,0.61,
-120.2,0.61,
-121.2,0.61,
-122.3,0.61,
-123.3,0.6,
-124.4,0.63,
-125.4,0.59,
-126.5,0.55,
-127.5,0.59,
-128.6,0.59,
-129.6,0.58,
-130.7,0.58,
-131.7,0.58,
-132.8,0.58,
-133.8,0.58,
-134.8,0.58,
-135.9,0.57,
-136.9,0.56,
-137.9,0.56,
-139.0,0.55,
-140.0,0.54,
-141.0,0.54,
-142.1,0.53,
-143.1,0.53,
-144.1,0.53,
-145.2,0.52,
-146.3,0.51,
-147.3,0.49,
-148.3,0.51,
-149.4,0.5,
-150.4,0.49,
-151.4,0.47,
-152.4,0.5,
-153.5,0.5,
-154.5,0.53,
-155.5,0.49,
-156.6,0.49,
-157.6,0.48,
-158.6,0.45,
-159.7,0.49,
-160.7,0.45,
-161.8,0.42,
-162.8,0.41,
-163.8,0.4,
-164.9,0.39,
-165.9,0.39,
-166.9,0.38,
-168.0,0.38,
-169.0,0.37,
-170.0,0.37,
-171.0,0.37,
-172.1,0.36,
-173.1,0.36,
-174.1,0.36,
-175.2,0.35,
-176.2,0.35,
-177.2,0.35,
-178.3,0.34,
-179.3,0.34,
-180.3,0.34,
-181.4,0.33,
-182.4,0.33,
-183.4,0.33,
-184.5,0.32,
-185.5,0.32,
-186.5,0.32,
-187.6,0.31,
-188.6,0.31,
-189.6,0.28,
-190.7,0.35,
-191.7,0.35,
-192.7,0.35,
-193.7,0.35,
-194.7,0.35,
-195.8,0.34,
-196.9,0.34,
-198.0,0.34,
-199.0,0.34,
-200.0,0.34,
-201.0,0.34,
-202.1,0.34,
-203.1,0.34,
-204.1,0.34,
-205.1,0.34,
-206.1,0.34,
-207.1,0.34,
-208.1,0.34,
+0.0,0.5,
+1.0,0.5,
+2.0,0.51,
+3.0,0.51,
+4.0,0.51,
+5.0,0.51,
+6.0,0.51,
+7.0,0.51,
+8.0,0.51,
+9.0,0.59,
+10.1,0.59,
+11.1,0.74,
+12.2,0.74,
+13.2,0.74,
+14.2,0.74,
+15.2,0.74,
+16.2,0.74,
+17.3,0.74,
+18.3,0.74,
+19.3,0.74,
+20.4,0.74,
+21.4,0.74,
+22.4,0.74,
+23.5,0.74,
+24.5,0.74,
+25.5,0.74,
+26.6,0.74,
+27.7,0.74,
+28.7,0.74,
+29.8,0.74,
+30.8,0.74,
+31.8,0.74,
+32.9,0.74,
+33.9,0.74,
+35.0,0.74,
+36.1,0.74,
+37.1,0.74,
+38.2,0.74,
+39.2,0.74,
+40.2,0.74,
+41.3,0.74,
+42.3,0.74,
+43.4,0.74,
+44.5,0.74,
+45.5,0.74,
+46.6,0.74,
+47.7,0.74,
+48.8,0.74,
+50.4,0.74,
+51.6,0.74,
+52.7,0.74,
+54.0,0.74,
+55.1,0.74,
+56.3,0.74,
+57.5,0.74,
+59.1,0.74,
+60.1,0.74,
+61.2,0.74,
+62.4,0.74,
+63.6,0.74,
+64.7,0.66,
+65.8,0.69,
+66.8,0.67,
+67.8,0.67,
+68.9,0.7,
+69.9,0.7,
+71.0,0.67,
+72.0,0.7,
+73.0,0.7,
+74.1,0.68,
+75.1,0.68,
+76.2,0.7,
+77.2,0.68,
+78.5,0.71,
+79.5,0.7,
+80.5,0.67,
+81.6,0.71,
+82.6,0.71,
+83.7,0.69,
+84.7,0.67,
+85.8,0.71,
+86.8,0.7,
+87.8,0.67,
+88.9,0.71,
+89.9,0.68,
+90.9,0.69,
+92.0,0.7,
+93.0,0.7,
+94.1,0.7,
+95.1,0.7,
+96.2,0.71,
+97.2,0.69,
+98.3,0.71,
+99.3,0.66,
+100.3,0.68,
+101.3,0.66,
+102.4,0.67,
+103.4,0.67,
+104.4,0.67,
+105.4,0.67,
+106.5,0.67,
+107.5,0.67,
+108.5,0.67,
+109.5,0.67,
+110.6,0.69,
+111.7,0.62,
+112.7,0.62,
+113.7,0.65,
+114.7,0.65,
+115.8,0.65,
+116.8,0.65,
+117.8,0.65,
+118.8,0.65,
+119.9,0.65,
+120.9,0.65,
+121.9,0.65,
+123.0,0.65,
+124.0,0.65,
+125.0,0.65,
+126.1,0.64,
+127.1,0.64,
+128.1,0.64,
+129.2,0.64,
+130.2,0.64,
+131.2,0.66,
+132.2,0.68,
+133.2,0.64,
+134.3,0.63,
+135.3,0.64,
+136.3,0.64,
+137.4,0.64,
+138.4,0.57,
+139.4,0.56,
+140.4,0.56,
+141.4,0.56,
+142.5,0.56,
+143.5,0.56,
+144.5,0.56,
+145.5,0.55,
+146.6,0.55,
+147.6,0.55,
+148.6,0.55,
+149.6,0.54,
+150.7,0.54,
+151.7,0.54,
+152.7,0.53,
+153.8,0.53,
+154.8,0.53,
+155.8,0.53,
+156.8,0.52,
+157.9,0.52,
+158.9,0.47,
+159.9,0.47,
+160.9,0.47,
+161.9,0.47,
+163.5,0.47,
+164.6,0.47,
+165.6,0.47,
+166.6,0.47,
+167.6,0.47,
+168.6,0.47,
+169.6,0.47,
+170.6,0.47,
+171.6,0.47,
+172.6,0.47,
+173.7,0.47,
+174.7,0.47,
+175.7,0.47,
+176.7,0.47,
+177.7,0.47,
+178.7,0.47,
diff --git a/dev/windows-cpu/results.json b/dev/windows-cpu/results.json
index 11e3cc0..18e307f 100644
--- a/dev/windows-cpu/results.json
+++ b/dev/windows-cpu/results.json
@@ -1,12 +1,12 @@
{
- "timestamp": "2026-05-16T18:54:24.627815+00:00",
+ "timestamp": "2026-05-16T19:50:06.677030+00:00",
"platform": "windows",
"hardware": {
- "os": "Windows-10-10.0.26100-SP0",
- "cpu": "AMD64 Family 25 Model 1 Stepping 1, AuthenticAMD"
+ "os": "Windows-2025Server-10.0.26100-SP0",
+ "cpu": "AMD64 Family 25 Model 17 Stepping 1, AuthenticAMD"
},
- "commit_hash": "dbfe9ebfc35df61b0a91eee45eb331cfaf398146",
- "run_url": "https://github.com/PozzettiAndrea/comfy-gpu-ci/actions/runs/25969964015",
+ "commit_hash": "e0364a9f5f315befdc7517ba5f4bc0753f41081b",
+ "run_url": "https://github.com/PozzettiAndrea/comfy-gpu-ci/actions/runs/25971159369",
"success": true,
"summary": {
"total": 1,
@@ -17,19 +17,19 @@
{
"name": "merge_splats",
"status": "pass",
- "duration_seconds": 208.9,
+ "duration_seconds": 179.69,
"error": null,
"hardware": {
- "os": "Windows-10-10.0.26100-SP0",
- "cpu": "AMD64 Family 25 Model 1 Stepping 1, AuthenticAMD"
+ "os": "Windows-2025Server-10.0.26100-SP0",
+ "cpu": "AMD64 Family 25 Model 17 Stepping 1, AuthenticAMD"
},
"resources": {
"ram": {
- "peak": 0.77,
- "avg": 0.58
+ "peak": 0.74,
+ "avg": 0.64
},
"total_ram_gb": 16.0,
- "samples": 199
+ "samples": 171
}
}
]
diff --git a/dev/windows-cpu/screenshots/merge_splats_executed.png b/dev/windows-cpu/screenshots/merge_splats_executed.png
index 89b655d..45936cf 100644
Binary files a/dev/windows-cpu/screenshots/merge_splats_executed.png and b/dev/windows-cpu/screenshots/merge_splats_executed.png differ
diff --git a/dev/windows-cpu/session.log b/dev/windows-cpu/session.log
index 904b791..6f2c762 100644
--- a/dev/windows-cpu/session.log
+++ b/dev/windows-cpu/session.log
@@ -1,4 +1,4 @@
-[00:00] Crash dump logging enabled: D:\a\comfy-gpu-ci\comfy-gpu-ci\comfy-test-logs\GaussianPack-1848\dev\windows-cpu\crash_dump.log
+[00:00] Crash dump logging enabled: D:\a\comfy-gpu-ci\comfy-gpu-ci\comfy-test-logs\GaussianPack-1944\dev\windows-cpu\crash_dump.log
[00:00]
[00:00] [1/5] SYNTAX
[00:00] ----------------------------------------
@@ -16,269 +16,268 @@
[DEBUG] server=None, api=None
[00:00]
Setting up ComfyUI...
-[00:00] Creating virtual environment at D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\.venv...
-[00:00] Running: uv venv D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\.venv --python 3.11
+[00:00] Creating virtual environment at D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\.venv...
+[00:00] Running: uv venv D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\.venv --python 3.12
[00:00] torch_version='2.10.0' -> pinning torch==2.10.0 torchvision==0.25.0 torchaudio==2.10.0
-[00:00] Cloning ComfyUI (latest) to D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI...
-[00:00] Running: git clone --depth 1 https://github.com/comfyanonymous/ComfyUI.git D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI
+[00:00] Cloning ComfyUI (latest) to D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI...
+[00:00] Running: git clone --depth 1 https://github.com/comfyanonymous/ComfyUI.git D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI
[00:01] Pinning torch family from https://download.pytorch.org/whl/cpu: torch==2.10.0 torchvision==0.25.0 torchaudio==2.10.0
-[00:01] Running: uv pip install --python D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\.venv\Scripts\python.exe --index-url https://download.pytorch.org/whl/cpu --extra-index-url https://pypi.org/simple --index-strategy unsafe-best-match torch==2.10.0 torchvision==0.25.0 torchaudio==2.10.0
-[00:25] Installing ComfyUI requirements into D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\.venv...
-[00:25] comfyui-frontend-package==1.43.18
-[00:25] comfyui-workflow-templates==0.9.77
-[00:25] comfyui-embedded-docs==0.5.0
-[00:25] torch
-[00:25] torchsde
-[00:25] torchvision
-[00:25] torchaudio
-[00:25] numpy>=1.25.0
-[00:25] einops
-[00:25] transformers>=4.50.3
-[00:25] tokenizers>=0.13.3
-[00:25] sentencepiece
-[00:25] safetensors>=0.4.2
-[00:25] aiohttp>=3.11.8
-[00:25] yarl>=1.18.0
-[00:25] pyyaml
-[00:25] Pillow
-[00:25] scipy
-[00:25] tqdm
-[00:25] psutil
-[00:25] alembic
-[00:25] SQLAlchemy>=2.0.0
-[00:25] filelock
-[00:25] av>=14.2.0
-[00:25] comfy-kitchen>=0.2.8
-[00:25] comfy-aimdo==0.3.0
-[00:25] requests
-[00:25] simpleeval>=1.0.0
-[00:25] blake3
-[00:25]
-[00:25] #non essential dependencies:
-[00:25] kornia>=0.7.1
-[00:25] spandrel
-[00:25] pydantic~=2.0
-[00:25] pydantic-settings~=2.0
-[00:25] PyOpenGL
-[00:25] glfw
-[00:25] Running: uv pip install --python D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\.venv\Scripts\python.exe --index-url https://download.pytorch.org/whl/cpu --extra-index-url https://pypi.org/simple --index-strategy unsafe-best-match -r D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\requirements.txt
-[00:54]
+[00:01] Running: uv pip install --python D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\.venv\Scripts\python.exe --index-url https://download.pytorch.org/whl/cpu --extra-index-url https://pypi.org/simple --index-strategy unsafe-best-match torch==2.10.0 torchvision==0.25.0 torchaudio==2.10.0
+[00:24] Installing ComfyUI requirements into D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\.venv...
+[00:24] comfyui-frontend-package==1.43.18
+[00:24] comfyui-workflow-templates==0.9.77
+[00:24] comfyui-embedded-docs==0.5.0
+[00:24] torch
+[00:24] torchsde
+[00:24] torchvision
+[00:24] torchaudio
+[00:24] numpy>=1.25.0
+[00:24] einops
+[00:24] transformers>=4.50.3
+[00:24] tokenizers>=0.13.3
+[00:24] sentencepiece
+[00:24] safetensors>=0.4.2
+[00:24] aiohttp>=3.11.8
+[00:24] yarl>=1.18.0
+[00:24] pyyaml
+[00:24] Pillow
+[00:24] scipy
+[00:24] tqdm
+[00:24] psutil
+[00:24] alembic
+[00:24] SQLAlchemy>=2.0.0
+[00:24] filelock
+[00:24] av>=14.2.0
+[00:24] comfy-kitchen>=0.2.8
+[00:24] comfy-aimdo==0.3.0
+[00:24] requests
+[00:24] simpleeval>=1.0.0
+[00:24] blake3
+[00:24]
+[00:24] #non essential dependencies:
+[00:24] kornia>=0.7.1
+[00:24] spandrel
+[00:24] pydantic~=2.0
+[00:24] pydantic-settings~=2.0
+[00:24] PyOpenGL
+[00:24] glfw
+[00:24] Running: uv pip install --python D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\.venv\Scripts\python.exe --index-url https://download.pytorch.org/whl/cpu --extra-index-url https://pypi.org/simple --index-strategy unsafe-best-match -r D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\requirements.txt
+[00:58]
Installing custom node...
-[00:54] Copying ComfyUI-GaussianPack to D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\custom_nodes\ComfyUI-GaussianPack...
-[00:54] Installing node requirements...
-[00:54] plyfile
-[00:54] git+https://github.com/saliteta/NanoGS.git
-[00:54] Running: uv pip install --python D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\.venv\Scripts\python.exe --index-url https://download.pytorch.org/whl/cpu --extra-index-url https://pypi.org/simple --index-strategy unsafe-best-match -r D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\custom_nodes\ComfyUI-GaussianPack\requirements.txt
-[01:00] Installing validation endpoint...
-[01:00] Cloning PozzettiAndrea/ComfyUI-validate-endpoint...
-[01:00] Running: git clone --depth 1 https://x-access-token:***@github.com/PozzettiAndrea/ComfyUI-validate-endpoint.git D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\custom_nodes\ComfyUI-validate-endpoint
-[01:01] [INSTALL] PASSED
-[01:01]
-[01:01] [3/5] REGISTRATION
-[01:01] ----------------------------------------
-[01:01]
+[00:58] Copying ComfyUI-GaussianPack to D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\custom_nodes\ComfyUI-GaussianPack...
+[00:58] Installing node requirements...
+[00:58] plyfile
+[00:58] git+https://github.com/saliteta/NanoGS.git
+[00:58] Running: uv pip install --python D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\.venv\Scripts\python.exe --index-url https://download.pytorch.org/whl/cpu --extra-index-url https://pypi.org/simple --index-strategy unsafe-best-match -r D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\custom_nodes\ComfyUI-GaussianPack\requirements.txt
+[01:02] Installing validation endpoint...
+[01:02] Cloning PozzettiAndrea/ComfyUI-validate-endpoint...
+[01:02] Running: git clone --depth 1 https://x-access-token:***@github.com/PozzettiAndrea/ComfyUI-validate-endpoint.git D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\custom_nodes\ComfyUI-validate-endpoint
+[01:03] [INSTALL] PASSED
+[01:03]
+[01:03] [3/5] REGISTRATION
+[01:03] ----------------------------------------
+[01:03]
[DEBUG] server=None, api=None
-[01:01]
+[01:03]
Starting ComfyUI server...
-[01:01] Starting ComfyUI server on port 41895...
-[01:01] Starting ComfyUI server on port 41895...
-[01:01] Waiting for server to be ready (timeout: 600s)...
-[01:04] [ComfyUI] setup plugin alembic.autogenerate.schemas
-[01:04] [ComfyUI] setup plugin alembic.autogenerate.tables
-[01:04] [ComfyUI] setup plugin alembic.autogenerate.types
-[01:04] [ComfyUI] setup plugin alembic.autogenerate.constraints
-[01:04] [ComfyUI] setup plugin alembic.autogenerate.defaults
-[01:04] [ComfyUI] setup plugin alembic.autogenerate.comments
-[01:04] [ComfyUI]
-[01:04] [ComfyUI] Prestartup times for custom nodes:
-[01:04] [ComfyUI] 0.0 seconds: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\custom_nodes\ComfyUI-GaussianPack
-[01:04] [ComfyUI]
-[01:12] [ComfyUI] Found comfy_kitchen backend eager: {'available': True, 'disabled': False, 'unavailable_reason': None, 'capabilities': ['apply_rope', 'apply_rope1', 'dequantize_mxfp8', 'dequantize_nvfp4', 'dequantize_per_tensor_fp8', 'quantize_mxfp8', 'quantize_nvfp4', 'quantize_per_tensor_fp8', 'scaled_mm_mxfp8', 'scaled_mm_nvfp4']}
-[01:12] [ComfyUI] Found comfy_kitchen backend cuda: {'available': False, 'disabled': True, 'unavailable_reason': 'CUDA not available on this system', 'capabilities': []}
-[01:12] [ComfyUI] Found comfy_kitchen backend triton: {'available': False, 'disabled': True, 'unavailable_reason': "ImportError: No module named 'triton'", 'capabilities': []}
-[01:12] [ComfyUI] Checkpoint files will always be loaded safely.
-[01:12] [ComfyUI] Total VRAM 16379 MB, total RAM 16379 MB
-[01:12] [ComfyUI] pytorch version: 2.10.0+cpu
-[01:12] [ComfyUI] Set vram state to: DISABLED
-[01:12] [ComfyUI] Device: cpu
-[01:13] [ComfyUI] Using sub quadratic optimization for attention, if you have memory or speed issues try using: --use-split-cross-attention
-[01:19] [ComfyUI] Python version: 3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]
-[01:19] [ComfyUI] ComfyUI version: 0.21.1
-[01:19] [ComfyUI] comfy-aimdo version: 0.3.0
-[01:19] [ComfyUI] comfy-kitchen version: 0.2.8
-[01:19] [ComfyUI] ****** User settings have been changed to be stored on the server instead of browser storage. ******
-[01:19] [ComfyUI] ****** For multi-user setups add the --multi-user CLI argument to enable multiple user profiles. ******
-[01:19] [ComfyUI] comfyui-frontend-package version: 1.43.18
-[01:19] [ComfyUI] comfyui-workflow-templates version: 0.9.77
-[01:19] [ComfyUI] comfyui-embedded-docs version: 0.5.0
-[01:19] [ComfyUI] comfy-kitchen version: 0.2.8
-[01:19] [ComfyUI] comfy-aimdo version: 0.3.0
-[01:19] [ComfyUI] [Prompt Server] web root: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\.venv\Lib\site-packages\comfyui_frontend_package\static
-[01:19] [ComfyUI] Asset seeder disabled
-[01:22] [ComfyUI] loading...
-[01:22] [ComfyUI]
-[01:22] [ComfyUI] Import times for custom nodes:
-[01:22] [ComfyUI] 0.0 seconds: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\custom_nodes\websocket_image_save.py
-[01:22] [ComfyUI] 0.0 seconds: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\custom_nodes\ComfyUI-validate-endpoint
-[01:22] [ComfyUI] 0.0 seconds: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\custom_nodes\ComfyUI-GaussianPack
-[01:22] [ComfyUI]
-[01:22] [ComfyUI] Context impl SQLiteImpl.
-[01:22] [ComfyUI] Will assume non-transactional DDL.
-[01:22] [ComfyUI] Context impl SQLiteImpl.
-[01:22] [ComfyUI] Will assume non-transactional DDL.
-[01:22] [ComfyUI] Running upgrade -> 0001_assets, Initial assets schema
-[01:22] [ComfyUI] Revision ID: 0001_assets
-[01:22] [ComfyUI] Revises: None
-[01:22] [ComfyUI] Create Date: 2025-12-10 00:00:00
-[01:22] [ComfyUI] Running upgrade 0001_assets -> 0002_merge_to_asset_references, Merge AssetInfo and AssetCacheState into unified asset_references table.
-[01:22] [ComfyUI] Running upgrade 0002_merge_to_asset_references -> 0003_add_metadata_job_id, Add system_metadata and job_id columns to asset_references.
-[01:22] [ComfyUI] Change preview_id FK from assets.id to asset_references.id.
-[01:22] [ComfyUI] Database upgraded from None to 0003_add_metadata_job_id
-[01:22] [ComfyUI] Starting server
-[01:22] [ComfyUI]
-[01:22] [ComfyUI] To see the GUI go to: http://127.0.0.1:41895
-[01:22] Server responding, waiting for nodes to load...
-[01:42] Server is ready!
-[01:42] Checking for import errors in server logs...
-[01:42] No import errors detected
-[01:42] Found 726 registered nodes
-[01:42] [REGISTRATION] PASSED
-[01:42]
-[01:42] [4/5] INSTANTIATION
-[01:42] ----------------------------------------
-[01:42]
-[DEBUG] server=, api=
-[01:42] Testing node constructors...
-[01:46] All 5 node(s) instantiated successfully!
-[01:46] [INSTANTIATION] PASSED
-[01:46]
-[01:46] [5/5] EXECUTION
-[01:46] ----------------------------------------
-[01:46]
-[DEBUG] server=, api=
-[01:46] CPU runner - will execute 1 workflow(s)
-[01:46] Running 1 workflow(s) (all with videos)...
-[01:46] Installing screenshot dependencies (playwright, pillow)...
-[01:48] Packages installed, downloading chromium browser...
-[02:03] Screenshot dependencies installed successfully
-[02:04] Starting headless browser...
-[02:04] Downloading Mesa llvmpipe for Windows...
-[02:10] Copied opengl32.dll to Chromium dir
-[02:10] Copied libgallium_wgl.dll to Chromium dir
-[02:10] Using Mesa llvmpipe (desktop GL) -- multithreaded CPU rendering
-[02:10] Capturing execution frames: merge_splats.json
-[02:19] Frame 1 saved (frame_000.jpg, t=0.0s)
-[02:19] Validating workflow...
-[02:19] [ComfyUI] === /validate endpoint called ===
-[02:19] [ComfyUI] Received JSON with keys: ['prompt']
-[02:19] [ComfyUI] Prompt has 4 nodes
-[02:19] [ComfyUI] Node 1: LoadPLY
-[02:19] [ComfyUI] Inputs: {"ply_file": "apple.ply"}
-[02:19] [ComfyUI] Node 2: PreviewGaussians
-[02:19] [ComfyUI] Inputs: {"fov_degrees": 50, "image_width": 512, "image_height": 512, "renderer": "spark", "transport_format": "ply", "ply_path": ["1", 0]}
-[02:19] [ComfyUI] Node 3: GaussianMerge
-[02:19] [ComfyUI] Inputs: {"target_count": 100000, "output_filename": "merged", "opacity_threshold": 0, "k": 24, "ply_path": ["1", 0]}
-[02:19] Queuing workflow for execution...
-[02:19] [ComfyUI] Node 4: PreviewGaussians
-[02:19] [ComfyUI] Inputs: {"fov_degrees": 50, "image_width": 512, "image_height": 512, "renderer": "spark", "transport_format": "ply", "ply_path": ["3", 0]}
-[02:19] [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59
-[02:19] [ComfyUI] Calling execution.validate_prompt()...
-[02:19] [ComfyUI] Validation result: valid=True
-[02:19] [ComfyUI] === Validation PASSED ===
-[02:20] [ComfyUI] got prompt
-[02:20] [ComfyUI] LoadPLY: apple.ply -> D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\input\apple.ply
-[02:20] [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\input\apple.ply
-[02:20] Node executed (1 total), capturing...
-[02:20] Frame 2 saved (frame_001.jpg, t=0.6s)
-[02:20] [capture-node] freeze=134ms shot=205ms unfreeze=6ms saved=True
-[02:28] Frame 3 saved (frame_002.jpg, t=4.2s)
-[02:28] [capture-periodic] freeze=2071ms shot=2185ms unfreeze=8ms saved=True
-[02:40] Frame 4 saved (frame_003.jpg, t=16.9s)
-[02:40] [capture-periodic] freeze=2070ms shot=2181ms unfreeze=7ms saved=True
-[02:47] Frame 5 saved (frame_004.jpg, t=23.3s)
-[02:47] [capture-periodic] freeze=2385ms shot=1827ms unfreeze=4ms saved=True
-[03:24] [ComfyUI] Loading PLY: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\input\apple.ply
-[03:24] [ComfyUI] Initial splats: 200000
-[03:24] [ComfyUI] Pruned splats: 200000, target: 100000
-[03:24] [ComfyUI] Opacity Mean: 0.53443545 Median: 0.48362076
-[03:24] [ComfyUI] Pruning splats with opacity below 0.0000
-[03:24] [ComfyUI] Original count: 200000, after opacity pruning: 200000
-[03:24] [ComfyUI] After opacity pruning, 200000 splats remain.
-[03:24] [ComfyUI] Pass 1: 200000 splats
-[03:24] [ComfyUI]
-[03:25] [ComfyUI] Edge costs: 0%| | 0/27 [00:00, ?it/s]
-[03:26] [ComfyUI] Edge costs: 4%|3 | 1/27 [00:01<00:33, 1.29s/it]
-[03:28] [ComfyUI] Edge costs: 7%|7 | 2/27 [00:02<00:31, 1.26s/it]
-[03:29] [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:03<00:31, 1.30s/it]
-[03:31] [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:05<00:31, 1.37s/it]
-[03:32] [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:06<00:30, 1.40s/it]
-[03:33] [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:08<00:29, 1.40s/it]
-[03:34] [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:08<00:23, 1.18s/it]
-[03:35] [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:09<00:21, 1.14s/it]
-[03:37] [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:11<00:21, 1.18s/it]
-[03:39] [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:12<00:21, 1.28s/it]
-[03:40] [ComfyUI] Edge costs: 41%|#### | 11/27 [00:14<00:23, 1.47s/it]
-[03:41] [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:16<00:21, 1.44s/it]
-[03:42] [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:16<00:17, 1.24s/it]
-[03:43] [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:18<00:16, 1.25s/it]
-[03:45] [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:19<00:15, 1.27s/it]
-[03:46] [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:20<00:14, 1.33s/it]
-[03:47] [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:22<00:13, 1.33s/it]
-[03:48] [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:23<00:10, 1.18s/it]
-[03:49] [ComfyUI] Edge costs: 70%|####### | 19/27 [00:24<00:09, 1.15s/it]
-[03:51] [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:25<00:08, 1.21s/it]
-[03:52] [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:26<00:07, 1.26s/it]
-[03:53] [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:28<00:06, 1.28s/it]
-[03:55] [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:29<00:05, 1.31s/it]
-[03:56] [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:30<00:03, 1.33s/it]
-[03:57] [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:31<00:02, 1.18s/it]
-[03:58] [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:01, 1.23s/it]
-[03:58] [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.24s/it]
-[04:36] [ComfyUI] edges: 2697139, pairs: 97792 (need 100000)
-0, 1.27s/it]
-[04:36] [ComfyUI]
-[04:36] [ComfyUI] Merging 97792 pairs
-[04:36] [ComfyUI] Pass 2: 102208 splats
-[04:37] [ComfyUI] Edge costs: 0%| | 0/14 [00:00, ?it/s]
-[04:39] [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:14, 1.13s/it]
-[04:40] [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:16, 1.34s/it]
-[04:42] [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:14, 1.34s/it]
-[04:43] [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:05<00:13, 1.37s/it]
-[04:44] [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:06<00:12, 1.35s/it]
-[04:45] [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:07<00:10, 1.34s/it]
-[04:46] [ComfyUI] Edge costs: 50%|##### | 7/14 [00:08<00:07, 1.11s/it]
-[04:48] [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:09<00:06, 1.16s/it]
-[04:49] [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:11<00:06, 1.20s/it]
-[04:50] [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:12<00:05, 1.27s/it]
-[04:51] [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:13<00:03, 1.28s/it]
-[04:52] [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:14<00:02, 1.10s/it]
-[04:52] [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:15<00:01, 1.08s/it]
-[04:52] [ComfyUI] Edge costs: 100%|##########| 14/14 [00:16<00:00, 1.14it/s]
-[05:20] [ComfyUI] Edge costs: 100%|##########| 14/14 [00:16<00:00, 1.15s/it]
-[05:20] [ComfyUI] GaussianMerge: wrote D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1848\ComfyUI\output\merged.ply (100000 splats, 23.7 MB)
-[05:20] [ComfyUI] Prompt executed in 180.12 seconds
-[05:23] Node executed (2 total), capturing...
-[05:27] Frame 6 saved (frame_005.jpg, t=184.0s)
-[05:27] [capture-node] freeze=1584ms shot=1971ms unfreeze=0ms saved=True
-[05:27] Execution complete (t=184.0s)
-[05:27] [3d-wait] Phase 1: Waiting for 'Loading 3D Model' text to disappear...
-[05:27] [3d-wait] Phase 1 done in 0.0s
-[05:27] [3d-wait] Phase 2: iframes=2
-[05:27] [3d-wait] iframe viewer_ready=True (matched 1 console logs)
-[05:27] [3d-wait] Unfrozen in 0.005s, rendering for 5s...
-[05:32] [3d-wait] JS halted via CDP after 5.4s
-[05:37] [3d-wait] Re-frozen in 10.2s
-[05:37] [3d-wait] Total 3D wait: 10.2s
-[05:37] Captured 6 unique frames over 197.84s
-[05:37] [debug] iframes: 2
-[05:37] [debug] iframe[0]: src=http://127.0.0.1:41895/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True
-[05:37] [debug] iframe[1]: src=http://127.0.0.1:41895/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True
-[05:37] [timing] trigger_3d_previews: 0.0s
-[05:39] Saved high-quality screenshot: merge_splats_executed.png
-[05:39] [timing] final_screenshot: 0.2s
-[05:40] Results saved to D:\a\comfy-gpu-ci\comfy-gpu-ci\comfy-test-logs\GaussianPack-1848\dev\windows-cpu\results.json
-[05:40] Saved: D:\a\comfy-gpu-ci\comfy-gpu-ci\comfy-test-logs\GaussianPack-1848\dev\windows-cpu\index.html
-[05:40] [EXECUTION] PASSED
-[05:40]
+[01:03] Starting ComfyUI server on port 41894...
+[01:03] Starting ComfyUI server on port 41894...
+[01:03] Waiting for server to be ready (timeout: 600s)...
+[01:05] [ComfyUI] setup plugin alembic.autogenerate.schemas
+[01:05] [ComfyUI] setup plugin alembic.autogenerate.tables
+[01:05] [ComfyUI] setup plugin alembic.autogenerate.types
+[01:05] [ComfyUI] setup plugin alembic.autogenerate.constraints
+[01:05] [ComfyUI] setup plugin alembic.autogenerate.defaults
+[01:05] [ComfyUI] setup plugin alembic.autogenerate.comments
+[01:05] [ComfyUI]
+[01:05] [ComfyUI] Prestartup times for custom nodes:
+[01:05] [ComfyUI] 0.0 seconds: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\custom_nodes\ComfyUI-GaussianPack
+[01:05] [ComfyUI]
+[01:13] [ComfyUI] Found comfy_kitchen backend eager: {'available': True, 'disabled': False, 'unavailable_reason': None, 'capabilities': ['apply_rope', 'apply_rope1', 'dequantize_mxfp8', 'dequantize_nvfp4', 'dequantize_per_tensor_fp8', 'quantize_mxfp8', 'quantize_nvfp4', 'quantize_per_tensor_fp8', 'scaled_mm_mxfp8', 'scaled_mm_nvfp4']}
+[01:13] [ComfyUI] Found comfy_kitchen backend cuda: {'available': False, 'disabled': True, 'unavailable_reason': 'CUDA not available on this system', 'capabilities': []}
+[01:13] [ComfyUI] Found comfy_kitchen backend triton: {'available': False, 'disabled': True, 'unavailable_reason': "ImportError: No module named 'triton'", 'capabilities': []}
+[01:13] [ComfyUI] Checkpoint files will always be loaded safely.
+[01:13] [ComfyUI] Total VRAM 16379 MB, total RAM 16379 MB
+[01:13] [ComfyUI] pytorch version: 2.10.0+cpu
+[01:13] [ComfyUI] Set vram state to: DISABLED
+[01:13] [ComfyUI] Device: cpu
+[01:14] [ComfyUI] Using sub quadratic optimization for attention, if you have memory or speed issues try using: --use-split-cross-attention
+[01:21] [ComfyUI] Python version: 3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
+[01:21] [ComfyUI] ComfyUI version: 0.21.1
+[01:21] [ComfyUI] comfy-aimdo version: 0.3.0
+[01:21] [ComfyUI] comfy-kitchen version: 0.2.8
+[01:21] [ComfyUI] ****** User settings have been changed to be stored on the server instead of browser storage. ******
+[01:21] [ComfyUI] ****** For multi-user setups add the --multi-user CLI argument to enable multiple user profiles. ******
+[01:21] [ComfyUI] comfyui-frontend-package version: 1.43.18
+[01:21] [ComfyUI] comfyui-workflow-templates version: 0.9.77
+[01:21] [ComfyUI] comfyui-embedded-docs version: 0.5.0
+[01:21] [ComfyUI] comfy-kitchen version: 0.2.8
+[01:21] [ComfyUI] comfy-aimdo version: 0.3.0
+[01:21] [ComfyUI] [Prompt Server] web root: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\.venv\Lib\site-packages\comfyui_frontend_package\static
+[01:21] [ComfyUI] Asset seeder disabled
+[01:24] [ComfyUI] loading...
+[01:24] [ComfyUI]
+[01:24] [ComfyUI] Import times for custom nodes:
+[01:24] [ComfyUI] 0.0 seconds: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\custom_nodes\websocket_image_save.py
+[01:24] [ComfyUI] 0.0 seconds: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\custom_nodes\ComfyUI-validate-endpoint
+[01:24] [ComfyUI] 0.0 seconds: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\custom_nodes\ComfyUI-GaussianPack
+[01:24] [ComfyUI]
+[01:24] [ComfyUI] Context impl SQLiteImpl.
+[01:24] [ComfyUI] Will assume non-transactional DDL.
+[01:24] [ComfyUI] Context impl SQLiteImpl.
+[01:24] [ComfyUI] Will assume non-transactional DDL.
+[01:24] [ComfyUI] Running upgrade -> 0001_assets, Initial assets schema
+[01:24] [ComfyUI] Revision ID: 0001_assets
+[01:24] [ComfyUI] Revises: None
+[01:24] [ComfyUI] Create Date: 2025-12-10 00:00:00
+[01:25] [ComfyUI] Running upgrade 0001_assets -> 0002_merge_to_asset_references, Merge AssetInfo and AssetCacheState into unified asset_references table.
+[01:25] [ComfyUI] Running upgrade 0002_merge_to_asset_references -> 0003_add_metadata_job_id, Add system_metadata and job_id columns to asset_references.
+[01:25] [ComfyUI] Change preview_id FK from assets.id to asset_references.id.
+[01:25] [ComfyUI] Database upgraded from None to 0003_add_metadata_job_id
+[01:25] [ComfyUI] Starting server
+[01:25] [ComfyUI]
+[01:25] [ComfyUI] To see the GUI go to: http://127.0.0.1:41894
+[01:25] Server responding, waiting for nodes to load...
+[01:45] Server is ready!
+[01:45] Checking for import errors in server logs...
+[01:45] No import errors detected
+[01:45] Found 726 registered nodes
+[01:45] [REGISTRATION] PASSED
+[01:45]
+[01:45] [4/5] INSTANTIATION
+[01:45] ----------------------------------------
+[01:45]
+[DEBUG] server=, api=
+[01:45] Testing node constructors...
+[01:49] All 5 node(s) instantiated successfully!
+[01:49] [INSTANTIATION] PASSED
+[01:49]
+[01:49] [5/5] EXECUTION
+[01:49] ----------------------------------------
+[01:49]
+[DEBUG] server=, api=
+[01:49] CPU runner - will execute 1 workflow(s)
+[01:49] Running 1 workflow(s) (all with videos)...
+[01:49] Installing screenshot dependencies (playwright, pillow)...
+[01:54] Packages installed, downloading chromium browser...
+[02:07] Screenshot dependencies installed successfully
+[02:08] Starting headless browser...
+[02:08] Downloading Mesa llvmpipe for Windows...
+[02:13] Copied opengl32.dll to Chromium dir
+[02:13] Copied libgallium_wgl.dll to Chromium dir
+[02:13] Using Mesa llvmpipe (desktop GL) -- multithreaded CPU rendering
+[02:14] Capturing execution frames: merge_splats.json
+[02:23] Frame 1 saved (frame_000.jpg, t=0.0s)
+[02:23] Validating workflow...
+[02:23] [ComfyUI] === /validate endpoint called ===
+[02:23] [ComfyUI] Received JSON with keys: ['prompt']
+[02:23] [ComfyUI] Prompt has 4 nodes
+[02:23] [ComfyUI] Node 1: LoadPLY
+[02:23] [ComfyUI] Inputs: {"ply_file": "apple.ply"}
+[02:23] [ComfyUI] Node 2: PreviewGaussians
+[02:23] [ComfyUI] Inputs: {"fov_degrees": 50, "image_width": 512, "image_height": 512, "renderer": "spark", "transport_format": "ply", "ply_path": ["1", 0]}
+[02:23] Queuing workflow for execution...
+[02:23] [ComfyUI] Node 3: GaussianMerge
+[02:23] [ComfyUI] Inputs: {"target_count": 100000, "output_filename": "merged", "opacity_threshold": 0, "k": 24, "ply_path": ["1", 0]}
+[02:23] [ComfyUI] Node 4: PreviewGaussians
+[02:23] [ComfyUI] Inputs: {"fov_degrees": 50, "image_width": 512, "image_height": 512, "renderer": "spark", "transport_format": "ply", "ply_path": ["3", 0]}
+[02:23] [ComfyUI] Generated prompt_id: ac2dda84-5259-4578-950a-77005c0dded4
+[02:23] [ComfyUI] Calling execution.validate_prompt()...
+[02:23] [ComfyUI] Validation result: valid=True
+[02:23] [ComfyUI] === Validation PASSED ===
+[02:23] [ComfyUI] got prompt
+[02:23] [ComfyUI] LoadPLY: apple.ply -> D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\input\apple.ply
+[02:23] [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\input\apple.ply
+[02:23] Node executed (1 total), capturing...
+[02:23] Frame 2 saved (frame_001.jpg, t=0.5s)
+[02:23] [capture-node] freeze=30ms shot=337ms unfreeze=5ms saved=True
+[02:30] Frame 3 saved (frame_002.jpg, t=3.9s)
+[02:30] [capture-periodic] freeze=1762ms shot=1873ms unfreeze=4ms saved=True
+[03:18] [ComfyUI] Loading PLY: D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\input\apple.ply
+[03:18] [ComfyUI] Initial splats: 200000
+[03:18] [ComfyUI] Pruned splats: 200000, target: 100000
+[03:18] [ComfyUI] Opacity Mean: 0.53443545 Median: 0.48362076
+[03:18] [ComfyUI] Pruning splats with opacity below 0.0000
+[03:18] [ComfyUI] Original count: 200000, after opacity pruning: 200000
+[03:18] [ComfyUI] After opacity pruning, 200000 splats remain.
+[03:18] [ComfyUI] Pass 1: 200000 splats
+[03:18] [ComfyUI]
+[03:20] [ComfyUI] Edge costs: 0%| | 0/27 [00:00, ?it/s]
+[03:21] [ComfyUI] Edge costs: 4%|3 | 1/27 [00:02<00:58, 2.26s/it]
+[03:23] [ComfyUI] Edge costs: 7%|7 | 2/27 [00:03<00:38, 1.55s/it]
+[03:24] [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:04<00:36, 1.52s/it]
+[03:26] [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:06<00:34, 1.51s/it]
+[03:28] [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:07<00:33, 1.52s/it]
+[03:28] [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:09<00:32, 1.56s/it]
+[03:31] [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:10<00:26, 1.34s/it]
+[03:32] [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:12<00:29, 1.56s/it]
+[03:34] [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:14<00:30, 1.70s/it]
+[03:36] [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:15<00:28, 1.67s/it]
+[03:37] [ComfyUI] Edge costs: 41%|#### | 11/27 [00:17<00:25, 1.61s/it]
+[03:38] [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:18<00:21, 1.43s/it]
+[03:40] [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:20<00:21, 1.54s/it]
+[03:41] [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:21<00:19, 1.53s/it]
+[03:43] [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:23<00:18, 1.53s/it]
+[03:44] [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:24<00:16, 1.53s/it]
+[03:44] [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:25<00:12, 1.25s/it]
+[03:45] [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:26<00:10, 1.13s/it]
+[03:46] [ComfyUI] Edge costs: 70%|####### | 19/27 [00:27<00:08, 1.07s/it]
+[03:47] [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:28<00:07, 1.05s/it]
+[03:48] [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:29<00:06, 1.03s/it]
+[03:49] [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:30<00:05, 1.03s/it]
+[03:50] [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:31<00:04, 1.00s/it]
+[03:51] [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:32<00:02, 1.04it/s]
+[03:52] [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:32<00:01, 1.13it/s]
+[03:53] [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:00, 1.01it/s]
+[03:53] [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.06it/s]
+[04:19] [ComfyUI] edges: 2697139, pairs: 97792 (need 100000)
+0, 1.29s/it]
+[04:19] [ComfyUI]
+[04:19] [ComfyUI] Merging 97792 pairs
+[04:19] [ComfyUI] Pass 2: 102208 splats
+[04:20] [ComfyUI] Edge costs: 0%| | 0/14 [00:00, ?it/s]
+[04:21] [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:15, 1.15s/it]
+[04:22] [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:12, 1.03s/it]
+[04:23] [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:11, 1.09s/it]
+[04:24] [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:04<00:10, 1.04s/it]
+[04:25] [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:05<00:09, 1.03s/it]
+[04:26] [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:06<00:07, 1.00it/s]
+[04:27] [ComfyUI] Edge costs: 50%|##### | 7/14 [00:07<00:06, 1.01it/s]
+[04:27] [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:07<00:05, 1.15it/s]
+[04:28] [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:08<00:04, 1.17it/s]
+[04:29] [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:09<00:03, 1.10it/s]
+[04:30] [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:10<00:02, 1.07it/s]
+[04:32] [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:11<00:01, 1.05it/s]
+[04:32] [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:12<00:01, 1.01s/it]
+[04:32] [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.23it/s]
+[04:52] [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.07it/s]
+[04:52] [ComfyUI] GaussianMerge: wrote D:\a\comfy-gpu-ci\comfy-gpu-ci\test_workspaces\GaussianPack-1944\ComfyUI\output\merged.ply (100000 splats, 23.7 MB)
+[04:52] [ComfyUI] Prompt executed in 148.96 seconds
+[04:55] Frame 4 saved (frame_003.jpg, t=148.6s)
+[04:55] [capture-periodic] freeze=1782ms shot=1867ms unfreeze=67ms saved=True
+[04:57] [capture-loop] iter=50 t=153.9s state={'complete': True, 'error': None, 'executedCount': 2, 'wsState': 1} eval_ms=1389 ram=4.3/16.0GB (27%) swap=0.2/2.9GB (7%) cpu=88% browser_rss=0.79GB
+[04:57] Node executed (2 total), capturing...
+[05:00] Frame 5 saved (frame_004.jpg, t=155.0s)
+[05:00] [capture-node] freeze=672ms shot=1785ms unfreeze=0ms saved=True
+[05:00] Execution complete (t=155.0s)
+[05:00] [3d-wait] Phase 1: Waiting for 'Loading 3D Model' text to disappear...
+[05:00] [3d-wait] Phase 1 done in 0.0s
+[05:00] [3d-wait] Phase 2: iframes=2
+[05:00] [3d-wait] iframe viewer_ready=True (matched 2 console logs)
+[05:00] [3d-wait] Unfrozen in 0.003s, rendering for 5s...
+[05:06] [3d-wait] JS halted via CDP after 6.4s
+[05:11] [3d-wait] Re-frozen in 11.2s
+[05:11] [3d-wait] Total 3D wait: 11.2s
+[05:11] Captured 5 unique frames over 168.66s
+[05:11] [debug] iframes: 2
+[05:11] [debug] iframe[0]: src=http://127.0.0.1:41894/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True
+[05:11] [debug] iframe[1]: src=http://127.0.0.1:41894/extensions/ComfyUI-GaussianPack/viewer_gaussian.html?v=17, canvas=486x223, rafFrozen=True
+[05:11] [timing] trigger_3d_previews: 0.0s
+[05:13] Saved high-quality screenshot: merge_splats_executed.png
+[05:13] [timing] final_screenshot: 0.2s
+[05:14] Results saved to D:\a\comfy-gpu-ci\comfy-gpu-ci\comfy-test-logs\GaussianPack-1944\dev\windows-cpu\results.json
+[05:14] Saved: D:\a\comfy-gpu-ci\comfy-gpu-ci\comfy-test-logs\GaussianPack-1944\dev\windows-cpu\index.html
+[05:14] [EXECUTION] PASSED
+[05:14]
windows: PASSED
-[05:40] Stopping ComfyUI server...
+[05:14] Stopping ComfyUI server...
diff --git a/dev/windows-cpu/videos/merge_splats/frame_000.jpg b/dev/windows-cpu/videos/merge_splats/frame_000.jpg
index 8ddedfc..df6e8f5 100644
Binary files a/dev/windows-cpu/videos/merge_splats/frame_000.jpg and b/dev/windows-cpu/videos/merge_splats/frame_000.jpg differ
diff --git a/dev/windows-cpu/videos/merge_splats/frame_001.jpg b/dev/windows-cpu/videos/merge_splats/frame_001.jpg
index f52aaf4..641e5a6 100644
Binary files a/dev/windows-cpu/videos/merge_splats/frame_001.jpg and b/dev/windows-cpu/videos/merge_splats/frame_001.jpg differ
diff --git a/dev/windows-cpu/videos/merge_splats/frame_002.jpg b/dev/windows-cpu/videos/merge_splats/frame_002.jpg
index 5e81172..9c7167f 100644
Binary files a/dev/windows-cpu/videos/merge_splats/frame_002.jpg and b/dev/windows-cpu/videos/merge_splats/frame_002.jpg differ
diff --git a/dev/windows-cpu/videos/merge_splats/frame_003.jpg b/dev/windows-cpu/videos/merge_splats/frame_003.jpg
index 5e81172..f38809b 100644
Binary files a/dev/windows-cpu/videos/merge_splats/frame_003.jpg and b/dev/windows-cpu/videos/merge_splats/frame_003.jpg differ
diff --git a/dev/windows-cpu/videos/merge_splats/frame_004.jpg b/dev/windows-cpu/videos/merge_splats/frame_004.jpg
index 5e81172..f8ab2a8 100644
Binary files a/dev/windows-cpu/videos/merge_splats/frame_004.jpg and b/dev/windows-cpu/videos/merge_splats/frame_004.jpg differ
diff --git a/dev/windows-cpu/videos/merge_splats/frame_005.jpg b/dev/windows-cpu/videos/merge_splats/frame_005.jpg
index 1dbc7ce..7282f8e 100644
Binary files a/dev/windows-cpu/videos/merge_splats/frame_005.jpg and b/dev/windows-cpu/videos/merge_splats/frame_005.jpg differ
diff --git a/dev/windows-cpu/videos/merge_splats/frame_006.jpg b/dev/windows-cpu/videos/merge_splats/frame_006.jpg
deleted file mode 100644
index 17ca70b..0000000
Binary files a/dev/windows-cpu/videos/merge_splats/frame_006.jpg and /dev/null differ
diff --git a/dev/windows-cpu/videos/merge_splats/metadata.json b/dev/windows-cpu/videos/merge_splats/metadata.json
index 01aee04..c7cc850 100644
--- a/dev/windows-cpu/videos/merge_splats/metadata.json
+++ b/dev/windows-cpu/videos/merge_splats/metadata.json
@@ -7,34 +7,29 @@
},
{
"file": "frame_001.jpg",
- "time": 0.59,
- "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply"
+ "time": 0.45,
+ "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: ac2dda84-5259-4578-950a-77005c0dded4\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply"
},
{
"file": "frame_002.jpg",
- "time": 4.25,
- "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.6s)\n [capture-node] freeze=134ms shot=205ms unfreeze=6ms saved=True"
+ "time": 3.89,
+ "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: ac2dda84-5259-4578-950a-77005c0dded4\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.5s)\n [capture-node] freeze=30ms shot=337ms unfreeze=5ms saved=True"
},
{
"file": "frame_003.jpg",
- "time": 16.92,
- "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.6s)\n [capture-node] freeze=134ms shot=205ms unfreeze=6ms saved=True\n Frame 3 saved (frame_002.jpg, t=4.2s)\n [capture-periodic] freeze=2071ms shot=2185ms unfreeze=8ms saved=True"
+ "time": 148.61,
+ "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: ac2dda84-5259-4578-950a-77005c0dded4\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.5s)\n [capture-node] freeze=30ms shot=337ms unfreeze=5ms saved=True\n Frame 3 saved (frame_002.jpg, t=3.9s)\n [capture-periodic] freeze=1762ms shot=1873ms unfreeze=4ms saved=True\n [ComfyUI] Loading PLY: D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] Initial splats: 200000\n [ComfyUI] Pruned splats: 200000, target: 100000\n [ComfyUI] Opacity Mean: 0.53443545 Median: 0.48362076\n [ComfyUI] Pruning splats with opacity below 0.0000\n [ComfyUI] Original count: 200000, after opacity pruning: 200000\n [ComfyUI] After opacity pruning, 200000 splats remain.\n [ComfyUI] Pass 1: 200000 splats\n [ComfyUI] \n [ComfyUI] Edge costs: 0%| | 0/27 [00:00, ?it/s]\n [ComfyUI] Edge costs: 4%|3 | 1/27 [00:02<00:58, 2.26s/it]\n [ComfyUI] Edge costs: 7%|7 | 2/27 [00:03<00:38, 1.55s/it]\n [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:04<00:36, 1.52s/it]\n [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:06<00:34, 1.51s/it]\n [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:07<00:33, 1.52s/it]\n [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:09<00:32, 1.56s/it]\n [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:10<00:26, 1.34s/it]\n [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:12<00:29, 1.56s/it]\n [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:14<00:30, 1.70s/it]\n [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:15<00:28, 1.67s/it]\n [ComfyUI] Edge costs: 41%|#### | 11/27 [00:17<00:25, 1.61s/it]\n [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:18<00:21, 1.43s/it]\n [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:20<00:21, 1.54s/it]\n [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:21<00:19, 1.53s/it]\n [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:23<00:18, 1.53s/it]\n [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:24<00:16, 1.53s/it]\n [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:25<00:12, 1.25s/it]\n [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:26<00:10, 1.13s/it]\n [ComfyUI] Edge costs: 70%|####### | 19/27 [00:27<00:08, 1.07s/it]\n [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:28<00:07, 1.05s/it]\n [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:29<00:06, 1.03s/it]\n [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:30<00:05, 1.03s/it]\n [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:31<00:04, 1.00s/it]\n [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:32<00:02, 1.04it/s]\n [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:32<00:01, 1.13it/s]\n [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:00, 1.01it/s]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.06it/s]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.29s/it]\n [ComfyUI] edges: 2697139, pairs: 97792 (need 100000)\n [ComfyUI] \n [ComfyUI] Merging 97792 pairs\n [ComfyUI] Pass 2: 102208 splats\n [ComfyUI] Edge costs: 0%| | 0/14 [00:00, ?it/s]\n [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:15, 1.15s/it]\n [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:12, 1.03s/it]\n [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:11, 1.09s/it]\n [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:04<00:10, 1.04s/it]\n [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:05<00:09, 1.03s/it]\n [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:06<00:07, 1.00it/s]\n [ComfyUI] Edge costs: 50%|##### | 7/14 [00:07<00:06, 1.01it/s]\n [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:07<00:05, 1.15it/s]\n [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:08<00:04, 1.17it/s]\n [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:09<00:03, 1.10it/s]\n [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:10<00:02, 1.07it/s]\n [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:11<00:01, 1.05it/s]\n [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:12<00:01, 1.01s/it]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.23it/s]"
},
{
"file": "frame_004.jpg",
- "time": 23.28,
- "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.6s)\n [capture-node] freeze=134ms shot=205ms unfreeze=6ms saved=True\n Frame 3 saved (frame_002.jpg, t=4.2s)\n [capture-periodic] freeze=2071ms shot=2185ms unfreeze=8ms saved=True\n Frame 4 saved (frame_003.jpg, t=16.9s)\n [capture-periodic] freeze=2070ms shot=2181ms unfreeze=7ms saved=True"
+ "time": 154.98,
+ "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: ac2dda84-5259-4578-950a-77005c0dded4\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.5s)\n [capture-node] freeze=30ms shot=337ms unfreeze=5ms saved=True\n Frame 3 saved (frame_002.jpg, t=3.9s)\n [capture-periodic] freeze=1762ms shot=1873ms unfreeze=4ms saved=True\n [ComfyUI] Loading PLY: D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\input\\apple.ply\n [ComfyUI] Initial splats: 200000\n [ComfyUI] Pruned splats: 200000, target: 100000\n [ComfyUI] Opacity Mean: 0.53443545 Median: 0.48362076\n [ComfyUI] Pruning splats with opacity below 0.0000\n [ComfyUI] Original count: 200000, after opacity pruning: 200000\n [ComfyUI] After opacity pruning, 200000 splats remain.\n [ComfyUI] Pass 1: 200000 splats\n [ComfyUI] \n [ComfyUI] Edge costs: 0%| | 0/27 [00:00, ?it/s]\n [ComfyUI] Edge costs: 4%|3 | 1/27 [00:02<00:58, 2.26s/it]\n [ComfyUI] Edge costs: 7%|7 | 2/27 [00:03<00:38, 1.55s/it]\n [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:04<00:36, 1.52s/it]\n [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:06<00:34, 1.51s/it]\n [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:07<00:33, 1.52s/it]\n [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:09<00:32, 1.56s/it]\n [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:10<00:26, 1.34s/it]\n [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:12<00:29, 1.56s/it]\n [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:14<00:30, 1.70s/it]\n [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:15<00:28, 1.67s/it]\n [ComfyUI] Edge costs: 41%|#### | 11/27 [00:17<00:25, 1.61s/it]\n [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:18<00:21, 1.43s/it]\n [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:20<00:21, 1.54s/it]\n [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:21<00:19, 1.53s/it]\n [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:23<00:18, 1.53s/it]\n [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:24<00:16, 1.53s/it]\n [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:25<00:12, 1.25s/it]\n [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:26<00:10, 1.13s/it]\n [ComfyUI] Edge costs: 70%|####### | 19/27 [00:27<00:08, 1.07s/it]\n [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:28<00:07, 1.05s/it]\n [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:29<00:06, 1.03s/it]\n [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:30<00:05, 1.03s/it]\n [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:31<00:04, 1.00s/it]\n [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:32<00:02, 1.04it/s]\n [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:32<00:01, 1.13it/s]\n [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:00, 1.01it/s]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.06it/s]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.29s/it]\n [ComfyUI] edges: 2697139, pairs: 97792 (need 100000)\n [ComfyUI] \n [ComfyUI] Merging 97792 pairs\n [ComfyUI] Pass 2: 102208 splats\n [ComfyUI] Edge costs: 0%| | 0/14 [00:00, ?it/s]\n [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:15, 1.15s/it]\n [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:12, 1.03s/it]\n [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:11, 1.09s/it]\n [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:04<00:10, 1.04s/it]\n [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:05<00:09, 1.03s/it]\n [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:06<00:07, 1.00it/s]\n [ComfyUI] Edge costs: 50%|##### | 7/14 [00:07<00:06, 1.01it/s]\n [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:07<00:05, 1.15it/s]\n [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:08<00:04, 1.17it/s]\n [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:09<00:03, 1.10it/s]\n [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:10<00:02, 1.07it/s]\n [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:11<00:01, 1.05it/s]\n [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:12<00:01, 1.01s/it]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.23it/s]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:13<00:00, 1.07it/s]\n [ComfyUI] GaussianMerge: wrote D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1944\\ComfyUI\\output\\merged.ply (100000 splats, 23.7 MB)\n [ComfyUI] Prompt executed in 148.96 seconds\n Frame 4 saved (frame_003.jpg, t=148.6s)\n [capture-periodic] freeze=1782ms shot=1867ms unfreeze=67ms saved=True"
},
{
"file": "frame_005.jpg",
- "time": 184.0,
- "log": "Capturing execution frames: merge_splats.json\n Frame 1 saved (frame_000.jpg, t=0.0s)\n Validating workflow...\n [ComfyUI] === /validate endpoint called ===\n [ComfyUI] Received JSON with keys: ['prompt']\n [ComfyUI] Prompt has 4 nodes\n [ComfyUI] Node 1: LoadPLY\n [ComfyUI] Inputs: {\"ply_file\": \"apple.ply\"}\n [ComfyUI] Node 2: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 3: GaussianMerge\n Queuing workflow for execution...\n [ComfyUI] Inputs: {\"target_count\": 100000, \"output_filename\": \"merged\", \"opacity_threshold\": 0, \"k\": 24, \"ply_path\": [\"1\", 0]}\n [ComfyUI] Node 4: PreviewGaussians\n [ComfyUI] Inputs: {\"fov_degrees\": 50, \"image_width\": 512, \"image_height\": 512, \"renderer\": \"spark\", \"transport_format\": \"ply\", \"ply_path\": [\"3\", 0]}\n [ComfyUI] Generated prompt_id: 77f602fe-fc46-46b5-95d3-34e18a873c59\n [ComfyUI] Calling execution.validate_prompt()...\n [ComfyUI] Validation result: valid=True\n [ComfyUI] === Validation PASSED ===\n [ComfyUI] got prompt\n [ComfyUI] LoadPLY: apple.ply -> D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] GaussianMerge: 200000 -> 100000 splats (ratio=0.5000) via NanoGS MPMM on D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n Node executed (1 total), capturing...\n Frame 2 saved (frame_001.jpg, t=0.6s)\n [capture-node] freeze=134ms shot=205ms unfreeze=6ms saved=True\n Frame 3 saved (frame_002.jpg, t=4.2s)\n [capture-periodic] freeze=2071ms shot=2185ms unfreeze=8ms saved=True\n Frame 4 saved (frame_003.jpg, t=16.9s)\n [capture-periodic] freeze=2070ms shot=2181ms unfreeze=7ms saved=True\n Frame 5 saved (frame_004.jpg, t=23.3s)\n [capture-periodic] freeze=2385ms shot=1827ms unfreeze=4ms saved=True\n [ComfyUI] Loading PLY: D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\input\\apple.ply\n [ComfyUI] Initial splats: 200000\n [ComfyUI] Pruned splats: 200000, target: 100000\n [ComfyUI] Opacity Mean: 0.53443545 Median: 0.48362076\n [ComfyUI] Pruning splats with opacity below 0.0000\n [ComfyUI] Original count: 200000, after opacity pruning: 200000\n [ComfyUI] After opacity pruning, 200000 splats remain.\n [ComfyUI] Pass 1: 200000 splats\n [ComfyUI] \n [ComfyUI] Edge costs: 0%| | 0/27 [00:00, ?it/s]\n [ComfyUI] Edge costs: 4%|3 | 1/27 [00:01<00:33, 1.29s/it]\n [ComfyUI] Edge costs: 7%|7 | 2/27 [00:02<00:31, 1.26s/it]\n [ComfyUI] Edge costs: 11%|#1 | 3/27 [00:03<00:31, 1.30s/it]\n [ComfyUI] Edge costs: 15%|#4 | 4/27 [00:05<00:31, 1.37s/it]\n [ComfyUI] Edge costs: 19%|#8 | 5/27 [00:06<00:30, 1.40s/it]\n [ComfyUI] Edge costs: 22%|##2 | 6/27 [00:08<00:29, 1.40s/it]\n [ComfyUI] Edge costs: 26%|##5 | 7/27 [00:08<00:23, 1.18s/it]\n [ComfyUI] Edge costs: 30%|##9 | 8/27 [00:09<00:21, 1.14s/it]\n [ComfyUI] Edge costs: 33%|###3 | 9/27 [00:11<00:21, 1.18s/it]\n [ComfyUI] Edge costs: 37%|###7 | 10/27 [00:12<00:21, 1.28s/it]\n [ComfyUI] Edge costs: 41%|#### | 11/27 [00:14<00:23, 1.47s/it]\n [ComfyUI] Edge costs: 44%|####4 | 12/27 [00:16<00:21, 1.44s/it]\n [ComfyUI] Edge costs: 48%|####8 | 13/27 [00:16<00:17, 1.24s/it]\n [ComfyUI] Edge costs: 52%|#####1 | 14/27 [00:18<00:16, 1.25s/it]\n [ComfyUI] Edge costs: 56%|#####5 | 15/27 [00:19<00:15, 1.27s/it]\n [ComfyUI] Edge costs: 59%|#####9 | 16/27 [00:20<00:14, 1.33s/it]\n [ComfyUI] Edge costs: 63%|######2 | 17/27 [00:22<00:13, 1.33s/it]\n [ComfyUI] Edge costs: 67%|######6 | 18/27 [00:23<00:10, 1.18s/it]\n [ComfyUI] Edge costs: 70%|####### | 19/27 [00:24<00:09, 1.15s/it]\n [ComfyUI] Edge costs: 74%|#######4 | 20/27 [00:25<00:08, 1.21s/it]\n [ComfyUI] Edge costs: 78%|#######7 | 21/27 [00:26<00:07, 1.26s/it]\n [ComfyUI] Edge costs: 81%|########1 | 22/27 [00:28<00:06, 1.28s/it]\n [ComfyUI] Edge costs: 85%|########5 | 23/27 [00:29<00:05, 1.31s/it]\n [ComfyUI] Edge costs: 89%|########8 | 24/27 [00:30<00:03, 1.33s/it]\n [ComfyUI] Edge costs: 93%|#########2| 25/27 [00:31<00:02, 1.18s/it]\n [ComfyUI] Edge costs: 96%|#########6| 26/27 [00:33<00:01, 1.23s/it]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.24s/it]\n [ComfyUI] Edge costs: 100%|##########| 27/27 [00:34<00:00, 1.27s/it]\n [ComfyUI] edges: 2697139, pairs: 97792 (need 100000)\n [ComfyUI] \n [ComfyUI] Merging 97792 pairs\n [ComfyUI] Pass 2: 102208 splats\n [ComfyUI] Edge costs: 0%| | 0/14 [00:00, ?it/s]\n [ComfyUI] Edge costs: 7%|7 | 1/14 [00:01<00:14, 1.13s/it]\n [ComfyUI] Edge costs: 14%|#4 | 2/14 [00:02<00:16, 1.34s/it]\n [ComfyUI] Edge costs: 21%|##1 | 3/14 [00:03<00:14, 1.34s/it]\n [ComfyUI] Edge costs: 29%|##8 | 4/14 [00:05<00:13, 1.37s/it]\n [ComfyUI] Edge costs: 36%|###5 | 5/14 [00:06<00:12, 1.35s/it]\n [ComfyUI] Edge costs: 43%|####2 | 6/14 [00:07<00:10, 1.34s/it]\n [ComfyUI] Edge costs: 50%|##### | 7/14 [00:08<00:07, 1.11s/it]\n [ComfyUI] Edge costs: 57%|#####7 | 8/14 [00:09<00:06, 1.16s/it]\n [ComfyUI] Edge costs: 64%|######4 | 9/14 [00:11<00:06, 1.20s/it]\n [ComfyUI] Edge costs: 71%|#######1 | 10/14 [00:12<00:05, 1.27s/it]\n [ComfyUI] Edge costs: 79%|#######8 | 11/14 [00:13<00:03, 1.28s/it]\n [ComfyUI] Edge costs: 86%|########5 | 12/14 [00:14<00:02, 1.10s/it]\n [ComfyUI] Edge costs: 93%|#########2| 13/14 [00:15<00:01, 1.08s/it]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:16<00:00, 1.14it/s]\n [ComfyUI] Edge costs: 100%|##########| 14/14 [00:16<00:00, 1.15s/it]\n [ComfyUI] GaussianMerge: wrote D:\\a\\comfy-gpu-ci\\comfy-gpu-ci\\test_workspaces\\GaussianPack-1848\\ComfyUI\\output\\merged.ply (100000 splats, 23.7 MB)\n [ComfyUI] Prompt executed in 180.12 seconds"
- },
- {
- "file": "frame_006.jpg",
- "time": 200.10514163970947,
+ "time": 170.92007398605347,
"log": "Final screenshot"
}
],
- "total_time": 197.84
+ "total_time": 168.66
}
\ No newline at end of file