diff --git a/nodes/blender/remeshing/backends/__init__.py b/nodes/blender/remeshing/backends/__init__.py index b21afb9f..3620a49f 100644 --- a/nodes/blender/remeshing/backends/__init__.py +++ b/nodes/blender/remeshing/backends/__init__.py @@ -4,7 +4,6 @@ """Individual Blender remeshing backend nodes (hidden, invoked via unified Remesh node).""" from .voxel import NODE_CLASS_MAPPINGS as VOXEL_MAPS, NODE_DISPLAY_NAME_MAPPINGS as VOXEL_DISP -from .smooth import NODE_CLASS_MAPPINGS as SMOOTH_MAPS, NODE_DISPLAY_NAME_MAPPINGS as SMOOTH_DISP from .sharp import NODE_CLASS_MAPPINGS as SHARP_MAPS, NODE_DISPLAY_NAME_MAPPINGS as SHARP_DISP from .blocks import NODE_CLASS_MAPPINGS as BLOCKS_MAPS, NODE_DISPLAY_NAME_MAPPINGS as BLOCKS_DISP @@ -12,12 +11,10 @@ NODE_CLASS_MAPPINGS = {} NODE_DISPLAY_NAME_MAPPINGS = {} NODE_CLASS_MAPPINGS.update(VOXEL_MAPS) -NODE_CLASS_MAPPINGS.update(SMOOTH_MAPS) NODE_CLASS_MAPPINGS.update(SHARP_MAPS) NODE_CLASS_MAPPINGS.update(BLOCKS_MAPS) NODE_DISPLAY_NAME_MAPPINGS.update(VOXEL_DISP) -NODE_DISPLAY_NAME_MAPPINGS.update(SMOOTH_DISP) NODE_DISPLAY_NAME_MAPPINGS.update(SHARP_DISP) NODE_DISPLAY_NAME_MAPPINGS.update(BLOCKS_DISP) diff --git a/nodes/blender/remeshing/backends/smooth.py b/nodes/blender/remeshing/backends/smooth.py deleted file mode 100644 index 9177374e..00000000 --- a/nodes/blender/remeshing/backends/smooth.py +++ /dev/null @@ -1,77 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# Copyright (C) 2025 ComfyUI-GeometryPack Contributors - -"""Blender smooth remesh modifier backend node.""" - -import logging -import numpy as np -import trimesh as trimesh_module -from comfy_api.latest import io -from .voxel import _bpy_setup_object, _bpy_extract_and_cleanup - -log = logging.getLogger("geometrypack") - - -class RemeshBlenderSmoothNode(io.ComfyNode): - """Blender smooth remesh modifier backend.""" - - @classmethod - def define_schema(cls): - return io.Schema( - node_id="GeomPackRemesh_BlenderSmooth", - display_name="Remesh Blender Smooth (backend)", - category="geompack/remeshing", - is_dev_only=True, - is_output_node=True, - inputs=[ - io.Custom("TRIMESH").Input("trimesh"), - io.Int.Input("octree_depth", default=6, min=1, max=10, step=1, tooltip="Resolution. Higher = more detail, more faces."), - io.Float.Input("scale", default=0.9, min=0.0, max=1.0, step=0.05, display_mode="number", tooltip="Ratio of output size to input bounding box."), - ], - outputs=[ - io.Custom("TRIMESH").Output(display_name="remeshed_mesh"), - io.String.Output(display_name="info"), - ], - ) - - @classmethod - def execute(cls, trimesh, octree_depth=6, scale=0.9): - import bpy - - log.info("Backend: blender_smooth") - log.info("Input: %d vertices, %d faces", len(trimesh.vertices), len(trimesh.faces)) - log.info("Parameters: octree_depth=%d, scale=%s", octree_depth, scale) - - obj, mesh = _bpy_setup_object( - np.asarray(trimesh.vertices, dtype=np.float32), - np.asarray(trimesh.faces, dtype=np.int32) - ) - mod = obj.modifiers.new(name="Remesh", type='REMESH') - mod.mode = 'SMOOTH' - mod.octree_depth = octree_depth - mod.scale = scale - bpy.ops.object.modifier_apply(modifier="Remesh") - result = _bpy_extract_and_cleanup(obj) - - remeshed_mesh = trimesh_module.Trimesh( - vertices=np.array(result['vertices'], dtype=np.float32), - faces=np.array(result['faces'], dtype=np.int32), - process=False - ) - remeshed_mesh.metadata = trimesh.metadata.copy() - remeshed_mesh.metadata['remeshing'] = { - 'algorithm': 'blender_smooth', 'octree_depth': octree_depth, 'scale': scale, - } - - log.info("Output: %d vertices, %d faces", len(remeshed_mesh.vertices), len(remeshed_mesh.faces)) - - info = (f"Remesh (Blender Smooth): " - f"{len(trimesh.vertices):,}v/{len(trimesh.faces):,}f -> " - f"{len(remeshed_mesh.vertices):,}v/{len(remeshed_mesh.faces):,}f | " - f"depth={octree_depth}, scale={scale}") - - return io.NodeOutput(remeshed_mesh, info, ui={"text": [info]}) - - -NODE_CLASS_MAPPINGS = {"GeomPackRemesh_BlenderSmooth": RemeshBlenderSmoothNode} -NODE_DISPLAY_NAME_MAPPINGS = {"GeomPackRemesh_BlenderSmooth": "Remesh Blender Smooth (backend)"} diff --git a/nodes/main/__init__.py b/nodes/main/__init__.py index e8d4e8bb..e104d2e6 100644 --- a/nodes/main/__init__.py +++ b/nodes/main/__init__.py @@ -31,7 +31,6 @@ from . import paraview # CGAL nodes (moved from nodes/cgal/) from . import boolean -from . import reconstruction_cgal from . import remeshing_cgal from . import repair_cgal from . import decimation_cgal @@ -54,7 +53,6 @@ NODE_CLASS_MAPPINGS.update(reconstruction.NODE_CLASS_MAPPINGS) NODE_CLASS_MAPPINGS.update(texture_remeshing.NODE_CLASS_MAPPINGS) NODE_CLASS_MAPPINGS.update(paraview.NODE_CLASS_MAPPINGS) NODE_CLASS_MAPPINGS.update(boolean.NODE_CLASS_MAPPINGS) -NODE_CLASS_MAPPINGS.update(reconstruction_cgal.NODE_CLASS_MAPPINGS) NODE_CLASS_MAPPINGS.update(remeshing_cgal.NODE_CLASS_MAPPINGS) NODE_CLASS_MAPPINGS.update(repair_cgal.NODE_CLASS_MAPPINGS) NODE_CLASS_MAPPINGS.update(smoothing.NODE_CLASS_MAPPINGS) @@ -79,7 +77,6 @@ NODE_DISPLAY_NAME_MAPPINGS.update(reconstruction.NODE_DISPLAY_NAME_MAPPINGS) NODE_DISPLAY_NAME_MAPPINGS.update(texture_remeshing.NODE_DISPLAY_NAME_MAPPINGS) NODE_DISPLAY_NAME_MAPPINGS.update(paraview.NODE_DISPLAY_NAME_MAPPINGS) NODE_DISPLAY_NAME_MAPPINGS.update(boolean.NODE_DISPLAY_NAME_MAPPINGS) -NODE_DISPLAY_NAME_MAPPINGS.update(reconstruction_cgal.NODE_DISPLAY_NAME_MAPPINGS) NODE_DISPLAY_NAME_MAPPINGS.update(remeshing_cgal.NODE_DISPLAY_NAME_MAPPINGS) NODE_DISPLAY_NAME_MAPPINGS.update(repair_cgal.NODE_DISPLAY_NAME_MAPPINGS) NODE_DISPLAY_NAME_MAPPINGS.update(smoothing.NODE_DISPLAY_NAME_MAPPINGS) diff --git a/nodes/main/reconstruction/backends/__init__.py b/nodes/main/reconstruction/backends/__init__.py index f3586129..844db0fa 100644 --- a/nodes/main/reconstruction/backends/__init__.py +++ b/nodes/main/reconstruction/backends/__init__.py @@ -9,8 +9,6 @@ from .poisson import NODE_CLASS_MAPPINGS as POISSON_MAPS, NODE_DISPLAY_NAME_MAPP from .ball_pivoting import NODE_CLASS_MAPPINGS as BP_MAPS, NODE_DISPLAY_NAME_MAPPINGS as BP_DISP from .alpha_shape import NODE_CLASS_MAPPINGS as AS_MAPS, NODE_DISPLAY_NAME_MAPPINGS as AS_DISP from .convex_hull import NODE_CLASS_MAPPINGS as CH_MAPS, NODE_DISPLAY_NAME_MAPPINGS as CH_DISP -from .delaunay_2d import NODE_CLASS_MAPPINGS as D2D_MAPS, NODE_DISPLAY_NAME_MAPPINGS as D2D_DISP - NODE_CLASS_MAPPINGS = {} NODE_DISPLAY_NAME_MAPPINGS = {} @@ -18,12 +16,10 @@ NODE_CLASS_MAPPINGS.update(POISSON_MAPS) NODE_CLASS_MAPPINGS.update(BP_MAPS) NODE_CLASS_MAPPINGS.update(AS_MAPS) NODE_CLASS_MAPPINGS.update(CH_MAPS) -NODE_CLASS_MAPPINGS.update(D2D_MAPS) NODE_DISPLAY_NAME_MAPPINGS.update(POISSON_DISP) NODE_DISPLAY_NAME_MAPPINGS.update(BP_DISP) NODE_DISPLAY_NAME_MAPPINGS.update(AS_DISP) NODE_DISPLAY_NAME_MAPPINGS.update(CH_DISP) -NODE_DISPLAY_NAME_MAPPINGS.update(D2D_DISP) __all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] diff --git a/nodes/main/reconstruction/backends/ball_pivoting.py b/nodes/main/reconstruction/backends/ball_pivoting.py index 6fcdc0c7..1bc300ee 100644 --- a/nodes/main/reconstruction/backends/ball_pivoting.py +++ b/nodes/main/reconstruction/backends/ball_pivoting.py @@ -24,7 +24,7 @@ class ReconstructBallPivotingNode(io.ComfyNode): is_output_node=True, inputs=[ io.Custom("TRIMESH").Input("points"), - io.Float.Input("ball_radius", default=0.0, min=0.0, max=100.0, step=0.01, tooltip="Radius of the virtual ball rolled over the point cloud to form triangles. Smaller = finer detail but more holes, larger = smoother but loses detail. 0 = auto (PyMeshLab estimates from point spacing)."), + io.Float.Input("ball_radius", default=0.0, min=0.0, max=100.0, step=0.01, tooltip="Ball radius in absolute units (same as mesh coordinates). Smaller = finer detail but more holes, larger = smoother but loses detail. 0 = auto (PyMeshLab estimates from point spacing)."), io.Combo.Input("estimate_normals", options=["true", "false"], default="true", tooltip="Re-estimate point normals using k-nearest neighbors. Enable if the input has no normals or unreliable normals."), io.Float.Input("normal_radius", default=0.1, min=0.001, max=10.0, step=0.01, tooltip="Search radius for normal estimation via k-nearest neighbors. Should be 2-3x the average point spacing. Only used when estimate_normals is true."), ], @@ -68,7 +68,7 @@ class ReconstructBallPivotingNode(io.ComfyNode): ms.generate_surface_reconstruction_ball_pivoting() else: ms.generate_surface_reconstruction_ball_pivoting( - ballradius=pymeshlab.PercentageValue(ball_radius * 100) + ballradius=pymeshlab.PureValue(ball_radius) ) result_mesh = ms.current_mesh() diff --git a/nodes/main/reconstruction/backends/delaunay_2d.py b/nodes/main/reconstruction/backends/delaunay_2d.py deleted file mode 100644 index fd4d3731..00000000 --- a/nodes/main/reconstruction/backends/delaunay_2d.py +++ /dev/null @@ -1,81 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# Copyright (C) 2025 ComfyUI-GeometryPack Contributors - -"""2D Delaunay triangulation surface reconstruction backend node.""" - -import logging -import numpy as np -import trimesh as trimesh_module -from comfy_api.latest import io - -log = logging.getLogger("geometrypack") - - -class ReconstructDelaunay2DNode(io.ComfyNode): - """2D Delaunay triangulation (for height fields).""" - - @classmethod - def define_schema(cls): - return io.Schema( - node_id="GeomPackReconstruct_Delaunay2D", - display_name="Reconstruct Delaunay 2D (backend)", - category="geompack/reconstruction", - is_dev_only=True, - is_output_node=True, - inputs=[ - io.Custom("TRIMESH").Input("points"), - ], - outputs=[ - io.Custom("TRIMESH").Output(display_name="reconstructed_mesh"), - io.String.Output(display_name="info"), - ], - ) - - @classmethod - def execute(cls, points): - log.info("Backend: delaunay_2d") - vertices = np.asarray(points.vertices, dtype=np.float64) - - log.info("Computing 2D Delaunay triangulation...") - - try: - from scipy.spatial import Delaunay - - points_2d = vertices[:, :2] - tri = Delaunay(points_2d) - - result = trimesh_module.Trimesh( - vertices=vertices, - faces=tri.simplices, - process=False - ) - - info = f"""Reconstruct Surface Results (2D Delaunay): - -Input Points: {len(vertices):,} -Output Vertices: {len(result.vertices):,} -Output Faces: {len(result.faces):,} - -2D Delaunay projects points to XY plane for triangulation. -Best for height fields and terrain data. -""" - # Preserve metadata - if hasattr(points, 'metadata') and points.metadata: - result.metadata = points.metadata.copy() - else: - result.metadata = {} - result.metadata['reconstruction'] = { - 'method': 'delaunay_2d', - 'input_points': len(vertices), - 'output_vertices': len(result.vertices), - 'output_faces': len(result.faces), - } - - return io.NodeOutput(result, info, ui={"text": [info]}) - - except ImportError: - raise ImportError("2D Delaunay requires scipy. Install with: pip install scipy") - - -NODE_CLASS_MAPPINGS = {"GeomPackReconstruct_Delaunay2D": ReconstructDelaunay2DNode} -NODE_DISPLAY_NAME_MAPPINGS = {"GeomPackReconstruct_Delaunay2D": "Reconstruct Delaunay 2D (backend)"} diff --git a/nodes/main/reconstruction/reconstruct_surface.py b/nodes/main/reconstruction/reconstruct_surface.py index 2930a319..95c8eb59 100644 --- a/nodes/main/reconstruction/reconstruct_surface.py +++ b/nodes/main/reconstruction/reconstruct_surface.py @@ -26,14 +26,10 @@ class ReconstructSurfaceNode(io.ComfyNode): "ball_pivoting": "GeomPackReconstruct_BallPivoting", "alpha_shape": "GeomPackReconstruct_AlphaShape", "convex_hull": "GeomPackReconstruct_ConvexHull", - "delaunay_2d": "GeomPackReconstruct_Delaunay2D", - "alpha_wrap": "GeomPackAlphaWrap", } # Remap frontend param names to backend param names where they differ - PARAM_REMAP = { - "alpha_wrap": {"points": "input_mesh"}, - } + PARAM_REMAP = {} @classmethod def define_schema(cls): @@ -50,9 +46,7 @@ class ReconstructSurfaceNode(io.ComfyNode): "poisson=smooth watertight, " "ball_pivoting=preserves detail, " "alpha_shape=controllable detail, " - "convex_hull=fast rough, " - "delaunay_2d=height fields, " - "alpha_wrap=shrink wrap (CGAL)" + "convex_hull=fast rough" ), options=[ io.DynamicCombo.Option("poisson", [ io.Int.Input("poisson_depth", default=8, min=1, max=12, step=1, tooltip="Octree depth for the Poisson solver. Higher values capture finer detail but use exponentially more memory and time. 6=coarse, 8=balanced, 10+=high detail."), @@ -61,7 +55,7 @@ class ReconstructSurfaceNode(io.ComfyNode): io.Float.Input("normal_radius", default=0.1, min=0.001, max=10.0, step=0.01, tooltip="Search radius for normal estimation via k-nearest neighbors. Should be 2-3x the average point spacing. Only used when estimate_normals is true."), ]), io.DynamicCombo.Option("ball_pivoting", [ - io.Float.Input("ball_radius", default=0.0, min=0.0, max=100.0, step=0.01, tooltip="Radius of the virtual ball rolled over the point cloud to form triangles. Smaller = finer detail but more holes, larger = smoother but loses detail. 0 = auto (PyMeshLab estimates from point spacing)."), + io.Float.Input("ball_radius", default=0.0, min=0.0, max=100.0, step=0.01, tooltip="Ball radius in absolute units (same as mesh coordinates). Smaller = finer detail but more holes, larger = smoother but loses detail. 0 = auto (PyMeshLab estimates from point spacing)."), io.Combo.Input("estimate_normals", options=["true", "false"], default="true", tooltip="Re-estimate point normals using k-nearest neighbors. Enable if the input has no normals or unreliable normals."), io.Float.Input("normal_radius", default=0.1, min=0.001, max=10.0, step=0.01, tooltip="Search radius for normal estimation via k-nearest neighbors. Should be 2-3x the average point spacing. Only used when estimate_normals is true."), ]), @@ -69,11 +63,6 @@ class ReconstructSurfaceNode(io.ComfyNode): io.Float.Input("alpha", default=0.0, min=0.0, max=100.0, step=0.01, tooltip="Radius threshold controlling which Delaunay tetrahedra are kept. Only tetrahedra with longest edge < 2*alpha are included. Larger = coarser shape with more fill, smaller = tighter fit with more holes. 0 = auto (10%% of bounding box diagonal)."), ]), io.DynamicCombo.Option("convex_hull", []), - io.DynamicCombo.Option("delaunay_2d", []), - io.DynamicCombo.Option("alpha_wrap", [ - io.Float.Input("alpha_percent", default=2.0, min=0.001, max=50.0, step=0.1, tooltip="Wrap tightness as %% of bounding box diagonal. Smaller = tighter wrap with more detail, but MUCH slower."), - io.Float.Input("offset_percent", default=2.0, min=0.01, max=10.0, step=0.1, tooltip="Surface offset as %% of bounding box diagonal. Smaller = closer to original surface."), - ]), ]), ], outputs=[ diff --git a/nodes/main/reconstruction_cgal/__init__.py b/nodes/main/reconstruction_cgal/__init__.py deleted file mode 100644 index 77a723a6..00000000 --- a/nodes/main/reconstruction_cgal/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# Copyright (C) 2025 ComfyUI-GeometryPack Contributors - -""" -CGAL reconstruction nodes - requires pymeshlab with CGAL support -""" - -from .alpha_wrap import NODE_CLASS_MAPPINGS as ALPHA_WRAP_MAPS, NODE_DISPLAY_NAME_MAPPINGS as ALPHA_WRAP_DISP - -NODE_CLASS_MAPPINGS = {} -NODE_DISPLAY_NAME_MAPPINGS = {} - -NODE_CLASS_MAPPINGS.update(ALPHA_WRAP_MAPS) -NODE_DISPLAY_NAME_MAPPINGS.update(ALPHA_WRAP_DISP) - -__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] diff --git a/nodes/main/reconstruction_cgal/alpha_wrap.py b/nodes/main/reconstruction_cgal/alpha_wrap.py deleted file mode 100644 index 8d054b2f..00000000 --- a/nodes/main/reconstruction_cgal/alpha_wrap.py +++ /dev/null @@ -1,267 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# Copyright (C) 2025 ComfyUI-GeometryPack Contributors - -""" -Alpha Wrap Node - Shrink wrap mesh generation using CGAL's Alpha Wrap algorithm. - -Creates a watertight mesh that tightly wraps around input geometry. -Useful for non-manifold meshes or polygon soups. -""" - -import logging -import os -import threading -import time - -import numpy as np -import trimesh -import comfy.utils -from comfy_api.latest import io - -from CGAL import CGAL_Alpha_wrap_3 -from CGAL.CGAL_Kernel import Point_3 -from CGAL.CGAL_Polyhedron_3 import Polyhedron_3 - -log = logging.getLogger("geometrypack") - -# Progress bar layout (percentage of total) -_PHASE_BUILD = 15 # 0-15%: building CGAL input -_PHASE_WRAP_START = 15 # 15%: wrap starts -_PHASE_WRAP_END = 85 # ..85%: wrap ends (time-based fill) -_PHASE_EXTRACT = 100 # 85-100%: extracting result - - -def _get_rss_mb(): - """Get current process RSS in MB (Linux).""" - try: - with open(f"/proc/{os.getpid()}/statm", "r") as f: - pages = int(f.read().split()[1]) - return pages * os.sysconf("SC_PAGE_SIZE") / (1024 * 1024) - except Exception: - return 0.0 - - -def _polyhedron_to_arrays(poly): - """Extract vertices and faces from a CGAL Polyhedron_3.""" - verts = [] - vertex_map = {} - for i, vertex in enumerate(poly.vertices()): - point = vertex.point() - verts.append([float(point.x()), float(point.y()), float(point.z())]) - vertex_map[vertex] = i - - faces = [] - for facet in poly.facets(): - halfedge = facet.halfedge() - face_verts = [] - start_he = halfedge - current = start_he - while True: - face_verts.append(vertex_map[current.vertex()]) - current = current.next() - if current == start_he: - break - if len(face_verts) == 3: - faces.append(face_verts) - - return np.array(verts, dtype=np.float64), np.array(faces, dtype=np.int32) - - -class AlphaWrapNode(io.ComfyNode): - """ - Alpha Wrap - Generate a watertight shrink-wrapped mesh. - - Uses CGAL's Alpha Wrap algorithm to create a tight-fitting - watertight mesh around input geometry. - - Works with: - - Non-manifold meshes - - Meshes with holes - - Polygon soups (overlapping/intersecting geometry) - - Parameters: - - alpha: Controls wrap tightness. Smaller = tighter wrap, more detail. - Relative to bounding box diagonal (0.01 = 1% of bbox diagonal). - - offset: Surface offset distance. Smaller = closer to original surface. - Relative to bounding box diagonal. - """ - - - @classmethod - def define_schema(cls): - return io.Schema( - node_id="GeomPackAlphaWrap", - display_name="Alpha Wrap (Shrink Wrap)", - category="geompack/reconstruction", - is_output_node=True, - inputs=[ - io.Custom("TRIMESH").Input("input_mesh"), - io.Float.Input("alpha_percent", default=2.0, min=0.001, max=50.0, step=0.1, tooltip="Wrap tightness as % of bounding box diagonal. Smaller = tighter wrap with more detail, but MUCH slower (runtime ~ 1/alpha\u00b3). Start at 2-5% and tighten if needed.", optional=True), - io.Float.Input("offset_percent", default=2.0, min=0.01, max=10.0, step=0.1, tooltip="Surface offset as % of bounding box diagonal. Smaller = closer to original surface.", optional=True), - ], - outputs=[ - io.Custom("TRIMESH").Output(display_name="wrapped_mesh"), - io.String.Output(display_name="info"), - ], - ) - - @classmethod - def execute(cls, input_mesh, alpha_percent=2.0, offset_percent=2.0): - vertices = np.asarray(input_mesh.vertices, dtype=np.float64) - input_vertex_count = len(vertices) - - is_point_cloud = ( - not hasattr(input_mesh, 'faces') or - input_mesh.faces is None or - len(input_mesh.faces) == 0 - ) - - if is_point_cloud: - raise ValueError( - "Alpha Wrap requires a mesh with faces (triangle soup), not a point cloud.\n" - "For point clouds, first use 'Reconstruct Surface' node (e.g., Poisson or Ball Pivoting) " - "to create a mesh, then apply Alpha Wrap." - ) - - input_face_count = len(input_mesh.faces) - input_type = "mesh" - - # Compute bounding box diagonal for relative parameters - bbox_min = vertices.min(axis=0) - bbox_max = vertices.max(axis=0) - bbox_diagonal = np.linalg.norm(bbox_max - bbox_min) - - # Convert percentages to absolute values - alpha = (alpha_percent / 100.0) * bbox_diagonal - offset = (offset_percent / 100.0) * bbox_diagonal - - log.info("Input: %s vertices, %s faces (%s)", f"{input_vertex_count:,}", f"{input_face_count:,}", input_type) - log.info("Bounding box diagonal: %.4f", bbox_diagonal) - log.info("Alpha: %.6f (%s%% of bbox)", alpha, alpha_percent) - log.info("Offset: %.6f (%s%% of bbox)", offset, offset_percent) - - pbar = comfy.utils.ProgressBar(100) - - # --- Phase 1: Build CGAL input data (0-15%) --- - t0 = time.monotonic() - cgal_points = CGAL_Alpha_wrap_3.Point_3_Vector() - cgal_points.reserve(input_vertex_count) - report_every = max(1, input_vertex_count // 10) - for i, v in enumerate(vertices): - cgal_points.append(Point_3(float(v[0]), float(v[1]), float(v[2]))) - if i % report_every == 0: - pbar.update_absolute(int(_PHASE_BUILD * i / input_vertex_count)) - - cgal_faces = [[int(idx) for idx in face] for face in input_mesh.faces] - pbar.update_absolute(_PHASE_BUILD) - log.info("Built CGAL input data in %.1fs", time.monotonic() - t0) - - # --- Phase 2: Run alpha wrap (15-85%) --- - output_poly = Polyhedron_3() - exc_holder = [None] - rss_before = _get_rss_mb() - - def _run(): - try: - CGAL_Alpha_wrap_3.alpha_wrap_3(cgal_points, cgal_faces, alpha, offset, output_poly) - except Exception as e: - exc_holder[0] = e - - log.info("Running CGAL Alpha Wrap...") - thread = threading.Thread(target=_run, daemon=True) - thread.start() - - wrap_start = time.monotonic() - interval = 5 - wrap_range = _PHASE_WRAP_END - _PHASE_WRAP_START - while thread.is_alive(): - thread.join(timeout=interval) - elapsed = time.monotonic() - wrap_start - rss = _get_rss_mb() - delta = rss - rss_before - if thread.is_alive(): - # Asymptotic progress: approaches _PHASE_WRAP_END but never reaches it - # Uses 1 - 1/(1 + t/30) so it fills ~50% at 30s, ~75% at 90s, etc. - frac = 1.0 - 1.0 / (1.0 + elapsed / 30.0) - progress = int(_PHASE_WRAP_START + wrap_range * frac) - pbar.update_absolute(progress) - log.info("Alpha Wrap running... %.0fs elapsed, RSS %.0f MB (+%.0f MB)", - elapsed, rss, delta) - - elapsed_total = time.monotonic() - wrap_start - rss_final = _get_rss_mb() - pbar.update_absolute(_PHASE_WRAP_END) - log.info("Alpha Wrap finished in %.1fs, RSS %.0f MB (+%.0f MB)", - elapsed_total, rss_final, rss_final - rss_before) - - if exc_holder[0] is not None: - raise exc_holder[0] - - # --- Phase 3: Extract result mesh (85-100%) --- - t0 = time.monotonic() - result_vertices, result_faces = _polyhedron_to_arrays(output_poly) - pbar.update_absolute(_PHASE_EXTRACT) - log.info("Extracted result mesh in %.1fs", time.monotonic() - t0) - - result_mesh = trimesh.Trimesh( - vertices=result_vertices, - faces=result_faces, - process=False - ) - - # Copy metadata if present - if hasattr(input_mesh, 'metadata') and input_mesh.metadata: - result_mesh.metadata = input_mesh.metadata.copy() - else: - result_mesh.metadata = {} - - result_mesh.metadata['alpha_wrap'] = { - 'alpha': alpha, - 'alpha_percent': alpha_percent, - 'offset': offset, - 'offset_percent': offset_percent, - 'bbox_diagonal': bbox_diagonal, - 'input_type': input_type - } - - output_vertex_count = len(result_mesh.vertices) - output_face_count = len(result_mesh.faces) - is_watertight = result_mesh.is_watertight - - log.info("Result: %s vertices, %s faces", f"{output_vertex_count:,}", f"{output_face_count:,}") - log.info("Watertight: %s", is_watertight) - - report = f"""Alpha Wrap Report -{'='*40} - -Input: - Type: {input_type} - Vertices: {input_vertex_count:,} - Faces: {input_face_count:,} - -Parameters: - Alpha: {alpha:.6f} ({alpha_percent}% of bbox diagonal) - Offset: {offset:.6f} ({offset_percent}% of bbox diagonal) - BBox Diagonal: {bbox_diagonal:.4f} - -Output: - Vertices: {output_vertex_count:,} - Faces: {output_face_count:,} - Watertight: {'Yes' if is_watertight else 'No'} - -Tips: - - Decrease alpha_percent for tighter wrap / more detail - - Decrease offset_percent to get closer to original surface - - Lower values = slower computation -""" - - return io.NodeOutput(result_mesh, report, ui={"text": [report]}) - - -NODE_CLASS_MAPPINGS = { - "GeomPackAlphaWrap": AlphaWrapNode, -} - -NODE_DISPLAY_NAME_MAPPINGS = { - "GeomPackAlphaWrap": "Alpha Wrap (Shrink Wrap)", -} diff --git a/nodes/main/remeshing/remesh.py b/nodes/main/remeshing/remesh.py index 4e7f7eaf..5b476460 100644 --- a/nodes/main/remeshing/remesh.py +++ b/nodes/main/remeshing/remesh.py @@ -35,7 +35,6 @@ class RemeshNode(io.ComfyNode): "quadwild": "GeomPackRemesh_QuadWild", "cgal_isotropic": "GeomPackRemesh_CGAL", "blender_voxel": "GeomPackRemesh_BlenderVoxel", - "blender_smooth": "GeomPackRemesh_BlenderSmooth", "blender_sharp": "GeomPackRemesh_BlenderSharp", "blender_blocks": "GeomPackRemesh_BlenderBlocks", "gpu_cumesh": "GeomPackRemesh_GPU", @@ -123,10 +122,6 @@ class RemeshNode(io.ComfyNode): io.DynamicCombo.Option("blender_voxel", [ io.Float.Input("voxel_size", default=1, min=0.001, max=1.0, step=0.01, display_mode="number", tooltip="Voxel size. Smaller = more detail. Output is always watertight."), ]), - io.DynamicCombo.Option("blender_smooth", [ - io.Int.Input("octree_depth", default=6, min=1, max=10, step=1, tooltip="Resolution. Higher = more detail, more faces."), - io.Float.Input("scale", default=0.9, min=0.0, max=1.0, step=0.05, display_mode="number", tooltip="Ratio of output size to input bounding box."), - ]), io.DynamicCombo.Option("blender_sharp", [ io.Int.Input("octree_depth", default=6, min=1, max=10, step=1, tooltip="Resolution. Higher = more detail, more faces."), io.Float.Input("scale", default=0.9, min=0.0, max=1.0, step=0.05, display_mode="number", tooltip="Ratio of output size to input bounding box."), diff --git a/nodes/main/smoothing/sharpen.py b/nodes/main/smoothing/sharpen.py index f73cfa85..bd2a58c2 100644 --- a/nodes/main/smoothing/sharpen.py +++ b/nodes/main/smoothing/sharpen.py @@ -24,10 +24,6 @@ Available backends: - guided_normal: Guided mesh normal filtering (Zhang et al. 2015). Uses a min-range-metric guidance signal to drive bilateral normal filtering while preserving sharp edges. Interleaves vertex updates within normal iterations. -- vsa_snap: Variational Shape Approximation face clustering with vertex - snapping. Clusters faces into proxy plane groups via Lloyd iteration, then - snaps vertices to proxy planes (interior), plane intersection lines (edges), - or plane intersection points (corners). - fast_effective: Fast and Effective Feature-Preserving Mesh Denoising (Sun et al. TVCG 2007). Uses thresholded cosine-similarity weights for normal filtering: w = max(0, dot(ni,nj) - T)^2. Simple and fast. @@ -56,7 +52,6 @@ class SharpenMeshNode(io.ComfyNode): "libigl_unsharp": "GeomPackSharpen_LibiglUnsharp", "l0_minimize": "GeomPackSharpen_L0Minimize", "guided_normal": "GeomPackSharpen_GuidedNormal", - "vsa_snap": "GeomPackSharpen_VSASnap", "fast_effective": "GeomPackSharpen_FastEffective", "non_iterative": "GeomPackSharpen_NonIterative", } @@ -78,7 +73,6 @@ class SharpenMeshNode(io.ComfyNode): "libigl_unsharp=cotangent-weighted unsharp (geometry-aware), " "l0_minimize=piecewise-flat L0 optimization (aggressive CAD prep), " "guided_normal=guided normal filtering with min-range-metric (controllable), " - "vsa_snap=face clustering + vertex snapping (explicit patch control), " "fast_effective=thresholded cosine weight normal filtering (fast), " "non_iterative=mollified normal single-pass bilateral (non-iterative)" ), options=[ @@ -105,15 +99,14 @@ class SharpenMeshNode(io.ComfyNode): )), ]), io.DynamicCombo.Option("libigl_unsharp", [ - io.Float.Input("lambda_", default=0.5, min=0.01, max=5.0, step=0.01, tooltip=( - "Unsharp mask strength. Controls how much the cotangent " - "Laplacian displacement is amplified. Higher values produce " - "stronger sharpening but may cause overshooting. " - "Start with 0.3-0.5." + io.Float.Input("weight", default=0.5, min=0.01, max=5.0, step=0.01, tooltip=( + "How much detail to add back. 0.5 = subtle sharpening, " + "1.0 = double the detail, 2.0+ = aggressive." )), io.Int.Input("iterations", default=3, min=1, max=50, step=1, tooltip=( - "Number of unsharp mask passes. Multiple light passes " - "are more stable than a single heavy pass." + "Smoothing iterations for the reference mesh. " + "More iterations = smoother reference = sharpens broader features. " + "Fewer iterations = sharpens fine detail." )), ]), io.DynamicCombo.Option("l0_minimize", [ @@ -156,23 +149,6 @@ class SharpenMeshNode(io.ComfyNode): "dihedral angle threshold." )), ]), - io.DynamicCombo.Option("vsa_snap", [ - io.Int.Input("num_proxies", default=20, min=2, max=500, step=1, tooltip=( - "Number of proxy planes (face clusters). More proxies " - "preserve more detail. Fewer proxies create a more " - "abstract/simplified appearance. 10-50 for simple shapes, " - "50-200 for complex shapes." - )), - io.Int.Input("lloyd_iterations", default=10, min=1, max=100, step=1, tooltip=( - "Number of Lloyd clustering iterations. 10 is usually " - "sufficient for convergence." - )), - io.Float.Input("snap_strength", default=1.0, min=0.0, max=1.0, step=0.01, tooltip=( - "How aggressively to snap vertices to proxy planes. " - "0.0 = no change, 1.0 = full snap. " - "Values like 0.5-0.8 give a subtle sharpening effect." - )), - ]), io.DynamicCombo.Option("fast_effective", [ io.Float.Input("threshold_T", default=0.5, min=1e-10, max=1.0, step=0.01, tooltip=( "Cosine similarity threshold (Sun et al. TVCG 2007). " diff --git a/nodes/main/smoothing/sharpen_backends/__init__.py b/nodes/main/smoothing/sharpen_backends/__init__.py index 63392352..0e205d83 100644 --- a/nodes/main/smoothing/sharpen_backends/__init__.py +++ b/nodes/main/smoothing/sharpen_backends/__init__.py @@ -10,7 +10,6 @@ from .unsharp_mask import NODE_CLASS_MAPPINGS as UM_MAPS, NODE_DISPLAY_NAME_MAPP from .libigl_unsharp import NODE_CLASS_MAPPINGS as LU_MAPS, NODE_DISPLAY_NAME_MAPPINGS as LU_DISP from .l0_minimize import NODE_CLASS_MAPPINGS as L0_MAPS, NODE_DISPLAY_NAME_MAPPINGS as L0_DISP from .guided_normal import NODE_CLASS_MAPPINGS as GN_MAPS, NODE_DISPLAY_NAME_MAPPINGS as GN_DISP -from .vsa_snap import NODE_CLASS_MAPPINGS as VS_MAPS, NODE_DISPLAY_NAME_MAPPINGS as VS_DISP from .fast_effective import NODE_CLASS_MAPPINGS as FE_MAPS, NODE_DISPLAY_NAME_MAPPINGS as FE_DISP from .non_iterative import NODE_CLASS_MAPPINGS as NI_MAPS, NODE_DISPLAY_NAME_MAPPINGS as NI_DISP @@ -22,7 +21,6 @@ NODE_CLASS_MAPPINGS.update(UM_MAPS) NODE_CLASS_MAPPINGS.update(LU_MAPS) NODE_CLASS_MAPPINGS.update(L0_MAPS) NODE_CLASS_MAPPINGS.update(GN_MAPS) -NODE_CLASS_MAPPINGS.update(VS_MAPS) NODE_CLASS_MAPPINGS.update(FE_MAPS) NODE_CLASS_MAPPINGS.update(NI_MAPS) @@ -31,7 +29,6 @@ NODE_DISPLAY_NAME_MAPPINGS.update(UM_DISP) NODE_DISPLAY_NAME_MAPPINGS.update(LU_DISP) NODE_DISPLAY_NAME_MAPPINGS.update(L0_DISP) NODE_DISPLAY_NAME_MAPPINGS.update(GN_DISP) -NODE_DISPLAY_NAME_MAPPINGS.update(VS_DISP) NODE_DISPLAY_NAME_MAPPINGS.update(FE_DISP) NODE_DISPLAY_NAME_MAPPINGS.update(NI_DISP) diff --git a/nodes/main/smoothing/sharpen_backends/libigl_unsharp.py b/nodes/main/smoothing/sharpen_backends/libigl_unsharp.py index 3096f487..8899280a 100644 --- a/nodes/main/smoothing/sharpen_backends/libigl_unsharp.py +++ b/nodes/main/smoothing/sharpen_backends/libigl_unsharp.py @@ -11,16 +11,19 @@ from comfy_api.latest import io log = logging.getLogger("geometrypack") -def _libigl_unsharp_sharpen(mesh, lambda_, iterations): +def _libigl_unsharp_sharpen(mesh, weight, iterations): """Cotangent-weighted geometric unsharp mask via libigl. - V_sharp = V + lambda * M^{-1} * L * V - where L is the cotangent Laplacian and M is the Voronoi mass matrix. + Uses implicit Laplacian smoothing (backward Euler) to compute a stable + smooth reference, then amplifies the detail: + V_smooth = solve (M - dt*L) V_smooth = M @ V (repeated) + V_sharp = V + weight * (V - V_smooth) """ try: import igl except ImportError: return None, "libigl is not installed. Install with: pip install libigl" + from scipy.sparse.linalg import spsolve V = np.asarray(mesh.vertices, dtype=np.float64) F = np.asarray(mesh.faces, dtype=np.int64) @@ -31,19 +34,21 @@ def _libigl_unsharp_sharpen(mesh, lambda_, iterations): L = igl.cotmatrix(V, F) M = igl.massmatrix(V, F, igl.MASSMATRIX_TYPE_VORONOI) - # M is diagonal -- invert via element-wise reciprocal - M_diag = M.diagonal().copy() - M_diag[M_diag == 0] = 1e-12 - M_inv = 1.0 / M_diag - + # Implicit smoothing: solve (M - dt*L) V_smooth = M @ V + # dt=1.0 gives strong smoothing per iteration; always stable. + A = M - L + V_smooth = V.copy() for _ in range(iterations): - # L @ V gives curvature-weighted displacement (n, 3) - LV = L @ V - delta = M_inv[:, None] * LV - V = V + lambda_ * delta + for dim in range(3): + rhs = M @ V_smooth[:, dim] + V_smooth[:, dim] = spsolve(A, rhs) + + # Unsharp mask: amplify the detail signal + detail = V - V_smooth + V_sharp = V + weight * detail result = trimesh_module.Trimesh( - vertices=V, + vertices=V_sharp, faces=np.asarray(mesh.faces, dtype=np.int32), process=False, ) @@ -63,15 +68,14 @@ class SharpenLibiglUnsharpNode(io.ComfyNode): is_output_node=True, inputs=[ io.Custom("TRIMESH").Input("trimesh"), - io.Float.Input("lambda_", default=0.5, min=0.01, max=5.0, step=0.01, tooltip=( - "Unsharp mask strength. Controls how much the cotangent " - "Laplacian displacement is amplified. Higher values produce " - "stronger sharpening but may cause overshooting. " - "Start with 0.3-0.5." + io.Float.Input("weight", default=0.5, min=0.01, max=5.0, step=0.01, tooltip=( + "How much detail to add back. 0.5 = subtle sharpening, " + "1.0 = double the detail, 2.0+ = aggressive." )), io.Int.Input("iterations", default=3, min=1, max=50, step=1, tooltip=( - "Number of unsharp mask passes. Multiple light passes " - "are more stable than a single heavy pass." + "Smoothing iterations for the reference mesh. " + "More iterations = smoother reference = sharpens broader features. " + "Fewer iterations = sharpens fine detail." )), ], outputs=[ @@ -81,16 +85,16 @@ class SharpenLibiglUnsharpNode(io.ComfyNode): ) @classmethod - def execute(cls, trimesh, lambda_=0.5, iterations=3): + def execute(cls, trimesh, weight=0.5, iterations=3): log.info("Backend: libigl_unsharp") log.info("Input: %d vertices, %d faces", len(trimesh.vertices), len(trimesh.faces)) - log.info("Parameters: lambda=%.3f, iterations=%d", lambda_, iterations) + log.info("Parameters: weight=%.3f, iterations=%d", weight, iterations) initial_vertices = len(trimesh.vertices) initial_faces = len(trimesh.faces) sharpened, error = _libigl_unsharp_sharpen( - trimesh, lambda_, iterations, + trimesh, weight, iterations, ) if sharpened is None: @@ -117,7 +121,7 @@ class SharpenLibiglUnsharpNode(io.ComfyNode): log.info("Avg vertex displacement: %.6f, max: %.6f", avg_disp, max_disp) param_text = ( - f"Lambda: {lambda_}\n" + f"Weight: {weight}\n" f"Iterations: {iterations}" ) diff --git a/nodes/main/smoothing/sharpen_backends/vsa_snap.py b/nodes/main/smoothing/sharpen_backends/vsa_snap.py deleted file mode 100644 index e93d4835..00000000 --- a/nodes/main/smoothing/sharpen_backends/vsa_snap.py +++ /dev/null @@ -1,252 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# Copyright (C) 2025 ComfyUI-GeometryPack Contributors - -"""Variational Shape Approximation face clustering + vertex snapping backend node.""" - -import logging -import numpy as np -import trimesh as trimesh_module -from comfy_api.latest import io -from ._helpers import _compute_face_geometry - -log = logging.getLogger("geometrypack") - - -def _vsa_snap_sharpen(mesh, num_proxies, lloyd_iterations, snap_strength): - """Variational Shape Approximation clustering with vertex snapping. - - Clusters mesh faces into proxy plane groups via Lloyd iteration (using - area-weighted normal distance as the L2,1 metric), then snaps vertices: - - Interior vertices (one proxy): project onto proxy plane - - Edge vertices (two proxies): snap to plane intersection line - - Corner vertices (3+ proxies): snap to plane intersection point - """ - V = np.asarray(mesh.vertices, dtype=np.float64) - F = np.asarray(mesh.faces, dtype=np.int64) - - if len(V) == 0 or len(F) == 0: - return None, "Empty mesh (no vertices or faces)." - - m = len(F) - k = min(num_proxies, m) - - normals, centroids, areas = _compute_face_geometry(V, F) - - # --- Step 1: farthest-point seeding on area-weighted normal space --- - seeds = [0] - min_dists = np.full(m, np.inf) - - for _ in range(k - 1): - last = seeds[-1] - d = areas * np.linalg.norm(normals - normals[last], axis=1) - min_dists = np.minimum(min_dists, d) - seeds.append(int(np.argmax(min_dists))) - - proxy_normals = normals[seeds].copy() - proxy_centroids = centroids[seeds].copy() - - # --- Step 2: Lloyd iteration --- - labels = np.zeros(m, dtype=np.int32) - - for _ in range(lloyd_iterations): - # Assign each face to nearest proxy (L2,1 metric) - # (m, k) distance matrix - normal_diffs = np.linalg.norm( - normals[:, None, :] - proxy_normals[None, :, :], axis=2 - ) - weighted_diffs = areas[:, None] * normal_diffs - labels = np.argmin(weighted_diffs, axis=1).astype(np.int32) - - # Refit proxies - for p in range(k): - mask = labels == p - if not np.any(mask): - # Empty cluster -- re-seed from farthest face - assigned_dists = weighted_diffs[np.arange(m), labels] - worst = int(np.argmax(assigned_dists)) - proxy_normals[p] = normals[worst] - proxy_centroids[p] = centroids[worst] - continue - a = areas[mask] - total_a = np.sum(a) + 1e-12 - avg_n = np.sum(normals[mask] * a[:, None], axis=0) / total_a - norm_len = np.linalg.norm(avg_n) - if norm_len > 1e-12: - avg_n /= norm_len - proxy_normals[p] = avg_n - proxy_centroids[p] = np.sum(centroids[mask] * a[:, None], axis=0) / total_a - - # --- Step 3: snap vertices --- - # Build vertex-to-face adjacency - vertex_faces = [[] for _ in range(len(V))] - for fi in range(m): - for vi in F[fi]: - vertex_faces[vi].append(fi) - - V_snapped = V.copy() - - for vi in range(len(V)): - adj_fi = vertex_faces[vi] - if not adj_fi: - continue - - adj_labels = list(set(labels[fi] for fi in adj_fi)) - - if len(adj_labels) == 1: - # Interior: project onto single proxy plane - p = adj_labels[0] - n = proxy_normals[p] - c = proxy_centroids[p] - d = np.dot(V[vi] - c, n) - V_snapped[vi] = V[vi] - snap_strength * d * n - - elif len(adj_labels) == 2: - # Edge: snap to intersection of two planes - p1, p2 = adj_labels - n1, c1 = proxy_normals[p1], proxy_centroids[p1] - n2, c2 = proxy_normals[p2], proxy_centroids[p2] - - line_dir = np.cross(n1, n2) - line_dir_norm = np.linalg.norm(line_dir) - - if line_dir_norm < 1e-8: - # Nearly parallel planes -- project onto average - avg_n = (n1 + n2) - avg_n_norm = np.linalg.norm(avg_n) - if avg_n_norm > 1e-12: - avg_n /= avg_n_norm - avg_c = (c1 + c2) / 2.0 - d = np.dot(V[vi] - avg_c, avg_n) - V_snapped[vi] = V[vi] - snap_strength * d * avg_n - else: - line_dir /= line_dir_norm - # Find a point on the intersection line - A = np.array([n1, n2]) - b = np.array([np.dot(n1, c1), np.dot(n2, c2)]) - try: - AAT = A @ A.T - p0 = A.T @ np.linalg.solve(AAT, b) - except np.linalg.LinAlgError: - continue - # Project vertex onto the line - v_rel = V[vi] - p0 - t = np.dot(v_rel, line_dir) - closest = p0 + t * line_dir - V_snapped[vi] = V[vi] + snap_strength * (closest - V[vi]) - - else: - # Corner: snap to intersection of 3+ planes - A = np.array([proxy_normals[p] for p in adj_labels]) - b = np.array([np.dot(proxy_normals[p], proxy_centroids[p]) - for p in adj_labels]) - try: - if len(adj_labels) == 3: - corner = np.linalg.solve(A, b) - else: - corner, _, _, _ = np.linalg.lstsq(A, b, rcond=None) - V_snapped[vi] = V[vi] + snap_strength * (corner - V[vi]) - except np.linalg.LinAlgError: - continue - - result = trimesh_module.Trimesh( - vertices=V_snapped, - faces=np.asarray(mesh.faces, dtype=np.int32), - process=False, - ) - return result, "" - - -class SharpenVSASnapNode(io.ComfyNode): - """Variational Shape Approximation face clustering + vertex snapping backend.""" - - @classmethod - def define_schema(cls): - return io.Schema( - node_id="GeomPackSharpen_VSASnap", - display_name="Sharpen VSA Snap (backend)", - category="geompack/smoothing", - is_dev_only=True, - is_output_node=True, - inputs=[ - io.Custom("TRIMESH").Input("trimesh"), - io.Int.Input("num_proxies", default=20, min=2, max=500, step=1, tooltip=( - "Number of proxy planes (face clusters). More proxies " - "preserve more detail. Fewer proxies create a more " - "abstract/simplified appearance. 10-50 for simple shapes, " - "50-200 for complex shapes." - )), - io.Int.Input("lloyd_iterations", default=10, min=1, max=100, step=1, tooltip=( - "Number of Lloyd clustering iterations. 10 is usually " - "sufficient for convergence." - )), - io.Float.Input("snap_strength", default=1.0, min=0.0, max=1.0, step=0.01, tooltip=( - "How aggressively to snap vertices to proxy planes. " - "0.0 = no change, 1.0 = full snap. " - "Values like 0.5-0.8 give a subtle sharpening effect." - )), - ], - outputs=[ - io.Custom("TRIMESH").Output(display_name="sharpened_mesh"), - io.String.Output(display_name="info"), - ], - ) - - @classmethod - def execute(cls, trimesh, num_proxies=20, lloyd_iterations=10, snap_strength=1.0): - log.info("Backend: vsa_snap") - log.info("Input: %d vertices, %d faces", len(trimesh.vertices), len(trimesh.faces)) - log.info("Parameters: num_proxies=%d, lloyd_iter=%d, snap_strength=%.2f", - num_proxies, lloyd_iterations, snap_strength) - - initial_vertices = len(trimesh.vertices) - initial_faces = len(trimesh.faces) - - sharpened, error = _vsa_snap_sharpen( - trimesh, num_proxies, lloyd_iterations, snap_strength, - ) - - if sharpened is None: - raise ValueError(f"Sharpening failed (vsa_snap): {error}") - - # Copy metadata - if hasattr(trimesh, "metadata") and trimesh.metadata: - sharpened.metadata = trimesh.metadata.copy() - sharpened.metadata["sharpening"] = { - "algorithm": "vsa_snap", - "original_vertices": initial_vertices, - "original_faces": initial_faces, - } - - # Compute displacement stats - disp = np.linalg.norm( - np.asarray(sharpened.vertices) - np.asarray(trimesh.vertices), axis=1 - ) - avg_disp = float(np.mean(disp)) - max_disp = float(np.max(disp)) - - log.info("Output: %d vertices, %d faces", - len(sharpened.vertices), len(sharpened.faces)) - log.info("Avg vertex displacement: %.6f, max: %.6f", avg_disp, max_disp) - - param_text = ( - f"Num Proxies: {num_proxies}\n" - f"Lloyd Iterations: {lloyd_iterations}\n" - f"Snap Strength: {snap_strength}" - ) - - info = f"""Sharpen Mesh Results (vsa_snap): - -{param_text} - -Vertices: {initial_vertices:,} (unchanged) -Faces: {initial_faces:,} (unchanged) - -Displacement: - Average: {avg_disp:.6f} - Maximum: {max_disp:.6f} -""" - return io.NodeOutput(sharpened, info, ui={"text": [info]}) - - -NODE_CLASS_MAPPINGS = {"GeomPackSharpen_VSASnap": SharpenVSASnapNode} -NODE_DISPLAY_NAME_MAPPINGS = {"GeomPackSharpen_VSASnap": "Sharpen VSA Snap (backend)"} diff --git a/nodes/main/visualization/_vtp_export.py b/nodes/main/visualization/_vtp_export.py index 757094fb..62d2e774 100644 --- a/nodes/main/visualization/_vtp_export.py +++ b/nodes/main/visualization/_vtp_export.py @@ -71,15 +71,33 @@ def export_mesh_with_scalars_vtp(trimesh: trimesh_module.Trimesh, filepath: str) # PointData section (scalar fields) point_data = ET.SubElement(piece, 'PointData') + # Add vertex normals if available (built-in trimesh property, not in vertex_attributes) + if not is_pc and hasattr(trimesh, 'vertex_normals') and len(trimesh.vertex_normals) > 0: + try: + normals = np.asarray(trimesh.vertex_normals, dtype=np.float32) + if normals.shape == (num_verts, 3): + log.info("Adding normals field (%d vertices)", num_verts) + normals_array = ET.SubElement(point_data, 'DataArray', + type='Float32', + Name='normals', + NumberOfComponents='3', + format='ascii') + normals_array.text = ' '.join(map(str, normals.flatten())) + except Exception as e: + log.warning("Could not export normals: %s", e) + # Add vertex attributes as scalar arrays if hasattr(trimesh, 'vertex_attributes') and trimesh.vertex_attributes: for attr_name, attr_values in trimesh.vertex_attributes.items(): - log.info("Adding scalar field: %s", attr_name) + attr_arr = np.asarray(attr_values) + num_components = attr_arr.shape[1] if attr_arr.ndim > 1 else 1 + log.info("Adding scalar field: %s (components: %d)", attr_name, num_components) scalar_array = ET.SubElement(point_data, 'DataArray', type='Float32', Name=attr_name, + NumberOfComponents=str(num_components), format='ascii') - scalar_array.text = ' '.join(map(str, attr_values.flatten())) + scalar_array.text = ' '.join(map(str, attr_arr.flatten())) # CellData section (face attributes) - only for meshes with faces if not is_pc: diff --git a/nodes/main/visualization/preview_mesh_multi.py b/nodes/main/visualization/preview_mesh_multi.py index e1cad761..07f97009 100644 --- a/nodes/main/visualization/preview_mesh_multi.py +++ b/nodes/main/visualization/preview_mesh_multi.py @@ -147,10 +147,8 @@ class PreviewMeshMultiNode(io.ComfyNode): # Export mesh if mode == "texture": filename = f"preview_multi_{i+1}_{preview_id}.glb" - elif mesh_has_fields or mesh_is_pc: - filename = f"preview_multi_{i+1}_{preview_id}.vtp" else: - filename = f"preview_multi_{i+1}_{preview_id}.stl" + filename = f"preview_multi_{i+1}_{preview_id}.vtp" if COMFYUI_OUTPUT_FOLDER: filepath = os.path.join(COMFYUI_OUTPUT_FOLDER, filename) @@ -161,12 +159,9 @@ class PreviewMeshMultiNode(io.ComfyNode): if mode == "texture": mesh.export(filepath, file_type='glb', include_normals=True) log.info("Exported GLB: %s", filepath) - elif mesh_has_fields or mesh_is_pc: + else: export_mesh_with_scalars_vtp(mesh, filepath) log.info("Exported VTP: %s", filepath) - else: - mesh.export(filepath, file_type='stl') - log.info("Exported STL: %s", filepath) except Exception as e: log.error("Export failed: %s, trying OBJ fallback", e) filename = f"preview_multi_{i+1}_{preview_id}.obj" diff --git a/nodes/main/visualization/preview_mesh_vtk.py b/nodes/main/visualization/preview_mesh_vtk.py index d6770a3b..ad72608d 100644 --- a/nodes/main/visualization/preview_mesh_vtk.py +++ b/nodes/main/visualization/preview_mesh_vtk.py @@ -129,16 +129,9 @@ class PreviewMeshVTKNode(io.ComfyNode): viewer_type = "texture" log.info("Using texture mode - GLB export") else: - # Fields mode: Export VTP/STL for scalar field visualization - if has_fields or is_pc: - # Export to VTP for: scalar fields OR point clouds (STL doesn't support point clouds) - filename = f"preview_vtk_{uuid.uuid4().hex[:8]}.vtp" - log.info("Using VTP format (fields=%s, point_cloud=%s)", has_fields, is_pc) - else: - # Export to STL (compact format for simple surface meshes) - filename = f"preview_vtk_{uuid.uuid4().hex[:8]}.stl" + filename = f"preview_vtk_{uuid.uuid4().hex[:8]}.vtp" viewer_type = "fields" - log.info("Using fields mode - VTP/STL export") + log.info("Using fields mode - VTP export") # Use ComfyUI's output directory if COMFYUI_OUTPUT_FOLDER: @@ -166,14 +159,9 @@ class PreviewMeshVTKNode(io.ComfyNode): # Export GLB for texture/PBR rendering trimesh.export(filepath, file_type='glb', include_normals=True) log.info("Exported GLB to: %s", filepath) - elif has_fields or is_pc: - # Use VTP exporter for fields or point clouds + else: export_mesh_with_scalars_vtp(trimesh, filepath) log.info("Exported VTP to: %s", filepath) - else: - # Use STL for simple surface meshes - trimesh.export(filepath, file_type='stl') - log.info("Exported STL to: %s", filepath) except Exception as e: log.error("Export failed: %s", e) # Fallback to OBJ diff --git a/requirements.txt b/requirements.txt index 8b4701d9..98ccf6dc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # Main process deps (prestartup + lightweight shared libs) -comfy-env==0.2.38 +comfy-env==0.2.39 comfy-dynamic-widgets==0.1.4 comfy-3d-viewers==0.2.30 numpy diff --git a/workflows/tests/boolean_ops_all.json b/workflows/tests/boolean_ops_all.json index 5799a124..c1751025 100644 --- a/workflows/tests/boolean_ops_all.json +++ b/workflows/tests/boolean_ops_all.json @@ -1 +1 @@ -{"id":"test-boolean-all-0001","revision":0,"last_node_id":6,"last_link_id":8,"nodes":[{"id":2,"type":"GeomPackCreatePrimitive","pos":[-600,100],"size":[270,150],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"shape","name":"shape","type":"COMBO","widget":{"name":"shape"},"link":null},{"localized_name":"size","name":"size","type":"FLOAT","widget":{"name":"size"},"link":null},{"localized_name":"subdivisions","name":"subdivisions","shape":7,"type":"INT","widget":{"name":"subdivisions"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[2,4]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackCreatePrimitive"},"widgets_values":["cube",0.8,1]},{"id":3,"type":"GeomPackBoolean","pos":[-200,-200],"size":[370,102],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"mesh_a","name":"mesh_a","type":"TRIMESH","link":1},{"localized_name":"mesh_b","name":"mesh_b","type":"TRIMESH","link":2},{"localized_name":"operation","name":"operation","type":"COMBO","widget":{"name":"operation"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"result_mesh","name":"result_mesh","type":"TRIMESH","links":[5]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackBoolean"},"widgets_values":["difference","libigl_cgal"]},{"id":4,"type":"GeomPackBoolean","pos":[-200,100],"size":[370,102],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"mesh_a","name":"mesh_a","type":"TRIMESH","link":3},{"localized_name":"mesh_b","name":"mesh_b","type":"TRIMESH","link":4},{"localized_name":"operation","name":"operation","type":"COMBO","widget":{"name":"operation"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"result_mesh","name":"result_mesh","type":"TRIMESH","links":[6]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackBoolean"},"widgets_values":["difference","blender_exact"]},{"id":5,"type":"GeomPackPreviewMeshMulti","pos":[213.07101477171835,-194.17306733063847],"size":[768,702],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":5},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":6},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"\",\"selected_field\":\"\"}"]},{"id":1,"type":"GeomPackCreatePrimitive","pos":[-600,-200],"size":[270,150],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"shape","name":"shape","type":"COMBO","widget":{"name":"shape"},"link":null},{"localized_name":"size","name":"size","type":"FLOAT","widget":{"name":"size"},"link":null},{"localized_name":"subdivisions","name":"subdivisions","shape":7,"type":"INT","widget":{"name":"subdivisions"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,3]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackCreatePrimitive"},"widgets_values":["sphere",1,4]}],"links":[[1,1,0,3,0,"TRIMESH"],[2,2,0,3,1,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,2,0,4,1,"TRIMESH"],[5,3,0,5,0,"TRIMESH"],[6,4,0,5,1,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.9663060000000003,"offset":[877.1812568381522,409.15273095993916]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file +{"id":"test-boolean-all-0001","revision":0,"last_node_id":6,"last_link_id":8,"nodes":[{"id":2,"type":"GeomPackCreatePrimitive","pos":[-600,100],"size":[270,150],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"shape","name":"shape","type":"COMBO","widget":{"name":"shape"},"link":null},{"localized_name":"size","name":"size","type":"FLOAT","widget":{"name":"size"},"link":null},{"localized_name":"subdivisions","name":"subdivisions","shape":7,"type":"INT","widget":{"name":"subdivisions"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[2,4]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackCreatePrimitive"},"widgets_values":["cube",0.8,1]},{"id":3,"type":"GeomPackBoolean","pos":[-200,-200],"size":[370,102],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"mesh_a","name":"mesh_a","type":"TRIMESH","link":1},{"localized_name":"mesh_b","name":"mesh_b","type":"TRIMESH","link":2},{"localized_name":"operation","name":"operation","type":"COMBO","widget":{"name":"operation"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"result_mesh","name":"result_mesh","type":"TRIMESH","links":[5]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackBoolean"},"widgets_values":["difference","libigl_cgal"]},{"id":4,"type":"GeomPackBoolean","pos":[-200,100],"size":[370,102],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"mesh_a","name":"mesh_a","type":"TRIMESH","link":3},{"localized_name":"mesh_b","name":"mesh_b","type":"TRIMESH","link":4},{"localized_name":"operation","name":"operation","type":"COMBO","widget":{"name":"operation"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"result_mesh","name":"result_mesh","type":"TRIMESH","links":[6]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackBoolean"},"widgets_values":["difference","blender_exact"]},{"id":5,"type":"GeomPackPreviewMeshMulti","pos":[213.07101477171835,-194.17306733063847],"size":[768,702],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":5},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":6},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[1.2245775204403364,1.2245775204403364,1.2245775204403364],\\\"focalPoint\\\":[0,0,0],\\\"viewUp\\\":[0,0,1]}\",\"selected_field\":\"\"}"]},{"id":1,"type":"GeomPackCreatePrimitive","pos":[-600,-200],"size":[270,150],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"shape","name":"shape","type":"COMBO","widget":{"name":"shape"},"link":null},{"localized_name":"size","name":"size","type":"FLOAT","widget":{"name":"size"},"link":null},{"localized_name":"subdivisions","name":"subdivisions","shape":7,"type":"INT","widget":{"name":"subdivisions"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,3]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackCreatePrimitive"},"widgets_values":["sphere",1,4]}],"links":[[1,1,0,3,0,"TRIMESH"],[2,2,0,3,1,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,2,0,4,1,"TRIMESH"],[5,3,0,5,0,"TRIMESH"],[6,4,0,5,1,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.8719083213796316,"offset":[536.4213213855968,421.65866536973317]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file diff --git a/workflows/tests/decimate_all.json b/workflows/tests/decimate_all.json index 634b1ad9..0ea9f9f3 100644 --- a/workflows/tests/decimate_all.json +++ b/workflows/tests/decimate_all.json @@ -1 +1 @@ -{"id":"a1b2c3d4-e5f6-7890-abcd-decimate00001","revision":0,"last_node_id":8,"last_link_id":13,"nodes":[{"id":1,"type":"GeomPackLoadMesh","pos":[-834.8477636718761,-155.28021972656245],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,5,6,13]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/Stanford_Bunny.stl"]},{"id":8,"type":"GeomPackPreviewMeshMulti","pos":[726.3024951171867,-194.2822802734373],"size":[768,702],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":13},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":11},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":12},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[215.82045526389112,66.18171649191358,142.99319876297514],\\\"focalPoint\\\":[30.319300651550293,1.8948078155517578,59.22008657455444],\\\"viewUp\\\":[-0.28673184554851583,-0.3398393006551081,0.8957087129634218]}\",\"selected_field\":\"\"}"]},{"id":2,"type":"GeomPackDecimateMesh","pos":[-850.15067871094,-10.46611328125014],"size":[370,222],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_face_count","name":"backend.target_face_count","type":"INT","widget":{"name":"backend.target_face_count"},"link":null},{"localized_name":"backend.quality_threshold","name":"backend.quality_threshold","type":"FLOAT","widget":{"name":"backend.quality_threshold"},"link":null},{"localized_name":"backend.preserve_boundary","name":"backend.preserve_boundary","type":"COMBO","widget":{"name":"backend.preserve_boundary"},"link":null},{"localized_name":"backend.preserve_normal","name":"backend.preserve_normal","type":"COMBO","widget":{"name":"backend.preserve_normal"},"link":null},{"localized_name":"backend.preserve_topology","name":"backend.preserve_topology","type":"COMBO","widget":{"name":"backend.preserve_topology"},"link":null},{"localized_name":"backend.planar_quadric","name":"backend.planar_quadric","type":"COMBO","widget":{"name":"backend.planar_quadric"},"link":null}],"outputs":[{"localized_name":"decimated_mesh","name":"decimated_mesh","type":"TRIMESH","links":[7]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackDecimateMesh"},"widgets_values":["quadric_edge_collapse",5000,0.3,"true","true","true","false"]},{"id":3,"type":"GeomPackDecimateMesh","pos":[-846.0558691406263,267.5156445312493],"size":[370,126],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_reduction","name":"backend.target_reduction","type":"FLOAT","widget":{"name":"backend.target_reduction"},"link":null},{"localized_name":"backend.aggressiveness","name":"backend.aggressiveness","type":"INT","widget":{"name":"backend.aggressiveness"},"link":null}],"outputs":[{"localized_name":"decimated_mesh","name":"decimated_mesh","type":"TRIMESH","links":[8]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackDecimateMesh"},"widgets_values":["fast_simplification",0.8,7]},{"id":7,"type":"GeomPackPreviewMeshMulti","pos":[-459.3555810546881,-193.33342285156226],"size":[768,702],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":6},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":7},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":8},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[215.82045526389112,66.18171649191358,142.99319876297514],\\\"focalPoint\\\":[30.319300651550293,1.8948078155517578,59.22008657455444],\\\"viewUp\\\":[-0.28673184554851583,-0.3398393006551081,0.8957087129634218]}\",\"selected_field\":\"\"}"]},{"id":4,"type":"GeomPackDecimateMesh","pos":[336.95061523437454,93.11665039062464],"size":[370,102],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.cluster_threshold","name":"backend.cluster_threshold","type":"FLOAT","widget":{"name":"backend.cluster_threshold"},"link":null}],"outputs":[{"localized_name":"decimated_mesh","name":"decimated_mesh","type":"TRIMESH","links":[12]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackDecimateMesh"},"widgets_values":["vertex_clustering",3]},{"id":6,"type":"GeomPackDecimateMesh","pos":[331.6426025390617,-110.89962402343754],"size":[370,150],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_reduction","name":"backend.target_reduction","type":"FLOAT","widget":{"name":"backend.target_reduction"},"link":null},{"localized_name":"backend.feature_angle","name":"backend.feature_angle","type":"FLOAT","widget":{"name":"backend.feature_angle"},"link":null},{"localized_name":"backend.preserve_topology","name":"backend.preserve_topology","type":"COMBO","widget":{"name":"backend.preserve_topology"},"link":null}],"outputs":[{"localized_name":"decimated_mesh","name":"decimated_mesh","type":"TRIMESH","links":[11]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackDecimateMesh"},"widgets_values":["decimate_pro",0.8,15,"true"]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[6,1,0,7,0,"TRIMESH"],[7,2,0,7,1,"TRIMESH"],[8,3,0,7,2,"TRIMESH"],[11,6,0,8,1,"TRIMESH"],[12,4,0,8,2,"TRIMESH"],[13,1,0,8,0,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.8000000000000012,"offset":[533.8795750656052,458.7658745986985]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file +{"id":"a1b2c3d4-e5f6-7890-abcd-decimate00001","revision":0,"last_node_id":8,"last_link_id":13,"nodes":[{"id":1,"type":"GeomPackLoadMesh","pos":[-834.8477636718761,-155.28021972656245],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,5,6,13]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/Stanford_Bunny.stl"]},{"id":8,"type":"GeomPackPreviewMeshMulti","pos":[726.3024951171867,-194.2822802734373],"size":[768,702],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":13},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":11},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":12},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[156.15573456772853,45.50443036606394,116.04835655422535],\\\"focalPoint\\\":[30.319300651550293,1.8948078155517578,59.22008657455444],\\\"viewUp\\\":[-0.28673184554851583,-0.3398393006551081,0.8957087129634218]}\",\"selected_field\":\"\"}"]},{"id":2,"type":"GeomPackDecimateMesh","pos":[-850.15067871094,-10.46611328125014],"size":[370,222],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_face_count","name":"backend.target_face_count","type":"INT","widget":{"name":"backend.target_face_count"},"link":null},{"localized_name":"backend.quality_threshold","name":"backend.quality_threshold","type":"FLOAT","widget":{"name":"backend.quality_threshold"},"link":null},{"localized_name":"backend.preserve_boundary","name":"backend.preserve_boundary","type":"COMBO","widget":{"name":"backend.preserve_boundary"},"link":null},{"localized_name":"backend.preserve_normal","name":"backend.preserve_normal","type":"COMBO","widget":{"name":"backend.preserve_normal"},"link":null},{"localized_name":"backend.preserve_topology","name":"backend.preserve_topology","type":"COMBO","widget":{"name":"backend.preserve_topology"},"link":null},{"localized_name":"backend.planar_quadric","name":"backend.planar_quadric","type":"COMBO","widget":{"name":"backend.planar_quadric"},"link":null}],"outputs":[{"localized_name":"decimated_mesh","name":"decimated_mesh","type":"TRIMESH","links":[7]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackDecimateMesh"},"widgets_values":["quadric_edge_collapse",5000,0.3,"true","true","true","false"]},{"id":3,"type":"GeomPackDecimateMesh","pos":[-846.0558691406263,267.5156445312493],"size":[370,126],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_reduction","name":"backend.target_reduction","type":"FLOAT","widget":{"name":"backend.target_reduction"},"link":null},{"localized_name":"backend.aggressiveness","name":"backend.aggressiveness","type":"INT","widget":{"name":"backend.aggressiveness"},"link":null}],"outputs":[{"localized_name":"decimated_mesh","name":"decimated_mesh","type":"TRIMESH","links":[8]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackDecimateMesh"},"widgets_values":["fast_simplification",0.8,7]},{"id":4,"type":"GeomPackDecimateMesh","pos":[336.95061523437454,93.11665039062464],"size":[370,102],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.cluster_threshold","name":"backend.cluster_threshold","type":"FLOAT","widget":{"name":"backend.cluster_threshold"},"link":null}],"outputs":[{"localized_name":"decimated_mesh","name":"decimated_mesh","type":"TRIMESH","links":[12]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackDecimateMesh"},"widgets_values":["vertex_clustering",3]},{"id":6,"type":"GeomPackDecimateMesh","pos":[331.6426025390617,-110.89962402343754],"size":[370,150],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_reduction","name":"backend.target_reduction","type":"FLOAT","widget":{"name":"backend.target_reduction"},"link":null},{"localized_name":"backend.feature_angle","name":"backend.feature_angle","type":"FLOAT","widget":{"name":"backend.feature_angle"},"link":null},{"localized_name":"backend.preserve_topology","name":"backend.preserve_topology","type":"COMBO","widget":{"name":"backend.preserve_topology"},"link":null}],"outputs":[{"localized_name":"decimated_mesh","name":"decimated_mesh","type":"TRIMESH","links":[11]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackDecimateMesh"},"widgets_values":["decimate_pro",0.8,15,"true"]},{"id":7,"type":"GeomPackPreviewMeshMulti","pos":[-459.3555810546881,-193.33342285156226],"size":[768,702],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":6},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":7},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":8},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[156.15573456772853,45.50443036606394,116.04835655422535],\\\"focalPoint\\\":[30.319300651550293,1.8948078155517578,59.22008657455444],\\\"viewUp\\\":[-0.28673184554851583,-0.3398393006551081,0.8957087129634218]}\",\"selected_field\":\"\"}"]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[6,1,0,7,0,"TRIMESH"],[7,2,0,7,1,"TRIMESH"],[8,3,0,7,2,"TRIMESH"],[11,6,0,8,1,"TRIMESH"],[12,4,0,8,2,"TRIMESH"],[13,1,0,8,0,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.8000000000000012,"offset":[690.8961766281052,355.7873589736986]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file diff --git a/workflows/tests/fill_holes_all.json b/workflows/tests/fill_holes_all.json index a70a6b60..68153465 100644 --- a/workflows/tests/fill_holes_all.json +++ b/workflows/tests/fill_holes_all.json @@ -1 +1 @@ -{"id":"a1b2c3d4-e5f6-7890-abcd-fillholes0001","revision":0,"last_node_id":9,"last_link_id":13,"nodes":[{"id":2,"type":"GeomPackFillHoles","pos":[-400,-600],"size":[370,110],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","link":1},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"filled_mesh","name":"filled_mesh","type":"TRIMESH","links":[8]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackFillHoles"},"widgets_values":["trimesh","false"]},{"id":3,"type":"GeomPackFillHoles","pos":[0,-600],"size":[370,134],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.maxholesize","name":"backend.maxholesize","type":"INT","widget":{"name":"backend.maxholesize"},"link":null}],"outputs":[{"localized_name":"filled_mesh","name":"filled_mesh","type":"TRIMESH","links":[9]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackFillHoles"},"widgets_values":["pymeshlab",0,"false"]},{"id":4,"type":"GeomPackFillHoles","pos":[400,-600],"size":[370,158],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.max_edges","name":"backend.max_edges","type":"INT","widget":{"name":"backend.max_edges"},"link":null},{"localized_name":"backend.refine","name":"backend.refine","type":"COMBO","widget":{"name":"backend.refine"},"link":null}],"outputs":[{"localized_name":"filled_mesh","name":"filled_mesh","type":"TRIMESH","links":[10]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackFillHoles"},"widgets_values":["pymeshfix",0,"true","false"]},{"id":5,"type":"GeomPackFillHoles","pos":[-400,-300],"size":[370,110],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"filled_mesh","name":"filled_mesh","type":"TRIMESH","links":[11]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackFillHoles"},"widgets_values":["igl_fan","false"]},{"id":6,"type":"GeomPackFillHoles","pos":[0,-300],"size":[370,134],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.quality","name":"backend.quality","type":"COMBO","widget":{"name":"backend.quality"},"link":null}],"outputs":[{"localized_name":"filled_mesh","name":"filled_mesh","type":"TRIMESH","links":[12]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackFillHoles"},"widgets_values":["cgal","refine","false"]},{"id":7,"type":"GeomPackFillHoles","pos":[400,-300],"size":[370,134],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","link":6},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.perimeter","name":"backend.perimeter","type":"FLOAT","widget":{"name":"backend.perimeter"},"link":null}],"outputs":[{"localized_name":"filled_mesh","name":"filled_mesh","type":"TRIMESH","links":[13]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackFillHoles"},"widgets_values":["gpu_cumesh",0.03,"false"]},{"id":8,"type":"GeomPackPreviewMeshMulti","pos":[-400,100],"size":[768,702],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":7},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":8},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":9},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":10},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[0.4013352586834127,-1.3034430870199674,-0.9081605838900391],\\\"focalPoint\\\":[0.000001996755599975586,-0.0636419951915741,-0.03211300075054169],\\\"viewUp\\\":[0.41668520115314117,-0.4307600853225743,0.8005118312884919]}\",\"selected_field\":\"\"}"]},{"id":9,"type":"GeomPackPreviewMeshMulti","pos":[500,100],"size":[768,702],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":11},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":12},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":13},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[0.4013352586834127,-1.3034430870199674,-0.9081605838900391],\\\"focalPoint\\\":[0.000001996755599975586,-0.0636419951915741,-0.03211300075054169],\\\"viewUp\\\":[0.41668520115314117,-0.4307600853225743,0.8005118312884919]}\",\"selected_field\":\"\"}"]},{"id":1,"type":"GeomPackLoadMesh","pos":[-800,-200],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,4,5,6,7]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/camelhead.off"]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[6,1,0,7,0,"TRIMESH"],[7,1,0,8,0,"TRIMESH"],[8,2,0,8,1,"TRIMESH"],[9,3,0,8,2,"TRIMESH"],[10,4,0,8,3,"TRIMESH"],[11,5,0,9,0,"TRIMESH"],[12,6,0,9,1,"TRIMESH"],[13,7,0,9,2,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.6611570247933886,"offset":[1231.005728515625,484.32482617187526]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file +{"id":"a1b2c3d4-e5f6-7890-abcd-fillholes0001","revision":0,"last_node_id":9,"last_link_id":16,"nodes":[{"id":1,"type":"GeomPackLoadMesh","pos":[-877.8583007812498,-118.69721679687503],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[2,3,4,5,6,7]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/camelhead.off"]},{"id":5,"type":"GeomPackFillHoles","pos":[334.9272949218742,-20.695605468749807],"size":[370,110],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"filled_mesh","name":"filled_mesh","type":"TRIMESH","links":[11]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackFillHoles"},"widgets_values":["igl_fan","false"]},{"id":6,"type":"GeomPackFillHoles","pos":[326.3868652343745,132.61044921874958],"size":[370,134],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.quality","name":"backend.quality","type":"COMBO","widget":{"name":"backend.quality"},"link":null}],"outputs":[{"localized_name":"filled_mesh","name":"filled_mesh","type":"TRIMESH","links":[12]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackFillHoles"},"widgets_values":["cgal","triangulate","false"]},{"id":9,"type":"GeomPackPreviewMeshMulti","pos":[733.4390136718749,-21.472656249999996],"size":[768,702],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":11},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":12},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":13},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[0.3450675952860498,-1.1296206877012935,-0.7853370972660157],\\\"focalPoint\\\":[0.000001996755599975586,-0.0636419951915741,-0.03211300075054169],\\\"viewUp\\\":[0.41668520115314117,-0.4307600853225743,0.8005118312884919]}\",\"selected_field\":\"\"}"]},{"id":7,"type":"GeomPackFillHoles","pos":[330.51953125,299.8362304687501],"size":[370,134],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","link":6},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.perimeter","name":"backend.perimeter","type":"FLOAT","widget":{"name":"backend.perimeter"},"link":null}],"outputs":[{"localized_name":"filled_mesh","name":"filled_mesh","type":"TRIMESH","links":[13]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackFillHoles"},"widgets_values":["gpu_cumesh",20,"false"]},{"id":8,"type":"GeomPackPreviewMeshMulti","pos":[-453.58149414062495,-26.819580078124975],"size":[768,702],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":7},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":16},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":15},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[0.3450675952860498,-1.1296206877012935,-0.7853370972660157],\\\"focalPoint\\\":[0.000001996755599975586,-0.0636419951915741,-0.03211300075054169],\\\"viewUp\\\":[0.41668520115314117,-0.4307600853225743,0.8005118312884919]}\",\"selected_field\":\"\"}"]},{"id":3,"type":"GeomPackFillHoles","pos":[-872.1312345377477,15.347377293094459],"size":[370,134],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.maxholesize","name":"backend.maxholesize","type":"INT","widget":{"name":"backend.maxholesize"},"link":null}],"outputs":[{"localized_name":"filled_mesh","name":"filled_mesh","type":"TRIMESH","links":[16]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackFillHoles"},"widgets_values":["pymeshlab",0,"false"]},{"id":4,"type":"GeomPackFillHoles","pos":[-880.4343275014749,198.27937524291306],"size":[370,158],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.max_edges","name":"backend.max_edges","type":"INT","widget":{"name":"backend.max_edges"},"link":null},{"localized_name":"backend.refine","name":"backend.refine","type":"COMBO","widget":{"name":"backend.refine"},"link":null}],"outputs":[{"localized_name":"filled_mesh","name":"filled_mesh","type":"TRIMESH","links":[15]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackFillHoles"},"widgets_values":["pymeshfix",0,"true","false"]}],"links":[[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[6,1,0,7,0,"TRIMESH"],[7,1,0,8,0,"TRIMESH"],[11,5,0,9,0,"TRIMESH"],[12,6,0,9,1,"TRIMESH"],[13,7,0,9,2,"TRIMESH"],[15,4,0,8,2,"TRIMESH"],[16,3,0,8,1,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.5557061362999314,"offset":[1336.8524572682982,439.4612648408024]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file diff --git a/workflows/tests/fix_normals_all.json b/workflows/tests/fix_normals_all.json index 3e3bad35..87406696 100644 --- a/workflows/tests/fix_normals_all.json +++ b/workflows/tests/fix_normals_all.json @@ -1 +1 @@ -{"id":"test-fix-normals-all-0001","revision":0,"last_node_id":9,"last_link_id":12,"nodes":[{"id":8,"type":"GeomPackPreviewMeshMulti","pos":[-416.27848735286733,-99.09842223891802],"size":[768,702],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":6},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":7},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":8},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":9},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[1.9778027347410103,2.370326957328046,-1.5381266683209809],\\\"focalPoint\\\":[0.000001996755599975586,-0.0636419951915741,-0.03211300075054169],\\\"viewUp\\\":[-0.3450705257441868,0.6804172446038931,0.6464972587012853]}\",\"selected_field\":\"\"}"]},{"id":9,"type":"GeomPackPreviewMeshMulti","pos":[378.5374405209115,-99.09842223891802],"size":[768,702],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":10},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":11},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[1.9778027347410103,2.370326957328046,-1.5381266683209809],\\\"focalPoint\\\":[0.000001996755599975586,-0.0636419951915741,-0.03211300075054169],\\\"viewUp\\\":[-0.3450705257441868,0.6804172446038931,0.6464972587012853]}\",\"selected_field\":\"\"}"]},{"id":6,"type":"GeomPackFixNormals","pos":[-887.3027798647635,491.3849236163281],"size":[370,110],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"fixed_mesh","name":"fixed_mesh","type":"TRIMESH","links":[11]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackFixNormals"},"widgets_values":["igl_signed_dist","false"]},{"id":5,"type":"GeomPackFixNormals","pos":[-889.1493998795415,340.07985048214533],"size":[370,110],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"fixed_mesh","name":"fixed_mesh","type":"TRIMESH","links":[10]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackFixNormals"},"widgets_values":["igl_raycast","false"]},{"id":4,"type":"GeomPackFixNormals","pos":[-891.2679834338181,191.1117182341826],"size":[370,110],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"fixed_mesh","name":"fixed_mesh","type":"TRIMESH","links":[9]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackFixNormals"},"widgets_values":["igl_winding","false"]},{"id":3,"type":"GeomPackFixNormals","pos":[-895.379931408891,43.61392767922324],"size":[370,110],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"fixed_mesh","name":"fixed_mesh","type":"TRIMESH","links":[8]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackFixNormals"},"widgets_values":["igl_bfs","false"]},{"id":2,"type":"GeomPackFixNormals","pos":[-895.5148783097702,-102.5023129319287],"size":[370,110],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"fixed_mesh","name":"fixed_mesh","type":"TRIMESH","links":[7]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackFixNormals"},"widgets_values":["trimesh","false"]},{"id":1,"type":"GeomPackLoadMesh","pos":[-883.8968194340091,-229.55171550212876],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,4,5,6]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/truck.obj"]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[6,1,0,8,0,"TRIMESH"],[7,2,0,8,1,"TRIMESH"],[8,3,0,8,2,"TRIMESH"],[9,4,0,8,3,"TRIMESH"],[10,5,0,9,0,"TRIMESH"],[11,6,0,9,1,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.798600000000001,"offset":[1126.481785517592,412.376809322399]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file +{"id":"test-fix-normals-all-0001","revision":0,"last_node_id":10,"last_link_id":13,"nodes":[{"id":8,"type":"GeomPackPreviewMeshMulti","pos":[-416.27848735286733,-99.09842223891802],"size":[768,702],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":6},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":7},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":8},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":9},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[2.393441145111277,0.9139763366891653,-1.0874875322949662],\\\"focalPoint\\\":[0,0,0],\\\"viewUp\\\":[-0.2837493462372615,0.9439214532462359,0.16881527955561504]}\",\"selected_field\":\"normals\"}"]},{"id":6,"type":"GeomPackFixNormals","pos":[-887.3027798647635,491.3849236163281],"size":[370,110],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"fixed_mesh","name":"fixed_mesh","type":"TRIMESH","links":[11]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackFixNormals"},"widgets_values":["igl_signed_dist","false"]},{"id":5,"type":"GeomPackFixNormals","pos":[-889.1493998795415,340.07985048214533],"size":[370,110],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"fixed_mesh","name":"fixed_mesh","type":"TRIMESH","links":[10]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackFixNormals"},"widgets_values":["igl_raycast","false"]},{"id":4,"type":"GeomPackFixNormals","pos":[-891.2679834338181,191.1117182341826],"size":[370,110],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"fixed_mesh","name":"fixed_mesh","type":"TRIMESH","links":[9]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackFixNormals"},"widgets_values":["igl_winding","false"]},{"id":3,"type":"GeomPackFixNormals","pos":[-895.379931408891,43.61392767922324],"size":[370,110],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"fixed_mesh","name":"fixed_mesh","type":"TRIMESH","links":[8]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackFixNormals"},"widgets_values":["igl_bfs","false"]},{"id":1,"type":"GeomPackLoadMesh","pos":[-883.8968194340091,-229.55171550212876],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,4,5,6]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/truck.obj"]},{"id":2,"type":"GeomPackFixNormals","pos":[-895.5148783097702,-102.5023129319287],"size":[370,110],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"fixed_mesh","name":"fixed_mesh","type":"TRIMESH","links":[7]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackFixNormals"},"widgets_values":["trimesh","false"]},{"id":9,"type":"GeomPackPreviewMeshMulti","pos":[378.5374405209115,-99.09842223891802],"size":[768,702],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":10},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":11},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[2.393441145111277,0.9139763366891653,-1.0874875322949662],\\\"focalPoint\\\":[0,0,0],\\\"viewUp\\\":[-0.2837493462372615,0.9439214532462359,0.16881527955561504]}\",\"selected_field\":\"normals\"}"]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[6,1,0,8,0,"TRIMESH"],[7,2,0,8,1,"TRIMESH"],[8,3,0,8,2,"TRIMESH"],[9,4,0,8,3,"TRIMESH"],[10,5,0,9,0,"TRIMESH"],[11,6,0,9,1,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.798600000000001,"offset":[1042.311049229087,377.25186410577]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file diff --git a/workflows/tests/reconstruct_all.json b/workflows/tests/reconstruct_all.json index a137d95b..2b7212ca 100644 --- a/workflows/tests/reconstruct_all.json +++ b/workflows/tests/reconstruct_all.json @@ -1 +1 @@ -{"id":"test-reconstruct-all-0001","revision":0,"last_node_id":13,"last_link_id":22,"nodes":[{"id":4,"type":"GeomPackReconstructSurface","pos":[-950.9646012753711,145.1055876709858],"size":[370,182],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"points","name":"points","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.ball_radius","name":"backend.ball_radius","type":"FLOAT","widget":{"name":"backend.ball_radius"},"link":null},{"localized_name":"backend.estimate_normals","name":"backend.estimate_normals","type":"COMBO","widget":{"name":"backend.estimate_normals"},"link":null},{"localized_name":"backend.normal_radius","name":"backend.normal_radius","type":"FLOAT","widget":{"name":"backend.normal_radius"},"link":null}],"outputs":[{"localized_name":"reconstructed_mesh","name":"reconstructed_mesh","type":"TRIMESH","links":[9]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackReconstructSurface"},"widgets_values":["ball_pivoting",0,"true",0.1,"false"]},{"id":2,"type":"GeomPackMeshToPointCloud","pos":[-625.9951816505339,-349.8283152541738],"size":[270,130],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"mode","name":"mode","type":"COMBO","widget":{"name":"mode"},"link":null},{"localized_name":"sample_count","name":"sample_count","shape":7,"type":"INT","widget":{"name":"sample_count"},"link":null},{"localized_name":"sampling_method","name":"sampling_method","shape":7,"type":"COMBO","widget":{"name":"sampling_method"},"link":null},{"localized_name":"include_normals","name":"include_normals","shape":7,"type":"COMBO","widget":{"name":"include_normals"},"link":null}],"outputs":[{"localized_name":"point_cloud","name":"point_cloud","type":"TRIMESH","links":[2,3,4,5,6]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackMeshToPointCloud"},"widgets_values":["surface_sampling",10000,"uniform","true"]},{"id":7,"type":"GeomPackReconstructSurface","pos":[-303.3809166040573,-351.0894064613073],"size":[370,110],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"points","name":"points","type":"TRIMESH","link":6},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"reconstructed_mesh","name":"reconstructed_mesh","type":"TRIMESH","links":[12]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackReconstructSurface"},"widgets_values":["delaunay_2d","false"]},{"id":6,"type":"GeomPackReconstructSurface","pos":[-960.4830146972075,558.423729129282],"size":[370,110],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"points","name":"points","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"reconstructed_mesh","name":"reconstructed_mesh","type":"TRIMESH","links":[11,21]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackReconstructSurface"},"widgets_values":["convex_hull","false"]},{"id":11,"type":"GeomPackPreviewMeshMulti","pos":[281.8557475582275,81.9684447783621],"size":[768,702],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":12},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":20},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":21},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-106.36850269295505,-26.174692392624564,103.61670327428915],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.22096252441406],\\\"viewUp\\\":[0.1922994899381648,0.44609411687221107,0.8740829165825883]}\",\"selected_field\":\"\"}"]},{"id":3,"type":"GeomPackReconstructSurface","pos":[-309.83197868998053,-179.59900900956873],"size":[370,206],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"points","name":"points","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.poisson_depth","name":"backend.poisson_depth","type":"INT","widget":{"name":"backend.poisson_depth"},"link":null},{"localized_name":"backend.poisson_scale","name":"backend.poisson_scale","type":"FLOAT","widget":{"name":"backend.poisson_scale"},"link":null},{"localized_name":"backend.estimate_normals","name":"backend.estimate_normals","type":"COMBO","widget":{"name":"backend.estimate_normals"},"link":null},{"localized_name":"backend.normal_radius","name":"backend.normal_radius","type":"FLOAT","widget":{"name":"backend.normal_radius"},"link":null}],"outputs":[{"localized_name":"reconstructed_mesh","name":"reconstructed_mesh","type":"TRIMESH","links":[20]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackReconstructSurface"},"widgets_values":["poisson",8,1.1,"true",0.1,"false"]},{"id":1,"type":"GeomPackLoadMesh","pos":[-918.3488460177214,-247.37629694941361],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,18]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/Stanford_Bunny.stl"]},{"id":10,"type":"GeomPackPreviewMeshMulti","pos":[-538.1074938994481,85.09788824658025],"size":[768,702],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":18},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":9},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":10},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":11},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-106.36850269295505,-26.174692392624564,103.61670327428915],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.22096252441406],\\\"viewUp\\\":[0.1922994899381648,0.44609411687221107,0.8740829165825883]}\",\"selected_field\":\"\"}"]},{"id":5,"type":"GeomPackReconstructSurface","pos":[-954.088145991021,368.6496823987427],"size":[370,134],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"points","name":"points","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.alpha","name":"backend.alpha","type":"FLOAT","widget":{"name":"backend.alpha"},"link":null}],"outputs":[{"localized_name":"reconstructed_mesh","name":"reconstructed_mesh","type":"TRIMESH","links":[10]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackReconstructSurface"},"widgets_values":["alpha_shape",8,"false"]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,2,0,3,0,"TRIMESH"],[3,2,0,4,0,"TRIMESH"],[4,2,0,5,0,"TRIMESH"],[5,2,0,6,0,"TRIMESH"],[6,2,0,7,0,"TRIMESH"],[9,4,0,10,1,"TRIMESH"],[10,5,0,10,2,"TRIMESH"],[11,6,0,10,3,"TRIMESH"],[12,7,0,11,0,"TRIMESH"],[18,1,0,10,0,"TRIMESH"],[20,3,0,11,1,"TRIMESH"],[21,6,0,11,2,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.7320500000000008,"offset":[1353.4110241366693,388.04481228561616]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file +{"id":"test-reconstruct-all-0001","revision":0,"last_node_id":14,"last_link_id":26,"nodes":[{"id":5,"type":"GeomPackReconstructSurface","pos":[-559.0929270852089,268.9724062564028],"size":[370,134],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"points","name":"points","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.alpha","name":"backend.alpha","type":"FLOAT","widget":{"name":"backend.alpha"},"link":null}],"outputs":[{"localized_name":"reconstructed_mesh","name":"reconstructed_mesh","type":"TRIMESH","links":[10]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackReconstructSurface"},"widgets_values":["alpha_shape",8,"false"]},{"id":6,"type":"GeomPackReconstructSurface","pos":[-556.411187294708,453.43175453738274],"size":[370,110],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"points","name":"points","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"reconstructed_mesh","name":"reconstructed_mesh","type":"TRIMESH","links":[11]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackReconstructSurface"},"widgets_values":["convex_hull","false"]},{"id":2,"type":"GeomPackMeshToPointCloud","pos":[-968.9970570280982,-240.02721527840265],"size":[270,130],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"mode","name":"mode","type":"COMBO","widget":{"name":"mode"},"link":null},{"localized_name":"sample_count","name":"sample_count","shape":7,"type":"INT","widget":{"name":"sample_count"},"link":null},{"localized_name":"sampling_method","name":"sampling_method","shape":7,"type":"COMBO","widget":{"name":"sampling_method"},"link":null},{"localized_name":"include_normals","name":"include_normals","shape":7,"type":"COMBO","widget":{"name":"include_normals"},"link":null}],"outputs":[{"localized_name":"point_cloud","name":"point_cloud","type":"TRIMESH","links":[3,4,5,25,26]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackMeshToPointCloud"},"widgets_values":["surface_sampling",10000,"uniform","true"]},{"id":1,"type":"GeomPackLoadMesh","pos":[-1283.4746660435615,-250.99455840581166],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/Stanford_Bunny.stl"]},{"id":14,"type":"GeomPackPreviewMeshVTK","pos":[-1155.6494467265904,-72.13068395857275],"size":[512,714],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","shape":7,"type":"TRIMESH","link":26},{"localized_name":"voxelgrid","name":"voxelgrid","shape":7,"type":"VOXELGRID","link":null},{"localized_name":"mode","name":"mode","type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"ed980a9fd32a0ed21966300fe415b3f20bb82406","Node name for S&R":"GeomPackPreviewMeshVTK"},"widgets_values":["fields","{\"show_edges\":false,\"camera_state\":\"{\\\"position\\\":[30.06530722689757,-256.0460141720188,95.11427347765263],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.22096252441406],\\\"viewUp\\\":[-0.3324229789051757,0.13031445950952364,0.9340840993928491]}\",\"selected_field\":\"\"}"]},{"id":3,"type":"GeomPackReconstructSurface","pos":[-555.8182074311865,-261.1710925421143],"size":[370,206],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"points","name":"points","type":"TRIMESH","link":25},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.poisson_depth","name":"backend.poisson_depth","type":"INT","widget":{"name":"backend.poisson_depth"},"link":null},{"localized_name":"backend.poisson_scale","name":"backend.poisson_scale","type":"FLOAT","widget":{"name":"backend.poisson_scale"},"link":null},{"localized_name":"backend.estimate_normals","name":"backend.estimate_normals","type":"COMBO","widget":{"name":"backend.estimate_normals"},"link":null},{"localized_name":"backend.normal_radius","name":"backend.normal_radius","type":"FLOAT","widget":{"name":"backend.normal_radius"},"link":null}],"outputs":[{"localized_name":"reconstructed_mesh","name":"reconstructed_mesh","type":"TRIMESH","links":[24]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackReconstructSurface"},"widgets_values":["poisson",8,1.1,"true",0.1,"false"]},{"id":10,"type":"GeomPackPreviewMeshMulti","pos":[-94.2074443809729,-209.53170501890676],"size":[768,702],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":24},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":9},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":10},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":11},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[30.06530722689757,-256.0460141720188,95.11427347765263],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.22096252441406],\\\"viewUp\\\":[-0.3324229789051757,0.13031445950952364,0.9340840993928491]}\",\"selected_field\":\"\"}"]},{"id":4,"type":"GeomPackReconstructSurface","pos":[-565.4165049885631,11.01465783338204],"size":[370,182],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"points","name":"points","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.ball_radius","name":"backend.ball_radius","type":"FLOAT","widget":{"name":"backend.ball_radius"},"link":null},{"localized_name":"backend.estimate_normals","name":"backend.estimate_normals","type":"COMBO","widget":{"name":"backend.estimate_normals"},"link":null},{"localized_name":"backend.normal_radius","name":"backend.normal_radius","type":"FLOAT","widget":{"name":"backend.normal_radius"},"link":null}],"outputs":[{"localized_name":"reconstructed_mesh","name":"reconstructed_mesh","type":"TRIMESH","links":[9]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackReconstructSurface"},"widgets_values":["ball_pivoting",3,"true",0.5,"false"]}],"links":[[1,1,0,2,0,"TRIMESH"],[3,2,0,4,0,"TRIMESH"],[4,2,0,5,0,"TRIMESH"],[5,2,0,6,0,"TRIMESH"],[9,4,0,10,1,"TRIMESH"],[10,5,0,10,2,"TRIMESH"],[11,6,0,10,3,"TRIMESH"],[24,3,0,10,0,"TRIMESH"],[25,2,0,3,0,"TRIMESH"],[26,2,0,14,0,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.8261405442089855,"offset":[1128.153006094836,538.911388077634]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file diff --git a/workflows/tests/remeshing_all.json b/workflows/tests/remeshing_all.json index 0214fc4b..18b56c4a 100644 --- a/workflows/tests/remeshing_all.json +++ b/workflows/tests/remeshing_all.json @@ -1 +1 @@ -{"id":"fc31dc6e-fd82-4f42-9d3a-57283ccfadba","revision":0,"last_node_id":55,"last_link_id":68,"nodes":[{"id":1,"type":"GeomPackLoadMesh","pos":[-1014.1521350641405,-579.0137321727649],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[37,38,41,42,44,45,46,47,56,57,58,59,65,66,67,68]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"253a956368261760da54dc96750c2ab0224e2b1f","Node name for S&R":"GeomPackLoadMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["3d/Stanford_Bunny.stl"]},{"id":46,"type":"GeomPackPreviewMeshMulti","pos":[-1057.238644432902,106.33224496938243],"size":[768,702],"flags":{},"order":18,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":52},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":53},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":54},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":55},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"8f0378ab0ec8f20aad7b96ab2b1ec39ae6f82b6f","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[71.59053240844639,69.24440924198683,75.42363905279093],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.220962047576904],\\\"viewUp\\\":[-0.3360775929433742,-0.02059842888042879,0.9416090251527147]}\",\"selected_field\":\"\"}"]},{"id":50,"type":"GeomPackRemesh","pos":[-1054.5376867889013,-409.41668100861546],"size":[366.22833806818176,290],"flags":{},"order":8,"mode":4,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":56},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.pmp_min_edge","name":"backend.pmp_min_edge","type":"FLOAT","widget":{"name":"backend.pmp_min_edge"},"link":null},{"localized_name":"backend.pmp_max_edge","name":"backend.pmp_max_edge","type":"FLOAT","widget":{"name":"backend.pmp_max_edge"},"link":null},{"localized_name":"backend.pmp_approx_error","name":"backend.pmp_approx_error","type":"FLOAT","widget":{"name":"backend.pmp_approx_error"},"link":null},{"localized_name":"backend.pmp_adaptive_iterations","name":"backend.pmp_adaptive_iterations","type":"INT","widget":{"name":"backend.pmp_adaptive_iterations"},"link":null},{"localized_name":"backend.pmp_adaptive_projection","name":"backend.pmp_adaptive_projection","type":"COMBO","widget":{"name":"backend.pmp_adaptive_projection"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[52]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["pmp_adaptive",0.01,0.05,0.01,1,"false","true"]},{"id":49,"type":"GeomPackRemesh","pos":[-661.8442867889027,-405.9802810086156],"size":[366.22833806818176,230],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":57},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.qw_sharp_angle","name":"backend.qw_sharp_angle","type":"FLOAT","widget":{"name":"backend.qw_sharp_angle"},"link":null},{"localized_name":"backend.qw_alpha","name":"backend.qw_alpha","type":"FLOAT","widget":{"name":"backend.qw_alpha"},"link":null},{"localized_name":"backend.qw_scale_factor","name":"backend.qw_scale_factor","type":"FLOAT","widget":{"name":"backend.qw_scale_factor"},"link":null},{"localized_name":"backend.qw_remesh","name":"backend.qw_remesh","type":"COMBO","widget":{"name":"backend.qw_remesh"},"link":null},{"localized_name":"backend.qw_smooth","name":"backend.qw_smooth","type":"COMBO","widget":{"name":"backend.qw_smooth"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[53]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["quadwild",35,0.02,1,"true","true","false"]},{"id":48,"type":"GeomPackRemesh","pos":[-666.1485987644222,-126.89669646146771],"size":[366.22833806818176,134],"flags":{},"order":11,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":59},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.voxel_size","name":"backend.voxel_size","type":"FLOAT","widget":{"name":"backend.voxel_size"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[55]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["blender_voxel",1,"false"]},{"id":27,"type":"GeomPackRemesh","pos":[-252.4796326065235,-967.5718475471988],"size":[366.22833806818176,206],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":37},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_edge_length","name":"backend.target_edge_length","type":"FLOAT","widget":{"name":"backend.target_edge_length"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null},{"localized_name":"backend.feature_angle","name":"backend.feature_angle","type":"FLOAT","widget":{"name":"backend.feature_angle"},"link":null},{"localized_name":"backend.adaptive","name":"backend.adaptive","type":"COMBO","widget":{"name":"backend.adaptive"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[39]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["pymeshlab_isotropic",1,3,30,"false","false"]},{"id":37,"type":"GeomPackRemesh","pos":[135.90945541795637,-709.2518630000504],"size":[366.22833806818176,182],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":42},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_face_count","name":"backend.target_face_count","type":"INT","widget":{"name":"backend.target_face_count"},"link":null},{"localized_name":"backend.preserve_sharp","name":"backend.preserve_sharp","type":"COMBO","widget":{"name":"backend.preserve_sharp"},"link":null},{"localized_name":"backend.preserve_boundary","name":"backend.preserve_boundary","type":"COMBO","widget":{"name":"backend.preserve_boundary"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[43]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["quadriflow",5000,"false","true","false"]},{"id":29,"type":"GeomPackPreviewMeshMulti","pos":[-250.65357747104312,-472.80821058805077],"size":[768,702],"flags":{},"order":16,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":38},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":39},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":40},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":43},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"8f0378ab0ec8f20aad7b96ab2b1ec39ae6f82b6f","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[71.59053240844639,69.24440924198683,75.42363905279093],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.220962047576904],\\\"viewUp\\\":[-0.3360775929433742,-0.02059842888042879,0.9416090251527147]}\",\"selected_field\":\"\"}"]},{"id":45,"type":"GeomPackRemesh","pos":[945.7681182179566,-963.8635115000499],"size":[366.22833806818176,206],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":47},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.nb_points","name":"backend.nb_points","type":"INT","widget":{"name":"backend.nb_points"},"link":null},{"localized_name":"backend.nb_lloyd_iter","name":"backend.nb_lloyd_iter","type":"INT","widget":{"name":"backend.nb_lloyd_iter"},"link":null},{"localized_name":"backend.nb_newton_iter","name":"backend.nb_newton_iter","type":"INT","widget":{"name":"backend.nb_newton_iter"},"link":null},{"localized_name":"backend.newton_m","name":"backend.newton_m","type":"INT","widget":{"name":"backend.newton_m"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[49]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["geogram_smooth",5000,5,30,7,"false"]},{"id":42,"type":"GeomPackRemesh","pos":[549.6658062424374,-696.6258269529004],"size":[366.22833806818176,158],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":45},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.nb_points_aniso","name":"backend.nb_points_aniso","type":"INT","widget":{"name":"backend.nb_points_aniso"},"link":null},{"localized_name":"backend.anisotropy","name":"backend.anisotropy","type":"FLOAT","widget":{"name":"backend.anisotropy"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[50]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["geogram_anisotropic",5000,0.04,"false"]},{"id":30,"type":"GeomPackPreviewMeshMulti","pos":[550.3737605739569,-480.5909855220511],"size":[768,702],"flags":{},"order":17,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":51},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":49},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":50},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":48},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"8f0378ab0ec8f20aad7b96ab2b1ec39ae6f82b6f","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[71.59053240844639,69.24440924198683,75.42363905279093],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.220962047576904],\\\"viewUp\\\":[-0.3360775929433742,-0.02059842888042879,0.9416090251527147]}\",\"selected_field\":\"\"}"]},{"id":39,"type":"GeomPackRemesh","pos":[-247.41854458204313,-710.5828630000495],"size":[366.22833806818176,182],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":41},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_vertex_count","name":"backend.target_vertex_count","type":"INT","widget":{"name":"backend.target_vertex_count"},"link":null},{"localized_name":"backend.deterministic","name":"backend.deterministic","type":"COMBO","widget":{"name":"backend.deterministic"},"link":null},{"localized_name":"backend.crease_angle","name":"backend.crease_angle","type":"FLOAT","widget":{"name":"backend.crease_angle"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[40]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["instant_meshes",5000,"true",0,"false"]},{"id":43,"type":"GeomPackRemesh","pos":[932.9938062424369,-711.3999269529013],"size":[366.22833806818176,182],"flags":{},"order":6,"mode":4,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":46},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.pmp_edge_length","name":"backend.pmp_edge_length","type":"FLOAT","widget":{"name":"backend.pmp_edge_length"},"link":null},{"localized_name":"backend.pmp_iterations","name":"backend.pmp_iterations","type":"INT","widget":{"name":"backend.pmp_iterations"},"link":null},{"localized_name":"backend.pmp_use_projection","name":"backend.pmp_use_projection","type":"COMBO","widget":{"name":"backend.pmp_use_projection"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[48]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["pmp_uniform",1,1,"true","false"]},{"id":44,"type":"GeomPackRemesh","pos":[544.604718217957,-969.7199115000496],"size":[366.22833806818176,206],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":44},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.hausd","name":"backend.hausd","type":"FLOAT","widget":{"name":"backend.hausd"},"link":null},{"localized_name":"backend.hmin","name":"backend.hmin","type":"FLOAT","widget":{"name":"backend.hmin"},"link":null},{"localized_name":"backend.hmax","name":"backend.hmax","type":"FLOAT","widget":{"name":"backend.hmax"},"link":null},{"localized_name":"backend.hgrad","name":"backend.hgrad","type":"FLOAT","widget":{"name":"backend.hgrad"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[51]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["mmg_adaptive",0.05,0,0,1.3,"false"]},{"id":47,"type":"GeomPackRemesh","pos":[-1049.4765987644212,-112.12259646146691],"size":[366.22833806818176,182],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":58},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.cgal_edge_length","name":"backend.cgal_edge_length","type":"FLOAT","widget":{"name":"backend.cgal_edge_length"},"link":null},{"localized_name":"backend.cgal_iterations","name":"backend.cgal_iterations","type":"INT","widget":{"name":"backend.cgal_iterations"},"link":null},{"localized_name":"backend.protect_boundaries","name":"backend.protect_boundaries","type":"COMBO","widget":{"name":"backend.protect_boundaries"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[54]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["cgal_isotropic",1,3,"true","false"]},{"id":54,"type":"GeomPackRemesh","pos":[-229.90242463831174,281.7988805805725],"size":[366.22833806818176,158],"flags":{},"order":12,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":65},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.octree_depth","name":"backend.octree_depth","type":"INT","widget":{"name":"backend.octree_depth"},"link":null},{"localized_name":"backend.scale","name":"backend.scale","type":"FLOAT","widget":{"name":"backend.scale"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[64]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["blender_smooth",6,0.9,"false"]},{"id":51,"type":"GeomPackRemesh","pos":[162.79097536168717,261.0352805805725],"size":[366.22833806818176,182],"flags":{},"order":13,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":66},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.octree_depth","name":"backend.octree_depth","type":"INT","widget":{"name":"backend.octree_depth"},"link":null},{"localized_name":"backend.scale","name":"backend.scale","type":"FLOAT","widget":{"name":"backend.scale"},"link":null},{"localized_name":"backend.sharpness","name":"backend.sharpness","type":"FLOAT","widget":{"name":"backend.sharpness"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[62]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["blender_sharp",6,0.9,1,"false"]},{"id":53,"type":"GeomPackRemesh","pos":[-221.54133661383142,546.0929651277208],"size":[366.22833806818176,158],"flags":{},"order":14,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":67},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.octree_depth","name":"backend.octree_depth","type":"INT","widget":{"name":"backend.octree_depth"},"link":null},{"localized_name":"backend.scale","name":"backend.scale","type":"FLOAT","widget":{"name":"backend.scale"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[63]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["blender_blocks",6,0.9,"false"]},{"id":52,"type":"GeomPackRemesh","pos":[158.48666338616763,540.1188651277203],"size":[366.22833806818176,158],"flags":{},"order":15,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":68},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.gpu_target_face_count","name":"backend.gpu_target_face_count","type":"INT","widget":{"name":"backend.gpu_target_face_count"},"link":null},{"localized_name":"backend.remesh_band","name":"backend.remesh_band","type":"FLOAT","widget":{"name":"backend.remesh_band"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[61]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["gpu_cumesh",500000,1,"false"]},{"id":55,"type":"GeomPackPreviewMeshMulti","pos":[559.2474753616863,275.5298705805723],"size":[768,702],"flags":{},"order":19,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":64},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":62},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":63},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":61},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"8f0378ab0ec8f20aad7b96ab2b1ec39ae6f82b6f","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[71.59053240844639,69.24440924198683,75.42363905279093],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.220962047576904],\\\"viewUp\\\":[-0.3360775929433742,-0.02059842888042879,0.9416090251527147]}\",\"selected_field\":\"\"}"]}],"links":[[37,1,0,27,0,"TRIMESH"],[38,1,0,29,0,"TRIMESH"],[39,27,0,29,1,"TRIMESH"],[40,39,0,29,2,"TRIMESH"],[41,1,0,39,0,"TRIMESH"],[42,1,0,37,0,"TRIMESH"],[43,37,0,29,3,"TRIMESH"],[44,1,0,44,0,"TRIMESH"],[45,1,0,42,0,"TRIMESH"],[46,1,0,43,0,"TRIMESH"],[47,1,0,45,0,"TRIMESH"],[48,43,0,30,3,"TRIMESH"],[49,45,0,30,1,"TRIMESH"],[50,42,0,30,2,"TRIMESH"],[51,44,0,30,0,"TRIMESH"],[52,50,0,46,0,"TRIMESH"],[53,49,0,46,1,"TRIMESH"],[54,47,0,46,2,"TRIMESH"],[55,48,0,46,3,"TRIMESH"],[56,1,0,50,0,"TRIMESH"],[57,1,0,49,0,"TRIMESH"],[58,1,0,47,0,"TRIMESH"],[59,1,0,48,0,"TRIMESH"],[61,52,0,55,3,"TRIMESH"],[62,51,0,55,1,"TRIMESH"],[63,53,0,55,2,"TRIMESH"],[64,54,0,55,0,"TRIMESH"],[65,1,0,54,0,"TRIMESH"],[66,1,0,51,0,"TRIMESH"],[67,1,0,53,0,"TRIMESH"],[68,1,0,52,0,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.620921323059155,"offset":[879.8499557246013,615.3931984957435]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file +{"id":"fc31dc6e-fd82-4f42-9d3a-57283ccfadba","revision":0,"last_node_id":55,"last_link_id":72,"nodes":[{"id":1,"type":"GeomPackLoadMesh","pos":[-1014.1521350641405,-579.0137321727649],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[37,38,41,42,44,45,46,47,56,57,58,59,66,67,68]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"253a956368261760da54dc96750c2ab0224e2b1f","Node name for S&R":"GeomPackLoadMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["3d/Stanford_Bunny.stl"]},{"id":27,"type":"GeomPackRemesh","pos":[-252.4796326065235,-967.5718475471988],"size":[366.22833806818176,206],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":37},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_edge_length","name":"backend.target_edge_length","type":"FLOAT","widget":{"name":"backend.target_edge_length"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null},{"localized_name":"backend.feature_angle","name":"backend.feature_angle","type":"FLOAT","widget":{"name":"backend.feature_angle"},"link":null},{"localized_name":"backend.adaptive","name":"backend.adaptive","type":"COMBO","widget":{"name":"backend.adaptive"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[39]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["pymeshlab_isotropic",1,3,30,"false","false"]},{"id":37,"type":"GeomPackRemesh","pos":[135.90945541795637,-709.2518630000504],"size":[366.22833806818176,182],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":42},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_face_count","name":"backend.target_face_count","type":"INT","widget":{"name":"backend.target_face_count"},"link":null},{"localized_name":"backend.preserve_sharp","name":"backend.preserve_sharp","type":"COMBO","widget":{"name":"backend.preserve_sharp"},"link":null},{"localized_name":"backend.preserve_boundary","name":"backend.preserve_boundary","type":"COMBO","widget":{"name":"backend.preserve_boundary"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[43]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["quadriflow",5000,"false","true","false"]},{"id":29,"type":"GeomPackPreviewMeshMulti","pos":[-250.65357747104312,-472.80821058805077],"size":[768,702],"flags":{},"order":15,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":38},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":39},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":40},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":43},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"8f0378ab0ec8f20aad7b96ab2b1ec39ae6f82b6f","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-104.63702891921307,87.70613647084431,93.26266831581498],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.220962047576904],\\\"viewUp\\\":[0.022781468922130507,-0.33747692361052245,0.9410580910358974]}\",\"selected_field\":\"\"}"]},{"id":45,"type":"GeomPackRemesh","pos":[945.7681182179566,-963.8635115000499],"size":[366.22833806818176,206],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":47},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.nb_points","name":"backend.nb_points","type":"INT","widget":{"name":"backend.nb_points"},"link":null},{"localized_name":"backend.nb_lloyd_iter","name":"backend.nb_lloyd_iter","type":"INT","widget":{"name":"backend.nb_lloyd_iter"},"link":null},{"localized_name":"backend.nb_newton_iter","name":"backend.nb_newton_iter","type":"INT","widget":{"name":"backend.nb_newton_iter"},"link":null},{"localized_name":"backend.newton_m","name":"backend.newton_m","type":"INT","widget":{"name":"backend.newton_m"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[49]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["geogram_smooth",5000,5,30,7,"false"]},{"id":42,"type":"GeomPackRemesh","pos":[549.6658062424374,-696.6258269529004],"size":[366.22833806818176,158],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":45},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.nb_points_aniso","name":"backend.nb_points_aniso","type":"INT","widget":{"name":"backend.nb_points_aniso"},"link":null},{"localized_name":"backend.anisotropy","name":"backend.anisotropy","type":"FLOAT","widget":{"name":"backend.anisotropy"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[50]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["geogram_anisotropic",5000,0.04,"false"]},{"id":39,"type":"GeomPackRemesh","pos":[-247.41854458204313,-710.5828630000495],"size":[366.22833806818176,182],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":41},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.target_vertex_count","name":"backend.target_vertex_count","type":"INT","widget":{"name":"backend.target_vertex_count"},"link":null},{"localized_name":"backend.deterministic","name":"backend.deterministic","type":"COMBO","widget":{"name":"backend.deterministic"},"link":null},{"localized_name":"backend.crease_angle","name":"backend.crease_angle","type":"FLOAT","widget":{"name":"backend.crease_angle"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[40]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["instant_meshes",5000,"true",0,"false"]},{"id":51,"type":"GeomPackRemesh","pos":[-78.43093791956267,297.79791651807244],"size":[366.22833806818176,182],"flags":{},"order":12,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":66},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.octree_depth","name":"backend.octree_depth","type":"INT","widget":{"name":"backend.octree_depth"},"link":null},{"localized_name":"backend.scale","name":"backend.scale","type":"FLOAT","widget":{"name":"backend.scale"},"link":null},{"localized_name":"backend.sharpness","name":"backend.sharpness","type":"FLOAT","widget":{"name":"backend.sharpness"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[70]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["blender_sharp",6,0.9,0.4,"false"]},{"id":53,"type":"GeomPackRemesh","pos":[-225.54473505133143,544.1198616120959],"size":[366.22833806818176,218],"flags":{},"order":13,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":67},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.octree_depth","name":"backend.octree_depth","type":"INT","widget":{"name":"backend.octree_depth"},"link":null},{"localized_name":"backend.scale","name":"backend.scale","type":"FLOAT","widget":{"name":"backend.scale"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[71]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["blender_blocks",6,0.9,"true"]},{"id":52,"type":"GeomPackRemesh","pos":[158.48666338616763,539.9816057527202],"size":[366.22833806818176,158],"flags":{},"order":14,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":68},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.gpu_target_face_count","name":"backend.gpu_target_face_count","type":"INT","widget":{"name":"backend.gpu_target_face_count"},"link":null},{"localized_name":"backend.remesh_band","name":"backend.remesh_band","type":"FLOAT","widget":{"name":"backend.remesh_band"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[72]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["gpu_cumesh",500000,1,"false"]},{"id":50,"type":"GeomPackRemesh","pos":[-1054.5376867889013,-409.41668100861546],"size":[366.22833806818176,230],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":56},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.pmp_min_edge","name":"backend.pmp_min_edge","type":"FLOAT","widget":{"name":"backend.pmp_min_edge"},"link":null},{"localized_name":"backend.pmp_max_edge","name":"backend.pmp_max_edge","type":"FLOAT","widget":{"name":"backend.pmp_max_edge"},"link":null},{"localized_name":"backend.pmp_approx_error","name":"backend.pmp_approx_error","type":"FLOAT","widget":{"name":"backend.pmp_approx_error"},"link":null},{"localized_name":"backend.pmp_adaptive_iterations","name":"backend.pmp_adaptive_iterations","type":"INT","widget":{"name":"backend.pmp_adaptive_iterations"},"link":null},{"localized_name":"backend.pmp_adaptive_projection","name":"backend.pmp_adaptive_projection","type":"COMBO","widget":{"name":"backend.pmp_adaptive_projection"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[52]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["pmp_adaptive",0.2,3,1,1,"false","false"]},{"id":47,"type":"GeomPackRemesh","pos":[-1049.4765987644212,-112.12259646146691],"size":[366.22833806818176,182],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":58},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.cgal_edge_length","name":"backend.cgal_edge_length","type":"FLOAT","widget":{"name":"backend.cgal_edge_length"},"link":null},{"localized_name":"backend.cgal_iterations","name":"backend.cgal_iterations","type":"INT","widget":{"name":"backend.cgal_iterations"},"link":null},{"localized_name":"backend.protect_boundaries","name":"backend.protect_boundaries","type":"COMBO","widget":{"name":"backend.protect_boundaries"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[54]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["cgal_isotropic",1,3,"true","false"]},{"id":48,"type":"GeomPackRemesh","pos":[-666.1485987644222,-126.89669646146771],"size":[366.22833806818176,134],"flags":{},"order":11,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":59},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.voxel_size","name":"backend.voxel_size","type":"FLOAT","widget":{"name":"backend.voxel_size"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[55]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["blender_voxel",1,"false"]},{"id":49,"type":"GeomPackRemesh","pos":[-661.8442867889027,-405.9802810086156],"size":[366.22833806818176,230],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":57},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.qw_sharp_angle","name":"backend.qw_sharp_angle","type":"FLOAT","widget":{"name":"backend.qw_sharp_angle"},"link":null},{"localized_name":"backend.qw_alpha","name":"backend.qw_alpha","type":"FLOAT","widget":{"name":"backend.qw_alpha"},"link":null},{"localized_name":"backend.qw_scale_factor","name":"backend.qw_scale_factor","type":"FLOAT","widget":{"name":"backend.qw_scale_factor"},"link":null},{"localized_name":"backend.qw_remesh","name":"backend.qw_remesh","type":"COMBO","widget":{"name":"backend.qw_remesh"},"link":null},{"localized_name":"backend.qw_smooth","name":"backend.qw_smooth","type":"COMBO","widget":{"name":"backend.qw_smooth"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[53]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["quadwild",35,0.02,1,"true","true","false"]},{"id":46,"type":"GeomPackPreviewMeshMulti","pos":[-1057.238644432902,106.33224496938243],"size":[768,702],"flags":{},"order":17,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":52},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":53},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":54},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":55},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"8f0378ab0ec8f20aad7b96ab2b1ec39ae6f82b6f","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-104.63702891921307,87.70613647084431,93.26266831581498],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.220962047576904],\\\"viewUp\\\":[0.022781468922130507,-0.33747692361052245,0.9410580910358974]}\",\"selected_field\":\"\"}"]},{"id":30,"type":"GeomPackPreviewMeshMulti","pos":[550.3737605739569,-480.5909855220511],"size":[768,702],"flags":{},"order":16,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":51},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":49},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":50},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":48},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"8f0378ab0ec8f20aad7b96ab2b1ec39ae6f82b6f","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-104.63702891921307,87.70613647084431,93.26266831581498],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.220962047576904],\\\"viewUp\\\":[0.022781468922130507,-0.33747692361052245,0.9410580910358974]}\",\"selected_field\":\"\"}"]},{"id":55,"type":"GeomPackPreviewMeshMulti","pos":[549.6668179398112,323.70854948682233],"size":[768,702],"flags":{},"order":18,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":70},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":71},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":72},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"8f0378ab0ec8f20aad7b96ab2b1ec39ae6f82b6f","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-104.63702891921307,87.70613647084431,93.26266831581498],\\\"focalPoint\\\":[30.322647094726562,1.8909549713134766,59.220962047576904],\\\"viewUp\\\":[0.022781468922130507,-0.33747692361052245,0.9410580910358974]}\",\"selected_field\":\"\"}"]},{"id":43,"type":"GeomPackRemesh","pos":[932.9938062424369,-711.3999269529013],"size":[366.22833806818176,182],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":46},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.pmp_edge_length","name":"backend.pmp_edge_length","type":"FLOAT","widget":{"name":"backend.pmp_edge_length"},"link":null},{"localized_name":"backend.pmp_iterations","name":"backend.pmp_iterations","type":"INT","widget":{"name":"backend.pmp_iterations"},"link":null},{"localized_name":"backend.pmp_use_projection","name":"backend.pmp_use_projection","type":"COMBO","widget":{"name":"backend.pmp_use_projection"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[48]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["pmp_uniform",1,1,"true","false"]},{"id":44,"type":"GeomPackRemesh","pos":[544.604718217957,-969.7199115000496],"size":[366.22833806818176,206],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":44},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.hausd","name":"backend.hausd","type":"FLOAT","widget":{"name":"backend.hausd"},"link":null},{"localized_name":"backend.hmin","name":"backend.hmin","type":"FLOAT","widget":{"name":"backend.hmin"},"link":null},{"localized_name":"backend.hmax","name":"backend.hmax","type":"FLOAT","widget":{"name":"backend.hmax"},"link":null},{"localized_name":"backend.hgrad","name":"backend.hgrad","type":"FLOAT","widget":{"name":"backend.hgrad"},"link":null}],"outputs":[{"localized_name":"remeshed_mesh","name":"remeshed_mesh","type":"TRIMESH","links":[51]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"f4d5713f5feef867c82be5a2d67e532e7a95933b","Node name for S&R":"GeomPackRemesh"},"widgets_values":["mmg_adaptive",0.1,0,0,1.3,"false"]}],"links":[[37,1,0,27,0,"TRIMESH"],[38,1,0,29,0,"TRIMESH"],[39,27,0,29,1,"TRIMESH"],[40,39,0,29,2,"TRIMESH"],[41,1,0,39,0,"TRIMESH"],[42,1,0,37,0,"TRIMESH"],[43,37,0,29,3,"TRIMESH"],[44,1,0,44,0,"TRIMESH"],[45,1,0,42,0,"TRIMESH"],[46,1,0,43,0,"TRIMESH"],[47,1,0,45,0,"TRIMESH"],[48,43,0,30,3,"TRIMESH"],[49,45,0,30,1,"TRIMESH"],[50,42,0,30,2,"TRIMESH"],[51,44,0,30,0,"TRIMESH"],[52,50,0,46,0,"TRIMESH"],[53,49,0,46,1,"TRIMESH"],[54,47,0,46,2,"TRIMESH"],[55,48,0,46,3,"TRIMESH"],[56,1,0,50,0,"TRIMESH"],[57,1,0,49,0,"TRIMESH"],[58,1,0,47,0,"TRIMESH"],[59,1,0,48,0,"TRIMESH"],[66,1,0,51,0,"TRIMESH"],[67,1,0,53,0,"TRIMESH"],[68,1,0,52,0,"TRIMESH"],[70,51,0,55,0,"TRIMESH"],[71,53,0,55,1,"TRIMESH"],[72,52,0,55,2,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.6528681764088488,"offset":[838.5608850192757,553.1081306843021]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file diff --git a/workflows/tests/sharpen_all.json b/workflows/tests/sharpen_all.json index e275ee65..9c1e3fde 100644 --- a/workflows/tests/sharpen_all.json +++ b/workflows/tests/sharpen_all.json @@ -1 +1 @@ -{"id":"a1b2c3d4-e5f6-7890-abcd-sharpen000001","revision":0,"last_node_id":12,"last_link_id":17,"nodes":[{"id":2,"type":"GeomPackSharpenMesh","pos":[-400,-900],"size":[370,126],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.smooth_steps","name":"backend.smooth_steps","type":"INT","widget":{"name":"backend.smooth_steps"},"link":null},{"localized_name":"backend.normal_threshold","name":"backend.normal_threshold","type":"FLOAT","widget":{"name":"backend.normal_threshold"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[10]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh"},"widgets_values":["two_step",3,60]},{"id":3,"type":"GeomPackSharpenMesh","pos":[0,-900],"size":[370,126],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.weight","name":"backend.weight","type":"FLOAT","widget":{"name":"backend.weight"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[11]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh"},"widgets_values":["unsharp_mask",0.3,5]},{"id":5,"type":"GeomPackSharpenMesh","pos":[-400,-600],"size":[370,150],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.alpha","name":"backend.alpha","type":"FLOAT","widget":{"name":"backend.alpha"},"link":null},{"localized_name":"backend.beta","name":"backend.beta","type":"FLOAT","widget":{"name":"backend.beta"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[13]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh"},"widgets_values":["l0_minimize",0.001,2,10]},{"id":10,"type":"GeomPackPreviewMeshMulti","pos":[-400,100],"size":[768,702],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":9},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":10},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":11},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":12},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[6.112168112444788,20.962661850752653,0.7300910516940223],\\\"focalPoint\\\":[2.429478704929352,15.20779800415039,-1.320433847606182],\\\"viewUp\\\":[0.15574863477274994,-0.41848455755995223,0.894769823949308]}\",\"selected_field\":\"\"}"]},{"id":1,"type":"GeomPackLoadMesh","pos":[-800,-400],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,4,5,6,7,8,9]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/noisy/Fandisk0.3/Noisy.obj"]},{"id":9,"type":"GeomPackSharpenMesh","pos":[0,-300],"size":[370,126],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":8},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.sigma_f","name":"backend.sigma_f","type":"FLOAT","widget":{"name":"backend.sigma_f"},"link":null},{"localized_name":"backend.sigma_g","name":"backend.sigma_g","type":"FLOAT","widget":{"name":"backend.sigma_g"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[17]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh"},"widgets_values":["non_iterative",1,1]},{"id":4,"type":"GeomPackSharpenMesh","pos":[400,-900],"size":[370,126],"flags":{},"order":3,"mode":4,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.lambda_","name":"backend.lambda_","type":"FLOAT","widget":{"name":"backend.lambda_"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[12]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh"},"widgets_values":["libigl_unsharp",0.5,3]},{"id":7,"type":"GeomPackSharpenMesh","pos":[400,-600],"size":[370,150],"flags":{},"order":6,"mode":4,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":6},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.num_proxies","name":"backend.num_proxies","type":"INT","widget":{"name":"backend.num_proxies"},"link":null},{"localized_name":"backend.lloyd_iterations","name":"backend.lloyd_iterations","type":"INT","widget":{"name":"backend.lloyd_iterations"},"link":null},{"localized_name":"backend.snap_strength","name":"backend.snap_strength","type":"FLOAT","widget":{"name":"backend.snap_strength"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[15]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh"},"widgets_values":["vsa_snap",20,10,1]},{"id":6,"type":"GeomPackSharpenMesh","pos":[-14.436383928571438,-609.2689732142853],"size":[370,174],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.normal_iterations","name":"backend.normal_iterations","type":"INT","widget":{"name":"backend.normal_iterations"},"link":null},{"localized_name":"backend.vertex_iterations","name":"backend.vertex_iterations","type":"INT","widget":{"name":"backend.vertex_iterations"},"link":null},{"localized_name":"backend.sigma_s","name":"backend.sigma_s","type":"FLOAT","widget":{"name":"backend.sigma_s"},"link":null},{"localized_name":"backend.sigma_r","name":"backend.sigma_r","type":"FLOAT","widget":{"name":"backend.sigma_r"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[14]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh"},"widgets_values":["guided_normal",5,10,1,0.35]},{"id":8,"type":"GeomPackSharpenMesh","pos":[-386.31138392857144,-305.70312499999994],"size":[370,150],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":7},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.threshold_T","name":"backend.threshold_T","type":"FLOAT","widget":{"name":"backend.threshold_T"},"link":null},{"localized_name":"backend.normal_iterations","name":"backend.normal_iterations","type":"INT","widget":{"name":"backend.normal_iterations"},"link":null},{"localized_name":"backend.vertex_iterations","name":"backend.vertex_iterations","type":"INT","widget":{"name":"backend.vertex_iterations"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[16]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh"},"widgets_values":["fast_effective",0.5,20,50]},{"id":12,"type":"GeomPackPreviewMeshMulti","pos":[1383.9397321428569,83.90066964285717],"size":[768,702],"flags":{},"order":11,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":17},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[6.112168112444788,20.962661850752653,0.7300910516940223],\\\"focalPoint\\\":[2.429478704929352,15.20779800415039,-1.320433847606182],\\\"viewUp\\\":[0.15574863477274994,-0.41848455755995223,0.894769823949308]}\",\"selected_field\":\"\"}"]},{"id":11,"type":"GeomPackPreviewMeshMulti","pos":[544.0011160714283,97.48883928571423],"size":[768,702],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":13},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":14},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":15},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":16},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[6.112168112444788,20.962661850752653,0.7300910516940223],\\\"focalPoint\\\":[2.429478704929352,15.20779800415039,-1.320433847606182],\\\"viewUp\\\":[0.15574863477274994,-0.41848455755995223,0.894769823949308]}\",\"selected_field\":\"\"}"]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[6,1,0,7,0,"TRIMESH"],[7,1,0,8,0,"TRIMESH"],[8,1,0,9,0,"TRIMESH"],[9,1,0,10,0,"TRIMESH"],[10,2,0,10,1,"TRIMESH"],[11,3,0,10,2,"TRIMESH"],[12,4,0,10,3,"TRIMESH"],[13,5,0,11,0,"TRIMESH"],[14,6,0,11,1,"TRIMESH"],[15,7,0,11,2,"TRIMESH"],[16,8,0,11,3,"TRIMESH"],[17,9,0,12,0,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.7000000000000007,"offset":[659.2883155952372,415.7900813066036]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file +{"id":"a1b2c3d4-e5f6-7890-abcd-sharpen000001","revision":0,"last_node_id":16,"last_link_id":27,"nodes":[{"id":1,"type":"GeomPackLoadMesh","pos":[-800,-400],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,3,4,5,7,8,9,21]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackLoadMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["3d/noisy/Fandisk0.3/Noisy.obj"]},{"id":15,"type":"GeomPackSharpenMesh","pos":[-792.1335895058701,-112.10111249081582],"size":[314.099609375,126],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":21},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.weight","name":"backend.weight","type":"FLOAT","widget":{"name":"backend.weight"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[23]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"ed980a9fd32a0ed21966300fe415b3f20bb82406","Node name for S&R":"GeomPackSharpenMesh"},"widgets_values":["unsharp_mask",0.3,5]},{"id":2,"type":"GeomPackSharpenMesh","pos":[-798.7153242187484,-283.29655859375043],"size":[370,126],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.smooth_steps","name":"backend.smooth_steps","type":"INT","widget":{"name":"backend.smooth_steps"},"link":null},{"localized_name":"backend.normal_threshold","name":"backend.normal_threshold","type":"FLOAT","widget":{"name":"backend.normal_threshold"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[24]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["two_step",3,60]},{"id":4,"type":"GeomPackSharpenMesh","pos":[-797.2638046874986,77.48999218749839],"size":[370,126],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.weight","name":"backend.weight","type":"FLOAT","widget":{"name":"backend.weight"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[12]},{"localized_name":"info","name":"info","type":"STRING","links":[]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["libigl_unsharp",0.5,3]},{"id":5,"type":"GeomPackSharpenMesh","pos":[-483.3850703124999,-761.7207539062492],"size":[370,150],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.alpha","name":"backend.alpha","type":"FLOAT","widget":{"name":"backend.alpha"},"link":null},{"localized_name":"backend.beta","name":"backend.beta","type":"FLOAT","widget":{"name":"backend.beta"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[13]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["l0_minimize",0.001,2,10]},{"id":8,"type":"GeomPackSharpenMesh","pos":[-493.6812829568184,-568.4744993082778],"size":[370,150],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":7},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.threshold_T","name":"backend.threshold_T","type":"FLOAT","widget":{"name":"backend.threshold_T"},"link":null},{"localized_name":"backend.normal_iterations","name":"backend.normal_iterations","type":"INT","widget":{"name":"backend.normal_iterations"},"link":null},{"localized_name":"backend.vertex_iterations","name":"backend.vertex_iterations","type":"INT","widget":{"name":"backend.vertex_iterations"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[16]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["fast_effective",0.2,10,20]},{"id":9,"type":"GeomPackSharpenMesh","pos":[-89.55851746758947,-757.8157003891538],"size":[370,126],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":8},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.sigma_f","name":"backend.sigma_f","type":"FLOAT","widget":{"name":"backend.sigma_f"},"link":null},{"localized_name":"backend.sigma_g","name":"backend.sigma_g","type":"FLOAT","widget":{"name":"backend.sigma_g"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[27]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["non_iterative",1,1]},{"id":6,"type":"GeomPackSharpenMesh","pos":[-88.84383645323283,-588.9397274954925],"size":[370,174],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.normal_iterations","name":"backend.normal_iterations","type":"INT","widget":{"name":"backend.normal_iterations"},"link":null},{"localized_name":"backend.vertex_iterations","name":"backend.vertex_iterations","type":"INT","widget":{"name":"backend.vertex_iterations"},"link":null},{"localized_name":"backend.sigma_s","name":"backend.sigma_s","type":"FLOAT","widget":{"name":"backend.sigma_s"},"link":null},{"localized_name":"backend.sigma_r","name":"backend.sigma_r","type":"FLOAT","widget":{"name":"backend.sigma_r"},"link":null}],"outputs":[{"localized_name":"sharpened_mesh","name":"sharpened_mesh","type":"TRIMESH","links":[14]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackSharpenMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["guided_normal",5,10,1,0.35]},{"id":11,"type":"GeomPackPreviewMeshMulti","pos":[418.59190490345935,-376.3337320775674],"size":[768,702],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":13},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":14},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":27},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":16},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-5.961122528109332,15.888697444123462,3.5443586005740766],\\\"focalPoint\\\":[2.429478704929352,15.20779800415039,-1.320433847606182],\\\"viewUp\\\":[0.5050976591299495,0.14210993677294967,0.851282045277494]}\",\"selected_field\":\"\"}"]},{"id":10,"type":"GeomPackPreviewMeshMulti","pos":[-377.25711328124993,-366.23096093749905],"size":[768,702],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":9},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":24},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":23},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":12},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"6e8088fb3283086d421a58c3fdf5b061176519aa","Node name for S&R":"GeomPackPreviewMeshMulti","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-5.961122528109332,15.888697444123462,3.5443586005740766],\\\"focalPoint\\\":[2.429478704929352,15.20779800415039,-1.320433847606182],\\\"viewUp\\\":[0.5050976591299495,0.14210993677294967,0.851282045277494]}\",\"selected_field\":\"\"}"]}],"links":[[1,1,0,2,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[7,1,0,8,0,"TRIMESH"],[8,1,0,9,0,"TRIMESH"],[9,1,0,10,0,"TRIMESH"],[12,4,0,10,3,"TRIMESH"],[13,5,0,11,0,"TRIMESH"],[14,6,0,11,1,"TRIMESH"],[16,8,0,11,3,"TRIMESH"],[21,1,0,15,0,"TRIMESH"],[23,15,0,10,2,"TRIMESH"],[24,2,0,10,1,"TRIMESH"],[27,9,0,11,2,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.7562980015618801,"offset":[873.5270518263726,756.6715335408959]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file diff --git a/workflows/tests/skeleton_all.json b/workflows/tests/skeleton_all.json index cc0df3e5..73750fb2 100644 --- a/workflows/tests/skeleton_all.json +++ b/workflows/tests/skeleton_all.json @@ -1 +1 @@ -{"id":"test-skeleton-all-0001","revision":0,"last_node_id":13,"last_link_id":17,"nodes":[{"id":1,"type":"GeomPackLoadMesh","pos":[-800,0],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,4,13]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/cow.off"]},{"id":6,"type":"GeomPackMeshFromSkeleton","pos":[-400,-100],"size":[320,100],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","link":5},{"localized_name":"joint_radius","name":"joint_radius","type":"FLOAT","widget":{"name":"joint_radius"},"link":null},{"localized_name":"bone_radius","name":"bone_radius","type":"FLOAT","widget":{"name":"bone_radius"},"link":null}],"outputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","links":[9]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackMeshFromSkeleton"},"widgets_values":[0.02,0.01]},{"id":7,"type":"GeomPackMeshFromSkeleton","pos":[0,-100],"size":[320,100],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","link":6},{"localized_name":"joint_radius","name":"joint_radius","type":"FLOAT","widget":{"name":"joint_radius"},"link":null},{"localized_name":"bone_radius","name":"bone_radius","type":"FLOAT","widget":{"name":"bone_radius"},"link":null}],"outputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","links":[10]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackMeshFromSkeleton"},"widgets_values":[0.02,0.01]},{"id":9,"type":"GeomPackMeshFromSkeleton","pos":[800,-100],"size":[320,100],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","link":8},{"localized_name":"joint_radius","name":"joint_radius","type":"FLOAT","widget":{"name":"joint_radius"},"link":null},{"localized_name":"bone_radius","name":"bone_radius","type":"FLOAT","widget":{"name":"bone_radius"},"link":null}],"outputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","links":[12]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackMeshFromSkeleton"},"widgets_values":[0.02,0.01]},{"id":2,"type":"GeomPackExtractSkeleton","pos":[-400,-400],"size":[370,154],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"fix_mesh","name":"fix_mesh","type":"BOOLEAN","widget":{"name":"fix_mesh"},"link":null},{"localized_name":"normalize","name":"normalize","type":"BOOLEAN","widget":{"name":"normalize"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.waves","name":"backend.waves","type":"INT","widget":{"name":"backend.waves"},"link":null},{"localized_name":"backend.step_size","name":"backend.step_size","type":"FLOAT","widget":{"name":"backend.step_size"},"link":null}],"outputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","links":[5]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackExtractSkeleton"},"widgets_values":["wavefront",true,"wavefront",1,1]},{"id":3,"type":"GeomPackExtractSkeleton","pos":[0,-400],"size":[370,154],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":2},{"localized_name":"fix_mesh","name":"fix_mesh","type":"BOOLEAN","widget":{"name":"fix_mesh"},"link":null},{"localized_name":"normalize","name":"normalize","type":"BOOLEAN","widget":{"name":"normalize"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.sampling_dist","name":"backend.sampling_dist","type":"FLOAT","widget":{"name":"backend.sampling_dist"},"link":null},{"localized_name":"backend.cluster_pos","name":"backend.cluster_pos","type":"COMBO","widget":{"name":"backend.cluster_pos"},"link":null}],"outputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","links":[6]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackExtractSkeleton"},"widgets_values":["vertex_clusters",true,"vertex_clusters",1,"median"]},{"id":4,"type":"GeomPackExtractSkeleton","pos":[400,-400],"size":[370,154],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"fix_mesh","name":"fix_mesh","type":"BOOLEAN","widget":{"name":"fix_mesh"},"link":null},{"localized_name":"normalize","name":"normalize","type":"BOOLEAN","widget":{"name":"normalize"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.shape_weight","name":"backend.shape_weight","type":"FLOAT","widget":{"name":"backend.shape_weight"},"link":null},{"localized_name":"backend.sample_weight","name":"backend.sample_weight","type":"FLOAT","widget":{"name":"backend.sample_weight"},"link":null}],"outputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","links":[7]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackExtractSkeleton"},"widgets_values":["edge_collapse",true,"edge_collapse",1,0.1]},{"id":5,"type":"GeomPackExtractSkeleton","pos":[800,-400],"size":[370,154],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":4},{"localized_name":"fix_mesh","name":"fix_mesh","type":"BOOLEAN","widget":{"name":"fix_mesh"},"link":null},{"localized_name":"normalize","name":"normalize","type":"BOOLEAN","widget":{"name":"normalize"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.inv_dist","name":"backend.inv_dist","type":"FLOAT","widget":{"name":"backend.inv_dist"},"link":null},{"localized_name":"backend.min_length","name":"backend.min_length","type":"FLOAT","widget":{"name":"backend.min_length"},"link":null}],"outputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","links":[8]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackExtractSkeleton"},"widgets_values":["teasar",true,"teasar",10,0]},{"id":13,"type":"GeomPackPreviewMeshMulti","pos":[420.7704391776521,57.93320128406541],"size":[768,702],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":12},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":17},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-0.28869763541492943,-0.010932412491184734,-4.187535915452847],\\\"focalPoint\\\":[0,0,0],\\\"viewUp\\\":[-0.09618484690884596,0.9953553201116373,0.004032610888962136]}\",\"selected_field\":\"\"}"]},{"id":12,"type":"GeomPackPreviewMeshMulti","pos":[-415.02629601803164,53.835120551874915],"size":[768,702],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":13},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":9},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":10},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":11},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-0.28869763541492943,-0.010932412491184734,-4.187535915452847],\\\"focalPoint\\\":[0,0,0],\\\"viewUp\\\":[-0.09618484690884596,0.9953553201116373,0.004032610888962136]}\",\"selected_field\":\"\"}"]},{"id":8,"type":"GeomPackMeshFromSkeleton","pos":[400,-100],"size":[320,100],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","link":7},{"localized_name":"joint_radius","name":"joint_radius","type":"FLOAT","widget":{"name":"joint_radius"},"link":null},{"localized_name":"bone_radius","name":"bone_radius","type":"FLOAT","widget":{"name":"bone_radius"},"link":null}],"outputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","links":[11,17]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackMeshFromSkeleton"},"widgets_values":[0.02,0.01]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,2,0,6,0,"SKELETON"],[6,3,0,7,0,"SKELETON"],[7,4,0,8,0,"SKELETON"],[8,5,0,9,0,"SKELETON"],[9,6,0,12,1,"TRIMESH"],[10,7,0,12,2,"TRIMESH"],[11,8,0,12,3,"TRIMESH"],[12,9,0,13,0,"TRIMESH"],[13,1,0,12,0,"TRIMESH"],[17,8,0,13,1,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.7320500000000006,"offset":[1163.9107524637602,449.84158028889806]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file +{"id":"test-skeleton-all-0001","revision":0,"last_node_id":13,"last_link_id":17,"nodes":[{"id":1,"type":"GeomPackLoadMesh","pos":[-800,0],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,4,13]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackLoadMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["3d/cow.off"]},{"id":6,"type":"GeomPackMeshFromSkeleton","pos":[-400,-100],"size":[320,100],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","link":5},{"localized_name":"joint_radius","name":"joint_radius","type":"FLOAT","widget":{"name":"joint_radius"},"link":null},{"localized_name":"bone_radius","name":"bone_radius","type":"FLOAT","widget":{"name":"bone_radius"},"link":null}],"outputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","links":[9]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackMeshFromSkeleton","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[0.02,0.01]},{"id":7,"type":"GeomPackMeshFromSkeleton","pos":[0,-100],"size":[320,100],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","link":6},{"localized_name":"joint_radius","name":"joint_radius","type":"FLOAT","widget":{"name":"joint_radius"},"link":null},{"localized_name":"bone_radius","name":"bone_radius","type":"FLOAT","widget":{"name":"bone_radius"},"link":null}],"outputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","links":[10]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackMeshFromSkeleton","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[0.02,0.01]},{"id":9,"type":"GeomPackMeshFromSkeleton","pos":[800,-100],"size":[320,100],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","link":8},{"localized_name":"joint_radius","name":"joint_radius","type":"FLOAT","widget":{"name":"joint_radius"},"link":null},{"localized_name":"bone_radius","name":"bone_radius","type":"FLOAT","widget":{"name":"bone_radius"},"link":null}],"outputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","links":[12]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackMeshFromSkeleton","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[0.02,0.01]},{"id":13,"type":"GeomPackPreviewMeshMulti","pos":[420.7704391776521,57.93320128406541],"size":[768,702],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":12},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":17},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-0.10839671976880196,-0.004104770901572197,-1.5722856770085691],\\\"focalPoint\\\":[0,0,0],\\\"viewUp\\\":[-0.09618484690884596,0.9953553201116373,0.004032610888962136]}\",\"selected_field\":\"\"}"]},{"id":12,"type":"GeomPackPreviewMeshMulti","pos":[-415.02629601803164,53.835120551874915],"size":[768,702],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":13},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":9},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":10},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":11},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-0.10839671976880196,-0.004104770901572197,-1.5722856770085691],\\\"focalPoint\\\":[0,0,0],\\\"viewUp\\\":[-0.09618484690884596,0.9953553201116373,0.004032610888962136]}\",\"selected_field\":\"\"}"]},{"id":8,"type":"GeomPackMeshFromSkeleton","pos":[400,-100],"size":[320,100],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","link":7},{"localized_name":"joint_radius","name":"joint_radius","type":"FLOAT","widget":{"name":"joint_radius"},"link":null},{"localized_name":"bone_radius","name":"bone_radius","type":"FLOAT","widget":{"name":"bone_radius"},"link":null}],"outputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","links":[11,17]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackMeshFromSkeleton","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[0.02,0.01]},{"id":2,"type":"GeomPackExtractSkeleton","pos":[-400,-400],"size":[370,154],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"fix_mesh","name":"fix_mesh","type":"BOOLEAN","widget":{"name":"fix_mesh"},"link":null},{"localized_name":"normalize","name":"normalize","type":"BOOLEAN","widget":{"name":"normalize"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.waves","name":"backend.waves","type":"INT","widget":{"name":"backend.waves"},"link":null},{"localized_name":"backend.step_size","name":"backend.step_size","type":"FLOAT","widget":{"name":"backend.step_size"},"link":null}],"outputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","links":[5]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackExtractSkeleton","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["wavefront",false,"wavefront",1,1]},{"id":3,"type":"GeomPackExtractSkeleton","pos":[0,-400],"size":[370,154],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":2},{"localized_name":"fix_mesh","name":"fix_mesh","type":"BOOLEAN","widget":{"name":"fix_mesh"},"link":null},{"localized_name":"normalize","name":"normalize","type":"BOOLEAN","widget":{"name":"normalize"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.sampling_dist","name":"backend.sampling_dist","type":"FLOAT","widget":{"name":"backend.sampling_dist"},"link":null},{"localized_name":"backend.cluster_pos","name":"backend.cluster_pos","type":"COMBO","widget":{"name":"backend.cluster_pos"},"link":null}],"outputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","links":[6]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackExtractSkeleton","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["vertex_clusters",false,"vertex_clusters",1,"median"]},{"id":4,"type":"GeomPackExtractSkeleton","pos":[400,-400],"size":[370,154],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"fix_mesh","name":"fix_mesh","type":"BOOLEAN","widget":{"name":"fix_mesh"},"link":null},{"localized_name":"normalize","name":"normalize","type":"BOOLEAN","widget":{"name":"normalize"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.shape_weight","name":"backend.shape_weight","type":"FLOAT","widget":{"name":"backend.shape_weight"},"link":null},{"localized_name":"backend.sample_weight","name":"backend.sample_weight","type":"FLOAT","widget":{"name":"backend.sample_weight"},"link":null}],"outputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","links":[7]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackExtractSkeleton","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["edge_collapse",false,"edge_collapse",1,0.1]},{"id":5,"type":"GeomPackExtractSkeleton","pos":[800,-400],"size":[370,154],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":4},{"localized_name":"fix_mesh","name":"fix_mesh","type":"BOOLEAN","widget":{"name":"fix_mesh"},"link":null},{"localized_name":"normalize","name":"normalize","type":"BOOLEAN","widget":{"name":"normalize"},"link":null},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.inv_dist","name":"backend.inv_dist","type":"FLOAT","widget":{"name":"backend.inv_dist"},"link":null},{"localized_name":"backend.min_length","name":"backend.min_length","type":"FLOAT","widget":{"name":"backend.min_length"},"link":null}],"outputs":[{"localized_name":"skeleton","name":"skeleton","type":"SKELETON","links":[8]}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackExtractSkeleton","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["teasar",false,"teasar",10,0]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,2,0,6,0,"SKELETON"],[6,3,0,7,0,"SKELETON"],[7,4,0,8,0,"SKELETON"],[8,5,0,9,0,"SKELETON"],[9,6,0,12,1,"TRIMESH"],[10,7,0,12,2,"TRIMESH"],[11,8,0,12,3,"TRIMESH"],[12,9,0,13,0,"TRIMESH"],[13,1,0,12,0,"TRIMESH"],[17,8,0,13,1,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.6932265832844006,"offset":[1028.0454101888524,463.54868515925733]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file diff --git a/workflows/tests/smooth_all.json b/workflows/tests/smooth_all.json index acc1e7c5..b23a99ec 100644 --- a/workflows/tests/smooth_all.json +++ b/workflows/tests/smooth_all.json @@ -1 +1 @@ -{"id":"test-smooth-all-0001","revision":0,"last_node_id":9,"last_link_id":12,"nodes":[{"id":9,"type":"GeomPackPreviewMeshMulti","pos":[737.8787878787873,-280.30303030303014],"size":[768,702],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":10},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":11},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-0.8414656207397794,0.32699250212078945,-1.3190513740538596],\\\"focalPoint\\\":[0,-0.00008465349674224854,0],\\\"viewUp\\\":[0.3326545105537516,0.9428020577582513,0.021569805169516343]}\",\"selected_field\":\"\"}"]},{"id":8,"type":"GeomPackPreviewMeshMulti","pos":[-59.090909090909165,-277.27272727272714],"size":[768,702],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":6},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":7},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":8},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":9},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-0.8414656207397794,0.32699250212078945,-1.3190513740538596],\\\"focalPoint\\\":[0,-0.00008465349674224854,0],\\\"viewUp\\\":[0.3326545105537516,0.9428020577582513,0.021569805169516343]}\",\"selected_field\":\"\"}"]},{"id":2,"type":"GeomPackSmoothMesh","pos":[-475.7575757575757,-121.21212121212147],"size":[370,150],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null},{"localized_name":"backend.lambda_","name":"backend.lambda_","type":"FLOAT","widget":{"name":"backend.lambda_"},"link":null},{"localized_name":"backend.mu","name":"backend.mu","type":"FLOAT","widget":{"name":"backend.mu"},"link":null}],"outputs":[{"localized_name":"smoothed_mesh","name":"smoothed_mesh","type":"TRIMESH","links":[7]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackSmoothMesh"},"widgets_values":["taubin",5,0.5,-0.53]},{"id":3,"type":"GeomPackSmoothMesh","pos":[-477.27272727272754,99.99999999999986],"size":[370,126],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null},{"localized_name":"backend.cotangent_weight","name":"backend.cotangent_weight","type":"COMBO","widget":{"name":"backend.cotangent_weight"},"link":null}],"outputs":[{"localized_name":"smoothed_mesh","name":"smoothed_mesh","type":"TRIMESH","links":[8]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackSmoothMesh"},"widgets_values":["laplacian",5,"true"]},{"id":4,"type":"GeomPackSmoothMesh","pos":[-475.7575757575751,307.5757575757571],"size":[370,78],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"smoothed_mesh","name":"smoothed_mesh","type":"TRIMESH","links":[9]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackSmoothMesh"},"widgets_values":["hc_laplacian"]},{"id":1,"type":"GeomPackLoadMesh","pos":[-466.66666666666663,-265.1515151515152],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,4,5,6]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/cow.off"]},{"id":6,"type":"GeomPackSmoothMesh","pos":[1125.7575757575762,-487.878787878788],"size":[370,150],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null},{"localized_name":"backend.lambda_","name":"backend.lambda_","type":"FLOAT","widget":{"name":"backend.lambda_"},"link":null},{"localized_name":"backend.mu","name":"backend.mu","type":"FLOAT","widget":{"name":"backend.mu"},"link":null}],"outputs":[{"localized_name":"smoothed_mesh","name":"smoothed_mesh","type":"TRIMESH","links":[11]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackSmoothMesh"},"widgets_values":["trimesh_taubin",10,0.6,-0.53]},{"id":5,"type":"GeomPackSmoothMesh","pos":[737.8787878787874,-475.7575757575757],"size":[370,126],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null},{"localized_name":"backend.lambda_","name":"backend.lambda_","type":"FLOAT","widget":{"name":"backend.lambda_"},"link":null}],"outputs":[{"localized_name":"smoothed_mesh","name":"smoothed_mesh","type":"TRIMESH","links":[10]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackSmoothMesh"},"widgets_values":["trimesh_laplacian",7,0.5]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[6,1,0,8,0,"TRIMESH"],[7,2,0,8,1,"TRIMESH"],[8,3,0,8,2,"TRIMESH"],[9,4,0,8,3,"TRIMESH"],[10,5,0,9,0,"TRIMESH"],[11,6,0,9,1,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.6000000000000011,"offset":[408.8932384429518,255.6079301480365]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file +{"id":"test-smooth-all-0001","revision":0,"last_node_id":9,"last_link_id":12,"nodes":[{"id":9,"type":"GeomPackPreviewMeshMulti","pos":[737.8787878787873,-280.30303030303014],"size":[768,702],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":10},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":11},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":null},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-0.8124876310583045,0.33787129680966865,-2.241461606161383],\\\"focalPoint\\\":[0,-0.00008465349674224854,0],\\\"viewUp\\\":[0.3326545105537515,0.9428020577582513,0.02156980516951644]}\",\"selected_field\":\"\"}"]},{"id":8,"type":"GeomPackPreviewMeshMulti","pos":[-59.090909090909165,-277.27272727272714],"size":[768,702],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"mesh_1","name":"mesh_1","type":"TRIMESH","link":6},{"localized_name":"mesh_2","name":"mesh_2","shape":7,"type":"TRIMESH","link":7},{"localized_name":"mesh_3","name":"mesh_3","shape":7,"type":"TRIMESH","link":8},{"localized_name":"mesh_4","name":"mesh_4","shape":7,"type":"TRIMESH","link":9},{"localized_name":"mode","name":"mode","shape":7,"type":"COMBO","widget":{"name":"mode"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshMulti","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["fields","{\"show_edges\":true,\"camera_state\":\"{\\\"position\\\":[-0.8124876310583045,0.33787129680966865,-2.241461606161383],\\\"focalPoint\\\":[0,-0.00008465349674224854,0],\\\"viewUp\\\":[0.3326545105537515,0.9428020577582513,0.02156980516951644]}\",\"selected_field\":\"\"}"]},{"id":4,"type":"GeomPackSmoothMesh","pos":[-475.7575757575751,307.5757575757571],"size":[370,78],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"smoothed_mesh","name":"smoothed_mesh","type":"TRIMESH","links":[9]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackSmoothMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["hc_laplacian"]},{"id":1,"type":"GeomPackLoadMesh","pos":[-466.66666666666663,-265.1515151515152],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,4,5,6]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackLoadMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["3d/cow.off"]},{"id":6,"type":"GeomPackSmoothMesh","pos":[1125.7575757575762,-487.878787878788],"size":[370,150],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null},{"localized_name":"backend.lambda_","name":"backend.lambda_","type":"FLOAT","widget":{"name":"backend.lambda_"},"link":null},{"localized_name":"backend.mu","name":"backend.mu","type":"FLOAT","widget":{"name":"backend.mu"},"link":null}],"outputs":[{"localized_name":"smoothed_mesh","name":"smoothed_mesh","type":"TRIMESH","links":[11]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackSmoothMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["trimesh_taubin",10,0.6,-0.53]},{"id":5,"type":"GeomPackSmoothMesh","pos":[737.8787878787874,-475.7575757575757],"size":[370,126],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null},{"localized_name":"backend.lambda_","name":"backend.lambda_","type":"FLOAT","widget":{"name":"backend.lambda_"},"link":null}],"outputs":[{"localized_name":"smoothed_mesh","name":"smoothed_mesh","type":"TRIMESH","links":[10]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackSmoothMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["trimesh_laplacian",7,0.5]},{"id":2,"type":"GeomPackSmoothMesh","pos":[-475.7575757575757,-121.21212121212147],"size":[370,150],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null},{"localized_name":"backend.lambda_","name":"backend.lambda_","type":"FLOAT","widget":{"name":"backend.lambda_"},"link":null},{"localized_name":"backend.mu","name":"backend.mu","type":"FLOAT","widget":{"name":"backend.mu"},"link":null}],"outputs":[{"localized_name":"smoothed_mesh","name":"smoothed_mesh","type":"TRIMESH","links":[7]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackSmoothMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["taubin",5,0.5,-0.53]},{"id":3,"type":"GeomPackSmoothMesh","pos":[-477.27272727272754,99.99999999999986],"size":[370,126],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null},{"localized_name":"backend.cotangent_weight","name":"backend.cotangent_weight","type":"COMBO","widget":{"name":"backend.cotangent_weight"},"link":null}],"outputs":[{"localized_name":"smoothed_mesh","name":"smoothed_mesh","type":"TRIMESH","links":[8]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackSmoothMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["laplacian",5,"true"]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[6,1,0,8,0,"TRIMESH"],[7,2,0,8,1,"TRIMESH"],[8,3,0,8,2,"TRIMESH"],[9,4,0,8,3,"TRIMESH"],[10,5,0,9,0,"TRIMESH"],[11,6,0,9,1,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.8552133479175666,"offset":[714.4169885728979,602.1526361939189]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file diff --git a/workflows/tests/uv_unwrap_all.json b/workflows/tests/uv_unwrap_all.json index ccdcf9ea..1a62f2aa 100644 --- a/workflows/tests/uv_unwrap_all.json +++ b/workflows/tests/uv_unwrap_all.json @@ -1 +1 @@ -{"id":"test-uv-unwrap-all-0001","revision":0,"last_node_id":23,"last_link_id":30,"nodes":[{"id":1,"type":"GeomPackLoadMesh","pos":[-800,0],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,4,5,6,7,8,9]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackLoadMesh"},"widgets_values":["3d/camelhead.off"]},{"id":7,"type":"GeomPackUVUnwrap","pos":[-784.6251772512281,359.42269916962255],"size":[370,182],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":6},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.angle_limit","name":"backend.angle_limit","type":"FLOAT","widget":{"name":"backend.angle_limit"},"link":null},{"localized_name":"backend.island_margin","name":"backend.island_margin","type":"FLOAT","widget":{"name":"backend.island_margin"},"link":null},{"localized_name":"backend.scale_to_bounds","name":"backend.scale_to_bounds","type":"COMBO","widget":{"name":"backend.scale_to_bounds"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[22]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap"},"widgets_values":["blender_smart",66,0.02,"true","false"]},{"id":8,"type":"GeomPackUVUnwrap","pos":[-784.8731147276324,132.4400345232251],"size":[370,158],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":7},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.cube_size","name":"backend.cube_size","type":"FLOAT","widget":{"name":"backend.cube_size"},"link":null},{"localized_name":"backend.scale_to_bounds","name":"backend.scale_to_bounds","type":"COMBO","widget":{"name":"backend.scale_to_bounds"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[23]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap"},"widgets_values":["blender_cube",1,"true","false"]},{"id":10,"type":"GeomPackUVUnwrap","pos":[-796.9919492162304,784.6332800179155],"size":[370,134],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":9},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.scale_to_bounds","name":"backend.scale_to_bounds","type":"COMBO","widget":{"name":"backend.scale_to_bounds"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[24]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap"},"widgets_values":["blender_sphere","true","false"]},{"id":15,"type":"GeomPackPreviewMeshUV","pos":[-386.53478902951,356.45979517811406],"size":[600,378.00000000000006],"flags":{},"order":15,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":22},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV"},"widgets_values":[false,true,""]},{"id":16,"type":"GeomPackPreviewMeshUV","pos":[-380.00030506661045,-92.41560473988542],"size":[600,378.00000000000006],"flags":{},"order":16,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":23},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV"},"widgets_values":[false,true,""]},{"id":17,"type":"GeomPackPreviewMeshUV","pos":[-383.98949364611246,796.1526743602467],"size":[600,378.00000000000006],"flags":{},"order":18,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":24},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV"},"widgets_values":[false,true,""]},{"id":6,"type":"GeomPackUVUnwrap","pos":[283.2013306100092,-103.59297932364527],"size":[370,134],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[25]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap"},"widgets_values":["libigl_arap",10,"false"]},{"id":2,"type":"GeomPackUVUnwrap","pos":[284.42464019020474,361.21098850110144],"size":[370,110],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[26]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap"},"widgets_values":["xatlas","false"]},{"id":3,"type":"GeomPackUVUnwrap","pos":[272.7272727272723,795.867768595041],"size":[370,206],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.chart_cone_angle","name":"backend.chart_cone_angle","type":"FLOAT","widget":{"name":"backend.chart_cone_angle"},"link":null},{"localized_name":"backend.chart_refine_iterations","name":"backend.chart_refine_iterations","type":"INT","widget":{"name":"backend.chart_refine_iterations"},"link":null},{"localized_name":"backend.chart_global_iterations","name":"backend.chart_global_iterations","type":"INT","widget":{"name":"backend.chart_global_iterations"},"link":null},{"localized_name":"backend.chart_smooth_strength","name":"backend.chart_smooth_strength","type":"INT","widget":{"name":"backend.chart_smooth_strength"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[27]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap"},"widgets_values":["cumesh",90,0,1,1,"false"]},{"id":20,"type":"GeomPackPreviewMeshUV","pos":[679.4285292358016,786.3033996758919],"size":[600,378.0000000000001],"flags":{},"order":11,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":27},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV"},"widgets_values":[false,true,""]},{"id":18,"type":"GeomPackPreviewMeshUV","pos":[676.8832338524041,346.61052049375905],"size":[600,378.00000000000006],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":26},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV"},"widgets_values":[false,true,""]},{"id":19,"type":"GeomPackPreviewMeshUV","pos":[683.4177178153037,-102.26487942424012],"size":[600,378.00000000000006],"flags":{},"order":14,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":25},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV"},"widgets_values":[false,true,""]},{"id":21,"type":"GeomPackPreviewMeshUV","pos":[1771.8835959234673,800.9237862335377],"size":[600,378.0000000000001],"flags":{},"order":17,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":30},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV"},"widgets_values":[false,true,""]},{"id":22,"type":"GeomPackPreviewMeshUV","pos":[1769.33830054007,361.23090705140487],"size":[600,378.00000000000006],"flags":{},"order":13,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":29},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV"},"widgets_values":[false,true,""]},{"id":23,"type":"GeomPackPreviewMeshUV","pos":[1775.8727845029696,-87.64449286659429],"size":[600,378.00000000000006],"flags":{},"order":12,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":28},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV"},"widgets_values":[false,true,""]},{"id":4,"type":"GeomPackUVUnwrap","pos":[1358.3199999999986,-97.7225000000002],"size":[370,110],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[28]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap"},"widgets_values":["libigl_lscm","false"]},{"id":5,"type":"GeomPackUVUnwrap","pos":[1359.720538214599,358.3201345536506],"size":[370,110],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[29]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap"},"widgets_values":["libigl_harmonic","false"]},{"id":9,"type":"GeomPackUVUnwrap","pos":[1351.0953027457135,781.174932723175],"size":[370,158],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":8},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.cylinder_radius","name":"backend.cylinder_radius","type":"FLOAT","widget":{"name":"backend.cylinder_radius"},"link":null},{"localized_name":"backend.scale_to_bounds","name":"backend.scale_to_bounds","type":"COMBO","widget":{"name":"backend.scale_to_bounds"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[30]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap"},"widgets_values":["blender_cylinder",0.9,"true","false"]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[6,1,0,7,0,"TRIMESH"],[7,1,0,8,0,"TRIMESH"],[8,1,0,9,0,"TRIMESH"],[9,1,0,10,0,"TRIMESH"],[22,7,0,15,0,"TRIMESH"],[23,8,0,16,0,"TRIMESH"],[24,10,0,17,0,"TRIMESH"],[25,6,0,19,0,"TRIMESH"],[26,2,0,18,0,"TRIMESH"],[27,3,0,20,0,"TRIMESH"],[28,4,0,23,0,"TRIMESH"],[29,5,0,22,0,"TRIMESH"],[30,9,0,21,0,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.3005259203606313,"offset":[1298.407624260146,1388.2207731753158]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file +{"id":"test-uv-unwrap-all-0001","revision":0,"last_node_id":23,"last_link_id":30,"nodes":[{"id":1,"type":"GeomPackLoadMesh","pos":[-800,0],"size":[270,78],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"file_path","name":"file_path","type":"COMBO","widget":{"name":"file_path"},"link":null}],"outputs":[{"localized_name":"mesh","name":"mesh","type":"TRIMESH","links":[1,2,3,4,5,6,7,8,9]},{"localized_name":"texture","name":"texture","type":"IMAGE","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackLoadMesh","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["3d/camelhead.off"]},{"id":7,"type":"GeomPackUVUnwrap","pos":[-784.6251772512281,359.42269916962255],"size":[370,182],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":6},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.angle_limit","name":"backend.angle_limit","type":"FLOAT","widget":{"name":"backend.angle_limit"},"link":null},{"localized_name":"backend.island_margin","name":"backend.island_margin","type":"FLOAT","widget":{"name":"backend.island_margin"},"link":null},{"localized_name":"backend.scale_to_bounds","name":"backend.scale_to_bounds","type":"COMBO","widget":{"name":"backend.scale_to_bounds"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[22]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["blender_smart",66,0.02,"true","false"]},{"id":8,"type":"GeomPackUVUnwrap","pos":[-784.8731147276324,132.4400345232251],"size":[370,158],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":7},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.cube_size","name":"backend.cube_size","type":"FLOAT","widget":{"name":"backend.cube_size"},"link":null},{"localized_name":"backend.scale_to_bounds","name":"backend.scale_to_bounds","type":"COMBO","widget":{"name":"backend.scale_to_bounds"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[23]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["blender_cube",1,"true","false"]},{"id":10,"type":"GeomPackUVUnwrap","pos":[-796.9919492162304,784.6332800179155],"size":[370,134],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":9},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.scale_to_bounds","name":"backend.scale_to_bounds","type":"COMBO","widget":{"name":"backend.scale_to_bounds"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[24]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["blender_sphere","true","false"]},{"id":15,"type":"GeomPackPreviewMeshUV","pos":[-386.53478902951,356.45979517811406],"size":[600,378.00000000000006],"flags":{},"order":15,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":22},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[false,true,""]},{"id":16,"type":"GeomPackPreviewMeshUV","pos":[-380.00030506661045,-92.41560473988542],"size":[600,378.00000000000006],"flags":{},"order":16,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":23},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[false,true,""]},{"id":17,"type":"GeomPackPreviewMeshUV","pos":[-383.98949364611246,796.1526743602467],"size":[600,378.00000000000006],"flags":{},"order":18,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":24},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[false,true,""]},{"id":6,"type":"GeomPackUVUnwrap","pos":[283.2013306100092,-103.59297932364527],"size":[370,134],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":5},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.iterations","name":"backend.iterations","type":"INT","widget":{"name":"backend.iterations"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[25]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["libigl_arap",10,"false"]},{"id":2,"type":"GeomPackUVUnwrap","pos":[284.42464019020474,361.21098850110144],"size":[370,110],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":1},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[26]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["xatlas","false"]},{"id":3,"type":"GeomPackUVUnwrap","pos":[272.7272727272723,795.867768595041],"size":[370,206],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":2},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.chart_cone_angle","name":"backend.chart_cone_angle","type":"FLOAT","widget":{"name":"backend.chart_cone_angle"},"link":null},{"localized_name":"backend.chart_refine_iterations","name":"backend.chart_refine_iterations","type":"INT","widget":{"name":"backend.chart_refine_iterations"},"link":null},{"localized_name":"backend.chart_global_iterations","name":"backend.chart_global_iterations","type":"INT","widget":{"name":"backend.chart_global_iterations"},"link":null},{"localized_name":"backend.chart_smooth_strength","name":"backend.chart_smooth_strength","type":"INT","widget":{"name":"backend.chart_smooth_strength"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[27]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["cumesh",90,0,1,1,"false"]},{"id":20,"type":"GeomPackPreviewMeshUV","pos":[679.4285292358016,786.3033996758919],"size":[600,378.0000000000001],"flags":{},"order":11,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":27},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[false,true,""]},{"id":18,"type":"GeomPackPreviewMeshUV","pos":[676.8832338524041,346.61052049375905],"size":[600,378.00000000000006],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":26},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[false,true,""]},{"id":19,"type":"GeomPackPreviewMeshUV","pos":[683.4177178153037,-102.26487942424012],"size":[600,378.00000000000006],"flags":{},"order":14,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":25},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[false,true,""]},{"id":21,"type":"GeomPackPreviewMeshUV","pos":[1771.8835959234673,800.9237862335377],"size":[600,378.0000000000001],"flags":{},"order":17,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":30},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[false,true,""]},{"id":22,"type":"GeomPackPreviewMeshUV","pos":[1769.33830054007,361.23090705140487],"size":[600,378.00000000000006],"flags":{},"order":13,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":29},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[false,true,""]},{"id":23,"type":"GeomPackPreviewMeshUV","pos":[1775.8727845029696,-87.64449286659429],"size":[600,378.00000000000006],"flags":{},"order":12,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":28},{"localized_name":"show_checker","name":"show_checker","shape":7,"type":"BOOLEAN","widget":{"name":"show_checker"},"link":null},{"localized_name":"show_wireframe","name":"show_wireframe","shape":7,"type":"BOOLEAN","widget":{"name":"show_wireframe"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackPreviewMeshUV","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":[false,true,""]},{"id":4,"type":"GeomPackUVUnwrap","pos":[1358.3199999999986,-97.7225000000002],"size":[370,110],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":3},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[28]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["libigl_lscm","false"]},{"id":5,"type":"GeomPackUVUnwrap","pos":[1359.720538214599,358.3201345536506],"size":[370,110],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":4},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[29]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["libigl_harmonic","false"]},{"id":9,"type":"GeomPackUVUnwrap","pos":[1351.0953027457135,781.174932723175],"size":[370,158],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"trimesh","name":"trimesh","type":"TRIMESH","link":8},{"localized_name":"backend","name":"backend","type":"COMFY_DYNAMICCOMBO_V3","widget":{"name":"backend"},"link":null},{"localized_name":"backend.cylinder_radius","name":"backend.cylinder_radius","type":"FLOAT","widget":{"name":"backend.cylinder_radius"},"link":null},{"localized_name":"backend.scale_to_bounds","name":"backend.scale_to_bounds","type":"COMBO","widget":{"name":"backend.scale_to_bounds"},"link":null}],"outputs":[{"localized_name":"unwrapped_mesh","name":"unwrapped_mesh","type":"TRIMESH","links":[30]},{"localized_name":"info","name":"info","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui-geometrypack","ver":"224d843d5a35546212d1fb7babe30efabdf2116c","Node name for S&R":"GeomPackUVUnwrap","aux_id":"PozzettiAndrea/ComfyUI-GeometryPack"},"widgets_values":["blender_cylinder",0.9,"true","false"]}],"links":[[1,1,0,2,0,"TRIMESH"],[2,1,0,3,0,"TRIMESH"],[3,1,0,4,0,"TRIMESH"],[4,1,0,5,0,"TRIMESH"],[5,1,0,6,0,"TRIMESH"],[6,1,0,7,0,"TRIMESH"],[7,1,0,8,0,"TRIMESH"],[8,1,0,9,0,"TRIMESH"],[9,1,0,10,0,"TRIMESH"],[22,7,0,15,0,"TRIMESH"],[23,8,0,16,0,"TRIMESH"],[24,10,0,17,0,"TRIMESH"],[25,6,0,19,0,"TRIMESH"],[26,2,0,18,0,"TRIMESH"],[27,3,0,20,0,"TRIMESH"],[28,4,0,23,0,"TRIMESH"],[29,5,0,22,0,"TRIMESH"],[30,9,0,21,0,"TRIMESH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.3005259203606313,"offset":[1298.407624260146,1388.2207731753158]},"frontendVersion":"1.30.6","workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file