add File3DAny output to Load3D node; extend SaveGLB to accept File3DAny as input (#12276)

* add File3DAny output to Load3D node; extend SaveGLB node to accept File3DAny as input

* fix(grammar): capitalize letter
This commit is contained in:
Alexander Piskun 2026-02-04 21:35:38 +02:00 committed by GitHub
parent ef73070ea4
commit e77b34dfea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 3 deletions

View File

@ -618,6 +618,7 @@ class SaveGLB(IO.ComfyNode):
def define_schema(cls): def define_schema(cls):
return IO.Schema( return IO.Schema(
node_id="SaveGLB", node_id="SaveGLB",
display_name="Save 3D Model",
search_aliases=["export 3d model", "save mesh"], search_aliases=["export 3d model", "save mesh"],
category="3d", category="3d",
is_output_node=True, is_output_node=True,
@ -626,8 +627,14 @@ class SaveGLB(IO.ComfyNode):
IO.Mesh.Input("mesh"), IO.Mesh.Input("mesh"),
types=[ types=[
IO.File3DGLB, IO.File3DGLB,
IO.File3DGLTF,
IO.File3DOBJ,
IO.File3DFBX,
IO.File3DSTL,
IO.File3DUSDZ,
IO.File3DAny,
], ],
tooltip="Mesh or GLB file to save", tooltip="Mesh or 3D file to save",
), ),
IO.String.Input("filename_prefix", default="mesh/ComfyUI"), IO.String.Input("filename_prefix", default="mesh/ComfyUI"),
], ],
@ -649,7 +656,8 @@ class SaveGLB(IO.ComfyNode):
if isinstance(mesh, Types.File3D): if isinstance(mesh, Types.File3D):
# Handle File3D input - save BytesIO data to output folder # Handle File3D input - save BytesIO data to output folder
f = f"{filename}_{counter:05}_.glb" ext = mesh.format or "glb"
f = f"{filename}_{counter:05}_.{ext}"
mesh.save_to(os.path.join(full_output_folder, f)) mesh.save_to(os.path.join(full_output_folder, f))
results.append({ results.append({
"filename": f, "filename": f,

View File

@ -45,6 +45,7 @@ class Load3D(IO.ComfyNode):
IO.Image.Output(display_name="normal"), IO.Image.Output(display_name="normal"),
IO.Load3DCamera.Output(display_name="camera_info"), IO.Load3DCamera.Output(display_name="camera_info"),
IO.Video.Output(display_name="recording_video"), IO.Video.Output(display_name="recording_video"),
IO.File3DAny.Output(display_name="model_3d"),
], ],
) )
@ -66,7 +67,8 @@ class Load3D(IO.ComfyNode):
video = InputImpl.VideoFromFile(recording_video_path) video = InputImpl.VideoFromFile(recording_video_path)
return IO.NodeOutput(output_image, output_mask, model_file, normal_image, image['camera_info'], video) file_3d = Types.File3D(folder_paths.get_annotated_filepath(model_file))
return IO.NodeOutput(output_image, output_mask, model_file, normal_image, image['camera_info'], video, file_3d)
process = execute # TODO: remove process = execute # TODO: remove