{
  "id": "b8855bb2-4ecb-4d67-94cc-c373b4db93dd",
  "revision": 0,
  "last_node_id": 38,
  "last_link_id": 65,
  "nodes": [
    {
      "id": 28,
      "type": "LoadImage",
      "pos": [
        -3740,
        4810
      ],
      "size": [
        290,
        370
      ],
      "flags": {},
      "order": 0,
      "mode": 0,
      "inputs": [],
      "outputs": [
        {
          "name": "IMAGE",
          "type": "IMAGE",
          "links": [
            43
          ]
        },
        {
          "name": "MASK",
          "type": "MASK",
          "links": null
        }
      ],
      "properties": {
        "Node name for S&R": "LoadImage",
        "cnr_id": "comfy-core",
        "ver": "0.21.1",
        "enableTabs": false,
        "tabWidth": 65,
        "tabXOffset": 10,
        "hasSecondTab": false,
        "secondTabText": "Send Back",
        "secondTabOffset": 80,
        "secondTabWidth": 65
      },
      "widgets_values": [
        "lego_street_panorama.png",
        "image"
      ],
      "widgets_values_named": {
        "image": "lego_street_panorama.png",
        "upload": "image"
      }
    },
    {
      "id": 36,
      "type": "MarkdownNote",
      "pos": [
        -4860,
        4810
      ],
      "size": [
        500,
        1140
      ],
      "flags": {},
      "order": 1,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "Model Link",
      "properties": {},
      "widgets_values": [
        "## MoGe — models & downloads\n\nResearch repo: [microsoft/MoGe](https://github.com/microsoft/MoGe) (CVPR'25, monocular geometry from a single image).\n\nComfyUI weights: [Comfy-Org/MoGe](https://huggingface.co/Comfy-Org/MoGe) → `models/geometry_estimation/`\n\n### Which checkpoint to use\n\n| File | Version | Use when |\n|------|---------|----------|\n| `moge_1_vitl_fp16` | **MoGe-1** | Point map + depth + mask; relative scale. Lighter baseline. |\n| `moge_2_vitl_normal_fp16` | **MoGe-2** | **Recommended.** Metric-scale depth/points, sharper detail, **normal maps** (needed for normal previews & better mesh edges). |\n\nMoGe-2 adds metric scale and normals in one forward pass; MoGe-1 does not predict normals (normals in previews may be derived from points).\n\n## Input Asset\n\n- [lego_street_panorama.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/lego_street_panorama.png)\n\n## Model Link\n\n- [Hugging Face:Comfy-Org/MoGe](https://huggingface.co/Comfy-Org/MoGe)\n- [ModelScope:Comfy-Org/MoGe](https://modelscope.cn/models/Comfy-Org/MoGe)\n\n**geometry_estimation**\n\n- [moge_1_vitl_fp16.safetensors](https://huggingface.co/Comfy-Org/MoGe/resolve/main/geometry_estimation/moge_1_vitl_fp16.safetensors) (599.3 MB)\n- [moge_2_vitl_normal_fp16.safetensors](https://huggingface.co/Comfy-Org/MoGe/resolve/main/geometry_estimation/moge_2_vitl_normal_fp16.safetensors) (631.2 MB)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│   └── 📂 geometry_estimation/\n│       ├── moge_2_vitl_normal_fp16.safetensors\n│       └── moge_1_vitl_fp16.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
      ],
      "widgets_values_named": {
        "text": "## MoGe — models & downloads\n\nResearch repo: [microsoft/MoGe](https://github.com/microsoft/MoGe) (CVPR'25, monocular geometry from a single image).\n\nComfyUI weights: [Comfy-Org/MoGe](https://huggingface.co/Comfy-Org/MoGe) → `models/geometry_estimation/`\n\n### Which checkpoint to use\n\n| File | Version | Use when |\n|------|---------|----------|\n| `moge_1_vitl_fp16` | **MoGe-1** | Point map + depth + mask; relative scale. Lighter baseline. |\n| `moge_2_vitl_normal_fp16` | **MoGe-2** | **Recommended.** Metric-scale depth/points, sharper detail, **normal maps** (needed for normal previews & better mesh edges). |\n\nMoGe-2 adds metric scale and normals in one forward pass; MoGe-1 does not predict normals (normals in previews may be derived from points).\n\n## Input Asset\n\n- [lego_street_panorama.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/lego_street_panorama.png)\n\n## Model Link\n\n- [Hugging Face:Comfy-Org/MoGe](https://huggingface.co/Comfy-Org/MoGe)\n- [ModelScope:Comfy-Org/MoGe](https://modelscope.cn/models/Comfy-Org/MoGe)\n\n**geometry_estimation**\n\n- [moge_1_vitl_fp16.safetensors](https://huggingface.co/Comfy-Org/MoGe/resolve/main/geometry_estimation/moge_1_vitl_fp16.safetensors) (599.3 MB)\n- [moge_2_vitl_normal_fp16.safetensors](https://huggingface.co/Comfy-Org/MoGe/resolve/main/geometry_estimation/moge_2_vitl_normal_fp16.safetensors) (631.2 MB)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│   └── 📂 geometry_estimation/\n│       ├── moge_2_vitl_normal_fp16.safetensors\n│       └── moge_1_vitl_fp16.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
      },
      "color": "#222",
      "bgcolor": "#000"
    },
    {
      "id": 35,
      "type": "MarkdownNote",
      "pos": [
        -4310,
        4810
      ],
      "size": [
        510,
        1150
      ],
      "flags": {},
      "order": 2,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "Workflow",
      "properties": {},
      "widgets_values": [
        "## moge_panorama_to_mesh\n\n**Equirectangular (360°) panorama → textured GLB**\n\n`Load Image` → subgraph `source_panorama` → `Save GLB`\n\nUses **`MoGePanoramaInference`**: 12 perspective views → merge → mesh. Research: [microsoft/MoGe](https://github.com/microsoft/MoGe).\n\nSingle photo workflow: `3d_moge_perspective_to_mesh.json` (`MoGeInference` + depth/normal previews).\n\n### Pipeline\n1. Optional downscale if `auto_resize_input` and width > 2048\n2. Split equirect into **12** crops (90° FOV)\n3. MoGe on each crop (`panorama_split_resolution`, `inference_resolution`)\n4. **CPU merge** — stitch distance maps into one equirect depth (`panorama_merge_resolution`)\n5. `MoGePointMapToMesh` → GLB with vertex colors\n\nMerge disables per-view metric scale; MoGe-2 normals are not stitched. A long **“panorama merge”** progress phase is expected.\n\n### Input\n- **Equirectangular** 360°×180°, usually **2:1** (e.g. 2048×1024)\n- **One** image per run\n\n### Subgraph ports\n| Port | Meaning |\n|------|--------|\n| `source_panorama` | RGB equirect |\n| `inference_resolution` | MoGe detail **0–9** (default 5) |\n| `panorama_split_resolution` | Each crop side length — **GPU** (default 512) |\n| `panorama_merge_resolution` | Merge grid **long edge** — **CPU** (default 1024; never above input size) |\n| `inference_batch_size` | Views per forward, 12 total (default 4) |\n| `mesh_frame_index` | **0** for one panorama |\n| `mesh_decimation` | Vertex stride; **1** = full |\n| `mesh_gap_threshold` | Cull faces at depth jumps; **0** = off |\n| `mesh_texture` | Bake panorama into GLB |\n| `moge_model` | Checkpoint — **Model Link** |\n| `auto_resize_input` | Downscale when width > 2048 |\n\n**Split vs merge:** split = per-view inference sharpness; merge = seam / global depth quality. Example: 4096×2048 + merge **1920** → solve ~1920×960, then upsample to input size for meshing.\n\n### Tuning\n| Goal | Try |\n|------|-----|\n| Faster | resolution 3–4, split 512, merge 768 |\n| Quality | resolution 9, split 768+, merge 2048+, MoGe-2 |\n| GPU OOM | batch 1–2, split 512 |\n| Slow merge | lower `panorama_merge_resolution` |\n\n### Output\n`mesh` → **Save GLB** (default `3d/Moge`). Spherical glTF mesh — view from inside the sphere."
      ],
      "widgets_values_named": {
        "text": "## moge_panorama_to_mesh\n\n**Equirectangular (360°) panorama → textured GLB**\n\n`Load Image` → subgraph `source_panorama` → `Save GLB`\n\nUses **`MoGePanoramaInference`**: 12 perspective views → merge → mesh. Research: [microsoft/MoGe](https://github.com/microsoft/MoGe).\n\nSingle photo workflow: `3d_moge_perspective_to_mesh.json` (`MoGeInference` + depth/normal previews).\n\n### Pipeline\n1. Optional downscale if `auto_resize_input` and width > 2048\n2. Split equirect into **12** crops (90° FOV)\n3. MoGe on each crop (`panorama_split_resolution`, `inference_resolution`)\n4. **CPU merge** — stitch distance maps into one equirect depth (`panorama_merge_resolution`)\n5. `MoGePointMapToMesh` → GLB with vertex colors\n\nMerge disables per-view metric scale; MoGe-2 normals are not stitched. A long **“panorama merge”** progress phase is expected.\n\n### Input\n- **Equirectangular** 360°×180°, usually **2:1** (e.g. 2048×1024)\n- **One** image per run\n\n### Subgraph ports\n| Port | Meaning |\n|------|--------|\n| `source_panorama` | RGB equirect |\n| `inference_resolution` | MoGe detail **0–9** (default 5) |\n| `panorama_split_resolution` | Each crop side length — **GPU** (default 512) |\n| `panorama_merge_resolution` | Merge grid **long edge** — **CPU** (default 1024; never above input size) |\n| `inference_batch_size` | Views per forward, 12 total (default 4) |\n| `mesh_frame_index` | **0** for one panorama |\n| `mesh_decimation` | Vertex stride; **1** = full |\n| `mesh_gap_threshold` | Cull faces at depth jumps; **0** = off |\n| `mesh_texture` | Bake panorama into GLB |\n| `moge_model` | Checkpoint — **Model Link** |\n| `auto_resize_input` | Downscale when width > 2048 |\n\n**Split vs merge:** split = per-view inference sharpness; merge = seam / global depth quality. Example: 4096×2048 + merge **1920** → solve ~1920×960, then upsample to input size for meshing.\n\n### Tuning\n| Goal | Try |\n|------|-----|\n| Faster | resolution 3–4, split 512, merge 768 |\n| Quality | resolution 9, split 768+, merge 2048+, MoGe-2 |\n| GPU OOM | batch 1–2, split 512 |\n| Slow merge | lower `panorama_merge_resolution` |\n\n### Output\n`mesh` → **Save GLB** (default `3d/Moge`). Spherical glTF mesh — view from inside the sphere."
      },
      "color": "#222",
      "bgcolor": "#000"
    },
    {
      "id": 29,
      "type": "94961018-e012-4f04-9891-adc008a73d54",
      "pos": [
        -3410,
        4810
      ],
      "size": [
        350,
        400
      ],
      "flags": {},
      "order": 3,
      "mode": 0,
      "inputs": [
        {
          "name": "source_panorama",
          "type": "IMAGE",
          "link": 43
        },
        {
          "label": "auto_resize_input",
          "name": "auto_resize_input",
          "type": "BOOLEAN",
          "widget": {
            "name": "auto_resize_input"
          },
          "link": null
        }
      ],
      "outputs": [
        {
          "name": "mesh",
          "type": "MESH",
          "links": [
            44
          ]
        }
      ],
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.21.1",
        "enableTabs": false,
        "tabWidth": 65,
        "tabXOffset": 10,
        "hasSecondTab": false,
        "secondTabText": "Send Back",
        "secondTabOffset": 80,
        "secondTabWidth": 65,
        "previewExposures": []
      },
      "widgets_values": [
        5,
        512,
        1024,
        4,
        0,
        1,
        0.04,
        true,
        "moge_2_vitl_normal_fp16.safetensors",
        false
      ],
      "widgets_values_named": {
        "inference_resolution": 5,
        "panorama_split_resolution": 512,
        "panorama_merge_resolution": 1024,
        "inference_batch_size": 4,
        "mesh_frame_index": 0,
        "mesh_decimation": 1,
        "mesh_gap_threshold": 0.04,
        "mesh_texture": true,
        "moge_model": "moge_2_vitl_normal_fp16.safetensors",
        "auto_resize_input": false
      }
    },
    {
      "id": 7,
      "type": "SaveGLB",
      "pos": [
        -3030,
        4810
      ],
      "size": [
        510,
        390
      ],
      "flags": {},
      "order": 4,
      "mode": 0,
      "inputs": [
        {
          "name": "mesh",
          "type": "MESH,FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_OBJ,FILE_3D_FBX,FILE_3D_STL,FILE_3D_USDZ,FILE_3D_PLY,FILE_3D_SPLAT,FILE_3D_SPZ,FILE_3D_KSPLAT,FILE_3D_SPLAT_ANY,FILE_3D_POINT_CLOUD_ANY,FILE_3D",
          "link": 44
        }
      ],
      "outputs": [],
      "properties": {
        "Node name for S&R": "SaveGLB",
        "cnr_id": "comfy-core",
        "ver": "0.21.1",
        "enableTabs": false,
        "tabWidth": 65,
        "tabXOffset": 10,
        "hasSecondTab": false,
        "secondTabText": "Send Back",
        "secondTabOffset": 80,
        "secondTabWidth": 65,
        "Scene Config": {
          "showGrid": true,
          "backgroundColor": "#282828",
          "backgroundImage": "",
          "backgroundRenderMode": "tiled",
          "models": [
            {
              "position": {
                "x": 0.015758798389793105,
                "y": 0.6356153256090095,
                "z": 0.09070047938482517
              },
              "quaternion": {
                "x": 0,
                "y": 0,
                "z": 0,
                "w": 1
              },
              "scale": {
                "x": 0.2256986065557927,
                "y": 0.2256986065557927,
                "z": 0.2256986065557927
              }
            }
          ]
        },
        "Camera Config": {
          "cameraType": "perspective",
          "fov": 35,
          "state": {
            "position": {
              "x": -2.725224382020447,
              "y": 0.038079813066149715,
              "z": -3.091610096123842
            },
            "target": {
              "x": 0,
              "y": 1.617803491395856,
              "z": 0
            },
            "zoom": 1,
            "cameraType": "perspective",
            "quaternion": {
              "x": -0.0643255272282896,
              "y": 0.9198336511452256,
              "z": -0.1702511497276239,
              "w": -0.34753823787328525
            },
            "fov": 35,
            "aspect": 1.6643835616438356,
            "near": 0.01,
            "far": 10000,
            "frustum": {
              "left": -5,
              "right": 5,
              "top": 5,
              "bottom": -5
            }
          }
        },
        "Light Config": {
          "intensity": 3,
          "hdri": {
            "enabled": false,
            "hdriPath": "",
            "showAsBackground": false,
            "intensity": 1
          }
        },
        "Model Config": {
          "upDirection": "original",
          "materialMode": "original",
          "showSkeleton": false,
          "gizmo": {
            "enabled": false,
            "mode": "translate",
            "position": {
              "x": 0.015758798389793105,
              "y": 0.6356153256090095,
              "z": 0.09070047938482517
            },
            "rotation": {
              "x": 0,
              "y": 0,
              "z": 0
            },
            "scale": {
              "x": 0.2256986065557927,
              "y": 0.2256986065557927,
              "z": 0.2256986065557927
            }
          }
        }
      },
      "widgets_values": [
        "3d/Moge",
        ""
      ],
      "widgets_values_named": {
        "filename_prefix": "3d/Moge",
        "image": ""
      }
    }
  ],
  "links": [
    [
      43,
      28,
      0,
      29,
      0,
      "IMAGE"
    ],
    [
      44,
      29,
      0,
      7,
      0,
      "MESH"
    ]
  ],
  "groups": [],
  "definitions": {
    "subgraphs": [
      {
        "id": "94961018-e012-4f04-9891-adc008a73d54",
        "version": 1,
        "state": {
          "lastGroupId": 1,
          "lastNodeId": 38,
          "lastLinkId": 65,
          "lastRerouteId": 0
        },
        "revision": 0,
        "config": {},
        "name": "Panorama to Mesh (Moge)",
        "inputNode": {
          "id": -10,
          "bounding": [
            -5080,
            4920,
            208.892578125,
            268
          ]
        },
        "outputNode": {
          "id": -20,
          "bounding": [
            -2920,
            4861,
            128,
            68
          ]
        },
        "inputs": [
          {
            "id": "af0ac626-71ec-48b6-9191-1984cea03044",
            "name": "source_panorama",
            "type": "IMAGE",
            "linkIds": [
              57,
              59,
              61,
              65
            ],
            "localized_name": "source_panorama",
            "pos": [
              -4895.107421875,
              4944
            ]
          },
          {
            "id": "06321022-0a9d-46e5-a311-f4ab86667e4f",
            "name": "inference_resolution",
            "type": "INT",
            "linkIds": [
              45
            ],
            "pos": [
              -4895.107421875,
              4964
            ]
          },
          {
            "id": "d9ad9c0d-9f1e-4243-899b-53d266f2dfa1",
            "name": "panorama_split_resolution",
            "type": "INT",
            "linkIds": [
              46
            ],
            "pos": [
              -4895.107421875,
              4984
            ]
          },
          {
            "id": "558d680b-3aca-4c8e-aa54-635374e71ef2",
            "name": "panorama_merge_resolution",
            "type": "INT",
            "linkIds": [
              47
            ],
            "pos": [
              -4895.107421875,
              5004
            ]
          },
          {
            "id": "1822d07a-0397-4ccd-8f1c-1b0977453e5d",
            "name": "inference_batch_size",
            "type": "INT",
            "linkIds": [
              48
            ],
            "pos": [
              -4895.107421875,
              5024
            ]
          },
          {
            "id": "0e803cc1-3308-4315-b947-abbcac36c426",
            "name": "mesh_frame_index",
            "type": "INT",
            "linkIds": [
              49
            ],
            "pos": [
              -4895.107421875,
              5044
            ]
          },
          {
            "id": "ad350cfe-6fb5-4475-8f08-a687769b0299",
            "name": "mesh_decimation",
            "type": "INT",
            "linkIds": [
              50
            ],
            "pos": [
              -4895.107421875,
              5064
            ]
          },
          {
            "id": "f77b3ecc-7cd9-4b34-82fd-77bbd89e1a9f",
            "name": "mesh_gap_threshold",
            "type": "FLOAT",
            "linkIds": [
              51
            ],
            "pos": [
              -4895.107421875,
              5084
            ]
          },
          {
            "id": "fc22194c-ed8a-492a-99ce-8e0a788a3e25",
            "name": "mesh_texture",
            "type": "BOOLEAN",
            "linkIds": [
              52
            ],
            "pos": [
              -4895.107421875,
              5104
            ]
          },
          {
            "id": "bee65e3d-954d-4f33-9333-41eb4ee92bb9",
            "name": "moge_model",
            "type": "COMBO",
            "linkIds": [
              53
            ],
            "pos": [
              -4895.107421875,
              5124
            ]
          },
          {
            "id": "a92c5683-1dd9-4935-aa89-fd617ed25b66",
            "name": "auto_resize_input",
            "type": "BOOLEAN",
            "linkIds": [
              63
            ],
            "label": "auto_resize_input",
            "pos": [
              -4895.107421875,
              5144
            ]
          }
        ],
        "outputs": [
          {
            "id": "500db3df-e6b3-4b7f-a8e5-07c1b8df8853",
            "name": "mesh",
            "type": "MESH",
            "linkIds": [
              37
            ],
            "localized_name": "mesh",
            "pos": [
              -2896,
              4885
            ]
          }
        ],
        "widgets": [],
        "nodes": [
          {
            "id": 5,
            "type": "MoGePanoramaInference",
            "pos": [
              -3360,
              4780
            ],
            "size": [
              360,
              200
            ],
            "flags": {},
            "order": 0,
            "mode": 0,
            "inputs": [
              {
                "localized_name": "moge_model",
                "name": "moge_model",
                "type": "MOGE_MODEL",
                "link": 41
              },
              {
                "localized_name": "image",
                "name": "image",
                "type": "IMAGE",
                "link": 62
              },
              {
                "localized_name": "resolution_level",
                "name": "resolution_level",
                "type": "INT",
                "widget": {
                  "name": "resolution_level"
                },
                "link": 45
              },
              {
                "localized_name": "split_resolution",
                "name": "split_resolution",
                "type": "INT",
                "widget": {
                  "name": "split_resolution"
                },
                "link": 46
              },
              {
                "localized_name": "merge_resolution",
                "name": "merge_resolution",
                "type": "INT",
                "widget": {
                  "name": "merge_resolution"
                },
                "link": 47
              },
              {
                "localized_name": "batch_size",
                "name": "batch_size",
                "type": "INT",
                "widget": {
                  "name": "batch_size"
                },
                "link": 48
              }
            ],
            "outputs": [
              {
                "localized_name": "moge_geometry",
                "name": "moge_geometry",
                "type": "MOGE_GEOMETRY",
                "links": [
                  38
                ]
              }
            ],
            "properties": {
              "Node name for S&R": "MoGePanoramaInference",
              "cnr_id": "comfy-core",
              "ver": "0.21.1",
              "enableTabs": false,
              "tabWidth": 65,
              "tabXOffset": 10,
              "hasSecondTab": false,
              "secondTabText": "Send Back",
              "secondTabOffset": 80,
              "secondTabWidth": 65
            },
            "widgets_values": [
              5,
              512,
              1024,
              4,
              3
            ],
            "widgets_values_named": {
              "resolution_level": 5,
              "split_resolution": 512,
              "merge_resolution": 1024,
              "batch_size": 4,
              "refine_steps": 3
            }
          },
          {
            "id": 24,
            "type": "MoGePointMapToMesh",
            "pos": [
              -3350,
              5030
            ],
            "size": [
              370,
              180
            ],
            "flags": {},
            "order": 2,
            "mode": 0,
            "inputs": [
              {
                "localized_name": "moge_geometry",
                "name": "moge_geometry",
                "type": "MOGE_GEOMETRY",
                "link": 38
              },
              {
                "localized_name": "batch_index",
                "name": "batch_index",
                "type": "INT",
                "widget": {
                  "name": "batch_index"
                },
                "link": 49
              },
              {
                "localized_name": "decimation",
                "name": "decimation",
                "type": "INT",
                "widget": {
                  "name": "decimation"
                },
                "link": 50
              },
              {
                "localized_name": "discontinuity_threshold",
                "name": "discontinuity_threshold",
                "type": "FLOAT",
                "widget": {
                  "name": "discontinuity_threshold"
                },
                "link": 51
              },
              {
                "localized_name": "texture",
                "name": "texture",
                "type": "BOOLEAN",
                "widget": {
                  "name": "texture"
                },
                "link": 52
              }
            ],
            "outputs": [
              {
                "localized_name": "MESH",
                "name": "MESH",
                "type": "MESH",
                "links": [
                  37
                ]
              }
            ],
            "properties": {
              "Node name for S&R": "MoGePointMapToMesh",
              "cnr_id": "comfy-core",
              "ver": "0.21.1",
              "enableTabs": false,
              "tabWidth": 65,
              "tabXOffset": 10,
              "hasSecondTab": false,
              "secondTabText": "Send Back",
              "secondTabOffset": 80,
              "secondTabWidth": 65
            },
            "widgets_values": [
              0,
              1,
              0.04,
              true
            ],
            "widgets_values_named": {
              "batch_index": 0,
              "decimation": 1,
              "discontinuity_threshold": 0.04,
              "texture": true
            }
          },
          {
            "id": 8,
            "type": "LoadMoGeModel",
            "pos": [
              -3340,
              4610
            ],
            "size": [
              360,
              90
            ],
            "flags": {},
            "order": 1,
            "mode": 0,
            "inputs": [
              {
                "localized_name": "model_name",
                "name": "model_name",
                "type": "COMBO",
                "widget": {
                  "name": "model_name"
                },
                "link": 53
              }
            ],
            "outputs": [
              {
                "localized_name": "MOGE_MODEL",
                "name": "MOGE_MODEL",
                "type": "MOGE_MODEL",
                "links": [
                  41
                ]
              }
            ],
            "properties": {
              "Node name for S&R": "LoadMoGeModel",
              "cnr_id": "comfy-core",
              "ver": "0.21.1",
              "models": [
                {
                  "name": "moge_2_vitl_normal_fp16.safetensors",
                  "url": "https://huggingface.co/Comfy-Org/MoGe/resolve/main/geometry_estimation/moge_2_vitl_normal_fp16.safetensors",
                  "directory": "geometry_estimation"
                }
              ],
              "enableTabs": false,
              "tabWidth": 65,
              "tabXOffset": 10,
              "hasSecondTab": false,
              "secondTabText": "Send Back",
              "secondTabOffset": 80,
              "secondTabWidth": 65
            },
            "widgets_values": [
              "moge_2_vitl_normal_fp16.safetensors"
            ],
            "widgets_values_named": {
              "model_name": "moge_2_vitl_normal_fp16.safetensors"
            }
          },
          {
            "id": 30,
            "type": "ComfyMathExpression",
            "pos": [
              -4390,
              4620
            ],
            "size": [
              400,
              200
            ],
            "flags": {},
            "order": 3,
            "mode": 0,
            "inputs": [
              {
                "label": "a",
                "localized_name": "a",
                "name": "values.a",
                "type": "FLOAT,INT,BOOLEAN",
                "link": 54
              },
              {
                "localized_name": "b",
                "name": "values.b",
                "shape": 7,
                "type": "FLOAT,INT,BOOLEAN",
                "link": null
              }
            ],
            "outputs": [
              {
                "localized_name": "FLOAT",
                "name": "FLOAT",
                "type": "FLOAT",
                "links": null
              },
              {
                "localized_name": "INT",
                "name": "INT",
                "type": "INT",
                "links": null
              },
              {
                "localized_name": "BOOL",
                "name": "BOOL",
                "type": "BOOLEAN",
                "links": [
                  56
                ]
              }
            ],
            "properties": {
              "Node name for S&R": "ComfyMathExpression",
              "cnr_id": "comfy-core",
              "ver": "0.21.1",
              "enableTabs": false,
              "tabWidth": 65,
              "tabXOffset": 10,
              "hasSecondTab": false,
              "secondTabText": "Send Back",
              "secondTabOffset": 80,
              "secondTabWidth": 65
            },
            "widgets_values": [
              "a > 2048"
            ],
            "widgets_values_named": {
              "expression": "a > 2048"
            }
          },
          {
            "id": 31,
            "type": "GetImageSize",
            "pos": [
              -4650,
              4620
            ],
            "size": [
              230,
              160
            ],
            "flags": {},
            "order": 4,
            "mode": 0,
            "inputs": [
              {
                "localized_name": "image",
                "name": "image",
                "type": "IMAGE",
                "link": 57
              }
            ],
            "outputs": [
              {
                "localized_name": "width",
                "name": "width",
                "type": "INT",
                "links": [
                  54
                ]
              },
              {
                "localized_name": "height",
                "name": "height",
                "type": "INT",
                "links": null
              },
              {
                "localized_name": "batch_size",
                "name": "batch_size",
                "type": "INT",
                "links": null
              }
            ],
            "properties": {
              "Node name for S&R": "GetImageSize",
              "cnr_id": "comfy-core",
              "ver": "0.21.1",
              "enableTabs": false,
              "tabWidth": 65,
              "tabXOffset": 10,
              "hasSecondTab": false,
              "secondTabText": "Send Back",
              "secondTabOffset": 80,
              "secondTabWidth": 65
            }
          },
          {
            "id": 33,
            "type": "ComfySwitchNode",
            "pos": [
              -4250,
              4880
            ],
            "size": [
              270,
              130
            ],
            "flags": {},
            "order": 5,
            "mode": 0,
            "inputs": [
              {
                "localized_name": "on_false",
                "name": "on_false",
                "shape": 7,
                "type": "IMAGE",
                "link": 59
              },
              {
                "localized_name": "on_true",
                "name": "on_true",
                "shape": 7,
                "type": "IMAGE",
                "link": 64
              },
              {
                "localized_name": "switch",
                "name": "switch",
                "type": "BOOLEAN",
                "widget": {
                  "name": "switch"
                },
                "link": 56
              }
            ],
            "outputs": [
              {
                "localized_name": "output",
                "name": "output",
                "type": "IMAGE",
                "links": [
                  60
                ]
              }
            ],
            "properties": {
              "Node name for S&R": "ComfySwitchNode",
              "cnr_id": "comfy-core",
              "ver": "0.21.1",
              "enableTabs": false,
              "tabWidth": 65,
              "tabXOffset": 10,
              "hasSecondTab": false,
              "secondTabText": "Send Back",
              "secondTabOffset": 80,
              "secondTabWidth": 65
            },
            "widgets_values": [
              false
            ],
            "widgets_values_named": {
              "switch": false
            }
          },
          {
            "id": 34,
            "type": "ComfySwitchNode",
            "pos": [
              -3730,
              4770
            ],
            "size": [
              270,
              130
            ],
            "flags": {},
            "order": 6,
            "mode": 0,
            "inputs": [
              {
                "localized_name": "on_false",
                "name": "on_false",
                "shape": 7,
                "type": "IMAGE",
                "link": 61
              },
              {
                "localized_name": "on_true",
                "name": "on_true",
                "shape": 7,
                "type": "IMAGE",
                "link": 60
              },
              {
                "localized_name": "switch",
                "name": "switch",
                "type": "BOOLEAN",
                "widget": {
                  "name": "switch"
                },
                "link": 63
              }
            ],
            "outputs": [
              {
                "localized_name": "output",
                "name": "output",
                "type": "IMAGE",
                "links": [
                  62
                ]
              }
            ],
            "properties": {
              "Node name for S&R": "ComfySwitchNode",
              "cnr_id": "comfy-core",
              "ver": "0.21.1",
              "enableTabs": false,
              "tabWidth": 65,
              "tabXOffset": 10,
              "hasSecondTab": false,
              "secondTabText": "Send Back",
              "secondTabOffset": 80,
              "secondTabWidth": 65
            },
            "widgets_values": [
              false
            ],
            "widgets_values_named": {
              "switch": false
            }
          },
          {
            "id": 38,
            "type": "ResizeImageMaskNode",
            "pos": [
              -4660,
              4910
            ],
            "size": [
              270,
              110
            ],
            "flags": {},
            "order": 7,
            "mode": 0,
            "inputs": [
              {
                "localized_name": "input",
                "name": "input",
                "type": "IMAGE,MASK",
                "link": 65
              }
            ],
            "outputs": [
              {
                "localized_name": "resized",
                "name": "resized",
                "type": "IMAGE",
                "links": [
                  64
                ]
              }
            ],
            "properties": {
              "Node name for S&R": "ResizeImageMaskNode"
            },
            "widgets_values": [
              "scale longer dimension",
              2048,
              "lanczos"
            ],
            "widgets_values_named": {
              "resize_type": "scale longer dimension",
              "resize_type.longer_size": 2048,
              "scale_method": "lanczos"
            }
          }
        ],
        "groups": [
          {
            "id": 1,
            "title": "auto_resize_if_width_gt_2048",
            "bounding": [
              -4670,
              4550,
              690,
              280
            ],
            "color": "#3f789e",
            "flags": {}
          }
        ],
        "links": [
          {
            "id": 41,
            "origin_id": 8,
            "origin_slot": 0,
            "target_id": 5,
            "target_slot": 0,
            "type": "MOGE_MODEL"
          },
          {
            "id": 38,
            "origin_id": 5,
            "origin_slot": 0,
            "target_id": 24,
            "target_slot": 0,
            "type": "MOGE_GEOMETRY"
          },
          {
            "id": 37,
            "origin_id": 24,
            "origin_slot": 0,
            "target_id": -20,
            "target_slot": 0,
            "type": "MESH"
          },
          {
            "id": 45,
            "origin_id": -10,
            "origin_slot": 1,
            "target_id": 5,
            "target_slot": 2,
            "type": "INT"
          },
          {
            "id": 46,
            "origin_id": -10,
            "origin_slot": 2,
            "target_id": 5,
            "target_slot": 3,
            "type": "INT"
          },
          {
            "id": 47,
            "origin_id": -10,
            "origin_slot": 3,
            "target_id": 5,
            "target_slot": 4,
            "type": "INT"
          },
          {
            "id": 48,
            "origin_id": -10,
            "origin_slot": 4,
            "target_id": 5,
            "target_slot": 5,
            "type": "INT"
          },
          {
            "id": 49,
            "origin_id": -10,
            "origin_slot": 5,
            "target_id": 24,
            "target_slot": 1,
            "type": "INT"
          },
          {
            "id": 50,
            "origin_id": -10,
            "origin_slot": 6,
            "target_id": 24,
            "target_slot": 2,
            "type": "INT"
          },
          {
            "id": 51,
            "origin_id": -10,
            "origin_slot": 7,
            "target_id": 24,
            "target_slot": 3,
            "type": "FLOAT"
          },
          {
            "id": 52,
            "origin_id": -10,
            "origin_slot": 8,
            "target_id": 24,
            "target_slot": 4,
            "type": "BOOLEAN"
          },
          {
            "id": 53,
            "origin_id": -10,
            "origin_slot": 9,
            "target_id": 8,
            "target_slot": 0,
            "type": "COMBO"
          },
          {
            "id": 56,
            "origin_id": 30,
            "origin_slot": 2,
            "target_id": 33,
            "target_slot": 2,
            "type": "BOOLEAN"
          },
          {
            "id": 57,
            "origin_id": -10,
            "origin_slot": 0,
            "target_id": 31,
            "target_slot": 0,
            "type": "IMAGE"
          },
          {
            "id": 59,
            "origin_id": -10,
            "origin_slot": 0,
            "target_id": 33,
            "target_slot": 0,
            "type": "IMAGE"
          },
          {
            "id": 60,
            "origin_id": 33,
            "origin_slot": 0,
            "target_id": 34,
            "target_slot": 1,
            "type": "IMAGE"
          },
          {
            "id": 61,
            "origin_id": -10,
            "origin_slot": 0,
            "target_id": 34,
            "target_slot": 0,
            "type": "IMAGE"
          },
          {
            "id": 62,
            "origin_id": 34,
            "origin_slot": 0,
            "target_id": 5,
            "target_slot": 1,
            "type": "IMAGE"
          },
          {
            "id": 63,
            "origin_id": -10,
            "origin_slot": 10,
            "target_id": 34,
            "target_slot": 2,
            "type": "BOOLEAN"
          },
          {
            "id": 64,
            "origin_id": 38,
            "origin_slot": 0,
            "target_id": 33,
            "target_slot": 1,
            "type": "IMAGE"
          },
          {
            "id": 54,
            "origin_id": 31,
            "origin_slot": 0,
            "target_id": 30,
            "target_slot": 0,
            "type": "INT"
          },
          {
            "id": 65,
            "origin_id": -10,
            "origin_slot": 0,
            "target_id": 38,
            "target_slot": 0,
            "type": "IMAGE"
          }
        ],
        "extra": {}
      }
    ]
  },
  "config": {},
  "extra": {
    "ds": {
      "scale": 0.4031242556137056,
      "offset": [
        5453.01061877041,
        -3942.068871703164
      ]
    },
    "frontendVersion": "1.54.15",
    "VHS_latentpreview": false,
    "VHS_latentpreviewrate": 0,
    "VHS_MetadataImage": true,
    "VHS_KeepIntermediate": true
  },
  "version": 0.4
}