
    3jB                        S SK r S SKJr  S SKrS SKJr  S SKJr  S SK	J
r
JrJr  S SKJrJr   " S S\R                   5      r " S	 S
\R                   5      r " S S\R                   5      r " S S\R                   5      rSS jrSS jr " S S\R                   5      r " S S\R                   5      r " S S\
5      rS\4S jrg)    N)'get_1d_sincos_pos_embed_from_grid_torch)pack_variable_mesh_batch)override)ComfyExtensionIOTypes)MESHVOXELc                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)EmptyLatentHunyuan3Dv2
   c                     [         R                  " SS[         R                  R                  SSSSS9[         R                  R                  SSSS	S
S9/[         R                  R                  5       /S9$ )Nr   model/latent/hunyuan 3d
resolutioni      i    )defaultminmax
batch_sizei   z)The number of latent images in the batch.)r   r   r   tooltipnode_idcategoryinputsoutputs)r   SchemaIntInputLatentOutputclss    </home/wildlama/comfy/ComfyUI/comfy_extras/nodes_hunyuan3d.pydefine_schema$EmptyLatentHunyuan3Dv2.define_schema   sh    yy,.\4QDI\1!Oz{
 		  "

 
	
    returnc                     [         R                  " USU/[        R                  R	                  5       S9n[
        R                  " USS.5      $ )N@   devicehunyuan3dv2)samplestype)torchzeroscomfymodel_managementintermediate_devicer   
NodeOutput)r"   r   r   latents       r#   executeEmptyLatentHunyuan3Dv2.execute   s<    j"j9%BXBXBlBlBno}}GHHr&    N)__name__
__module____qualname____firstlineno__classmethodr$   r   r4   r6   generate__static_attributes__r8   r&   r#   r   r   
   s=    
 
 I I I Hr&   r   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)Hunyuan3Dv2Conditioning!   c           
          [         R                  " SS[         R                  R                  S5      /[         R                  R                  SS9[         R                  R                  SS9/S9$ )NrA   model/conditioning/hunyuan 3dclip_vision_outputpositivedisplay_namenegativer   r   r   ClipVisionOutputr   Conditioningr    r!   s    r#   r$   %Hunyuan3Dv2Conditioning.define_schema"   sd    yy-4##))*>? &&J&?&&J&?

 
	
r&   r'   c                     UR                   nU0 //n[        R                  " U5      0 //n[        R                  " X45      $ N)last_hidden_stater/   
zeros_liker   r4   )r"   rE   embedsrF   rI   s        r#   r6   Hunyuan3Dv2Conditioning.execute0   s?    #55RL>%%f-r23}}X00r&   r8   Nr9   r:   r;   r<   r=   r$   r   r4   r6   encoder?   r8   r&   r#   rA   rA   !   s:    
 
 1BMM 1 1 Fr&   rA   c                   X    \ rS rSr\S 5       r\SS\R                  4S jj5       r\r	Sr
g) Hunyuan3Dv2ConditioningMultiView:   c                    [         R                  " SS[         R                  R                  SSS9[         R                  R                  SSS9[         R                  R                  SSS9[         R                  R                  SSS9/[         R                  R                  S	S
9[         R                  R                  SS
9/S9$ )NrW   rD   frontT)optionalleftbackrightrF   rG   rI   r   rJ   r!   s    r#   r$   .Hunyuan3Dv2ConditioningMultiView.define_schema;   s    yy64##))'D)A##))&4)@##))&4)@##))'D)A	 &&J&?&&J&?
 	
r&   Nr'   c           	         XX4/n/ nS n[        U5       Hu  u  pU	c  M
  Uc7  [        U	R                  R                  S   [        R
                  " S5      5      nUR                  U	R                  Xx   R                  SSS5      -   5        Mw     [        R                  " USS9n
U
0 //n[        R                  " U
5      0 //n[        R                  " X5      $ )N   r   dim)	enumerater   rP   shaper/   arangeappendreshapecatrQ   r   r4   )r"   rZ   r\   r]   r^   
all_embedsout
pos_embedsierR   rF   rI   s                r#   r6   (Hunyuan3Dv2ConditioningMultiView.executeL   s    4/

j)DA}%!HI\I\IbIbceIfhmhthtuvhw!xJ

1..1F1Fq!R1PPQ	 * 3A&RL>%%f-r23}}X00r&   r8   )NNNNrT   r8   r&   r#   rW   rW   :   s:    
 
  1bmm 1 1 Fr&   rW   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)VAEDecodeHunyuan3D_   c                 b   [         R                  " SS[         R                  R                  S5      [         R                  R                  S5      [         R
                  R                  SSSSS	S
9[         R
                  R                  SSSSS	S
9/[         R                  R                  5       /S9$ )Nrr   r   r-   vae
num_chunksi@  i  i  T)r   r   r   advancedoctree_resolution      i   r   )r   r   r   r   Vaer   Voxelr    r!   s    r#   r$    VAEDecodeHunyuan3D.define_schema`   s    yy(.			*U#\4TvX\]0#23Y]^	 !
 	
r&   r'   c                     [         R                  " UR                  US   X4S.S95      n[        R                  " U5      $ )Nr-   )rv   rx   )vae_options)r   r
   decoder   r4   )r"   ru   r-   rv   rx   voxelss         r#   r6   VAEDecodeHunyuan3D.executep   s?    SZZ	(:Wa  IKZ  L  M}}V$$r&   r8   Nr9   r:   r;   r<   r=   r$   r   r4   r6   r   r?   r8   r&   r#   rr   rr   _   s:    
 
 %R]] % % Fr&   rr   c                 L   Uc  [         R                  " S5      nU R                  U5      n X:  R                  5       n[         R                  R
                  R                  USSS5      nUR                  u  pVn[         R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/US9n[         R                  " [         R                  " XRS9[         R                  " XbS9[         R                  " XrS9SS9u  pn[         R                  " U	R                  5       U
R                  5       UR                  5       /SS9nUR                  5       S:  nX   n[         R                  " / SQ/ SQ/ SQ/ SQ/US9[         R                  " / SQ/ S	Q/ SQ/ SQ/US9[         R                  " / SQ/ SQ/ SQ/ SQ/US9[         R                  " / SQ/ SQ/ SQ/ S	Q/US9[         R                  " / SQ/ SQ/ SQ/ S	Q/US9[         R                  " / SQ/ SQ/ SQ/ SQ/US9/n/ n/ nSn[        U5       GHQ  u  nnUU-   nUS-   nUUS S 2S4   US S 2S4   US S 2S4   4   S:H  nUR                  5       (       d  MH  UU   nUU   R                  S5      nUR                  S5      U-   nUR!                  UR#                  SS5      5        UR                  S   n[         R                  " UUSU-  -   US9R#                  SS5      nUR!                  [         R                  " US S 2S4   US S 2S4   US S 2S4   /SS95        UR!                  [         R                  " US S 2S4   US S 2S4   US S 2S4   /SS95        USU-  -  nGMT     [%        U5      S:  a+  [         R&                  " USS9n[         R&                  " USS9nO,[         R(                  " S5      n[         R(                  " S5      nSn[+        U R                  5      n UUU -   S-  -
  nU U-
  S-  n!U!S:  a  UU!-  n[         R,                  " U5      nUU4$ )Ncpur   r   r   r   r   r   constantr   r   r   r   )r   r   ra   r   r   r   )r   ra   r   r   r   r   )ra   r   r   r*   ijindexingr   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      ra      rb   )r   r   )r/   r+   tofloatnn
functionalpadrf   tensormeshgridrg   stackflattenre   any	unsqueezerh   ri   lenrj   r0   r   fliplr)"r   	thresholdr+   binarypaddedDHW	neighborszyxvoxel_indices
solid_masksolid_indicescorner_offsetsall_verticesall_indicesvertex_countface_idxoffsetneighbor_indicespadded_indices
is_exposedexposed_indicescornersface_vertices	num_facesface_indicesverticesfacesv_minv_maxscales"                                     r#   voxel_to_meshr   x   s   ~e$YYvF '')FXX  $$V-?QOFllGA! I nnQ&Q&Q&	GA! KKaiik199; GQOM!A%J!-M 	y)Y
	 	y)Y
	 	y)Y
	 	y)Y
	 	y)Y
	 	y)Y
	!N* LKL%i0&(61)A-1a4 1a4 1a4 !
 	
 ~~'
3 *44Q7'11!4w>M11"a89#))!,	||1y=(
 '"a.	 	 	5;;QT(:LA<NP\]^`a]aPb'cijkl5;;QT(:LA<NP\]^`a]aPb'cijklI%A 1D <199\q1		+1-;;v&F#EE55=A--HU]aEqye#||H%HU?r&   c                 <   Uc  [         R                  " S5      nU R                  U5      n U R                  u  p4n[         R                  R
                  R                  U SSS5      n[         R                  " [         R                  " X2S9[         R                  " XBS9[         R                  " XRS9SS9u  pxn	[         R                  " UR                  5       UR                  5       U	R                  5       /SS	9n
[         R                  " / S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/US9nU
R                  S5      UR                  S5      -   nUR                  S5      u  pnXmX4   nUU:  n[         R                  " USS	9n[         R                  " U) SS	9nUU-  nU
U   nUU   nUU   nUR                  S   S:X  a9  [         R                  " SUS9[         R                  " S[         R                   US94$ [         R                  " SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS//US9n0 n["        R$                  R'                  S5      n[)        U5       GHQ  u  nu  nnUR+                  S5        US S 2U4   US S 2U4   :g  nUR                  5       (       d  ME  [         R,                  " USS9S   nUUU4   n UUU4   n![         R.                  " U US9n"U!U -
  n#U#S:g  n$UU U$   -
  U#U$   -  U"U$'   SU"U$) '   UU   R1                  5       n%UU   R1                  5       n&U%R                  S5      U"R                  S5      U&R                  S5      U%R                  S5      -
  -  -   n'[3        UR5                  5       U'5       H%  u  n(n)U(U;  a  / UU('   UU(   R7                  U)5        M'     GMT     / n*0 n+[9        [;        U5      S-  5      n,UR=                  5        H  u  n(n-U(U,-  (       d  UR+                  S5        U-(       d  M*  [         R                  " U-5      R?                  SS	9n.U.UU(   R1                  5       -   n.[;        U*5      U+[A        UU(   R5                  5       5      '   U*R7                  U.5        M     U*(       d9  [         R                  " SUS9[         R                  " S[         R                   US94$ [         R                  " U*5      n/Un0U) n1U0RC                  SSS 9R1                  5       n2U1RC                  SSS 9R1                  5       n3[         R                  " UR                  S   S4US9n4[         R                  " UR                  S   S4US9n5[E        S!5       H  n(U0S S 2U(4   R                  S5      n6U1S S 2U(4   R                  S5      n7U4UU(   R1                  5       R                  S5      U6-  -  n4U5UU(   R1                  5       R                  S5      U7-  -  n5M     U4U2-  n4U5U3-  n5U4U5-
  n8[         R                  " / SQ/ SQ/ SQ/US9n9[E        S5       V(V:s/ s H\  n([E        U(S-   S5        HE  n:[         RF                  RI                  U9U(   R1                  5       U9U:   R1                  5       5      PMG     M^     n;n(n:/ n<[K        U+RM                  5       5      n=[9        [;        U5      S"-  S-  5      n>[)        / S#Q5       GH?  u  n?u  n(n:U9U(   n@U9U:   nAU;U?   nBUU@-   nCUUA-   nDUU@-   UA-   nE[         RN                  " U8UB5      nF/ nG/ nH[)        U5       H  u  nInJUIU>-  (       d  UR+                  S5        [A        WJR5                  5       5      nK[A        WCWI   R5                  5       5      nL[A        WDUI   R5                  5       5      nM[A        WEUI   R5                  5       5      nNUKU=;   d  M  WLU=;   d  M  WMU=;   d  M  WNU=;   d  M  U+WK   nOU+WL   n U+WM   n!U+WN   nPWGR7                  UOU U!UP45        WHR7                  WI5        M     [)        WG5       H  u  nQu  nOn n!nPWHUQ   nRWFUR   S:  an  U<R7                  [         R                  " WOU WP/U[         R                   S$95        U<R7                  [         R                  " UOUPU!/U[         R                   S$95        M  U<R7                  [         R                  " WOWPU /U[         R                   S$95        U<R7                  [         R                  " UOU!UP/U[         R                   S$95        M     GMB     U<(       a  [         R                  " U<5      n<O$[         R                  " S[         R                   US9n<SnS[Q        X4U5      nTU/USUT-   S-  -
  n/UTUS-
  S-  nUUUS:  a  U/WU-  n/[         RR                  " U/5      n/U/U<4$ s  sn:n(f )%Nr   r   r   r   r*   r   r   r   rc   r   r   r   r   r   r   r   r   ra   )r   r   )dtyper+   r   rb   r            d   T)as_tuple      ?2   )rd   keepdim   &   ))r   r   )r   r   )r   r   )r+   r   )*r/   r+   r   rf   r   r   r   r   rg   r   r   r   r   unbindr   r0   longr1   utilsProgressBarre   updatenonzerorQ   r   ziptolistrh   roundr   itemsmeantuplesumrangelinalgcrosssetkeysmatmulr   r   )Vr   r   r+   r   r   r   r   r   r   r   cell_positionsr   posz_idxy_idxx_idxcorner_valuescorner_signs
has_insidehas_outsidecontains_surfaceactive_cellsactive_signsactive_valuesedgescell_verticesprogressedge_idxe1e2crossingcell_indicesv1v2tdenomvalidp1p2intersectionrn   pointr   vertex_lookupvert_progress_modpointsvertexfinal_verticesinside_corners_maskoutside_corners_maskinside_countsoutside_counts
inside_posoutside_posmask_insidemask_outside	gradientspos_dirsjcross_productsr   all_keysface_progress_modpair_idxdir_idir_jcross_productni_positionsnj_positionsdiag_positions
alignmentsvalid_quadsquad_indicesidxactive_cellcell_keyni_keynj_keydiag_keyv0v3q_idxcell_idxr   r   r   sV                                                                                         r#   voxel_to_mesh_surfnetr'     s-	   ~e$YYvFllGA!XX  $$V-?QOFnnQ&Q&Q&	GA! [[!))+qyy{AIIK!HaPN\\9i9i# N
 
"
"1
%(@(@(C
CC**R.E%%./M 9,L<Q/J))\Mq1K!K/!"23L 01L!"23M!!{{6&15;;vUZZ`f3gggLL	
AAAA	
AAAA	
AAAA 	E M{{&&s+H'.(2r2&,q"u*==||~~}}X=a@<+,<+,R/R
5	)U5\9%5&	B%%'B%%'||AQ2<<?R\\Z[_;\)]]L//1<@HAu%#%a !##E* A- /8 HMc-034"((*	6$$OOA6[[(--!-4Fl1o3355F=@]M%Q 6 6 89:OOF# + {{6&15;;vUZZ`f3ggg[[*N&(='++4+@FFHM)--!T-BHHJNl003Q7GJ++|11!4a8HK1X)!Q$/99!<+AqD1;;A>nQ'--/99!<{JJ
~a(..0::1=LL	  -J>!K[(I|| 	H qA51a=a 	8A;,,.0A0A0CD#0 	E  
 E=%%'(Hc,/2145%&;<&1a&x0#e+#e+%-5\\)];
 ), 7C**"[//12H<,3356F<,3356F^C0779:H8#((:v?QV^bjVj"8,"6*"6*"8,""BB#34##C( !8" (1'=#E#BB#E*H(#a'U\\2r2,vUZZXYU\\2r2,vUZZXYU\\2r2,vUZZXYU\\2r2,vUZZXY (>? =P E"F%**VDEaLE#uu}&99NU]aEqy'%/\\.1N5  Es   $A#fc                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)VoxelToMeshBasici  c                     [         R                  " SSSSS[         R                  R                  S5      [         R                  R                  SSS	S
SS9/[         R
                  R                  5       /S9$ )Nr)  z"Voxel to Mesh (Basic) (DEPRECATED)3d Converts a voxel grid to a mesh.Tvoxelr   333333?            ?{Gz?r   r   r   step)r   rH   r   descriptionis_deprecatedr   r   )r   r   r|   r   FloatMeshr    r!   s    r#   r$   VoxelToMeshBasic.define_schema  sg    yy&=:w'{CTsQUV
  
 	
r&   r'   c                   ^^ / m/ mUR                    H1  n[        X2S S9u  pETR                  U5        TR                  U5        M3     T(       a  [        U4S jT 5       5      (       am  [        U4S jT 5       5      (       aS  [        R
                  " [        R                  " [        R                  " T5      [        R                  " T5      5      5      $ [        R
                  " [        TT5      5      $ )Nr   r+   c              3   Z   >#    U  H   oR                   TS    R                   :H  v   M"     g7fr   Nrf   .0vr   s     r#   	<genexpr>+VoxelToMeshBasic.execute.<locals>.<genexpr>  "     K(QGGx{'8'88(   (+c              3   Z   >#    U  H   oR                   TS    R                   :H  v   M"     g7fr<  r=  r?  fr   s     r#   rA  rB    *     S}w|rsT[T[_def_g_m_mTmw|rD  )datar   rh   allr   r4   r   r	   r/   r   r   )r"   r-  r   r   r@  rG  r   r   s         @@r#   r6   VoxelToMeshBasic.execute  s    A EDAOOALLO 
 K(KKKPSS}w|S}P}P}==EKK,A5;;uCU!VWW}}5hFGGr&   r8   Nr   r8   r&   r#   r)  r)    s=    
 
  
H"-- 
H 
H Fr&   r)  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)VoxelToMeshi  c                 (   [         R                  " SSSS[         R                  R                  S5      [         R                  R                  SSS/S	9[         R
                  R                  S
SSSSS9/[         R                  R                  5       /S9$ )NrM  zVoxel to Meshr+  r,  r-  	algorithmsurface netbasic)optionsr   r.  r/  r0  r1  r2  )r   rH   r   r4  r   r   )r   r   r|   r   Combor6  r7  r    r!   s    r#   r$   VoxelToMesh.define_schema  s}    yy!(:w'{]G4LM{CTsQUV  
 	
r&   r'   c                   ^^	 / m	/ mUS:X  a  [         nOUS:X  a  [        nUR                   H.  nW" XSS S9u  pgT	R                  U5        TR                  U5        M0     T	(       a  [	        U	4S jT	 5       5      (       am  [	        U4S jT 5       5      (       aS  [
        R                  " [        R                  " [        R                  " T	5      [        R                  " T5      5      5      $ [
        R                  " [        T	T5      5      $ )NrQ  rP  r:  c              3   Z   >#    U  H   oR                   TS    R                   :H  v   M"     g7fr<  r=  r>  s     r#   rA  &VoxelToMesh.execute.<locals>.<genexpr>  rC  rD  c              3   Z   >#    U  H   oR                   TS    R                   :H  v   M"     g7fr<  r=  rF  s     r#   rA  rW    rH  rD  )r   r'  rI  rh   rJ  r   r4   r   r	   r/   r   r   )
r"   r-  rO  r   mesh_functionr   r@  rG  r   r   s
           @@r#   r6   VoxelToMesh.execute  s    )M-'1MA EDAOOALLO 
 K(KKKPSS}w|S}P}P}==EKK,A5;;uCU!VWW}}5hFGGr&   r8   Nr   r8   r&   r#   rM  rM    s=    
 
  HR]] H H$ Fr&   rM  c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)Hunyuan3dExtensioni  r'   c                 J   #    [         [        [        [        [        [
        /$ 7frO   )r   rA   rW   rr   r)  rM  )selfs    r#   get_node_list Hunyuan3dExtension.get_node_list  s#      ##,
 	
s   !#r8   N)r9   r:   r;   r<   r   listr.   r   	ComfyNoder_  r?   r8   r&   r#   r\  r\    s)    
T$r||*<%= 
 
r&   r\  r'   c                     #    [        5       $ 7frO   )r\  r8   r&   r#   comfy_entrypointrd    s     s   )r   N)r/   (comfy.ldm.modules.diffusionmodules.mmditr   comfy.model_managementr1   comfy_extras.nodes_save_3dr   typing_extensionsr   comfy_api.latestr   r   r   comfy_api.latest._utilr	   r
   rb  r   rA   rW   rr   r   r'  r)  rM  r\  rd  r8   r&   r#   <module>rk     s     \  ? & 6 6 .R\\ .bll 2"r|| "J 2kZy!xr|| D%",, %P

 

  2  r&   