工作流 /
3D 模型 /
MoGe:全景到网格

MoGe:全景到网格
MoGe: Panorama to Mesh
上传一张等距柱状投影的360°全景图像,生成带有顶点颜色的纹理化GLB网格。
3D 模型
5 个节点 1 个输入 19 次使用 ComfyUI ≥ 0.22.0 ComfyUI 41 KB
需要的权重
这个工作流引用了 1 个权重文件,其中 1 个能在本站模型库里找到。
moge_2_vitl_normal_fp16.safetensors
在模型库查看
节点构成
MarkdownNote
× 2
LoadImage
× 1
94961018-e012-4f04-9891-adc008a73d54
× 1
SaveGLB
× 1
官方标注的模型
MoGe
工作流 JSON
和上面「下载工作流 JSON」是同一份文件。
1{
2 "id": "b8855bb2-4ecb-4d67-94cc-c373b4db93dd",
3 "revision": 0,
4 "last_node_id": 38,
5 "last_link_id": 65,
6 "nodes": [
7 {
8 "id": 28,
9 "type": "LoadImage",
10 "pos": [
11 -3740,
12 4810
13 ],
14 "size": [
15 290,
16 370
17 ],
18 "flags": [],
19 "order": 0,
20 "mode": 0,
21 "inputs": [],
22 "outputs": [
23 {
24 "name": "IMAGE",
25 "type": "IMAGE",
26 "links": [
27 43
28 ]
29 },
30 {
31 "name": "MASK",
32 "type": "MASK",
33 "links": null
34 }
35 ],
36 "properties": {
37 "Node name for S&R": "LoadImage",
38 "cnr_id": "comfy-core",
39 "ver": "0.21.1",
40 "enableTabs": false,
41 "tabWidth": 65,
42 "tabXOffset": 10,
43 "hasSecondTab": false,
44 "secondTabText": "Send Back",
45 "secondTabOffset": 80,
46 "secondTabWidth": 65
47 },
48 "widgets_values": [
49 "lego_street_panorama.png",
50 "image"
51 ],
52 "widgets_values_named": {
53 "image": "lego_street_panorama.png",
54 "upload": "image"
55 }
56 },
57 {
58 "id": 36,
59 "type": "MarkdownNote",
60 "pos": [
61 -4860,
62 4810
63 ],
64 "size": [
65 500,
66 1140
67 ],
68 "flags": [],
69 "order": 1,
70 "mode": 0,
71 "inputs": [],
72 "outputs": [],
73 "title": "Model Link",
74 "properties": [],
75 "widgets_values": [
76 "## 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"
77 ],
78 "widgets_values_named": {
79 "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"
80 },
81 "color": "#222",
82 "bgcolor": "#000"
83 },
84 {
85 "id": 35,
86 "type": "MarkdownNote",
87 "pos": [
88 -4310,
89 4810
90 ],
91 "size": [
92 510,
93 1150
94 ],
95 "flags": [],
96 "order": 2,
97 "mode": 0,
98 "inputs": [],
99 "outputs": [],
100 "title": "Workflow",
101 "properties": [],
102 "widgets_values": [
103 "## 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."
104 ],
105 "widgets_values_named": {
106 "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."
107 },
108 "color": "#222",
109 "bgcolor": "#000"
110 },
111 {
112 "id": 29,
113 "type": "94961018-e012-4f04-9891-adc008a73d54",
114 "pos": [
115 -3410,
116 4810
117 ],
118 "size": [
119 350,
120 400
121 ],
122 "flags": [],
123 "order": 3,
124 "mode": 0,
125 "inputs": [
126 {
127 "name": "source_panorama",
128 "type": "IMAGE",
129 "link": 43
130 },
131 {
132 "label": "auto_resize_input",
133 "name": "auto_resize_input",
134 "type": "BOOLEAN",
135 "widget": {
136 "name": "auto_resize_input"
137 },
138 "link": null
139 }
140 ],
141 "outputs": [
142 {
143 "name": "mesh",
144 "type": "MESH",
145 "links": [
146 44
147 ]
148 }
149 ],
150 "properties": {
151 "cnr_id": "comfy-core",
152 "ver": "0.21.1",
153 "enableTabs": false,
154 "tabWidth": 65,
155 "tabXOffset": 10,
156 "hasSecondTab": false,
157 "secondTabText": "Send Back",
158 "secondTabOffset": 80,
159 "secondTabWidth": 65,
160 "previewExposures": []
161 },
162 "widgets_values": [
163 5,
164 512,
165 1024,
166 4,
167 0,
168 1,
169 0.04,
170 true,
171 "moge_2_vitl_normal_fp16.safetensors",
172 false
173 ],
174 "widgets_values_named": {
175 "inference_resolution": 5,
176 "panorama_split_resolution": 512,
177 "panorama_merge_resolution": 1024,
178 "inference_batch_size": 4,
179 "mesh_frame_index": 0,
180 "mesh_decimation": 1,
181 "mesh_gap_threshold": 0.04,
182 "mesh_texture": true,
183 "moge_model": "moge_2_vitl_normal_fp16.safetensors",
184 "auto_resize_input": false
185 }
186 },
187 {
188 "id": 7,
189 "type": "SaveGLB",
190 "pos": [
191 -3030,
192 4810
193 ],
194 "size": [
195 510,
196 390
197 ],
198 "flags": [],
199 "order": 4,
200 "mode": 0,
201 "inputs": [
202 {
203 "name": "mesh",
204 "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",
205 "link": 44
206 }
207 ],
208 "outputs": [],
209 "properties": {
210 "Node name for S&R": "SaveGLB",
211 "cnr_id": "comfy-core",
212 "ver": "0.21.1",
213 "enableTabs": false,
214 "tabWidth": 65,
215 "tabXOffset": 10,
216 "hasSecondTab": false,
217 "secondTabText": "Send Back",
218 "secondTabOffset": 80,
219 "secondTabWidth": 65,
220 "Scene Config": {
221 "showGrid": true,
222 "backgroundColor": "#282828",
223 "backgroundImage": "",
224 "backgroundRenderMode": "tiled",
225 "models": [
226 {
227 "position": {
228 "x": 0.015758798389793105,
229 "y": 0.6356153256090095,
230 "z": 0.09070047938482517
231 },
232 "quaternion": {
233 "x": 0,
234 "y": 0,
235 "z": 0,
236 "w": 1
237 },
238 "scale": {
239 "x": 0.2256986065557927,
240 "y": 0.2256986065557927,
241 "z": 0.2256986065557927
242 }
243 }
244 ]
245 },
246 "Camera Config": {
247 "cameraType": "perspective",
248 "fov": 35,
249 "state": {
250 "position": {
251 "x": -2.725224382020447,
252 "y": 0.038079813066149715,
253 "z": -3.091610096123842
254 },
255 "target": {
256 "x": 0,
257 "y": 1.617803491395856,
258 "z": 0
259 },
260 "zoom": 1,
261 "cameraType": "perspective",
262 "quaternion": {
263 "x": -0.0643255272282896,
264 "y": 0.9198336511452256,
265 "z": -0.1702511497276239,
266 "w": -0.34753823787328525
267 },
268 "fov": 35,
269 "aspect": 1.6643835616438356,
270 "near": 0.01,
271 "far": 10000,
272 "frustum": {
273 "left": -5,
274 "right": 5,
275 "top": 5,
276 "bottom": -5
277 }
278 }
279 },
280 "Light Config": {
281 "intensity": 3,
282 "hdri": {
283 "enabled": false,
284 "hdriPath": "",
285 "showAsBackground": false,
286 "intensity": 1
287 }
288 },
289 "Model Config": {
290 "upDirection": "original",
291 "materialMode": "original",
292 "showSkeleton": false,
293 "gizmo": {
294 "enabled": false,
295 "mode": "translate",
296 "position": {
297 "x": 0.015758798389793105,
298 "y": 0.6356153256090095,
299 "z": 0.09070047938482517
300 },
301 "rotation": {
302 "x": 0,
303 "y": 0,
304 "z": 0
305 },
306 "scale": {
307 "x": 0.2256986065557927,
308 "y": 0.2256986065557927,
309 "z": 0.2256986065557927
310 }
311 }
312 }
313 },
314 "widgets_values": [
315 "3d/Moge",
316 ""
317 ],
318 "widgets_values_named": {
319 "filename_prefix": "3d/Moge",
320 "image": ""
321 }
322 }
323 ],
324 "links": [
325 [
326 43,
327 28,
328 0,
329 29,
330 0,
331 "IMAGE"
332 ],
333 [
334 44,
335 29,
336 0,
337 7,
338 0,
339 "MESH"
340 ]
341 ],
342 "groups": [],
343 "definitions": {
344 "subgraphs": [
345 {
346 "id": "94961018-e012-4f04-9891-adc008a73d54",
347 "version": 1,
348 "state": {
349 "lastGroupId": 1,
350 "lastNodeId": 38,
351 "lastLinkId": 65,
352 "lastRerouteId": 0
353 },
354 "revision": 0,
355 "config": [],
356 "name": "Panorama to Mesh (Moge)",
357 "inputNode": {
358 "id": -10,
359 "bounding": [
360 -5080,
361 4920,
362 208.892578125,
363 268
364 ]
365 },
366 "outputNode": {
367 "id": -20,
368 "bounding": [
369 -2920,
370 4861,
371 128,
372 68
373 ]
374 },
375 "inputs": [
376 {
377 "id": "af0ac626-71ec-48b6-9191-1984cea03044",
378 "name": "source_panorama",
379 "type": "IMAGE",
380 "linkIds": [
381 57,
382 59,
383 61,
384 65
385 ],
386 "localized_name": "source_panorama",
387 "pos": [
388 -4895.107421875,
389 4944
390 ]
391 },
392 {
393 "id": "06321022-0a9d-46e5-a311-f4ab86667e4f",
394 "name": "inference_resolution",
395 "type": "INT",
396 "linkIds": [
397 45
398 ],
399 "pos": [
400 -4895.107421875,
401 4964
402 ]
403 },
404 {
405 "id": "d9ad9c0d-9f1e-4243-899b-53d266f2dfa1",
406 "name": "panorama_split_resolution",
407 "type": "INT",
408 "linkIds": [
409 46
410 ],
411 "pos": [
412 -4895.107421875,
413 4984
414 ]
415 },
416 {
417 "id": "558d680b-3aca-4c8e-aa54-635374e71ef2",
418 "name": "panorama_merge_resolution",
419 "type": "INT",
420 "linkIds": [
421 47
422 ],
423 "pos": [
424 -4895.107421875,
425 5004
426 ]
427 },
428 {
429 "id": "1822d07a-0397-4ccd-8f1c-1b0977453e5d",
430 "name": "inference_batch_size",
431 "type": "INT",
432 "linkIds": [
433 48
434 ],
435 "pos": [
436 -4895.107421875,
437 5024
438 ]
439 },
440 {
441 "id": "0e803cc1-3308-4315-b947-abbcac36c426",
442 "name": "mesh_frame_index",
443 "type": "INT",
444 "linkIds": [
445 49
446 ],
447 "pos": [
448 -4895.107421875,
449 5044
450 ]
451 },
452 {
453 "id": "ad350cfe-6fb5-4475-8f08-a687769b0299",
454 "name": "mesh_decimation",
455 "type": "INT",
456 "linkIds": [
457 50
458 ],
459 "pos": [
460 -4895.107421875,
461 5064
462 ]
463 },
464 {
465 "id": "f77b3ecc-7cd9-4b34-82fd-77bbd89e1a9f",
466 "name": "mesh_gap_threshold",
467 "type": "FLOAT",
468 "linkIds": [
469 51
470 ],
471 "pos": [
472 -4895.107421875,
473 5084
474 ]
475 },
476 {
477 "id": "fc22194c-ed8a-492a-99ce-8e0a788a3e25",
478 "name": "mesh_texture",
479 "type": "BOOLEAN",
480 "linkIds": [
481 52
482 ],
483 "pos": [
484 -4895.107421875,
485 5104
486 ]
487 },
488 {
489 "id": "bee65e3d-954d-4f33-9333-41eb4ee92bb9",
490 "name": "moge_model",
491 "type": "COMBO",
492 "linkIds": [
493 53
494 ],
495 "pos": [
496 -4895.107421875,
497 5124
498 ]
499 },
500 {
501 "id": "a92c5683-1dd9-4935-aa89-fd617ed25b66",
502 "name": "auto_resize_input",
503 "type": "BOOLEAN",
504 "linkIds": [
505 63
506 ],
507 "label": "auto_resize_input",
508 "pos": [
509 -4895.107421875,
510 5144
511 ]
512 }
513 ],
514 "outputs": [
515 {
516 "id": "500db3df-e6b3-4b7f-a8e5-07c1b8df8853",
517 "name": "mesh",
518 "type": "MESH",
519 "linkIds": [
520 37
521 ],
522 "localized_name": "mesh",
523 "pos": [
524 -2896,
525 4885
526 ]
527 }
528 ],
529 "widgets": [],
530 "nodes": [
531 {
532 "id": 5,
533 "type": "MoGePanoramaInference",
534 "pos": [
535 -3360,
536 4780
537 ],
538 "size": [
539 360,
540 200
541 ],
542 "flags": [],
543 "order": 0,
544 "mode": 0,
545 "inputs": [
546 {
547 "localized_name": "moge_model",
548 "name": "moge_model",
549 "type": "MOGE_MODEL",
550 "link": 41
551 },
552 {
553 "localized_name": "image",
554 "name": "image",
555 "type": "IMAGE",
556 "link": 62
557 },
558 {
559 "localized_name": "resolution_level",
560 "name": "resolution_level",
561 "type": "INT",
562 "widget": {
563 "name": "resolution_level"
564 },
565 "link": 45
566 },
567 {
568 "localized_name": "split_resolution",
569 "name": "split_resolution",
570 "type": "INT",
571 "widget": {
572 "name": "split_resolution"
573 },
574 "link": 46
575 },
576 {
577 "localized_name": "merge_resolution",
578 "name": "merge_resolution",
579 "type": "INT",
580 "widget": {
581 "name": "merge_resolution"
582 },
583 "link": 47
584 },
585 {
586 "localized_name": "batch_size",
587 "name": "batch_size",
588 "type": "INT",
589 "widget": {
590 "name": "batch_size"
591 },
592 "link": 48
593 }
594 ],
595 "outputs": [
596 {
597 "localized_name": "moge_geometry",
598 "name": "moge_geometry",
599 "type": "MOGE_GEOMETRY",
600 "links": [
601 38
602 ]
603 }
604 ],
605 "properties": {
606 "Node name for S&R": "MoGePanoramaInference",
607 "cnr_id": "comfy-core",
608 "ver": "0.21.1",
609 "enableTabs": false,
610 "tabWidth": 65,
611 "tabXOffset": 10,
612 "hasSecondTab": false,
613 "secondTabText": "Send Back",
614 "secondTabOffset": 80,
615 "secondTabWidth": 65
616 },
617 "widgets_values": [
618 5,
619 512,
620 1024,
621 4,
622 3
623 ],
624 "widgets_values_named": {
625 "resolution_level": 5,
626 "split_resolution": 512,
627 "merge_resolution": 1024,
628 "batch_size": 4,
629 "refine_steps": 3
630 }
631 },
632 {
633 "id": 24,
634 "type": "MoGePointMapToMesh",
635 "pos": [
636 -3350,
637 5030
638 ],
639 "size": [
640 370,
641 180
642 ],
643 "flags": [],
644 "order": 2,
645 "mode": 0,
646 "inputs": [
647 {
648 "localized_name": "moge_geometry",
649 "name": "moge_geometry",
650 "type": "MOGE_GEOMETRY",
651 "link": 38
652 },
653 {
654 "localized_name": "batch_index",
655 "name": "batch_index",
656 "type": "INT",
657 "widget": {
658 "name": "batch_index"
659 },
660 "link": 49
661 },
662 {
663 "localized_name": "decimation",
664 "name": "decimation",
665 "type": "INT",
666 "widget": {
667 "name": "decimation"
668 },
669 "link": 50
670 },
671 {
672 "localized_name": "discontinuity_threshold",
673 "name": "discontinuity_threshold",
674 "type": "FLOAT",
675 "widget": {
676 "name": "discontinuity_threshold"
677 },
678 "link": 51
679 },
680 {
681 "localized_name": "texture",
682 "name": "texture",
683 "type": "BOOLEAN",
684 "widget": {
685 "name": "texture"
686 },
687 "link": 52
688 }
689 ],
690 "outputs": [
691 {
692 "localized_name": "MESH",
693 "name": "MESH",
694 "type": "MESH",
695 "links": [
696 37
697 ]
698 }
699 ],
700 "properties": {
701 "Node name for S&R": "MoGePointMapToMesh",
702 "cnr_id": "comfy-core",
703 "ver": "0.21.1",
704 "enableTabs": false,
705 "tabWidth": 65,
706 "tabXOffset": 10,
707 "hasSecondTab": false,
708 "secondTabText": "Send Back",
709 "secondTabOffset": 80,
710 "secondTabWidth": 65
711 },
712 "widgets_values": [
713 0,
714 1,
715 0.04,
716 true
717 ],
718 "widgets_values_named": {
719 "batch_index": 0,
720 "decimation": 1,
721 "discontinuity_threshold": 0.04,
722 "texture": true
723 }
724 },
725 {
726 "id": 8,
727 "type": "LoadMoGeModel",
728 "pos": [
729 -3340,
730 4610
731 ],
732 "size": [
733 360,
734 90
735 ],
736 "flags": [],
737 "order": 1,
738 "mode": 0,
739 "inputs": [
740 {
741 "localized_name": "model_name",
742 "name": "model_name",
743 "type": "COMBO",
744 "widget": {
745 "name": "model_name"
746 },
747 "link": 53
748 }
749 ],
750 "outputs": [
751 {
752 "localized_name": "MOGE_MODEL",
753 "name": "MOGE_MODEL",
754 "type": "MOGE_MODEL",
755 "links": [
756 41
757 ]
758 }
759 ],
760 "properties": {
761 "Node name for S&R": "LoadMoGeModel",
762 "cnr_id": "comfy-core",
763 "ver": "0.21.1",
764 "models": [
765 {
766 "name": "moge_2_vitl_normal_fp16.safetensors",
767 "url": "https://huggingface.co/Comfy-Org/MoGe/resolve/main/geometry_estimation/moge_2_vitl_normal_fp16.safetensors",
768 "directory": "geometry_estimation"
769 }
770 ],
771 "enableTabs": false,
772 "tabWidth": 65,
773 "tabXOffset": 10,
774 "hasSecondTab": false,
775 "secondTabText": "Send Back",
776 "secondTabOffset": 80,
777 "secondTabWidth": 65
778 },
779 "widgets_values": [
780 "moge_2_vitl_normal_fp16.safetensors"
781 ],
782 "widgets_values_named": {
783 "model_name": "moge_2_vitl_normal_fp16.safetensors"
784 }
785 },
786 {
787 "id": 30,
788 "type": "ComfyMathExpression",
789 "pos": [
790 -4390,
791 4620
792 ],
793 "size": [
794 400,
795 200
796 ],
797 "flags": [],
798 "order": 3,
799 "mode": 0,
800 "inputs": [
801 {
802 "label": "a",
803 "localized_name": "a",
804 "name": "values.a",
805 "type": "FLOAT,INT,BOOLEAN",
806 "link": 54
807 },
808 {
809 "localized_name": "b",
810 "name": "values.b",
811 "shape": 7,
812 "type": "FLOAT,INT,BOOLEAN",
813 "link": null
814 }
815 ],
816 "outputs": [
817 {
818 "localized_name": "FLOAT",
819 "name": "FLOAT",
820 "type": "FLOAT",
821 "links": null
822 },
823 {
824 "localized_name": "INT",
825 "name": "INT",
826 "type": "INT",
827 "links": null
828 },
829 {
830 "localized_name": "BOOL",
831 "name": "BOOL",
832 "type": "BOOLEAN",
833 "links": [
834 56
835 ]
836 }
837 ],
838 "properties": {
839 "Node name for S&R": "ComfyMathExpression",
840 "cnr_id": "comfy-core",
841 "ver": "0.21.1",
842 "enableTabs": false,
843 "tabWidth": 65,
844 "tabXOffset": 10,
845 "hasSecondTab": false,
846 "secondTabText": "Send Back",
847 "secondTabOffset": 80,
848 "secondTabWidth": 65
849 },
850 "widgets_values": [
851 "a > 2048"
852 ],
853 "widgets_values_named": {
854 "expression": "a > 2048"
855 }
856 },
857 {
858 "id": 31,
859 "type": "GetImageSize",
860 "pos": [
861 -4650,
862 4620
863 ],
864 "size": [
865 230,
866 160
867 ],
868 "flags": [],
869 "order": 4,
870 "mode": 0,
871 "inputs": [
872 {
873 "localized_name": "image",
874 "name": "image",
875 "type": "IMAGE",
876 "link": 57
877 }
878 ],
879 "outputs": [
880 {
881 "localized_name": "width",
882 "name": "width",
883 "type": "INT",
884 "links": [
885 54
886 ]
887 },
888 {
889 "localized_name": "height",
890 "name": "height",
891 "type": "INT",
892 "links": null
893 },
894 {
895 "localized_name": "batch_size",
896 "name": "batch_size",
897 "type": "INT",
898 "links": null
899 }
900 ],
901 "properties": {
902 "Node name for S&R": "GetImageSize",
903 "cnr_id": "comfy-core",
904 "ver": "0.21.1",
905 "enableTabs": false,
906 "tabWidth": 65,
907 "tabXOffset": 10,
908 "hasSecondTab": false,
909 "secondTabText": "Send Back",
910 "secondTabOffset": 80,
911 "secondTabWidth": 65
912 }
913 },
914 {
915 "id": 33,
916 "type": "ComfySwitchNode",
917 "pos": [
918 -4250,
919 4880
920 ],
921 "size": [
922 270,
923 130
924 ],
925 "flags": [],
926 "order": 5,
927 "mode": 0,
928 "inputs": [
929 {
930 "localized_name": "on_false",
931 "name": "on_false",
932 "shape": 7,
933 "type": "IMAGE",
934 "link": 59
935 },
936 {
937 "localized_name": "on_true",
938 "name": "on_true",
939 "shape": 7,
940 "type": "IMAGE",
941 "link": 64
942 },
943 {
944 "localized_name": "switch",
945 "name": "switch",
946 "type": "BOOLEAN",
947 "widget": {
948 "name": "switch"
949 },
950 "link": 56
951 }
952 ],
953 "outputs": [
954 {
955 "localized_name": "output",
956 "name": "output",
957 "type": "IMAGE",
958 "links": [
959 60
960 ]
961 }
962 ],
963 "properties": {
964 "Node name for S&R": "ComfySwitchNode",
965 "cnr_id": "comfy-core",
966 "ver": "0.21.1",
967 "enableTabs": false,
968 "tabWidth": 65,
969 "tabXOffset": 10,
970 "hasSecondTab": false,
971 "secondTabText": "Send Back",
972 "secondTabOffset": 80,
973 "secondTabWidth": 65
974 },
975 "widgets_values": [
976 false
977 ],
978 "widgets_values_named": {
979 "switch": false
980 }
981 },
982 {
983 "id": 34,
984 "type": "ComfySwitchNode",
985 "pos": [
986 -3730,
987 4770
988 ],
989 "size": [
990 270,
991 130
992 ],
993 "flags": [],
994 "order": 6,
995 "mode": 0,
996 "inputs": [
997 {
998 "localized_name": "on_false",
999 "name": "on_false",
1000 "shape": 7,
1001 "type": "IMAGE",
1002 "link": 61
1003 },
1004 {
1005 "localized_name": "on_true",
1006 "name": "on_true",
1007 "shape": 7,
1008 "type": "IMAGE",
1009 "link": 60
1010 },
1011 {
1012 "localized_name": "switch",
1013 "name": "switch",
1014 "type": "BOOLEAN",
1015 "widget": {
1016 "name": "switch"
1017 },
1018 "link": 63
1019 }
1020 ],
1021 "outputs": [
1022 {
1023 "localized_name": "output",
1024 "name": "output",
1025 "type": "IMAGE",
1026 "links": [
1027 62
1028 ]
1029 }
1030 ],
1031 "properties": {
1032 "Node name for S&R": "ComfySwitchNode",
1033 "cnr_id": "comfy-core",
1034 "ver": "0.21.1",
1035 "enableTabs": false,
1036 "tabWidth": 65,
1037 "tabXOffset": 10,
1038 "hasSecondTab": false,
1039 "secondTabText": "Send Back",
1040 "secondTabOffset": 80,
1041 "secondTabWidth": 65
1042 },
1043 "widgets_values": [
1044 false
1045 ],
1046 "widgets_values_named": {
1047 "switch": false
1048 }
1049 },
1050 {
1051 "id": 38,
1052 "type": "ResizeImageMaskNode",
1053 "pos": [
1054 -4660,
1055 4910
1056 ],
1057 "size": [
1058 270,
1059 110
1060 ],
1061 "flags": [],
1062 "order": 7,
1063 "mode": 0,
1064 "inputs": [
1065 {
1066 "localized_name": "input",
1067 "name": "input",
1068 "type": "IMAGE,MASK",
1069 "link": 65
1070 }
1071 ],
1072 "outputs": [
1073 {
1074 "localized_name": "resized",
1075 "name": "resized",
1076 "type": "IMAGE",
1077 "links": [
1078 64
1079 ]
1080 }
1081 ],
1082 "properties": {
1083 "Node name for S&R": "ResizeImageMaskNode"
1084 },
1085 "widgets_values": [
1086 "scale longer dimension",
1087 2048,
1088 "lanczos"
1089 ],
1090 "widgets_values_named": {
1091 "resize_type": "scale longer dimension",
1092 "resize_type.longer_size": 2048,
1093 "scale_method": "lanczos"
1094 }
1095 }
1096 ],
1097 "groups": [
1098 {
1099 "id": 1,
1100 "title": "auto_resize_if_width_gt_2048",
1101 "bounding": [
1102 -4670,
1103 4550,
1104 690,
1105 280
1106 ],
1107 "color": "#3f789e",
1108 "flags": []
1109 }
1110 ],
1111 "links": [
1112 {
1113 "id": 41,
1114 "origin_id": 8,
1115 "origin_slot": 0,
1116 "target_id": 5,
1117 "target_slot": 0,
1118 "type": "MOGE_MODEL"
1119 },
1120 {
1121 "id": 38,
1122 "origin_id": 5,
1123 "origin_slot": 0,
1124 "target_id": 24,
1125 "target_slot": 0,
1126 "type": "MOGE_GEOMETRY"
1127 },
1128 {
1129 "id": 37,
1130 "origin_id": 24,
1131 "origin_slot": 0,
1132 "target_id": -20,
1133 "target_slot": 0,
1134 "type": "MESH"
1135 },
1136 {
1137 "id": 45,
1138 "origin_id": -10,
1139 "origin_slot": 1,
1140 "target_id": 5,
1141 "target_slot": 2,
1142 "type": "INT"
1143 },
1144 {
1145 "id": 46,
1146 "origin_id": -10,
1147 "origin_slot": 2,
1148 "target_id": 5,
1149 "target_slot": 3,
1150 "type": "INT"
1151 },
1152 {
1153 "id": 47,
1154 "origin_id": -10,
1155 "origin_slot": 3,
1156 "target_id": 5,
1157 "target_slot": 4,
1158 "type": "INT"
1159 },
1160 {
1161 "id": 48,
1162 "origin_id": -10,
1163 "origin_slot": 4,
1164 "target_id": 5,
1165 "target_slot": 5,
1166 "type": "INT"
1167 },
1168 {
1169 "id": 49,
1170 "origin_id": -10,
1171 "origin_slot": 5,
1172 "target_id": 24,
1173 "target_slot": 1,
1174 "type": "INT"
1175 },
1176 {
1177 "id": 50,
1178 "origin_id": -10,
1179 "origin_slot": 6,
1180 "target_id": 24,
1181 "target_slot": 2,
1182 "type": "INT"
1183 },
1184 {
1185 "id": 51,
1186 "origin_id": -10,
1187 "origin_slot": 7,
1188 "target_id": 24,
1189 "target_slot": 3,
1190 "type": "FLOAT"
1191 },
1192 {
1193 "id": 52,
1194 "origin_id": -10,
1195 "origin_slot": 8,
1196 "target_id": 24,
1197 "target_slot": 4,
1198 "type": "BOOLEAN"
1199 },
1200 {
1201 "id": 53,
1202 "origin_id": -10,
1203 "origin_slot": 9,
1204 "target_id": 8,
1205 "target_slot": 0,
1206 "type": "COMBO"
1207 },
1208 {
1209 "id": 56,
1210 "origin_id": 30,
1211 "origin_slot": 2,
1212 "target_id": 33,
1213 "target_slot": 2,
1214 "type": "BOOLEAN"
1215 },
1216 {
1217 "id": 57,
1218 "origin_id": -10,
1219 "origin_slot": 0,
1220 "target_id": 31,
1221 "target_slot": 0,
1222 "type": "IMAGE"
1223 },
1224 {
1225 "id": 59,
1226 "origin_id": -10,
1227 "origin_slot": 0,
1228 "target_id": 33,
1229 "target_slot": 0,
1230 "type": "IMAGE"
1231 },
1232 {
1233 "id": 60,
1234 "origin_id": 33,
1235 "origin_slot": 0,
1236 "target_id": 34,
1237 "target_slot": 1,
1238 "type": "IMAGE"
1239 },
1240 {
1241 "id": 61,
1242 "origin_id": -10,
1243 "origin_slot": 0,
1244 "target_id": 34,
1245 "target_slot": 0,
1246 "type": "IMAGE"
1247 },
1248 {
1249 "id": 62,
1250 "origin_id": 34,
1251 "origin_slot": 0,
1252 "target_id": 5,
1253 "target_slot": 1,
1254 "type": "IMAGE"
1255 },
1256 {
1257 "id": 63,
1258 "origin_id": -10,
1259 "origin_slot": 10,
1260 "target_id": 34,
1261 "target_slot": 2,
1262 "type": "BOOLEAN"
1263 },
1264 {
1265 "id": 64,
1266 "origin_id": 38,
1267 "origin_slot": 0,
1268 "target_id": 33,
1269 "target_slot": 1,
1270 "type": "IMAGE"
1271 },
1272 {
1273 "id": 54,
1274 "origin_id": 31,
1275 "origin_slot": 0,
1276 "target_id": 30,
1277 "target_slot": 0,
1278 "type": "INT"
1279 },
1280 {
1281 "id": 65,
1282 "origin_id": -10,
1283 "origin_slot": 0,
1284 "target_id": 38,
1285 "target_slot": 0,
1286 "type": "IMAGE"
1287 }
1288 ],
1289 "extra": []
1290 }
1291 ]
1292 },
1293 "config": [],
1294 "extra": {
1295 "ds": {
1296 "scale": 0.4031242556137056,
1297 "offset": [
1298 5453.01061877041,
1299 -3942.068871703164
1300 ]
1301 },
1302 "frontendVersion": "1.54.15",
1303 "VHS_latentpreview": false,
1304 "VHS_latentpreviewrate": 0,
1305 "VHS_MetadataImage": true,
1306 "VHS_KeepIntermediate": true
1307 },
1308 "version": 0.4
1309}