ComfyPilotComfyPilot
工作流 / 3D 模型 / MoGe:透视几何估计
MoGe:透视几何估计

MoGe:透视几何估计

MoGe: Perspective Geometry Estimation

上传图片以估算其透视几何。从输入生成3D深度图和表面法线。

3D 模型 7 个节点 1 个输入 63 次使用 ComfyUI ≥ 0.22.0 ComfyUI 43 KB

下载工作流 JSON 查看官方来源

下载后把文件拖进 ComfyUI 窗口即可打开。

需要的权重

这个工作流引用了 1 个权重文件,其中 1 个能在本站模型库里找到。

moge_2_vitl_normal_fp16.safetensors 在模型库查看

节点构成

MarkdownNote × 2
PreviewImage × 2
LoadImage × 1
SaveGLB × 1
936dfaf2-575a-48b5-9e0c-df391319d11f × 1

官方标注的模型

MoGe

工作流 JSON

和上面「下载工作流 JSON」是同一份文件。

1{
2 "id": "b8855bb2-4ecb-4d67-94cc-c373b4db93dd",
3 "revision": 0,
4 "last_node_id": 69,
5 "last_link_id": 91,
6 "nodes": [
7 {
8 "id": 9,
9 "type": "LoadImage",
10 "pos": [
11 -4390,
12 5000
13 ],
14 "size": [
15 390,
16 440
17 ],
18 "flags": [],
19 "order": 0,
20 "mode": 0,
21 "inputs": [],
22 "outputs": [
23 {
24 "name": "IMAGE",
25 "type": "IMAGE",
26 "links": [
27 84
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 "modern_living_room.png",
50 "image"
51 ],
52 "widgets_values_named": {
53 "image": "modern_living_room.png",
54 "upload": "image"
55 }
56 },
57 {
58 "id": 50,
59 "type": "MarkdownNote",
60 "pos": [
61 -4940,
62 5000
63 ],
64 "size": [
65 510,
66 840
67 ],
68 "flags": [],
69 "order": 1,
70 "mode": 0,
71 "inputs": [],
72 "outputs": [],
73 "properties": [],
74 "widgets_values": [
75 "## moge_image_to_mesh\n\n**Input Assets**\n- [modern_living_room.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/modern_living_room.png) — required workflow input (`input/modern_living_room.png`)\n\n**Single perspective photo -> textured GLB**\n\n`Load Image` -> `Geometry Estimation (MoGe)` -> `Save GLB`\n\n### Main flow\n- Runs MoGe inference on one source image\n- Converts the inferred geometry into a mesh\n- Exposes OpenGL and DirectX normal previews\n\n### Inputs\n| Control | Meaning |\n|--------|--------|\n| `source_image` | Input RGB image |\n| `inference_resolution` | MoGe detail level `0-9`; higher is slower but keeps more detail |\n| `inference_batch_size` | Passed to `MoGeInference` batch size; use `1` for a single still image |\n| `mesh_frame_index` | Batch/frame index used when converting geometry to mesh; use `0` for one image |\n| `mesh_decimation` | Mesh decimation step; `1` keeps the densest mesh |\n| `mesh_gap_threshold` | Removes faces across large depth discontinuities; `0` disables the filter |\n| `mesh_texture` | Bakes source image colors into the exported GLB |\n| `moge_model` | Model checkpoint loaded by `LoadMoGeModel`; see `Model Link` |\n| `auto_resize_input` | Enables pre-inference resize logic for large images |\n\n### Auto-resize logic\nWhen `auto_resize_input` is enabled, the subgraph checks image width first:\n- width `> 2048`: resize by longer edge to `2048` before inference\n- width `<= 2048`: keep the original image\n\nWhen `auto_resize_input` is disabled, the original image always goes into inference.\n\n### Outputs\n- `mesh`: mesh output for `Save GLB`\n- `normal_opengl`: preview rendered through `MoGeRender`\n- `normal_directx`: preview rendered through `MoGeRender`\n"
76 ],
77 "widgets_values_named": {
78 "text": "## moge_image_to_mesh\n\n**Input Assets**\n- [modern_living_room.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/modern_living_room.png) — required workflow input (`input/modern_living_room.png`)\n\n**Single perspective photo -> textured GLB**\n\n`Load Image` -> `Geometry Estimation (MoGe)` -> `Save GLB`\n\n### Main flow\n- Runs MoGe inference on one source image\n- Converts the inferred geometry into a mesh\n- Exposes OpenGL and DirectX normal previews\n\n### Inputs\n| Control | Meaning |\n|--------|--------|\n| `source_image` | Input RGB image |\n| `inference_resolution` | MoGe detail level `0-9`; higher is slower but keeps more detail |\n| `inference_batch_size` | Passed to `MoGeInference` batch size; use `1` for a single still image |\n| `mesh_frame_index` | Batch/frame index used when converting geometry to mesh; use `0` for one image |\n| `mesh_decimation` | Mesh decimation step; `1` keeps the densest mesh |\n| `mesh_gap_threshold` | Removes faces across large depth discontinuities; `0` disables the filter |\n| `mesh_texture` | Bakes source image colors into the exported GLB |\n| `moge_model` | Model checkpoint loaded by `LoadMoGeModel`; see `Model Link` |\n| `auto_resize_input` | Enables pre-inference resize logic for large images |\n\n### Auto-resize logic\nWhen `auto_resize_input` is enabled, the subgraph checks image width first:\n- width `> 2048`: resize by longer edge to `2048` before inference\n- width `<= 2048`: keep the original image\n\nWhen `auto_resize_input` is disabled, the original image always goes into inference.\n\n### Outputs\n- `mesh`: mesh output for `Save GLB`\n- `normal_opengl`: preview rendered through `MoGeRender`\n- `normal_directx`: preview rendered through `MoGeRender`\n"
79 },
80 "color": "#222",
81 "bgcolor": "#000"
82 },
83 {
84 "id": 46,
85 "type": "PreviewImage",
86 "pos": [
87 -2950,
88 5000
89 ],
90 "size": [
91 350,
92 490
93 ],
94 "flags": [],
95 "order": 5,
96 "mode": 0,
97 "inputs": [
98 {
99 "name": "images",
100 "type": "IMAGE",
101 "link": 88
102 }
103 ],
104 "outputs": [
105 {
106 "name": "images",
107 "type": "IMAGE",
108 "links": null
109 }
110 ],
111 "title": "Preview Image (normal_opengl)",
112 "properties": {
113 "Node name for S&R": "PreviewImage (normal_opengl)",
114 "cnr_id": "comfy-core",
115 "ver": "0.21.1",
116 "enableTabs": false,
117 "tabWidth": 65,
118 "tabXOffset": 10,
119 "hasSecondTab": false,
120 "secondTabText": "Send Back",
121 "secondTabOffset": 80,
122 "secondTabWidth": 65
123 }
124 },
125 {
126 "id": 47,
127 "type": "PreviewImage",
128 "pos": [
129 -2570,
130 5000
131 ],
132 "size": [
133 350,
134 490
135 ],
136 "flags": [],
137 "order": 6,
138 "mode": 0,
139 "inputs": [
140 {
141 "name": "images",
142 "type": "IMAGE",
143 "link": 89
144 }
145 ],
146 "outputs": [
147 {
148 "name": "images",
149 "type": "IMAGE",
150 "links": null
151 }
152 ],
153 "title": "Preview Image (normal_directx)",
154 "properties": {
155 "Node name for S&R": "PreviewImage (normal_directx)",
156 "cnr_id": "comfy-core",
157 "ver": "0.21.1",
158 "enableTabs": false,
159 "tabWidth": 65,
160 "tabXOffset": 10,
161 "hasSecondTab": false,
162 "secondTabText": "Send Back",
163 "secondTabOffset": 80,
164 "secondTabWidth": 65
165 }
166 },
167 {
168 "id": 21,
169 "type": "SaveGLB",
170 "pos": [
171 -3470,
172 5000
173 ],
174 "size": [
175 490,
176 480
177 ],
178 "flags": [],
179 "order": 4,
180 "mode": 0,
181 "inputs": [
182 {
183 "name": "mesh",
184 "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",
185 "link": 87
186 }
187 ],
188 "outputs": [],
189 "properties": {
190 "Node name for S&R": "SaveGLB",
191 "cnr_id": "comfy-core",
192 "ver": "0.21.1",
193 "enableTabs": false,
194 "tabWidth": 65,
195 "tabXOffset": 10,
196 "hasSecondTab": false,
197 "secondTabText": "Send Back",
198 "secondTabOffset": 80,
199 "secondTabWidth": 65,
200 "Scene Config": {
201 "showGrid": true,
202 "backgroundColor": "#282828",
203 "backgroundImage": "",
204 "backgroundRenderMode": "tiled",
205 "models": [
206 {
207 "position": {
208 "x": 0,
209 "y": 0,
210 "z": 0
211 },
212 "quaternion": {
213 "x": 0,
214 "y": 0,
215 "z": 0,
216 "w": 1
217 },
218 "scale": {
219 "x": 1,
220 "y": 1,
221 "z": 1
222 }
223 }
224 ]
225 },
226 "Camera Config": {
227 "cameraType": "perspective",
228 "fov": 35,
229 "state": {
230 "position": {
231 "x": 1.1000152510214236,
232 "y": 2.714650284264146,
233 "z": 6.958331752663242
234 },
235 "target": {
236 "x": -0.16036242564092565,
237 "y": 1.3121342154705629,
238 "z": 0.06791863401947583
239 },
240 "zoom": 1,
241 "cameraType": "perspective"
242 }
243 },
244 "Light Config": {
245 "intensity": 2.4000000000000004,
246 "hdri": {
247 "enabled": false,
248 "hdriPath": "",
249 "showAsBackground": false,
250 "intensity": 1
251 }
252 },
253 "Model Config": {
254 "upDirection": "original",
255 "materialMode": "original",
256 "showSkeleton": false,
257 "gizmo": {
258 "enabled": false,
259 "mode": "translate",
260 "position": {
261 "x": 0,
262 "y": 0,
263 "z": 0
264 },
265 "rotation": {
266 "x": 0,
267 "y": 0,
268 "z": 0
269 },
270 "scale": {
271 "x": 1,
272 "y": 1,
273 "z": 1
274 }
275 }
276 },
277 "Last Time Model File": "3d/25b04b6945123d64f83a0806c7ace4863dd1ef395dfc0b5c62ee2af0cd44f12d.glb",
278 "Last Time Model Folder": "output"
279 },
280 "widgets_values": [
281 "3d/ComfyUI"
282 ],
283 "widgets_values_named": {
284 "filename_prefix": "3d/ComfyUI"
285 }
286 },
287 {
288 "id": 52,
289 "type": "MarkdownNote",
290 "pos": [
291 -5670,
292 5000
293 ],
294 "size": [
295 700,
296 840
297 ],
298 "flags": [],
299 "order": 2,
300 "mode": 0,
301 "inputs": [],
302 "outputs": [],
303 "title": "Model Link",
304 "properties": [],
305 "widgets_values": [
306 "## MoGe — models & downloads\n\n**ModelScope mirrors** (alternative repo location)\n\n- [ModelScope:Comfy-Org/MoGe](https://modelscope.cn/models/Comfy-Org/MoGe)\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### Downloads\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## 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\nGuide: [Subgraph](https://docs.comfy.org/interface/features/subgraph)\n\n### Issues\nUpdate ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)), then install models.\n- Runtime: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n"
307 ],
308 "widgets_values_named": {
309 "text": "## MoGe — models & downloads\n\n**ModelScope mirrors** (alternative repo location)\n\n- [ModelScope:Comfy-Org/MoGe](https://modelscope.cn/models/Comfy-Org/MoGe)\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### Downloads\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## 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\nGuide: [Subgraph](https://docs.comfy.org/interface/features/subgraph)\n\n### Issues\nUpdate ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)), then install models.\n- Runtime: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n"
310 },
311 "color": "#222",
312 "bgcolor": "#000"
313 },
314 {
315 "id": 67,
316 "type": "936dfaf2-575a-48b5-9e0c-df391319d11f",
317 "pos": [
318 -3950,
319 5000
320 ],
321 "size": [
322 430,
323 480
324 ],
325 "flags": [],
326 "order": 3,
327 "mode": 0,
328 "inputs": [
329 {
330 "label": "auto_resize_input",
331 "name": "switch",
332 "type": "BOOLEAN",
333 "widget": {
334 "name": "switch"
335 },
336 "link": null
337 },
338 {
339 "name": "source_image",
340 "type": "IMAGE",
341 "link": 84
342 }
343 ],
344 "outputs": [
345 {
346 "name": "mesh",
347 "type": "MESH",
348 "links": [
349 87
350 ]
351 },
352 {
353 "name": "normal_opengl",
354 "type": "IMAGE",
355 "links": [
356 88
357 ]
358 },
359 {
360 "name": "normal_directx",
361 "type": "IMAGE",
362 "links": [
363 89
364 ]
365 }
366 ],
367 "properties": {
368 "cnr_id": "comfy-core",
369 "ver": "0.21.1",
370 "enableTabs": false,
371 "tabWidth": 65,
372 "tabXOffset": 10,
373 "hasSecondTab": false,
374 "secondTabText": "Send Back",
375 "secondTabOffset": 80,
376 "secondTabWidth": 65,
377 "previewExposures": []
378 },
379 "widgets_values": [
380 9,
381 4,
382 0,
383 1,
384 0.04,
385 true,
386 true,
387 "moge_2_vitl_normal_fp16.safetensors"
388 ],
389 "widgets_values_named": {
390 "inference_resolution": 9,
391 "inference_batch_size": 4,
392 "mesh_frame_index": 0,
393 "mesh_decimation": 1,
394 "mesh_gap_threshold": 0.04,
395 "mesh_texture": true,
396 "switch": true,
397 "moge_model": "moge_2_vitl_normal_fp16.safetensors"
398 }
399 }
400 ],
401 "links": [
402 [
403 87,
404 67,
405 0,
406 21,
407 0,
408 "MESH"
409 ],
410 [
411 88,
412 67,
413 1,
414 46,
415 0,
416 "IMAGE"
417 ],
418 [
419 89,
420 67,
421 2,
422 47,
423 0,
424 "IMAGE"
425 ],
426 [
427 84,
428 9,
429 0,
430 67,
431 1,
432 "IMAGE"
433 ]
434 ],
435 "groups": [],
436 "definitions": {
437 "subgraphs": [
438 {
439 "id": "936dfaf2-575a-48b5-9e0c-df391319d11f",
440 "version": 1,
441 "state": {
442 "lastGroupId": 1,
443 "lastNodeId": 69,
444 "lastLinkId": 91,
445 "lastRerouteId": 0
446 },
447 "revision": 0,
448 "config": [],
449 "name": "Geometry Estimation (MoGe)",
450 "inputNode": {
451 "id": -10,
452 "bounding": [
453 -5270,
454 5170,
455 167.337890625,
456 228
457 ]
458 },
459 "outputNode": {
460 "id": -20,
461 "bounding": [
462 -3090,
463 4966,
464 131.51953125,
465 108
466 ]
467 },
468 "inputs": [
469 {
470 "id": "06eefa21-8e60-49f3-9a34-35b081f4ae52",
471 "name": "inference_resolution",
472 "type": "INT",
473 "linkIds": [
474 73
475 ],
476 "localized_name": "inference_resolution",
477 "pos": [
478 -5126.662109375,
479 5214
480 ]
481 },
482 {
483 "id": "616638fe-f603-4d10-bae9-fc87c134380f",
484 "name": "inference_batch_size",
485 "type": "INT",
486 "linkIds": [
487 74
488 ],
489 "localized_name": "inference_batch_size",
490 "pos": [
491 -5126.662109375,
492 5234
493 ]
494 },
495 {
496 "id": "fcacfca9-7927-4c38-94da-8ab22256325f",
497 "name": "mesh_frame_index",
498 "type": "INT",
499 "linkIds": [
500 75
501 ],
502 "localized_name": "mesh_frame_index",
503 "pos": [
504 -5126.662109375,
505 5254
506 ]
507 },
508 {
509 "id": "acbfe7f9-1b69-42c1-8614-4ccf54b28d4e",
510 "name": "mesh_decimation",
511 "type": "INT",
512 "linkIds": [
513 76
514 ],
515 "localized_name": "mesh_decimation",
516 "pos": [
517 -5126.662109375,
518 5274
519 ]
520 },
521 {
522 "id": "cd20f9a7-3a0a-4c4c-98d7-96f423867b87",
523 "name": "mesh_gap_threshold",
524 "type": "FLOAT",
525 "linkIds": [
526 77
527 ],
528 "localized_name": "mesh_gap_threshold",
529 "pos": [
530 -5126.662109375,
531 5294
532 ]
533 },
534 {
535 "id": "6f5c15f7-7f77-4fc9-b47b-3514467b06b6",
536 "name": "mesh_texture",
537 "type": "BOOLEAN",
538 "linkIds": [
539 78
540 ],
541 "localized_name": "mesh_texture",
542 "pos": [
543 -5126.662109375,
544 5314
545 ]
546 },
547 {
548 "id": "badf1be1-53c6-4fc1-b5cd-79ad3daf1674",
549 "name": "switch",
550 "type": "BOOLEAN",
551 "linkIds": [
552 83
553 ],
554 "label": "auto_resize_input",
555 "pos": [
556 -5126.662109375,
557 5354
558 ]
559 },
560 {
561 "id": "65694805-186e-4181-a721-df8b5af49d31",
562 "name": "moge_model",
563 "type": "COMBO",
564 "linkIds": [
565 79
566 ],
567 "localized_name": "moge_model",
568 "pos": [
569 -5126.662109375,
570 5334
571 ]
572 },
573 {
574 "id": "cc8ce79d-ba20-4a25-a51c-c2afcd35e520",
575 "name": "source_image",
576 "type": "IMAGE",
577 "linkIds": [
578 48,
579 55,
580 56,
581 82
582 ],
583 "localized_name": "source_image",
584 "pos": [
585 -5126.662109375,
586 5194
587 ]
588 }
589 ],
590 "outputs": [
591 {
592 "id": "3c616ea0-9a4c-4cff-a405-662320229df0",
593 "name": "mesh",
594 "type": "MESH",
595 "linkIds": [
596 34
597 ],
598 "localized_name": "mesh",
599 "pos": [
600 -3066,
601 4990
602 ]
603 },
604 {
605 "id": "ff85a763-b7f7-4bcc-9b1d-a4eaf55ad2f9",
606 "name": "normal_opengl",
607 "type": "IMAGE",
608 "linkIds": [
609 62
610 ],
611 "localized_name": "normal_opengl",
612 "pos": [
613 -3066,
614 5010
615 ]
616 },
617 {
618 "id": "26b3f88a-0ba0-4d4d-9c7d-0ad76106c844",
619 "name": "normal_directx",
620 "type": "IMAGE",
621 "linkIds": [
622 63
623 ],
624 "localized_name": "normal_directx",
625 "pos": [
626 -3066,
627 5030
628 ]
629 }
630 ],
631 "widgets": [],
632 "nodes": [
633 {
634 "id": 54,
635 "type": "MoGePointMapToMesh",
636 "pos": [
637 -3440,
638 5220
639 ],
640 "size": [
641 290,
642 154.00002232304328
643 ],
644 "flags": [],
645 "order": 0,
646 "mode": 0,
647 "inputs": [
648 {
649 "localized_name": "moge_geometry",
650 "name": "moge_geometry",
651 "type": "MOGE_GEOMETRY",
652 "link": 33
653 },
654 {
655 "localized_name": "batch_index",
656 "name": "batch_index",
657 "type": "INT",
658 "widget": {
659 "name": "batch_index"
660 },
661 "link": 75
662 },
663 {
664 "localized_name": "decimation",
665 "name": "decimation",
666 "type": "INT",
667 "widget": {
668 "name": "decimation"
669 },
670 "link": 76
671 },
672 {
673 "localized_name": "discontinuity_threshold",
674 "name": "discontinuity_threshold",
675 "type": "FLOAT",
676 "widget": {
677 "name": "discontinuity_threshold"
678 },
679 "link": 77
680 },
681 {
682 "localized_name": "texture",
683 "name": "texture",
684 "type": "BOOLEAN",
685 "widget": {
686 "name": "texture"
687 },
688 "link": 78
689 }
690 ],
691 "outputs": [
692 {
693 "localized_name": "MESH",
694 "name": "MESH",
695 "type": "MESH",
696 "links": [
697 34
698 ]
699 }
700 ],
701 "properties": {
702 "Node name for S&R": "MoGePointMapToMesh",
703 "cnr_id": "comfy-core",
704 "ver": "0.21.1",
705 "enableTabs": false,
706 "tabWidth": 65,
707 "tabXOffset": 10,
708 "hasSecondTab": false,
709 "secondTabText": "Send Back",
710 "secondTabOffset": 80,
711 "secondTabWidth": 65
712 },
713 "widgets_values": [
714 0,
715 1,
716 0.04,
717 true
718 ],
719 "widgets_values_named": {
720 "batch_index": 0,
721 "decimation": 1,
722 "discontinuity_threshold": 0.04,
723 "texture": true
724 }
725 },
726 {
727 "id": 55,
728 "type": "MoGeInference",
729 "pos": [
730 -3790,
731 5180
732 ],
733 "size": [
734 270,
735 149.999946076193
736 ],
737 "flags": [],
738 "order": 1,
739 "mode": 0,
740 "inputs": [
741 {
742 "localized_name": "moge_model",
743 "name": "moge_model",
744 "type": "MOGE_MODEL",
745 "link": 58
746 },
747 {
748 "localized_name": "image",
749 "name": "image",
750 "type": "IMAGE",
751 "link": 81
752 },
753 {
754 "localized_name": "resolution_level",
755 "name": "resolution_level",
756 "type": "INT",
757 "widget": {
758 "name": "resolution_level"
759 },
760 "link": 73
761 },
762 {
763 "localized_name": "batch_size",
764 "name": "batch_size",
765 "type": "INT",
766 "widget": {
767 "name": "batch_size"
768 },
769 "link": 74
770 }
771 ],
772 "outputs": [
773 {
774 "localized_name": "moge_geometry",
775 "name": "moge_geometry",
776 "type": "MOGE_GEOMETRY",
777 "links": [
778 33,
779 59,
780 60
781 ]
782 }
783 ],
784 "properties": {
785 "Node name for S&R": "MoGeInference",
786 "cnr_id": "comfy-core",
787 "ver": "0.21.1",
788 "enableTabs": false,
789 "tabWidth": 65,
790 "tabXOffset": 10,
791 "hasSecondTab": false,
792 "secondTabText": "Send Back",
793 "secondTabOffset": 80,
794 "secondTabWidth": 65
795 },
796 "widgets_values": [
797 9,
798 0,
799 4,
800 true,
801 true,
802 3
803 ],
804 "widgets_values_named": {
805 "resolution_level": 9,
806 "fov_x_degrees": 0,
807 "batch_size": 4,
808 "force_projection": true,
809 "apply_mask": true,
810 "refine_steps": 3
811 }
812 },
813 {
814 "id": 58,
815 "type": "LoadMoGeModel",
816 "pos": [
817 -4180,
818 4910
819 ],
820 "size": [
821 270,
822 140
823 ],
824 "flags": [],
825 "order": 2,
826 "mode": 0,
827 "inputs": [
828 {
829 "localized_name": "model_name",
830 "name": "model_name",
831 "type": "COMBO",
832 "widget": {
833 "name": "model_name"
834 },
835 "link": 79
836 }
837 ],
838 "outputs": [
839 {
840 "localized_name": "MOGE_MODEL",
841 "name": "MOGE_MODEL",
842 "type": "MOGE_MODEL",
843 "links": [
844 58
845 ]
846 }
847 ],
848 "properties": {
849 "Node name for S&R": "LoadMoGeModel",
850 "cnr_id": "comfy-core",
851 "ver": "0.21.1",
852 "models": [
853 {
854 "name": "moge_2_vitl_normal_fp16.safetensors",
855 "url": "https://huggingface.co/Comfy-Org/MoGe/resolve/main/geometry_estimation/moge_2_vitl_normal_fp16.safetensors",
856 "directory": "geometry_estimation"
857 }
858 ],
859 "enableTabs": false,
860 "tabWidth": 65,
861 "tabXOffset": 10,
862 "hasSecondTab": false,
863 "secondTabText": "Send Back",
864 "secondTabOffset": 80,
865 "secondTabWidth": 65
866 },
867 "widgets_values": [
868 "moge_2_vitl_normal_fp16.safetensors"
869 ],
870 "widgets_values_named": {
871 "model_name": "moge_2_vitl_normal_fp16.safetensors"
872 }
873 },
874 {
875 "id": 59,
876 "type": "ComfyMathExpression",
877 "pos": [
878 -4720,
879 4910
880 ],
881 "size": [
882 400,
883 200
884 ],
885 "flags": [],
886 "order": 3,
887 "mode": 0,
888 "inputs": [
889 {
890 "label": "a",
891 "localized_name": "a",
892 "name": "values.a",
893 "type": "FLOAT,INT,BOOLEAN",
894 "link": 49
895 },
896 {
897 "label": "b",
898 "localized_name": "b",
899 "name": "values.b",
900 "shape": 7,
901 "type": "FLOAT,INT,BOOLEAN",
902 "link": null
903 }
904 ],
905 "outputs": [
906 {
907 "localized_name": "FLOAT",
908 "name": "FLOAT",
909 "type": "FLOAT",
910 "links": null
911 },
912 {
913 "localized_name": "INT",
914 "name": "INT",
915 "type": "INT",
916 "links": null
917 },
918 {
919 "localized_name": "BOOL",
920 "name": "BOOL",
921 "type": "BOOLEAN",
922 "links": [
923 53
924 ]
925 }
926 ],
927 "properties": {
928 "Node name for S&R": "ComfyMathExpression",
929 "cnr_id": "comfy-core",
930 "ver": "0.21.1",
931 "enableTabs": false,
932 "tabWidth": 65,
933 "tabXOffset": 10,
934 "hasSecondTab": false,
935 "secondTabText": "Send Back",
936 "secondTabOffset": 80,
937 "secondTabWidth": 65
938 },
939 "widgets_values": [
940 "a > 2048"
941 ],
942 "widgets_values_named": {
943 "expression": "a > 2048"
944 }
945 },
946 {
947 "id": 60,
948 "type": "GetImageSize",
949 "pos": [
950 -4980,
951 4910
952 ],
953 "size": [
954 230,
955 160
956 ],
957 "flags": [],
958 "order": 4,
959 "mode": 0,
960 "inputs": [
961 {
962 "localized_name": "image",
963 "name": "image",
964 "type": "IMAGE",
965 "link": 48
966 }
967 ],
968 "outputs": [
969 {
970 "localized_name": "width",
971 "name": "width",
972 "type": "INT",
973 "links": [
974 49
975 ]
976 },
977 {
978 "localized_name": "height",
979 "name": "height",
980 "type": "INT",
981 "links": null
982 },
983 {
984 "localized_name": "batch_size",
985 "name": "batch_size",
986 "type": "INT",
987 "links": null
988 }
989 ],
990 "properties": {
991 "Node name for S&R": "GetImageSize",
992 "cnr_id": "comfy-core",
993 "ver": "0.21.1",
994 "enableTabs": false,
995 "tabWidth": 65,
996 "tabXOffset": 10,
997 "hasSecondTab": false,
998 "secondTabText": "Send Back",
999 "secondTabOffset": 80,
1000 "secondTabWidth": 65
1001 }
1002 },
1003 {
1004 "id": 61,
1005 "type": "ImageScaleToMaxDimension",
1006 "pos": [
1007 -4650,
1008 5210
1009 ],
1010 "size": [
1011 310,
1012 110
1013 ],
1014 "flags": [],
1015 "order": 5,
1016 "mode": 0,
1017 "inputs": [
1018 {
1019 "localized_name": "image",
1020 "name": "image",
1021 "type": "IMAGE",
1022 "link": 55
1023 }
1024 ],
1025 "outputs": [
1026 {
1027 "localized_name": "IMAGE",
1028 "name": "IMAGE",
1029 "type": "IMAGE",
1030 "links": [
1031 54
1032 ]
1033 }
1034 ],
1035 "properties": {
1036 "Node name for S&R": "ImageScaleToMaxDimension",
1037 "cnr_id": "comfy-core",
1038 "enableTabs": false,
1039 "tabWidth": 65,
1040 "tabXOffset": 10,
1041 "hasSecondTab": false,
1042 "secondTabText": "Send Back",
1043 "secondTabOffset": 80,
1044 "secondTabWidth": 65
1045 },
1046 "widgets_values": [
1047 "lanczos",
1048 2048
1049 ],
1050 "widgets_values_named": {
1051 "upscale_method": "lanczos",
1052 "largest_size": 2048
1053 }
1054 },
1055 {
1056 "id": 62,
1057 "type": "ComfySwitchNode",
1058 "pos": [
1059 -4180,
1060 5120
1061 ],
1062 "size": [
1063 270,
1064 130
1065 ],
1066 "flags": [],
1067 "order": 6,
1068 "mode": 0,
1069 "inputs": [
1070 {
1071 "localized_name": "on_false",
1072 "name": "on_false",
1073 "shape": 7,
1074 "type": "IMAGE",
1075 "link": 56
1076 },
1077 {
1078 "localized_name": "on_true",
1079 "name": "on_true",
1080 "shape": 7,
1081 "type": "IMAGE",
1082 "link": 54
1083 },
1084 {
1085 "localized_name": "switch",
1086 "name": "switch",
1087 "type": "BOOLEAN",
1088 "widget": {
1089 "name": "switch"
1090 },
1091 "link": 53
1092 }
1093 ],
1094 "outputs": [
1095 {
1096 "localized_name": "output",
1097 "name": "output",
1098 "type": "IMAGE",
1099 "links": [
1100 80
1101 ]
1102 }
1103 ],
1104 "properties": {
1105 "Node name for S&R": "ComfySwitchNode",
1106 "cnr_id": "comfy-core",
1107 "ver": "0.21.1",
1108 "enableTabs": false,
1109 "tabWidth": 65,
1110 "tabXOffset": 10,
1111 "hasSecondTab": false,
1112 "secondTabText": "Send Back",
1113 "secondTabOffset": 80,
1114 "secondTabWidth": 65
1115 },
1116 "widgets_values": [
1117 false
1118 ],
1119 "widgets_values_named": {
1120 "switch": false
1121 }
1122 },
1123 {
1124 "id": 63,
1125 "type": "MoGeRender",
1126 "pos": [
1127 -3430,
1128 4890
1129 ],
1130 "size": [
1131 270,
1132 110
1133 ],
1134 "flags": [],
1135 "order": 7,
1136 "mode": 0,
1137 "inputs": [
1138 {
1139 "localized_name": "moge_geometry",
1140 "name": "moge_geometry",
1141 "type": "MOGE_GEOMETRY",
1142 "link": 59
1143 }
1144 ],
1145 "outputs": [
1146 {
1147 "localized_name": "IMAGE",
1148 "name": "IMAGE",
1149 "type": "IMAGE",
1150 "links": [
1151 62
1152 ]
1153 }
1154 ],
1155 "properties": {
1156 "Node name for S&R": "MoGeRender",
1157 "cnr_id": "comfy-core",
1158 "ver": "0.21.1",
1159 "enableTabs": false,
1160 "tabWidth": 65,
1161 "tabXOffset": 10,
1162 "hasSecondTab": false,
1163 "secondTabText": "Send Back",
1164 "secondTabOffset": 80,
1165 "secondTabWidth": 65
1166 },
1167 "widgets_values": [
1168 "normal_opengl"
1169 ],
1170 "widgets_values_named": {
1171 "output": "normal_opengl"
1172 }
1173 },
1174 {
1175 "id": 64,
1176 "type": "MoGeRender",
1177 "pos": [
1178 -3430,
1179 5050
1180 ],
1181 "size": [
1182 270,
1183 110
1184 ],
1185 "flags": [],
1186 "order": 8,
1187 "mode": 0,
1188 "inputs": [
1189 {
1190 "localized_name": "moge_geometry",
1191 "name": "moge_geometry",
1192 "type": "MOGE_GEOMETRY",
1193 "link": 60
1194 }
1195 ],
1196 "outputs": [
1197 {
1198 "localized_name": "IMAGE",
1199 "name": "IMAGE",
1200 "type": "IMAGE",
1201 "links": [
1202 63
1203 ]
1204 }
1205 ],
1206 "properties": {
1207 "Node name for S&R": "MoGeRender",
1208 "cnr_id": "comfy-core",
1209 "ver": "0.21.1",
1210 "enableTabs": false,
1211 "tabWidth": 65,
1212 "tabXOffset": 10,
1213 "hasSecondTab": false,
1214 "secondTabText": "Send Back",
1215 "secondTabOffset": 80,
1216 "secondTabWidth": 65
1217 },
1218 "widgets_values": [
1219 "normal_directx"
1220 ],
1221 "widgets_values_named": {
1222 "output": "normal_directx"
1223 }
1224 },
1225 {
1226 "id": 66,
1227 "type": "ComfySwitchNode",
1228 "pos": [
1229 -4160,
1230 5340
1231 ],
1232 "size": [
1233 270,
1234 130
1235 ],
1236 "flags": [],
1237 "order": 9,
1238 "mode": 0,
1239 "inputs": [
1240 {
1241 "localized_name": "on_false",
1242 "name": "on_false",
1243 "shape": 7,
1244 "type": "IMAGE",
1245 "link": 82
1246 },
1247 {
1248 "localized_name": "on_true",
1249 "name": "on_true",
1250 "shape": 7,
1251 "type": "IMAGE",
1252 "link": 80
1253 },
1254 {
1255 "localized_name": "switch",
1256 "name": "switch",
1257 "type": "BOOLEAN",
1258 "widget": {
1259 "name": "switch"
1260 },
1261 "link": 83
1262 }
1263 ],
1264 "outputs": [
1265 {
1266 "localized_name": "output",
1267 "name": "output",
1268 "type": "IMAGE",
1269 "links": [
1270 81
1271 ]
1272 }
1273 ],
1274 "properties": {
1275 "Node name for S&R": "ComfySwitchNode",
1276 "cnr_id": "comfy-core",
1277 "ver": "0.21.1",
1278 "enableTabs": false,
1279 "tabWidth": 65,
1280 "tabXOffset": 10,
1281 "hasSecondTab": false,
1282 "secondTabText": "Send Back",
1283 "secondTabOffset": 80,
1284 "secondTabWidth": 65
1285 },
1286 "widgets_values": [
1287 true
1288 ],
1289 "widgets_values_named": {
1290 "switch": true
1291 }
1292 }
1293 ],
1294 "groups": [
1295 {
1296 "id": 1,
1297 "title": "auto_resize_if_width_gt_2048",
1298 "bounding": [
1299 -5000,
1300 4840,
1301 690,
1302 280
1303 ],
1304 "color": "#3f789e",
1305 "flags": []
1306 }
1307 ],
1308 "links": [
1309 {
1310 "id": 33,
1311 "origin_id": 55,
1312 "origin_slot": 0,
1313 "target_id": 54,
1314 "target_slot": 0,
1315 "type": "MOGE_GEOMETRY"
1316 },
1317 {
1318 "id": 58,
1319 "origin_id": 58,
1320 "origin_slot": 0,
1321 "target_id": 55,
1322 "target_slot": 0,
1323 "type": "MOGE_MODEL"
1324 },
1325 {
1326 "id": 54,
1327 "origin_id": 61,
1328 "origin_slot": 0,
1329 "target_id": 62,
1330 "target_slot": 1,
1331 "type": "IMAGE"
1332 },
1333 {
1334 "id": 53,
1335 "origin_id": 59,
1336 "origin_slot": 2,
1337 "target_id": 62,
1338 "target_slot": 2,
1339 "type": "BOOLEAN"
1340 },
1341 {
1342 "id": 59,
1343 "origin_id": 55,
1344 "origin_slot": 0,
1345 "target_id": 63,
1346 "target_slot": 0,
1347 "type": "MOGE_GEOMETRY"
1348 },
1349 {
1350 "id": 60,
1351 "origin_id": 55,
1352 "origin_slot": 0,
1353 "target_id": 64,
1354 "target_slot": 0,
1355 "type": "MOGE_GEOMETRY"
1356 },
1357 {
1358 "id": 34,
1359 "origin_id": 54,
1360 "origin_slot": 0,
1361 "target_id": -20,
1362 "target_slot": 0,
1363 "type": "MESH"
1364 },
1365 {
1366 "id": 62,
1367 "origin_id": 63,
1368 "origin_slot": 0,
1369 "target_id": -20,
1370 "target_slot": 1,
1371 "type": "IMAGE"
1372 },
1373 {
1374 "id": 63,
1375 "origin_id": 64,
1376 "origin_slot": 0,
1377 "target_id": -20,
1378 "target_slot": 2,
1379 "type": "IMAGE"
1380 },
1381 {
1382 "id": 80,
1383 "origin_id": 62,
1384 "origin_slot": 0,
1385 "target_id": 66,
1386 "target_slot": 1,
1387 "type": "IMAGE"
1388 },
1389 {
1390 "id": 81,
1391 "origin_id": 66,
1392 "origin_slot": 0,
1393 "target_id": 55,
1394 "target_slot": 1,
1395 "type": "IMAGE"
1396 },
1397 {
1398 "id": 49,
1399 "origin_id": 60,
1400 "origin_slot": 0,
1401 "target_id": 59,
1402 "target_slot": 0,
1403 "type": "INT"
1404 },
1405 {
1406 "id": 73,
1407 "origin_id": -10,
1408 "origin_slot": 0,
1409 "target_id": 55,
1410 "target_slot": 2,
1411 "type": "INT"
1412 },
1413 {
1414 "id": 74,
1415 "origin_id": -10,
1416 "origin_slot": 1,
1417 "target_id": 55,
1418 "target_slot": 3,
1419 "type": "INT"
1420 },
1421 {
1422 "id": 75,
1423 "origin_id": -10,
1424 "origin_slot": 2,
1425 "target_id": 54,
1426 "target_slot": 1,
1427 "type": "INT"
1428 },
1429 {
1430 "id": 76,
1431 "origin_id": -10,
1432 "origin_slot": 3,
1433 "target_id": 54,
1434 "target_slot": 2,
1435 "type": "INT"
1436 },
1437 {
1438 "id": 77,
1439 "origin_id": -10,
1440 "origin_slot": 4,
1441 "target_id": 54,
1442 "target_slot": 3,
1443 "type": "FLOAT"
1444 },
1445 {
1446 "id": 78,
1447 "origin_id": -10,
1448 "origin_slot": 5,
1449 "target_id": 54,
1450 "target_slot": 4,
1451 "type": "BOOLEAN"
1452 },
1453 {
1454 "id": 83,
1455 "origin_id": -10,
1456 "origin_slot": 6,
1457 "target_id": 66,
1458 "target_slot": 2,
1459 "type": "BOOLEAN"
1460 },
1461 {
1462 "id": 79,
1463 "origin_id": -10,
1464 "origin_slot": 7,
1465 "target_id": 58,
1466 "target_slot": 0,
1467 "type": "COMBO"
1468 },
1469 {
1470 "id": 48,
1471 "origin_id": -10,
1472 "origin_slot": 8,
1473 "target_id": 60,
1474 "target_slot": 0,
1475 "type": "IMAGE"
1476 },
1477 {
1478 "id": 55,
1479 "origin_id": -10,
1480 "origin_slot": 8,
1481 "target_id": 61,
1482 "target_slot": 0,
1483 "type": "IMAGE"
1484 },
1485 {
1486 "id": 56,
1487 "origin_id": -10,
1488 "origin_slot": 8,
1489 "target_id": 62,
1490 "target_slot": 0,
1491 "type": "IMAGE"
1492 },
1493 {
1494 "id": 82,
1495 "origin_id": -10,
1496 "origin_slot": 8,
1497 "target_id": 66,
1498 "target_slot": 0,
1499 "type": "IMAGE"
1500 }
1501 ],
1502 "extra": []
1503 }
1504 ]
1505 },
1506 "config": [],
1507 "extra": {
1508 "ds": {
1509 "scale": 0.3319360675803287,
1510 "offset": [
1511 7136.135581279705,
1512 -3763.724124178821
1513 ]
1514 },
1515 "frontendVersion": "1.56.3",
1516 "VHS_latentpreview": false,
1517 "VHS_latentpreviewrate": 0,
1518 "VHS_MetadataImage": true,
1519 "VHS_KeepIntermediate": true
1520 },
1521 "version": 0.4
1522}