diff --git a/example_workflows/Advanced.json b/example_workflows/Advanced.json index 7280322..73fc808 100644 --- a/example_workflows/Advanced.json +++ b/example_workflows/Advanced.json @@ -1,82 +1,19 @@ { "id": "440427ce-0c6a-4462-af51-639ed2f16dec", "revision": 0, - "last_node_id": 26, - "last_link_id": 36, + "last_node_id": 40, + "last_link_id": 78, "nodes": [ { - "id": 23, - "type": "Trellis2MeshWithVoxelAdvancedGenerator", - "pos": [ - 895.1023542060036, - 703.6847192511636 - ], - "size": [ - 413.1841796875, - 510 - ], - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [ - { - "name": "pipeline", - "type": "TRELLIS2PIPELINE", - "link": 30 - }, - { - "name": "image", - "type": "IMAGE", - "link": 32 - } - ], - "outputs": [ - { - "name": "mesh", - "type": "MESHWITHVOXEL", - "links": [ - 31 - ] - } - ], - "properties": { - "aux_id": "visualbruno/ComfyUI-Trellis2", - "ver": "cd51c612e39d9a66d773bdcdefee84a2271f887a", - "widget_ue_connectable": {}, - "Node name for S&R": "Trellis2MeshWithVoxelAdvancedGenerator" - }, - "widgets_values": [ - 1189469622, - "randomize", - "1024_cascade", - 12, - 7.5, - 0.7, - "0.6, 1.0", - 5, - 12, - 7.5, - 0.5, - "0.6, 1.0", - 3, - 12, - 7.5, - 0.5, - "0.6, 1.0", - 3, - 49152 - ] - }, - { - "id": 3, + "id": 39, "type": "Trellis2LoadModel", "pos": [ - 545.9403333813785, - 713.3326123688873 + 172.34044277137122, + 635.2670381050675 ], "size": [ - 270, - 82 + 301.7261859434295, + 90.65259616638991 ], "flags": {}, "order": 0, @@ -87,30 +24,75 @@ "name": "pipeline", "type": "TRELLIS2PIPELINE", "links": [ - 30 + 75 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03", + "Node name for S&R": "Trellis2LoadModel", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "TRELLIS.2-4B", + "flash_attn" + ] + }, + { + "id": 6, + "type": "Trellis2LoadImageWithTransparency", + "pos": [ + 134.7157262503816, + 834.9720915725163 + ], + "size": [ + 378.59551697974155, + 463.3598024362732 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": null + }, + { + "name": "mask", + "type": "MASK", + "links": null + }, + { + "name": "image_with_alpha", + "type": "IMAGE", + "links": [ + 76 ] } ], "properties": { "aux_id": "visualbruno/ComfyUI-Trellis2", "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", - "Node name for S&R": "Trellis2LoadModel", + "Node name for S&R": "Trellis2LoadImageWithTransparency", "widget_ue_connectable": {} }, "widgets_values": [ - "TRELLIS.2-4B", - "xformers" + "Image_04291_.png", + "image" ] }, { - "id": 24, - "type": "Trellis2PostProcessMesh", + "id": 19, + "type": "Trellis2ExportMesh", "pos": [ - 1680.8541453877474, - 472.083610274446 + 1445.610740061347, + 502.94502603344927 ], "size": [ - 284.71640625, + 270, 106 ], "flags": {}, @@ -118,86 +100,45 @@ "mode": 0, "inputs": [ { - "name": "mesh", - "type": "MESHWITHVOXEL", - "link": 33 + "name": "trimesh", + "type": "TRIMESH", + "link": 73 } ], "outputs": [ { - "name": "mesh", - "type": "MESHWITHVOXEL", + "name": "glb_path", + "type": "STRING", "links": [ - 34 - ] - } - ], - "properties": { - "aux_id": "visualbruno/ComfyUI-Trellis2", - "ver": "cd51c612e39d9a66d773bdcdefee84a2271f887a", - "widget_ue_connectable": {}, - "Node name for S&R": "Trellis2PostProcessMesh" - }, - "widgets_values": [ - true, - 1, - 0 - ] - }, - { - "id": 7, - "type": "Trellis2SimplifyMesh", - "pos": [ - 1363.487828614614, - 473.80228472070576 - ], - "size": [ - 270, - 82 - ], - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "mesh", - "type": "MESHWITHVOXEL", - "link": 31 - } - ], - "outputs": [ - { - "name": "mesh", - "type": "MESHWITHVOXEL", - "links": [ - 33 + 22 ] } ], "properties": { "aux_id": "visualbruno/ComfyUI-Trellis2", "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", - "Node name for S&R": "Trellis2SimplifyMesh", + "Node name for S&R": "Trellis2ExportMesh", "widget_ue_connectable": {} }, "widgets_values": [ - 3000000, - "Cumesh" + "Home_2K", + "glb", + true ] }, { "id": 10, "type": "Preview3D", "pos": [ - 1368.5197946200165, - 868.7516980767081 + 1550.8319924776888, + 699.2361408227106 ], "size": [ - 918.7674663095017, - 721.716790386901 + 626.8865556299502, + 658.2643216794061 ], "flags": {}, - "order": 8, + "order": 5, "mode": 0, "inputs": [ { @@ -227,7 +168,7 @@ "ver": "0.4.0", "Node name for S&R": "Preview3D", "widget_ue_connectable": {}, - "Last Time Model File": "TrellisNoTexture_00001_.glb", + "Last Time Model File": "Home_2K_00001_.glb", "Scene Config": { "showGrid": true, "backgroundColor": "#282828", @@ -239,13 +180,13 @@ "fov": 35, "state": { "position": { - "x": 1.2800822443116775, - "y": 0.40477555373866947, - "z": 9.73842828506298 + "x": 12.514315832403488, + "y": 3.895614510886169, + "z": 9.139010516199487 }, "target": { "x": 0, - "y": 2.431850843933464, + "y": 2.1870527424637647, "z": 0 }, "zoom": 1, @@ -257,157 +198,29 @@ } }, "widgets_values": [ - "TrellisNoTexture_00001_.glb", + "Home_2K_00001_.glb", "" ] }, { - "id": 6, - "type": "Trellis2LoadImageWithTransparency", + "id": 38, + "type": "Trellis2PostProcessAndUnWrapAndRasterizer", "pos": [ - 198.16809813724086, - 845.5475191605382 - ], - "size": [ - 642.9803837048821, - 706.5938623956879 - ], - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": null - }, - { - "name": "mask", - "type": "MASK", - "links": null - }, - { - "name": "image_with_alpha", - "type": "IMAGE", - "links": [ - 32 - ] - } - ], - "properties": { - "aux_id": "visualbruno/ComfyUI-Trellis2", - "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", - "Node name for S&R": "Trellis2LoadImageWithTransparency", - "widget_ue_connectable": {} - }, - "widgets_values": [ - "a_stylized_orc_warrior_in_a_pose_3d.png", - "image" - ] - }, - { - "id": 19, - "type": "Trellis2ExportMesh", - "pos": [ - 1872.8520060596213, - 652.9395153716645 - ], - "size": [ - 270, - 106 - ], - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "name": "trimesh", - "type": "TRIMESH", - "link": 36 - } - ], - "outputs": [ - { - "name": "glb_path", - "type": "STRING", - "links": [ - 22 - ] - } - ], - "properties": { - "aux_id": "visualbruno/ComfyUI-Trellis2", - "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", - "Node name for S&R": "Trellis2ExportMesh", - "widget_ue_connectable": {} - }, - "widgets_values": [ - "OrcTextured", - "glb", - true - ] - }, - { - "id": 26, - "type": "Trellis2SimplifyMesh", - "pos": [ - 2025.611903545499, - 475.25618045847074 - ], - "size": [ - 270, - 82 - ], - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [ - { - "name": "mesh", - "type": "MESHWITHVOXEL", - "link": 34 - } - ], - "outputs": [ - { - "name": "mesh", - "type": "MESHWITHVOXEL", - "links": [ - 35 - ] - } - ], - "properties": { - "aux_id": "visualbruno/ComfyUI-Trellis2", - "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", - "widget_ue_connectable": {}, - "Node name for S&R": "Trellis2SimplifyMesh" - }, - "widgets_values": [ - 1000000, - "Cumesh" - ] - }, - { - "id": 25, - "type": "Trellis2UnWrapAndRasterizer", - "pos": [ - 1362.5350046103654, - 649.7501547370148 + 1052.1124699414247, + 699.8626572251001 ], "size": [ 419.15234375, - 154 + 346 ], "flags": {}, - "order": 6, + "order": 3, "mode": 0, "inputs": [ { "name": "mesh", "type": "MESHWITHVOXEL", - "link": 35 + "link": 78 } ], "outputs": [ @@ -415,22 +228,90 @@ "name": "trimesh", "type": "TRIMESH", "links": [ - 36 + 73 ] } ], "properties": { "aux_id": "visualbruno/ComfyUI-Trellis2", - "ver": "cd51c612e39d9a66d773bdcdefee84a2271f887a", - "widget_ue_connectable": {}, - "Node name for S&R": "Trellis2UnWrapAndRasterizer" + "ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03", + "Node name for S&R": "Trellis2PostProcessAndUnWrapAndRasterizer", + "widget_ue_connectable": {} }, "widgets_values": [ 90, 0, 1, 1, - 2048 + 2048, + true, + 1, + 0, + 1000000, + "Meshlib", + true, + 0.03, + "OPAQUE" + ] + }, + { + "id": 40, + "type": "Trellis2MeshWithVoxelAdvancedGenerator", + "pos": [ + 555.1619459582687, + 700.5135710436982 + ], + "size": [ + 413.1841796875, + 438 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "pipeline", + "type": "TRELLIS2PIPELINE", + "link": 75 + }, + { + "name": "image", + "type": "IMAGE", + "link": 76 + } + ], + "outputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "links": [ + 78 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "022090e3d6df179ab463d33da445e57ba3891211", + "Node name for S&R": "Trellis2MeshWithVoxelAdvancedGenerator", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 723525328, + "randomize", + "1024_cascade", + 12, + 7.5, + 0.7, + 5, + 12, + 7.5, + 0.5, + 3, + 12, + 7.5, + 0.5, + 3, + 100000 ] } ], @@ -444,60 +325,36 @@ "STRING" ], [ - 30, - 3, - 0, - 23, - 0, - "TRELLIS2PIPELINE" - ], - [ - 31, - 23, - 0, - 7, - 0, - "MESHWITHVOXEL" - ], - [ - 32, - 6, - 2, - 23, - 1, - "IMAGE" - ], - [ - 33, - 7, - 0, - 24, - 0, - "MESHWITHVOXEL" - ], - [ - 34, - 24, - 0, - 26, - 0, - "MESHWITHVOXEL" - ], - [ - 35, - 26, - 0, - 25, - 0, - "MESHWITHVOXEL" - ], - [ - 36, - 25, + 73, + 38, 0, 19, 0, "TRIMESH" + ], + [ + 75, + 39, + 0, + 40, + 0, + "TRELLIS2PIPELINE" + ], + [ + 76, + 6, + 2, + 40, + 1, + "IMAGE" + ], + [ + 78, + 40, + 0, + 38, + 0, + "MESHWITHVOXEL" ] ], "groups": [], @@ -506,14 +363,14 @@ "workflowRendererVersion": "LG", "ue_links": [], "ds": { - "scale": 0.630394086312854, + "scale": 0.6934334949441419, "offset": [ - -38.495285323087536, - -245.7701182711028 + 33.42173835045634, + -244.1074188775531 ] }, "links_added_by_ue": [], - "frontendVersion": "1.34.8", + "frontendVersion": "1.34.9", "VHS_latentpreview": false, "VHS_latentpreviewrate": 0, "VHS_MetadataImage": true, diff --git a/example_workflows/Only_Mesh_Advanced.json b/example_workflows/Only_Mesh_Advanced.json new file mode 100644 index 0000000..8c121b6 --- /dev/null +++ b/example_workflows/Only_Mesh_Advanced.json @@ -0,0 +1,467 @@ +{ + "id": "440427ce-0c6a-4462-af51-639ed2f16dec", + "revision": 0, + "last_node_id": 45, + "last_link_id": 89, + "nodes": [ + { + "id": 43, + "type": "Trellis2MeshWithVoxelToTrimesh", + "pos": [ + 1737.4763650560913, + 612.3235144153165 + ], + "size": [ + 289.41171875, + 26 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "link": 83 + } + ], + "outputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "links": [ + 84 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0", + "Node name for S&R": "Trellis2MeshWithVoxelToTrimesh", + "widget_ue_connectable": {} + }, + "widgets_values": [] + }, + { + "id": 42, + "type": "Trellis2SimplifyMesh", + "pos": [ + 1357.7233866110491, + 681.5441957276756 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "link": 86 + } + ], + "outputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "links": [ + 83 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0", + "Node name for S&R": "Trellis2SimplifyMesh", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 1000000, + "Meshlib" + ] + }, + { + "id": 44, + "type": "Trellis2PostProcessMesh", + "pos": [ + 1018.3493663133462, + 680.5829868609449 + ], + "size": [ + 303.833984375, + 154 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "link": 89 + } + ], + "outputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "links": [ + 86 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0", + "Node name for S&R": "Trellis2PostProcessMesh", + "widget_ue_connectable": {} + }, + "widgets_values": [ + true, + 1, + 0, + true, + 0.03 + ] + }, + { + "id": 10, + "type": "Preview3D", + "pos": [ + 1114.3566445411961, + 898.2458966590575 + ], + "size": [ + 626.8865556299502, + 658.2643216794061 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "camera_info", + "shape": 7, + "type": "LOAD3D_CAMERA", + "link": null + }, + { + "name": "bg_image", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "model_file", + "type": "STRING", + "widget": { + "name": "model_file" + }, + "link": 22 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.4.0", + "Node name for S&R": "Preview3D", + "widget_ue_connectable": {}, + "Last Time Model File": "Cyborg_NoTexture_00001_.glb", + "Scene Config": { + "showGrid": true, + "backgroundColor": "#282828", + "backgroundImage": "", + "backgroundRenderMode": "tiled" + }, + "Camera Config": { + "cameraType": "perspective", + "fov": 35, + "state": { + "position": { + "x": 2.100849689958477, + "y": 3.0394995290713793, + "z": 11.18496965925252 + }, + "target": { + "x": 0, + "y": 2.5, + "z": 0 + }, + "zoom": 1, + "cameraType": "perspective" + } + }, + "Light Config": { + "intensity": 3 + } + }, + "widgets_values": [ + "Cyborg_NoTexture_00001_.glb", + "" + ] + }, + { + "id": 19, + "type": "Trellis2ExportMesh", + "pos": [ + 1763.834116428031, + 704.8389365825459 + ], + "size": [ + 270, + 106 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "link": 84 + } + ], + "outputs": [ + { + "name": "glb_path", + "type": "STRING", + "links": [ + 22 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", + "Node name for S&R": "Trellis2ExportMesh", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "Cyborg_NoTexture", + "glb", + true + ] + }, + { + "id": 39, + "type": "Trellis2LoadModel", + "pos": [ + 172.34044277137122, + 635.2670381050675 + ], + "size": [ + 301.7261859434295, + 90.65259616638991 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "pipeline", + "type": "TRELLIS2PIPELINE", + "links": [ + 87 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03", + "Node name for S&R": "Trellis2LoadModel", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "TRELLIS.2-4B", + "flash_attn" + ] + }, + { + "id": 6, + "type": "Trellis2LoadImageWithTransparency", + "pos": [ + 134.7157262503816, + 834.9720915725163 + ], + "size": [ + 378.59551697974155, + 463.3598024362732 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": null + }, + { + "name": "mask", + "type": "MASK", + "links": null + }, + { + "name": "image_with_alpha", + "type": "IMAGE", + "links": [ + 88 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", + "Node name for S&R": "Trellis2LoadImageWithTransparency", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "Image_2048_00002_.png", + "image" + ] + }, + { + "id": 45, + "type": "Trellis2MeshWithVoxelAdvancedGenerator", + "pos": [ + 571.2986524019634, + 681.544283746436 + ], + "size": [ + 413.1841796875, + 438 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "pipeline", + "type": "TRELLIS2PIPELINE", + "link": 87 + }, + { + "name": "image", + "type": "IMAGE", + "link": 88 + } + ], + "outputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "links": [ + 89 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0", + "widget_ue_connectable": {}, + "Node name for S&R": "Trellis2MeshWithVoxelAdvancedGenerator" + }, + "widgets_values": [ + 0, + "randomize", + "1024_cascade", + 12, + 7.5, + 0.7, + 5, + 12, + 7.5, + 0.5, + 3, + 12, + 7.5, + 0.5, + 3, + 49152 + ] + } + ], + "links": [ + [ + 22, + 19, + 0, + 10, + 2, + "STRING" + ], + [ + 83, + 42, + 0, + 43, + 0, + "MESHWITHVOXEL" + ], + [ + 84, + 43, + 0, + 19, + 0, + "TRIMESH" + ], + [ + 86, + 44, + 0, + 42, + 0, + "MESHWITHVOXEL" + ], + [ + 87, + 39, + 0, + 45, + 0, + "TRELLIS2PIPELINE" + ], + [ + 88, + 6, + 2, + 45, + 1, + "IMAGE" + ], + [ + 89, + 45, + 0, + 44, + 0, + "MESHWITHVOXEL" + ] + ], + "groups": [], + "config": {}, + "extra": { + "workflowRendererVersion": "LG", + "ue_links": [], + "ds": { + "scale": 0.6934334949441419, + "offset": [ + 27.65334090619644, + -339.286108735981 + ] + }, + "links_added_by_ue": [], + "frontendVersion": "1.34.9", + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/example_workflows/Only_Mesh_Simple.json b/example_workflows/Only_Mesh_Simple.json new file mode 100644 index 0000000..ecfa6d5 --- /dev/null +++ b/example_workflows/Only_Mesh_Simple.json @@ -0,0 +1,458 @@ +{ + "id": "440427ce-0c6a-4462-af51-639ed2f16dec", + "revision": 0, + "last_node_id": 44, + "last_link_id": 86, + "nodes": [ + { + "id": 39, + "type": "Trellis2LoadModel", + "pos": [ + 172.34044277137122, + 635.2670381050675 + ], + "size": [ + 301.7261859434295, + 90.65259616638991 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "pipeline", + "type": "TRELLIS2PIPELINE", + "links": [ + 79 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03", + "Node name for S&R": "Trellis2LoadModel", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "TRELLIS.2-4B", + "flash_attn" + ] + }, + { + "id": 41, + "type": "Trellis2MeshWithVoxelGenerator", + "pos": [ + 625.1369992088025, + 700.7722458877151 + ], + "size": [ + 342.2818359375, + 222 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "pipeline", + "type": "TRELLIS2PIPELINE", + "link": 79 + }, + { + "name": "image", + "type": "IMAGE", + "link": 80 + } + ], + "outputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "links": [ + 85 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0", + "Node name for S&R": "Trellis2MeshWithVoxelGenerator", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 1903714208, + "randomize", + "1024_cascade", + 12, + 12, + 12, + 60000 + ] + }, + { + "id": 43, + "type": "Trellis2MeshWithVoxelToTrimesh", + "pos": [ + 1737.4763650560913, + 612.3235144153165 + ], + "size": [ + 289.41171875, + 26 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "link": 83 + } + ], + "outputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "links": [ + 84 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0", + "Node name for S&R": "Trellis2MeshWithVoxelToTrimesh", + "widget_ue_connectable": {} + }, + "widgets_values": [] + }, + { + "id": 42, + "type": "Trellis2SimplifyMesh", + "pos": [ + 1357.7233866110491, + 681.5441957276756 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "link": 86 + } + ], + "outputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "links": [ + 83 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0", + "Node name for S&R": "Trellis2SimplifyMesh", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 1000000, + "Meshlib" + ] + }, + { + "id": 44, + "type": "Trellis2PostProcessMesh", + "pos": [ + 1018.3493663133462, + 680.5829868609449 + ], + "size": [ + 303.833984375, + 154 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "link": 85 + } + ], + "outputs": [ + { + "name": "mesh", + "type": "MESHWITHVOXEL", + "links": [ + 86 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0", + "Node name for S&R": "Trellis2PostProcessMesh", + "widget_ue_connectable": {} + }, + "widgets_values": [ + true, + 1, + 0, + true, + 0.03 + ] + }, + { + "id": 10, + "type": "Preview3D", + "pos": [ + 1114.3566445411961, + 898.2458966590575 + ], + "size": [ + 626.8865556299502, + 658.2643216794061 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "camera_info", + "shape": 7, + "type": "LOAD3D_CAMERA", + "link": null + }, + { + "name": "bg_image", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "model_file", + "type": "STRING", + "widget": { + "name": "model_file" + }, + "link": 22 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.4.0", + "Node name for S&R": "Preview3D", + "widget_ue_connectable": {}, + "Last Time Model File": "Cyborg_NoTexture_00001_.glb", + "Scene Config": { + "showGrid": true, + "backgroundColor": "#282828", + "backgroundImage": "", + "backgroundRenderMode": "tiled" + }, + "Camera Config": { + "cameraType": "perspective", + "fov": 35, + "state": { + "position": { + "x": 2.100849689958477, + "y": 3.0394995290713793, + "z": 11.18496965925252 + }, + "target": { + "x": 0, + "y": 2.5, + "z": 0 + }, + "zoom": 1, + "cameraType": "perspective" + } + }, + "Light Config": { + "intensity": 3 + } + }, + "widgets_values": [ + "Cyborg_NoTexture_00001_.glb", + "" + ] + }, + { + "id": 6, + "type": "Trellis2LoadImageWithTransparency", + "pos": [ + 134.7157262503816, + 834.9720915725163 + ], + "size": [ + 378.59551697974155, + 463.3598024362732 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": null + }, + { + "name": "mask", + "type": "MASK", + "links": null + }, + { + "name": "image_with_alpha", + "type": "IMAGE", + "links": [ + 80 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", + "Node name for S&R": "Trellis2LoadImageWithTransparency", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "Image_2048_00002_.png", + "image" + ] + }, + { + "id": 19, + "type": "Trellis2ExportMesh", + "pos": [ + 1763.834116428031, + 704.8389365825459 + ], + "size": [ + 270, + 106 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "link": 84 + } + ], + "outputs": [ + { + "name": "glb_path", + "type": "STRING", + "links": [ + 22 + ] + } + ], + "properties": { + "aux_id": "visualbruno/ComfyUI-Trellis2", + "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", + "Node name for S&R": "Trellis2ExportMesh", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "Cyborg_NoTexture", + "glb", + true + ] + } + ], + "links": [ + [ + 22, + 19, + 0, + 10, + 2, + "STRING" + ], + [ + 79, + 39, + 0, + 41, + 0, + "TRELLIS2PIPELINE" + ], + [ + 80, + 6, + 2, + 41, + 1, + "IMAGE" + ], + [ + 83, + 42, + 0, + 43, + 0, + "MESHWITHVOXEL" + ], + [ + 84, + 43, + 0, + 19, + 0, + "TRIMESH" + ], + [ + 85, + 41, + 0, + 44, + 0, + "MESHWITHVOXEL" + ], + [ + 86, + 44, + 0, + 42, + 0, + "MESHWITHVOXEL" + ] + ], + "groups": [], + "config": {}, + "extra": { + "workflowRendererVersion": "LG", + "ue_links": [], + "ds": { + "scale": 0.6934334949441419, + "offset": [ + 27.65334090619644, + -339.286108735981 + ] + }, + "links_added_by_ue": [], + "frontendVersion": "1.34.9", + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/example_workflows/Simple.json b/example_workflows/Simple.json index 849642e..cdc3fb6 100644 --- a/example_workflows/Simple.json +++ b/example_workflows/Simple.json @@ -1,63 +1,64 @@ { "id": "440427ce-0c6a-4462-af51-639ed2f16dec", "revision": 0, - "last_node_id": 39, - "last_link_id": 74, + "last_node_id": 41, + "last_link_id": 81, "nodes": [ { - "id": 7, - "type": "Trellis2SimplifyMesh", + "id": 19, + "type": "Trellis2ExportMesh", "pos": [ - 974.8820214106817, - 668.8664483965657 + 1445.610740061347, + 502.94502603344927 ], "size": [ 270, - 82 + 106 ], "flags": {}, - "order": 3, + "order": 4, "mode": 0, "inputs": [ { - "name": "mesh", - "type": "MESHWITHVOXEL", - "link": 4 + "name": "trimesh", + "type": "TRIMESH", + "link": 73 } ], "outputs": [ { - "name": "mesh", - "type": "MESHWITHVOXEL", + "name": "glb_path", + "type": "STRING", "links": [ - 72 + 22 ] } ], "properties": { "aux_id": "visualbruno/ComfyUI-Trellis2", "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", - "Node name for S&R": "Trellis2SimplifyMesh", + "Node name for S&R": "Trellis2ExportMesh", "widget_ue_connectable": {} }, "widgets_values": [ - 2000000, - "Meshlib" + "Home_2K", + "glb", + true ] }, { "id": 10, "type": "Preview3D", "pos": [ - 1820.0238145306425, - 684.815191221441 + 1550.8319924776888, + 699.2361408227106 ], "size": [ 626.8865556299502, 658.2643216794061 ], "flags": {}, - "order": 6, + "order": 5, "mode": 0, "inputs": [ { @@ -87,7 +88,7 @@ "ver": "0.4.0", "Node name for S&R": "Preview3D", "widget_ue_connectable": {}, - "Last Time Model File": "CrabRobot_00001_.glb", + "Last Time Model File": "Home_2K_00001_.glb", "Scene Config": { "showGrid": true, "backgroundColor": "#282828", @@ -99,13 +100,13 @@ "fov": 35, "state": { "position": { - "x": 15.1208196922641, - "y": 5.361711118767232, - "z": 2.8611322010465647 + "x": 12.514315832403488, + "y": 3.895614510886169, + "z": 9.139010516199487 }, "target": { "x": 0, - "y": 2.27016671953272, + "y": 2.1870527424637647, "z": 0 }, "zoom": 1, @@ -117,59 +118,60 @@ } }, "widgets_values": [ - "CrabRobot_00001_.glb", + "Home_2K_00001_.glb", "" ] }, { - "id": 4, - "type": "Trellis2MeshWithVoxelGenerator", + "id": 38, + "type": "Trellis2PostProcessAndUnWrapAndRasterizer", "pos": [ - 569.4174520496786, - 672.7798969818824 + 1052.1124699414247, + 699.8626572251001 ], "size": [ - 342.2818359375, - 222 + 419.15234375, + 346 ], "flags": {}, - "order": 2, + "order": 3, "mode": 0, "inputs": [ { - "name": "pipeline", - "type": "TRELLIS2PIPELINE", - "link": 74 - }, - { - "name": "image", - "type": "IMAGE", - "link": 3 + "name": "mesh", + "type": "MESHWITHVOXEL", + "link": 81 } ], "outputs": [ { - "name": "mesh", - "type": "MESHWITHVOXEL", + "name": "trimesh", + "type": "TRIMESH", "links": [ - 4 + 73 ] } ], "properties": { "aux_id": "visualbruno/ComfyUI-Trellis2", - "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", - "Node name for S&R": "Trellis2MeshWithVoxelGenerator", + "ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03", + "Node name for S&R": "Trellis2PostProcessAndUnWrapAndRasterizer", "widget_ue_connectable": {} }, "widgets_values": [ - 12345, - "fixed", - "1024_cascade", - 12, - 12, - 12, - 100000 + 90, + 0, + 1, + 1, + 2048, + true, + 1, + 0, + 1000000, + "Meshlib", + true, + 0.03, + "OPAQUE" ] }, { @@ -192,7 +194,7 @@ "name": "pipeline", "type": "TRELLIS2PIPELINE", "links": [ - 74 + 79 ] } ], @@ -207,48 +209,6 @@ "flash_attn" ] }, - { - "id": 19, - "type": "Trellis2ExportMesh", - "pos": [ - 1793.6372685066794, - 465.45044264576023 - ], - "size": [ - 270, - 106 - ], - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [ - { - "name": "trimesh", - "type": "TRIMESH", - "link": 73 - } - ], - "outputs": [ - { - "name": "glb_path", - "type": "STRING", - "links": [ - 22 - ] - } - ], - "properties": { - "aux_id": "visualbruno/ComfyUI-Trellis2", - "ver": "e7f9b30df7a09bcedf1c955e176754c73f983254", - "Node name for S&R": "Trellis2ExportMesh", - "widget_ue_connectable": {} - }, - "widgets_values": [ - "CrabRobot", - "glb", - true - ] - }, { "id": 6, "type": "Trellis2LoadImageWithTransparency", @@ -279,7 +239,7 @@ "name": "image_with_alpha", "type": "IMAGE", "links": [ - 3 + 80 ] } ], @@ -290,79 +250,63 @@ "widget_ue_connectable": {} }, "widgets_values": [ - "Image_04295_4096.png", + "Image_04291_.png", "image" ] }, { - "id": 38, - "type": "Trellis2PostProcessAndUnWrapAndRasterizer", + "id": 41, + "type": "Trellis2MeshWithVoxelGenerator", "pos": [ - 1322.2657209080112, - 668.1364712816703 + 625.1369992088025, + 700.7722458877151 ], "size": [ - 419.15234375, - 322 + 342.2818359375, + 222 ], "flags": {}, - "order": 4, + "order": 2, "mode": 0, "inputs": [ { - "name": "mesh", - "type": "MESHWITHVOXEL", - "link": 72 + "name": "pipeline", + "type": "TRELLIS2PIPELINE", + "link": 79 + }, + { + "name": "image", + "type": "IMAGE", + "link": 80 } ], "outputs": [ { - "name": "trimesh", - "type": "TRIMESH", + "name": "mesh", + "type": "MESHWITHVOXEL", "links": [ - 73 + 81 ] } ], "properties": { "aux_id": "visualbruno/ComfyUI-Trellis2", - "ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03", - "Node name for S&R": "Trellis2PostProcessAndUnWrapAndRasterizer", - "widget_ue_connectable": {} + "ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0", + "widget_ue_connectable": {}, + "Node name for S&R": "Trellis2MeshWithVoxelGenerator" }, "widgets_values": [ - 90, 0, - 1, - 1, - 2048, - true, - 1, - 0, - 1000000, - "Meshlib", - true, - 0.03 + "randomize", + "1024_cascade", + 12, + 12, + 12, + 49152 ] } ], "links": [ - [ - 3, - 6, - 2, - 4, - 1, - "IMAGE" - ], - [ - 4, - 4, - 0, - 7, - 0, - "MESHWITHVOXEL" - ], [ 22, 19, @@ -371,14 +315,6 @@ 2, "STRING" ], - [ - 72, - 7, - 0, - 38, - 0, - "MESHWITHVOXEL" - ], [ 73, 38, @@ -388,12 +324,28 @@ "TRIMESH" ], [ - 74, + 79, 39, 0, - 4, + 41, 0, "TRELLIS2PIPELINE" + ], + [ + 80, + 6, + 2, + 41, + 1, + "IMAGE" + ], + [ + 81, + 41, + 0, + 38, + 0, + "MESHWITHVOXEL" ] ], "groups": [], @@ -402,10 +354,10 @@ "workflowRendererVersion": "LG", "ue_links": [], "ds": { - "scale": 0.7627768444385541, + "scale": 0.6934334949441419, "offset": [ - -47.451623575117466, - -317.4628959455068 + 33.42173835045634, + -244.1074188775531 ] }, "links_added_by_ue": [], diff --git a/nodes.py b/nodes.py index 12846c0..056528c 100644 --- a/nodes.py +++ b/nodes.py @@ -460,6 +460,7 @@ class Trellis2UnWrapAndRasterizer: "mesh_cluster_global_iterations": ("INT",{"default":1}), "mesh_cluster_smooth_strength": ("INT",{"default":1}), "texture_size": ("INT",{"default":1024, "min":512, "max":16384}), + "texture_alpha_mode": (["OPAQUE","MASK","BLEND"],{"default":"OPAQUE"}), }, } @@ -469,7 +470,7 @@ class Trellis2UnWrapAndRasterizer: CATEGORY = "Trellis2Wrapper" OUTPUT_NODE = True - def process(self, mesh, mesh_cluster_threshold_cone_half_angle_rad, mesh_cluster_refine_iterations, mesh_cluster_global_iterations, mesh_cluster_smooth_strength, texture_size): + def process(self, mesh, mesh_cluster_threshold_cone_half_angle_rad, mesh_cluster_refine_iterations, mesh_cluster_global_iterations, mesh_cluster_smooth_strength, texture_size, texture_alpha_mode): aabb = [[-0.5, -0.5, -0.5], [0.5, 0.5, 0.5]] vertices = mesh.vertices @@ -586,7 +587,7 @@ class Trellis2UnWrapAndRasterizer: metallic = np.clip(attrs[..., attr_layout['metallic']].cpu().numpy() * 255, 0, 255).astype(np.uint8) roughness = np.clip(attrs[..., attr_layout['roughness']].cpu().numpy() * 255, 0, 255).astype(np.uint8) alpha = np.clip(attrs[..., attr_layout['alpha']].cpu().numpy() * 255, 0, 255).astype(np.uint8) - alpha_mode = 'OPAQUE' + alpha_mode = texture_alpha_mode # Inpainting: fill gaps (dilation) to prevent black seams at UV boundaries mask_inv = (~mask).astype(np.uint8) @@ -705,6 +706,7 @@ class Trellis2PostProcessAndUnWrapAndRasterizer: "simplify_method": (["Cumesh","Meshlib"],{"default":"Cumesh"}), "fill_holes": ("BOOLEAN", {"default":True}), "fill_holes_max_perimeter": ("FLOAT",{"default":0.03,"min":0.001,"max":99.999,"step":0.001}), + "texture_alpha_mode": (["OPAQUE","MASK","BLEND"],{"default":"OPAQUE"}), }, } @@ -714,7 +716,7 @@ class Trellis2PostProcessAndUnWrapAndRasterizer: CATEGORY = "Trellis2Wrapper" OUTPUT_NODE = True - def process(self, mesh, mesh_cluster_threshold_cone_half_angle_rad, mesh_cluster_refine_iterations, mesh_cluster_global_iterations, mesh_cluster_smooth_strength, texture_size, remesh, remesh_band, remesh_project, target_face_num, simplify_method, fill_holes, fill_holes_max_perimeter): + def process(self, mesh, mesh_cluster_threshold_cone_half_angle_rad, mesh_cluster_refine_iterations, mesh_cluster_global_iterations, mesh_cluster_smooth_strength, texture_size, remesh, remesh_band, remesh_project, target_face_num, simplify_method, fill_holes, fill_holes_max_perimeter, texture_alpha_mode): aabb = [[-0.5, -0.5, -0.5], [0.5, 0.5, 0.5]] vertices = mesh.vertices @@ -886,7 +888,7 @@ class Trellis2PostProcessAndUnWrapAndRasterizer: metallic = np.clip(attrs[..., attr_layout['metallic']].cpu().numpy() * 255, 0, 255).astype(np.uint8) roughness = np.clip(attrs[..., attr_layout['roughness']].cpu().numpy() * 255, 0, 255).astype(np.uint8) alpha = np.clip(attrs[..., attr_layout['alpha']].cpu().numpy() * 255, 0, 255).astype(np.uint8) - alpha_mode = 'OPAQUE' + alpha_mode = texture_alpha_mode # Inpainting: fill gaps (dilation) to prevent black seams at UV boundaries mask_inv = (~mask).astype(np.uint8)