
    +j3                     F   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZ d Z G d dej                  Z G d d	ej                  Z G d
 dej                  Z G d dej                  Z G d dej                  Z G d de	          ZdefdZdS )    N)override)IOUIComfyExtension	InputImplTypes)Pathc                 .    |                      dd          S )N\/)replace)paths    :/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_load_3d.pynormalize_pathr      s    <<c"""    c                   p    e Zd Zed             Zedeez  fd            Zedej	        fd            Z
e
ZdS )Load3Dc                    t           j                            t          j                    d          }t          j        |d           t          |          }t          t          j                              fd|                    d          D             }t          j	        dddddt          j
                            d	d
gt          |          z   t          j        j                  t          j                            d          t          j                            ddddd          t          j                            ddddd          gt          j                            d          t          j                            d          t          j                            d          t          j                            d          t          j                            d          t          j                            d          t          j                            d          t          j                            d          g          S )N3dT)exist_okc           	          g | ]L}|j                                         d v t          t          |                                                  MS )>	   .fbx.glb.obj.ply.spz.stl.gltf.splat.ksplat)suffixlowerr   strrelative_to).0	file_path	base_paths     r   
<listcomp>z(Load3D.define_schema.<locals>.<listcomp>   s\     
 
 
%%''+yyy 3y44Y??@@AAyyyr   *r   zLoad 3D & AnimationBasics
model_filenone)optionsuploadimagewidth         defaultminmaxstepheightdisplay_namemask	mesh_pathnormalcamera_inforecording_videomodel_3dmodel_3d_info)node_idr;   categoryessentials_categoryis_experimentalinputsoutputs)osr   joinfolder_pathsget_input_directorymakedirsr	   rglobr   SchemaComboInputsorted
UploadTypemodelr   IntImageOutputMaskStringLoad3DCameraVideo	File3DAnyLoad3DModelInfo)cls	input_dir
input_pathfilesr'   s       @r   define_schemazLoad3D.define_schema   s   GLL!A!C!CTJJ	
I----)__
9;;<<	
 
 
 
'--c22
 
 

 y. ( |fXu5MVXVcVijj	((Wdt!LLXt1MM	 W55F33	  k ::X66&&M&BB->??###<<")))GG	
 
 
 	
r   returnc                 L    |r|dk    rdS t          j        |          sd| S dS )Nr,   TzInvalid 3D model file: )rK   exists_annotated_filepath)r^   r+   kwargss      r   validate_inputszLoad3D.validate_inputs6   s?     	Z61145jAA 	:9Z999tr   c           
         t          j        |d                   }t          j        |d                   }t          j        |d                   }t          j                    }|                    |          \  }}	|                    |          \  }
}|                    |          \  }}d }|d         dk    r.t          j        |d                   }t          j        |          }d }d}|r.|dk    r(t          j        t          j        |                    }|}|	                    dg           }t          j        |||||d	         |||          S )
Nr/   r<   r>   )r/   	recording r,   rB   r?   )rK   get_annotated_filepathnodes	LoadImage
load_imager   VideoFromFiler   File3Dgetr   
NodeOutput)r^   r+   r/   rf   
image_path	mask_pathnormal_pathload_image_nodeoutput_imageignore_maskignore_imageoutput_masknormal_imageignore_mask2videorecording_video_pathfile_3dr=   rB   s                      r   executezLoad3D.execute>   s[   !8wHH
 7fFF	"9%/JJ/++$3$>$>Z$>$P$P!k$3$>$>Y$>$O$O!k%4%?%?k%?%R%R"l###/#Fu[GY#Z#Z +,@AAE	 	#*..l<#Fz#R#RSSG"I		/266}\;	<QVWdQeglnu  xE  F  F  	Fr   N)__name__
__module____qualname__classmethodrb   boolr#   rg   r   rr   r   process r   r   r   r      s        #
 #
 [#
J dSj    [ FR] F F F [F2 GGGr   r   c                   b    e Zd Zed             Zedeej        z  dej	        fd            Z
e
ZdS )	Preview3Dc                    t          j        dddgddddt           j                            t           j                            ddd	
          t           j        t           j        t           j        t           j        t           j	        t           j
        t           j        gd          t           j                            ddd          t           j                            ddd          gg           S )Nr   	view mesh	3d viewerzPreview 3D & Animationr   Tr+   rj   F)r5   	multilinez3D model file or path stringtypestooltipr?   optionaladvancedbg_image)rC   search_aliasesr;   rD   rF   is_output_noderG   rH   )r   rO   	MultiTyperQ   rY   	File3DGLB
File3DGLTF	File3DFBX	File3DOBJ	File3DSTL
File3DUSDZr\   rZ   rV   r^   s    r   rb   zPreview3D.define_schema\   s    y'51 ""IOOL"ONN ; #   %%mdT%RRzD4HH" 1
 
 
 	
r   r+   rc   c                    t          |t          j                  rhdt          j                    j         d|j         }|                    t          j	        
                    t          j                    |                     n|}|                    dd           }|                    dd           }t          j        t!          j        |||                    S )N
preview3d_.r?   r   )r   ui)
isinstancer   rp   uuiduuid4hexformatsave_torI   r   rJ   rK   get_output_directoryrq   r   rr   r   PreviewUI3D)r^   r+   rf   filenamer?   r   s         r   r   zPreview3D.executey   s    j%,// 	"JDJLL$4JJz7HJJHrw||L,M,O,OQYZZ[[[[!Hjj55::j$//}xx X X XYYYYr   N)r   r   r   r   rb   r#   r   rp   r   rr   r   r   r   r   r   r   r   [   sk        
 
 [
8 Zu|!3 Z"- Z Z Z [Z GGGr   r   c            	       `    e Zd Zed             Zedej        dededej	        fd            Z
dS )Preview3DAdvancedc                    t          j        ddg ddddt           j                            dt           j        t           j        t           j        t           j        t           j        t           j	        t           j
        gd          t           j                            d	dd
          t           j                            d          t           j                            ddd
          t           j                            ddddd          t           j                            ddddd          gt           j
                            d          t           j                            d	          t           j                            d          t           j                            d          t           j                            d          g          S )Nr   zPreview 3D (Advanced))z
preview 3dr   r   zframe 3dz3d camera outputr   TrA   z'3D model file from an upstream 3D node.r   rB   r   viewport_stater?   r0   r1   r2   r3   r4   r9   r:   )rC   r;   r   rD   rF   r   rG   rH   )r   rO   r   rQ   r   r   r   r   r   r   r\   r]   r   rZ   rU   rW   r   s    r   rb   zPreview3DAdvanced.define_schema   ss   y'0ccc "" F #   "((4RV(WW	 011%%mdT%RRWdt!LLXt1MM%* ###<<")))GG&&M&BB7338447"
 "
 "
 "	
r   rA   r0   r9   rc   c                    dt          j                    j         d|j         }|                    t
          j                            t          j	                    |                     |
                    dd           }||n|d         }|
                    dd           }	|	|	n|
                    dg           }
t          j        ||
|||t          j        |||
                    S )Npreview3d_advanced_r   r?   rB   r   r   r   r   r   r   rI   r   rJ   rK   get_temp_directoryrq   r   rr   r   PreviewUI3DAdvancedr^   rA   r   r0   r9   rf   r   camera_info_inputr?   model_3d_info_inputrB   s              r   r   zPreview3DAdvanced.execute       M)9MMHOMMl&E&G&GRRSSS"JJ}d;;+<+H''n]jNk$jj$??/B/N++TbTfTfgvxzT{T{}%h]KK
 
 
 	
r   Nr   r   r   r   rb   r   rp   intr   rr   r   r   r   r   r   r      sq        #
 #
 [#
J 
u| 
C 
QT 
cecp 
 
 
 [
 
 
r   r   c            	       `    e Zd Zed             Zedej        dededej	        fd            Z
dS )PreviewGaussianSplatc                 p   t          j        dddddg dt           j                            dt           j        t           j        t           j        t           j        t           j        gd          t           j	                            d	dd
          t           j
                            d          t           j                            ddd
          t           j                            ddddd          t           j                            ddddd          gt           j                            d          t           j	                            d	          t           j                            d          t           j                            d          t           j                            d          g          S )Nr   zPreview Splatr   T)z
view splatzview gaussianzview gaussian splatzpreview gaussianzpreview gaussian splatz	view 3dgszpreview 3dgspreview plyzpreview spzzpreview splatzpreview ksplatrA   zA gaussian splat 3D file.r   rB   r   r   r?   r0   r1   r2   r3   r4   r9   r:   rC   r;   rD   rF   r   r   rG   rH   )r   rO   r   rQ   File3DSplatAny	File3DPLYFile3DSPLAT	File3DSPZFile3DKSPLATr]   r   rZ   rU   rW   r   s    r   rb   z"PreviewGaussianSplat.define_schema   ss   y*(    "") 8 # 
 
 "((4RV(WW	 011%%mdT%RRWdt!LLXt1MM!& !((j(AA")))GG&&M&BB733844K,
 ,
 ,
 ,	
r   rA   r0   r9   rc   c                    dt          j                    j         d|j         }|                    t
          j                            t          j	                    |                     |
                    dd           }||n|d         }|
                    dd           }	|	|	n|
                    dg           }
t          j        ||
|||t          j        |||
                    S )Npreview_splat_r   r?   rB   r   r   r   s              r   r   zPreviewGaussianSplat.execute   s    HDJLL$4HHxHHl&E&G&GRRSSS"JJ}d;;+<+H''n]jNk$jj$??/B/N++TbTfTfgvxzT{T{}%h]KK
 
 
 	
r   Nr   r   r   r   r   r      sq        -
 -
 [-
^ 
u| 
C 
QT 
cecp 
 
 
 [
 
 
r   r   c            	       `    e Zd Zed             Zedej        dededej	        fd            Z
dS )PreviewPointCloudc                 .   t          j        dddddg dt           j                            dt           j        t           j        gd          t           j                            d	dd
          t           j                            d          t           j                            ddd
          t           j	                            ddddd          t           j	                            ddddd          gt           j        
                    d          t           j        
                    d	          t           j        
                    d          t           j	        
                    d          t           j	        
                    d          g          S )Nr   zPreview Point Cloudr   T)zview point cloudzview pointcloudzpreview point cloudzpreview pointcloudr   rA   zPoint cloud file (.ply)r   rB   r   r   r?   r0   r1   r2   r3   r4   r9   r:   r   )r   rO   r   rQ   File3DPointCloudAnyr   r]   r   rZ   rU   rW   r   s    r   rb   zPreviewPointCloud.define_schema  sc   y'.    "". 6 #   "((4RV(WW	 011%%mdT%RRWdt!LLXt1MM  &--:-FF")))GG&&M&BB7338449#
 #
 #
 #	
r   rA   r0   r9   rc   c                    dt          j                    j         d|j         }|                    t
          j                            t          j	                    |                     |
                    dd           }||n|d         }|
                    dd           }	|	|	n|
                    dg           }
t          j        ||
|||t          j        |||
                    S )Npreview_pointcloud_r   r?   rB   r   r   r   s              r   r   zPreviewPointCloud.execute-  r   r   Nr   r   r   r   r   r     sq        $
 $
 [$
L 
u| 
C 
QT 
cecp 
 
 
 [
 
 
r   r   c                   L    e Zd Zedeeej                          fd            ZdS )Load3DExtensionrc   c                 F   K   t           t          t          t          t          gS N)r   r   r   r   r   )selfs    r   get_node_listzLoad3DExtension.get_node_listA  s!        
 	
r   N)	r   r   r   r   listtyper   	ComfyNoder   r   r   r   r   r   @  sE        
T$r|*<%= 
 
 
 X
 
 
r   r   rc   c                  "   K   t                      S r   )r   r   r   r   comfy_entrypointr   L  s      r   )rl   rK   rI   r   typing_extensionsr   comfy_api.latestr   r   r   r   r   pathlibr	   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s        				  & & & & & & E E E E E E E E E E E E E E      # # #I I I I IR\ I I IX) ) ) ) ) ) ) )X7
 7
 7
 7
 7
 7
 7
 7
tA
 A
 A
 A
 A
2< A
 A
 A
H8
 8
 8
 8
 8
 8
 8
 8
v	
 	
 	
 	
 	
n 	
 	
 	
      r   