
    +j3                     T   S SK r S SKrS SKrS SKrS SKJr  S SKJrJrJ	r	J
r
Jr  S SKJr  S r " S S\R                  5      r " S S	\R                  5      r " S
 S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\	5      rS\4S jrg)    N)override)IOUIComfyExtension	InputImplTypes)Pathc                 &    U R                  SS5      $ )N\/)replace)paths    :/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_load_3d.pynormalize_pathr      s    <<c""    c                   r    \ rS rSr\S 5       r\S\\-  4S j5       r\S\	R                  4S j5       r\rSrg)Load3D   c                    [         R                  R                  [        R                  " 5       S5      n[         R
                  " USS9  [        U5      n[        [        R                  " 5       5      nUR                  S5       Vs/ s HF  nUR                  R                  5       S;   d  M#  [        [        UR                  U5      5      5      PMH     nn[        R                  " SSSSS[        R                  R!                  S	S
/[#        U5      -   [        R$                  R&                  S9[        R(                  R!                  S5      [        R*                  R!                  SSSSSS9[        R*                  R!                  SSSSSS9/[        R,                  R/                  SS9[        R0                  R/                  SS9[        R2                  R/                  SS9[        R,                  R/                  SS9[        R4                  R/                  SS9[        R6                  R/                  SS9[        R8                  R/                  SS9[        R:                  R/                  SS9/S9$ s  snf )N3dT)exist_ok*>	   .fbx.glb.obj.ply.spz.stl.gltf.splat.ksplatr   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_idr3   categoryessentials_categoryis_experimentalinputsoutputs)osr   joinfolder_pathsget_input_directorymakedirsr	   rglobsuffixlowerr   strrelative_tor   SchemaComboInputsorted
UploadTypemodelr   IntImageOutputMaskStringLoad3DCameraVideo	File3DAnyLoad3DModelInfo)cls	input_dir
input_path	base_path	file_pathfiless         r   define_schemaLoad3D.define_schema   s   GGLL!A!A!CTJ	
I-)_
99;<	 (--c2
2	%%'+yy BN3y44Y?@A2 	 

 yy. ( |fXu5MVXVcVcViVij		(Wdt!LXt1M	 W5F3		  k :X6&&M&B->?###<"")))G	
 	

s   "I/+'I/returnc                 `    U(       a  US:X  a  g[         R                  " U5      (       d  SU 3$ g)Nr$   TzInvalid 3D model file: )rC   exists_annotated_filepath)rZ   r#   kwargss      r   validate_inputsLoad3D.validate_inputs6   s0    Z6155jAA,ZL99r   c           
      v   [         R                  " US   5      n[         R                  " US   5      n[         R                  " US   5      n[        R                  " 5       nUR	                  US9u  pUR	                  US9u  pUR	                  US9u  pS nUS   S:w  a/  [         R                  " US   5      n[
        R                  " U5      nS nSnU(       a2  US:w  a,  [        R                  " [         R                  " U5      5      nUnUR                  S/ 5      n[        R                  " XUXS	   UUU5      $ )
Nr'   r4   r6   )r'   	recording r$   r:   r7   )rC   get_annotated_filepathnodes	LoadImage
load_imager   VideoFromFiler   File3Dgetr   
NodeOutput)rZ   r#   r'   re   
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_3dr5   r:   s                      r   executeLoad3D.execute>   s3   !88wH
 77fF	"99%/J//+$3$>$>Z$>$P!$3$>$>Y$>$O!%4%?%?k%?%R"##/#F#Fu[GY#Z ++,@AE	*.ll<#F#Fz#RSG"I		/26}}\	<WdQeglnu  xE  F  	Fr    N)__name__
__module____qualname____firstlineno__classmethodr`   boolrI   rf   r   rr   r   process__static_attributes__r   r   r   r   r      s]    #
 #
J dSj   FR]] F F2 Gr   r   c                   r    \ rS rSr\S 5       r\S\\R                  -  S\	R                  4S j5       r\rSrg)	Preview3D[   c                    [         R                  " SSS/SSSS[         R                  R                  [         R                  R                  SSS	S
9[         R
                  [         R                  [         R                  [         R                  [         R                  [         R                  [         R                  /SS9[         R                  R                  SSSS9[         R                  R                  SSSS9// S9$ )Nr   	view mesh	3d viewerzPreview 3D & Animationr   Tr#   rj   F)r-   	multilinez3D model file or path stringtypestooltipr7   optionaladvancedbg_image)r;   search_aliasesr3   r<   r>   is_output_noder?   r@   )r   rK   	MultiTyperM   rU   	File3DGLB
File3DGLTF	File3DFBX	File3DOBJ	File3DSTL
File3DUSDZrX   rV   rR   rZ   s    r   r`   Preview3D.define_schema\   s    yy'51 ""IIOOL"ON ; #  %%mdT%RzD4H" 1
 	
r   r#   rb   c                    [        U[        R                  5      (       ar  S[        R                  " 5       R
                   SUR                   3nUR                  [        R                  R                  [        R                  " 5       U5      5        OUnUR                  SS 5      nUR                  SS 5      n[        R                  " [         R"                  " X4US9S9$ )N
preview3d_.r7   r   )r   ui)
isinstancer   rp   uuiduuid4hexformatsave_torA   r   rB   rC   get_output_directoryrq   r   rr   r   PreviewUI3D)rZ   r#   re   filenamer7   r   s         r   r   Preview3D.executey   s    j%,,//#DJJL$4$4#5Qz7H7H6IJHrww||L,M,M,OQYZ[!Hjj5::j$/}}xx XYYr   r   N)r   r   r   r   r   r`   rI   r   rp   r   rr   r   r   r   r   r   r   r   r   [   sN    
 
8 Zu||!3 Z"-- Z Z Gr   r   c            	       p    \ rS rSr\S 5       r\S\R                  S\S\S\	R                  4S j5       rSrg	)
Preview3DAdvanced   c                    [         R                  " SS/ SQSSS[         R                  R                  S[         R                  [         R
                  [         R                  [         R                  [         R                  [         R                  [         R                  /SS9[         R                  R                  S	SSS
9[         R                  R                  S5      [         R                  R                  SSSS
9[         R                  R                  SSSSSS9[         R                  R                  SSSSSS9/[         R                  R                  SS9[         R                  R                  S	S9[         R                  R                  SS9[         R                  R                  SS9[         R                  R                  SS9/S9$ )Nr   zPreview 3D (Advanced))z
preview 3dr   r   zframe 3dz3d camera outputr   Tr9   z'3D model file from an upstream 3D node.r   r:   r   viewport_stater7   r(   r)   r*   r+   r,   r1   r2   )r;   r3   r   r<   r>   r   r?   r@   )r   rK   r   rM   r   r   r   r   r   r   rX   rY   r   rV   rQ   rS   r   s    r   r`   Preview3DAdvanced.define_schema   sh   yy'0c "" F #  ""((4RV(W		 01%%mdT%RWdt!LXt1M%* ###<"")))G&&M&B73847"
 "	
r   r9   r(   r1   rb   c                    S[         R                  " 5       R                   SUR                   3nUR	                  [
        R                  R                  [        R                  " 5       U5      5        UR                  SS 5      nUb  UOUS   nUR                  SS 5      n	U	b  U	OUR                  S/ 5      n
[        R                  " UU
UUU[        R                  " XhU
5      S9$ )Npreview3d_advanced_r   r7   r:   r   r   r   r   r   r   rA   r   rB   rC   get_temp_directoryrq   r   rr   r   PreviewUI3DAdvancedrZ   r9   r   r(   r1   re   r   camera_info_inputr7   model_3d_info_inputr:   s              r   r   Preview3DAdvanced.execute       ()9)9(:!HOO;LMl&E&E&GRS"JJ}d;+<+H'n]jNk$jj$?/B/N+TbTfTfgvxzT{}}%%h]K
 	
r   r   Nr   r   r   r   r   r`   r   rp   intr   rr   r   r   r   r   r   r   r      sQ    #
 #
J 
u|| 
C 
QT 
cecpcp 
 
r   r   c            	       p    \ rS rSr\S 5       r\S\R                  S\S\S\	R                  4S j5       rSrg	)
PreviewGaussianSplat   c                 Z   [         R                  " SSSSS/ SQ[         R                  R                  S[         R                  [         R
                  [         R                  [         R                  [         R                  /SS9[         R                  R                  S	SSS
9[         R                  R                  S5      [         R                  R                  SSSS
9[         R                  R                  SSSSSS9[         R                  R                  SSSSSS9/[         R                  R                  SS9[         R                  R                  S	S9[         R                  R                  SS9[         R                  R                  SS9[         R                  R                  SS9/S9$ )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 ksplatr9   zA gaussian splat 3D file.r   r:   r   r   r7   r(   r)   r*   r+   r,   r1   r2   r;   r3   r<   r>   r   r   r?   r@   )r   rK   r   rM   File3DSplatAny	File3DPLYFile3DSPLAT	File3DSPZFile3DKSPLATrY   r   rV   rQ   rS   r   s    r   r`   "PreviewGaussianSplat.define_schema   sb   yy*(  "")) 8 # 
 ""((4RV(W		 01%%mdT%RWdt!LXt1M!& !!((j(A"")))G&&M&B7384K,
 ,	
r   r9   r(   r1   rb   c                    S[         R                  " 5       R                   SUR                   3nUR	                  [
        R                  R                  [        R                  " 5       U5      5        UR                  SS 5      nUb  UOUS   nUR                  SS 5      n	U	b  U	OUR                  S/ 5      n
[        R                  " UU
UUU[        R                  " XhU
5      S9$ )Npreview_splat_r   r7   r:   r   r   r   s              r   r   PreviewGaussianSplat.execute   s    #DJJL$4$4#5Qx6GHl&E&E&GRS"JJ}d;+<+H'n]jNk$jj$?/B/N+TbTfTfgvxzT{}}%%h]K
 	
r   r   Nr   r   r   r   r   r      sQ    -
 -
^ 
u|| 
C 
QT 
cecpcp 
 
r   r   c            	       p    \ rS rSr\S 5       r\S\R                  S\S\S\	R                  4S j5       rSrg	)
PreviewPointCloudi  c                     [         R                  " SSSSS/ SQ[         R                  R                  S[         R                  [         R
                  /SS9[         R                  R                  S	SSS
9[         R                  R                  S5      [         R                  R                  SSSS
9[         R                  R                  SSSSSS9[         R                  R                  SSSSSS9/[         R                  R                  SS9[         R                  R                  S	S9[         R                  R                  SS9[         R                  R                  SS9[         R                  R                  SS9/S9$ )Nr   zPreview Point Cloudr   T)zview point cloudzview pointcloudzpreview point cloudzpreview pointcloudr   r9   zPoint cloud file (.ply)r   r:   r   r   r7   r(   r)   r*   r+   r,   r1   r2   r   )r   rK   r   rM   File3DPointCloudAnyr   rY   r   rV   rQ   rS   r   s    r   r`   PreviewPointCloud.define_schema  sL   yy'.  "".. 6 #  ""((4RV(W		 01%%mdT%RWdt!LXt1M  &&--:-F"")))G&&M&B73849#
 #	
r   r9   r(   r1   rb   c                    S[         R                  " 5       R                   SUR                   3nUR	                  [
        R                  R                  [        R                  " 5       U5      5        UR                  SS 5      nUb  UOUS   nUR                  SS 5      n	U	b  U	OUR                  S/ 5      n
[        R                  " UU
UUU[        R                  " XhU
5      S9$ )Npreview_pointcloud_r   r7   r:   r   r   r   s              r   r   PreviewPointCloud.execute-  r   r   r   Nr   r   r   r   r   r     sQ    $
 $
L 
u|| 
C 
QT 
cecpcp 
 
r   r   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)Load3DExtensioni@  rb   c                 @   #    [         [        [        [        [        /$ 7fN)r   r   r   r   r   )selfs    r   get_node_listLoad3DExtension.get_node_listA  s        
 	
s   r   N)r   r   r   r   r   listtyper   	ComfyNoder   r   r   r   r   r   r   @  s)    
T$r||*<%= 
 
r   r   rb   c                     #    [        5       $ 7fr   )r   r   r   r   comfy_entrypointr   L  s     s   )rl   rC   rA   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 #IR\\ IX) )X7
 7
tA
2<< A
H8
 8
v	
n 	
 r   