
    +j\v              
       <   S SK r S SKJr  S SKrS SKJr  S SKJrJrJ	r	J
r
  S SKJrJrJrJrJrJrJrJrJrJrJrJr  S SKJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$  S\%S\&S	\'4S
 jr( " S S5      r)S\*S	\)4S jr+ S"S\,\   S\*S\'S	\S-  4S jjr- " S S\R\                  5      r/ " S S\R\                  5      r0 " S S\R\                  5      r1 " S S\R\                  5      r2 " S S\R\                  5      r3 " S S\R\                  5      r4 " S S \5      r5S	\54S! jr6g)#    N)BytesIO)override)IOComfyExtensionInputTypes)Hunyuan3DViewImageInputGenerateTypeResultFile3DSmartTopologyRequestTaskFile3DInputTextureEditTaskRequestTo3DPartTaskRequestTo3DProTaskCreateResponseTo3DProTaskQueryRequestTo3DProTaskRequestTo3DProTaskResultResponseTo3DUVTaskRequest)ApiEndpointbytesio_to_image_tensordownload_url_to_bytesiodownload_url_to_file_3ddownload_url_to_image_tensor"downscale_image_tensor_by_max_sidepoll_opsync_opupload_3d_model_to_comfyapiupload_image_to_comfyapivalidate_image_dimensionsvalidate_stringstatusbodyreturnc                     U S:H  =(       aU    [        U[        5      =(       a>    S[        UR                  S0 5      R                  S0 5      R                  SS5      5      ;   $ )Ni  RequestLimitExceededResponseErrorCode )
isinstancedictstrget)r!   r"   s     ?/home/wildlama/comfy/ComfyUI/comfy_api_nodes/nodes_hunyuan3d.py_is_tencent_rate_limitedr/   &   sY    # 	etT"	e"c$((:r*B*F*FwPR*S*W*WX^`b*c&dd    c                       \ rS rSrSr    SS\R                  S\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  4
S	 jjr	S
r
g)ObjZipResult.   objtexturemetallicnormal	roughnessNr5   r6   r7   r8   r9   c                 @    Xl         X l        X0l        X@l        XPl        g Nr4   )selfr5   r6   r7   r8   r9   s         r.   __init__ObjZipResult.__init__1   s      "r0   )r7   r8   r5   r9   r6   )NNNN)__name__
__module____qualname____firstlineno__	__slots__r   File3Dr   Imager=   __static_attributes__ r0   r.   r2   r2   .   sw    EI
 '+'+%)(,#\\# t## ++$	#
 d"# ;;%# #r0   r2   urlc           	      .  ^#    [        5       n[        X5      I Sh  vN   UR                  S5        [        R                  " U5      (       d-  UR                  S5        [        [        R                  " USS9S9$ UR                  S5        Sn0 n[        R                  " U5       nUR                  5        H  nUR                  5       mTR                  S5      (       a  UR                  U5      nM<  [        U4S jS 5       5      (       d  MX  TR                  S	S
5      S   n[        [        UR                  U5      5      SS9nSnSSSS.R!                  5        H  u  pUR                  U	5      (       d  M  U
n  O   XsU'   M     SSS5        Uc  [#        S5      e[        [        R                  " [        U5      SS9UR%                  S5      UR%                  S5      UR%                  S5      UR%                  S5      S9$  GN! , (       d  f       N= f7f)zThe Tencent API returns OBJ results as ZIP archives containing the .obj mesh, and texture images.

When PBR is enabled, the ZIP may contain additional metallic, normal, and roughness maps
identified by their filename suffixes.
Nr   r5   )sourcefile_format)r5   z.objc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr;   )endswith).0extlowers     r.   	<genexpr>/download_and_extract_obj_zip.<locals>.<genexpr>T   s     h4gSU^^C((4gs   !)z.pngz.jpgz.jpegz.bmpz.tiffz.webp.   RGB)moder6   r7   r8   r9   )	_metallic_normal
_roughnessz)ZIP archive does not contain an OBJ file.r4   )r   r   seekzipfile
is_zipfiler2   r   rD   ZipFilenamelistrP   rM   readanyrsplitr   items
ValueErrorr-   )rH   data	obj_bytestextureszfnamestemtensormatched_keysuffixkeyrP   s              @r.   download_and_extract_obj_ziprn   @   s     9D
!#
,,,IIaLd##		!De LMMIIaLI')H		"KKMDJJLE~~f%%GGDM	h4ghhh||C+A.01GeT'!+'"-$ %'	$KF
 }}V,,&)$ )/%! " 
$ DEELL	 2FY'j)||H%,,{+ 9 - 
	s7   HHBH%A%HA&H8HA<H
HHresponse_objs	file_typeraise_if_not_foundc                     U  H3  nUR                   R                  5       UR                  5       :X  d  M1  Us  $    U(       a  [        SU S35      eg )N'z)' file type is not found in the response.)TyperP   rc   )ro   rp   rq   is       r.   get_file_from_responserv   l   sI     66<<>Y__..H  1YK'PQRRr0   c                   d    \ rS rSr\S 5       r\S\S\S\S\S\S\	R                  4S	 j5       rS
rg)TencentTextToModelNodew   c                    [         R                  " SSSS[         R                  R                  SSS/SS	9[         R                  R                  S
SSSS9[         R
                  R                  SSSSS9[         R                  R                  S[         R                  R                  S[         R                  R                  SSS9/5      [         R                  R                  S[         R                  R                  SSS/S9[         R                  R                  SSS9/5      [         R                  R                  S/ 5      /S9[         R
                  R                  SS S S![         R                  R                  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                   [         R                  R"                  [         R                  R$                  /SS[         R&                  " [         R(                  " / S)QS*9S+S,9S-9
$ ).Nrx   zHunyuan3D: Text to Modelpartner/3d/Tencent3Dmodel3.03.16The LowPoly option is unavailable for the `3.1` model.optionstooltippromptTr)   zSupports up to 1024 characters.	multilinedefaultr   
face_count    ` r   minmaxgenerate_typeNormalpbrFr   LowPolypolygon_typetrianglequadrilateralr   Geometryseedr   _Seed controls whether the node should re-run; results are non-deterministic regardless of seed.r   r   r   display_modecontrol_after_generater   
model_filedisplay_nameGLBOBJtexture_imager   zgenerate_type.pbrr   )widgetsaw  
                (
                  $base := widgets.generate_type = "normal" ? 25 : widgets.generate_type = "lowpoly" ? 30 : 15;
                  $pbr := $lookup(widgets, "generate_type.pbr") ? 10 : 0;
                  $face := widgets.face_count != 500000 ? 10 : 0;
                  {"type":"usd","usd": ($base + $pbr + $face) * 0.02}
                )
                
depends_onexpr
node_idr   categoryessentials_categoryinputsoutputshiddenis_api_nodeis_output_nodeprice_badge)r   SchemaCombor   StringIntDynamicComboOptionBooleanNumberDisplaynumberOutput	File3DGLB	File3DOBJrE   Hiddenauth_token_comfy_orgapi_key_comfy_org	unique_id
PriceBadgePriceBadgeDependsclss    r.   define_schema$TencentTextToModelNode.define_schemay   s   yy,3) $"ENT  
 		D"Nop\6tQ%%#..x"**:J:J5Z_:J:`9ab..% "~
TcGd e "

 0 0 0 F ..z2>
 &  "!#!1!1!8!8+/H  	- D 		  l ;###7###7_=	 		..		++		##
 //8lm
g>
 >	
r0   r}   r   r   r   r   r#   c                   #    Un[        USSSS9  US:X  a"  US   R                  5       S:X  a  [        S5      e[        U [	        S	S
S9[
        [        UUUUS   UR                  SS 5      UR                  SS 5      S9[        S9I S h  vN nUR                  (       a9  [        SUR                  R                   SUR                  R                   35      eUR                  n[        U [	        SS
S9[        US9[        S S9I S h  vN n	[!        U	R"                  SSS9n
S nU
(       a  [%        U
R&                  5      I S h  vN n[(        R*                  " U S3[-        [!        U	R"                  S5      R&                  SUS9I S h  vN U(       a  UR.                  OS U(       a  UR0                  5      $ S 5      $  GN4 N N~ N;7f)Nr   rT      
field_name
min_length
max_lengthr   r   lowpoly>The LowPoly option is currently unavailable for the 3.1 model./proxy/tencent/hunyuan/3d-proPOSTpathmethodr   r   )ModelPrompt	FaceCountGenerateType	EnablePBRPolygonTyperesponse_modelrd   is_rate_limitedTask creation failed with code : #/proxy/tencent/hunyuan/3d-pro/queryJobIdc                     U R                   $ r;   Statusrs    r.   <lambda>0TencentTextToModelNode.execute.<locals>.<lambda>       qxxr0   rd   r   status_extractorr5   Frq   .glbglbtask_id)r    rP   rc   r   r   r   r   r-   r/   r'   r(   Messager   r   r   r   rv   ResultFile3Dsrn   Urlr   
NodeOutputr   r5   r6   )r   r}   r   r   r   r   _responser   resultobj_file_response
obj_results               r.   executeTencentTextToModelNode.execute   s     8dSE>mO<BBD	Q]^^ <VL4#$*?;'++E48)--ndC 5
 
 >>>x~~?R?R>SSUV^VdVdVlVlUmnoo..B6R(w74/
 
 363G3Gchi
;<M<Q<QRRJ}}it)&v';';UCGGX_  )JNNd",J
 	
 37
 	
9
"
 SsJ   BGF<	A>GF?:GGAGG
5G?GGGrG   N)r?   r@   rA   rB   classmethodr   r,   intr
   r   r   r   rF   rG   r0   r.   rx   rx   w   sg    ?
 ?
B /
/
 /
 	/

 )/
 /
 
/
 /
r0   rx   c                       \ rS rSr\S 5       r\   SS\S\R                  S\	S\
S\	S	\R                  S-  S
\R                  S-  S\R                  S-  S\R                  4S jj5       rSrg)TencentImageToModelNode   c                 0   [         R                  " SSSS[         R                  R                  SSS/SS	9[         R                  R                  S
5      [         R                  R                  SSS9[         R                  R                  SSS9[         R                  R                  SSS9[         R
                  R                  SSSSS9[         R                  R                  S[         R                  R                  S[         R                  R                  SSS9/5      [         R                  R                  S[         R                  R                  SSS/S9[         R                  R                  SSS9/5      [         R                  R                  S/ 5      /S9[         R
                  R                  S S!S!S"[         R                  R                  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[         R                  R                  S+S&9[         R                  R                  S,S&9/[         R                  R                   [         R                  R"                  [         R                  R$                  /SS[         R&                  " [         R(                  " / S-Q/ S.QS/9S0S19S29
$ )3Nr  zHunyuan3D: Image(s) to Modelr{   r|   r}   r~   r   r   r   image
image_leftT)optionalimage_right
image_backr   r   r   r   r   r   r   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   optional_metallicoptional_normaloptional_roughnessr   )r  r  r	  )r   r   a3  
                (
                  $base := widgets.generate_type = "normal" ? 25 : widgets.generate_type = "lowpoly" ? 30 : 15;
                  $multiview := (
                    inputs.image_left.connected or inputs.image_right.connected or inputs.image_back.connected
                  ) ? 10 : 0;
                  $pbr := $lookup(widgets, "generate_type.pbr") ? 10 : 0;
                  $face := widgets.face_count != 500000 ? 10 : 0;
                  {"type":"usd","usd": ($base + $multiview + $pbr + $face) * 0.02}
                )
                r   r   )r   r   r   r   rE   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s    r.   r   %TencentImageToModelNode.define_schema   s   yy-7) $"ENT  
 w'|d;}t<|d;\6tQ%%#..x"**:J:J5Z_:J:`9ab..% "~
TcGd e "

 0 0 0 F ..z2>
 &  "!#!1!1!8!8+/H  	3#J 		  l ;###7###7_=-@A->?-AB 		..		++		##
 //PF
sJ
 J	
r0   Nr}   r  r   r   r   r  r  r	  r#   c	                 J  #    Un	US:X  a"  US   R                  5       S:X  a  [        S5      e[        USSS9  / n
UUUS.R                  5        HH  u  pUc  M
  [        USSS9  U
R	                  [        U[        U [        USS	9S
SS9I S h  vN S95        MJ     [        U [        SSS9[        [        UUUS   [        U [        USS	9S
SS9I S h  vN U
(       a  U
OS UR                  SS 5      UR                  SS 5      S9[        S9I S h  vN nUR                  (       a9  [        SUR                  R                   SUR                  R                    35      eUR"                  n[%        U [        SSS9['        US9[(        S S9I S h  vN n[+        UR,                  SSS9nU(       Ga  [/        UR0                  5      I S h  vN n[2        R4                  " U S3[7        [+        UR,                  S5      R0                  SUS 9I S h  vN UR8                  UR:                  UR<                  b  UR<                  O[>        R@                  " S!S!S!S"5      URB                  b  URB                  O[>        R@                  " S!S!S!S"5      URD                  b  URD                  5      $ [>        R@                  " S!S!S!S"5      5      $ [2        R4                  " U S3[7        [+        UR,                  S5      R0                  SUS 9I S h  vN S S S S S 5      $  GN GNB GN GN GNU GN N7f)#Nr   r   r   r      )	min_width
min_height)leftrightbacki$  )max_sidez
image/webpi]n)	mime_typetotal_pixels)ViewTypeViewImageUrlr   r   r   r   r   )r   r   r   ImageUrlMultiViewImagesr   r   r   r   r   r   r   c                     U R                   $ r;   r   r   s    r.   r   1TencentImageToModelNode.execute.<locals>.<lambda>~  r   r0   r   r5   Fr   r   r   r   rT      )#rP   rc   r   rb   appendr	   r   r   r   r   r   r   r-   r/   r'   r(   r   r   r   r   r   rv   r   rn   r   r   r   r   r5   r6   r7   torchzerosr8   r9   )r   r}   r  r   r   r   r  r  r	  r   multiview_imageskvr   r   r   r   r   s                     r.   r   TencentImageToModelNode.execute>  s;     E>mO<BBD	Q]^^!%33G 
 %'	DA
 y%a33G##"'?:1tL".%/	( "
& !<VL4#$*?;76utL*!+	   5E 0$'++E48)--ndC 5%
 
( >>>x~~?R?R>SSUV^VdVdVlVlUmnoo..B6R(w74/
 
 363G3Gchi;<M<Q<QRRJ==)4 -*6+?+?GKKU\c  ""'1':':'F
##EKKXY[\^_abLc%/%6%6%B
!!TUWXZ[]^H_(2(<(<(H
$$
 
 OTkkZ[]^`acdNe
 
 }}it)&v';';UCGGX_  

 
	
i" 
.
 Ss   B	L#LAL#L<L#LA>L#L9L#LAL#L
C5L#L!
L#L#L#L#L#L#!L#rG   )NNN)r?   r@   rA   rB   r   r   r,   r   rE   r   r
   r   r   r   rF   rG   r0   r.   r  r     s    K
 K
Z  *.*.)-Y
Y
 {{Y
 	Y

 )Y
 Y
 KK$&Y
 [[4'Y
 KK$&Y
 
Y
 Y
r0   r  c                   t    \ rS rSr\S 5       r1 Skr\S\R                  S\	S\
R                  4S j5       rSrg	)
TencentModelTo3DUVNodei  c                    [         R                  " SSSS[         R                  R                  S[         R                  [         R
                  [         R                  [         R                  /SS9[         R                  R                  SS	S
S[         R                  R                  SSS9/[         R
                  R                  SS9[         R                  R                  SS9[         R                  R                  SS9/[         R                  R                  [         R                  R                  [         R                  R                   /S[         R"                  " SS9S9	$ )Nr'  zHunyuan3D: Model to UVr{   zgPerform UV unfolding on a 3D model to generate UV texture. Input model must have less than 30000 faces.model_3dz!Input 3D model (GLB, OBJ, or FBX)typesr   r   rT   r   r   Tr   r   r   r   FBXuv_imagez{"type":"usd","usd":0.2}r   	r   r   r   descriptionr   r   r   r   r   )r   r   	MultiTyper   r   r   	File3DFBX	File3DAnyr   r   r   r   rE   r   r   r   r   r   r   s    r.   r   $TencentModelTo3DUVNode.define_schema  s    yy,1); ""<<r||R\\R? # 
 "!#!1!1!8!8+/H  	$ ###7###7Z8 		..		++		##
 +EFE#
 #	
r0   >   fbxr   r5   r)  r   r#   c                   #    UnUR                   R                  5       nX@R                  ;  a4  [        SU SSR	                  [        U R                  5      5       S35      e[        U [        SSS9[        [        [        UR                  5       [        XU5      I S h  vN S9S	9[        S
9I S h  vN nUR                  (       a9  [        SUR                  R                   SUR                  R                    35      e[#        U [        SSS9[%        UR&                  S9[(        S S9I S h  vN n[+        UR,                  SSS9nUb  [/        UR0                  5      I S h  vN O[2        R4                  " SSSS5      n[6        R8                  " [;        [+        UR,                  S5      R0                  S5      I S h  vN [;        [+        UR,                  S5      R0                  S5      I S h  vN U5      $  GN[ GNK N N ND N7f)NUnsupported file format: 'z'. Supported formats: , rS   z/proxy/tencent/hunyuan/3d-uvr   r   rt   r   Filer   r   r   z"/proxy/tencent/hunyuan/3d-uv/queryr   c                     U R                   $ r;   r   r   s    r.   r   0TencentModelTo3DUVNode.execute.<locals>.<lambda>  r   r0   r   r-  Fr   rT   r  r5   r5  )formatrP   SUPPORTED_FORMATSrc   joinsortedr   r   r   r   r   upperr   r/   r'   r(   r   r   r   r   r   rv   r   r   r   r   r!  r   r   r   )	r   r)  r   r   rK   r   r   uv_image_filer-  s	            r.   r   TencentModelTo3DUVNode.execute  s     oo++-333,[M :&&*iis7L7L0M&N%OqR  !;FK4"$$**,9#UU 5
 
 >>>x~~?R?R>SSUV^VdVdVlVlUmnooA&Q(x~~>4/
 
 /v/C/CZdij ( /}/@/@AAAQ1a( 	
 }})*@AUAUW\*]*a*achii)*@AUAUW\*]*a*achii
 	
) V

 B
 jisn   BHG9H1G<2A<H.G?/4H#H$AH>H?0H/H
0
H<H?HHHHrG   N)r?   r@   rA   rB   r   r   r?  r   rD   r   r   r   r   rF   rG   r0   r.   r'  r'    sS    $
 $
L .+
,,+
 +
 
	+
 +
r0   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	)
Tencent3DTextureEditNodei  c                    [         R                  " SSSS[         R                  R                  S[         R                  [         R
                  /SS9[         R                  R                  SS	S
SS9[         R                  R                  SSSS[         R                  R                  S	SS9/[         R                  R                  SS9[         R                  R                  SS9[         R                  R                  SS9/[         R                  R                  [         R                  R                   [         R                  R"                  /S	[         R$                  " SS9S9	$ )NrF  zHunyuan3D: 3D Texture Editr{   zAAfter inputting the 3D model, perform 3D model texture redrawing.r)  zA3D model in FBX format. Model should have less than 100000 faces.r*  r   Tr)   z@Describes texture editing. Supports up to 1024 UTF-8 characters.r   r   r   r   r   r   r   r   r   r   z{"type":"usd","usd": 0.6}r.  r/  )r   r   r1  r   r2  r3  r   r   r   r   r   r   r   rE   r   r   r   r   r   r   s    r.   r   &Tencent3DTextureEditNode.define_schema  s5   yy.5)[""<<6_ # 
 		"^	    "!#!1!1!8!8+/H  	0 ###7###7_= 		..		++		##
 4O*
 *	
r0   r)  r   r   r#   c                   #    UnUR                   R                  5       nUS:w  a  [        SU S35      e[        USSSS9  [	        XU5      I S h  vN n[        U [        SS	S
9[        [        [        UR                  5       US9USS9[        S9I S h  vN nUR                  (       a9  [        SUR                  R                   SUR                  R                   35      e[        U [        SS	S
9[!        UR"                  S9[$        S S9I S h  vN n[&        R(                  " [+        [-        UR.                  S5      R0                  S5      I S h  vN [+        [-        UR.                  S5      R0                  S5      I S h  vN [3        [-        UR.                  S5      R0                  5      I S h  vN 5      $  GNm GN, N Nq NB N7f)Nr5  r7   '. Only FBX format is supported.r   rT   r   r   z&/proxy/tencent/hunyuan/3d-texture-editr   r   r9  T)rD   r   r   r   r   r   z,/proxy/tencent/hunyuan/3d-texture-edit/queryr   c                     U R                   $ r;   r   r   s    r.   r   2Tencent3DTextureEditNode.execute.<locals>.<lambda>E  r   r0   r   r   r5   r   )r>  rP   rc   r    r   r   r   r   r   r   rB  r/   r'   r(   r   r   r   r   r   r   r   r   rv   r   r   r   )	r   r)  r   r   r   rK   	model_urlr   r   s	            r.   r    Tencent3DTextureEditNode.execute%  s     oo++-%9+Ffghh8dS5c[QQ	 EfU4'&K,=,=,?YO
 5

 

 >>>x~~?R?R>SSUV^VdVdVlVlUmnooKTZ[(x~~>4/
 
 }})*@AUAUW\*]*a*achii)*@AUAUW\*]*a*achii./EfFZFZ\k/l/p/pqq
 	
- R


 jiqso   AG
F<AG
F?A<G
GAG
G0G
G
/G
3G4	G
?G
G
G
G
G
rG   N)r?   r@   rA   rB   r   r   r   rD   r,   r   r   r   r   rF   rG   r0   r.   rF  rF    sW    +
 +
Z %
,,%
 %
 	%

 
%
 %
r0   rF  c                   l    \ rS rSr\S 5       r\S\R                  S\S\	R                  4S j5       rSrg)	Tencent3DPartNodeiN  c                    [         R                  " SSSS[         R                  R                  S[         R                  [         R
                  /SS9[         R                  R                  SS	S	S
[         R                  R                  SSS9/[         R                  R                  SS9/[         R                  R                  [         R                  R                  [         R                  R                  /S[         R                  " SS9S9	$ )NrP  zHunyuan3D: 3D Partr{   z[Automatically perform component identification and generation based on the model structure.r)  z@3D model in FBX format. Model should have less than 30000 faces.r*  r   r   r   Tr   r   r,  r   z{"type":"usd","usd":0.6}r.  r/  )r   r   r1  r   r2  r3  r   r   r   r   r   r   r   r   r   r   s    r.   r   Tencent3DPartNode.define_schemaP  s    yy'-)u""<<6^ # 
 "!#!1!1!8!8+/H  	$ ###7 		..		++		##
 +EF? 
  	
r0   r)  r   r#   c                   #    UnUR                   R                  5       nUS:w  a  [        SU S35      e[        XU5      I S h  vN n[	        U [        SSS9[        [        [        UR                  5       US9S9[        S	9I S h  vN nUR                  (       a9  [        S
UR                  R                   SUR                  R                   35      e[        U [        SSS9[        UR                   S9["        S S9I S h  vN n[$        R&                  " [)        [+        UR,                  S5      R.                  S5      I S h  vN 5      $  GN
 N NO N7f)Nr5  r7  rJ  z/proxy/tencent/hunyuan/3d-partr   r   r9  r:  r   r   r   z$/proxy/tencent/hunyuan/3d-part/queryr   c                     U R                   $ r;   r   r   s    r.   r   +Tencent3DPartNode.execute.<locals>.<lambda>  r   r0   r   )r>  rP   rc   r   r   r   r   r   r   rB  r/   r'   r(   r   r   r   r   r   r   r   r   rv   r   r   )r   r)  r   r   rK   rM  r   r   s           r.   r   Tencent3DPartNode.executet  sB     oo++-%9+Ffghh5c[QQ	 =fM4$$+*;*;*=9M 5
 
 >>>x~~?R?R>SSUV^VdVdVlVlUmnooCFS(x~~>4/
 
 }})*@AUAUW\*]*a*achii
 	
' R

 jsK   AEEAEEA<EEAEE	EEEErG   N)r?   r@   rA   rB   r   r   r   rD   r   r   r   r   rF   rG   r0   r.   rP  rP  N  sM    !
 !
F 
,,
 
 
	
 
r0   rP  c                   |    \ rS rSr\S 5       rSS1r\S\R                  S\	S\	S\
S	\R                  4
S
 j5       rSrg)TencentSmartTopologyNodei  c                    [         R                  " SSSS[         R                  R                  S[         R                  [         R
                  [         R                  /SS9[         R                  R                  SS	S
/SS9[         R                  R                  S/ SQSS9[         R                  R                  SSSS[         R                  R                  SSS9/[         R
                  R                  SS9/[         R                  R                  [         R                  R                  [         R                  R                  /S[         R                   " SS9S9	$ )NrX  zHunyuan3D: Smart Topologyr{   znPerform smart retopology on a 3D model. Supports GLB/OBJ formats; max 200MB; recommended for high-poly models.r)  zInput 3D model (GLB or OBJ)r*  r   r   r   zSurface composition type.r   
face_level)mediumhighlowzPolygon reduction level.r   r   r   Tr   r   r   r   z{"type":"usd","usd":1.0}r.  r/  )r   r   r1  r   r   r   r3  r   r   r   r   r   r   r   r   r   r   r   s    r.   r   &TencentSmartTopologyNode.define_schema  s9   yy.4)U ""<<r||D9 # 
 "'97  
  56  
 "!#!1!1!8!8+/H  	!8 ###7 		..		++		##
 +EFU+
 +	
r0   r   r5   r)  r   rZ  r   r#   c                   #    UnUR                   R                  5       nX`R                  ;  a4  [        SU SSR	                  [        U R                  5      5       S35      e[        XU5      I S h  vN n[        U [        SSS9[        [        [        UR                  5       US9UUS	9[        S
9I S h  vN nUR                  (       a9  [        SUR                  R                   SUR                  R                    35      e[#        U [        SSS9[%        UR&                  S9[(        S S9I S h  vN n	[*        R,                  " [/        [1        U	R2                  S5      R4                  S5      I S h  vN 5      $  GN N NO N7f)Nr7  z'. Supported: r8  rS   z(/proxy/tencent/hunyuan/3d-smart-topologyr   r   r9  )rD   r   	FaceLevelr   zTask creation failed: [z] z./proxy/tencent/hunyuan/3d-smart-topology/queryr   c                     U R                   $ r;   r   r   s    r.   r   2TencentSmartTopologyNode.execute.<locals>.<lambda>  r   r0   r   r5   )r>  rP   r?  rc   r@  rA  r   r   r   r   r   r   rB  r/   r'   r(   r   r   r   r   r   r   r   r   rv   r   r   )
r   r)  r   rZ  r   r   rK   rM  r   r   s
             r.   r    TencentSmartTopologyNode.execute  sn     oo++-333,[M9KDIIV\]`]r]rVsLtKuuvw  6c[QQ	 GPVW4%&K,=,=,?YO($
 5

 

 >>6x~~7J7J6K2hnnNdNdMefggMV\](x~~>4/
 
 }})*@AUAUW\*]*a*achii
 	
+ R


 jsK   A/F1E=2AF5F 6A<F2F3AF4F5	F FFFrG   N)r?   r@   rA   rB   r   r   r?  r   rD   r,   r   r   r   r   rF   rG   r0   r.   rX  rX    sk    ,
 ,
\ $
,,$
 $
 	$

 $
 
$
 $
r0   rX  c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)TencentHunyuan3DExtensioni  r#   c                 J   #    [         [        [        [        [        [
        /$ 7fr;   )rx   r  r'  rF  rP  rX  )r<   s    r.   get_node_list'TencentHunyuan3DExtension.get_node_list  s#      ##"$$
 	
s   !#rG   N)r?   r@   rA   rB   r   listtyper   	ComfyNoderg  rF   rG   r0   r.   re  re    s)    
T$r||*<%= 
 
r0   re  c                     #    [        5       $ 7fr;   )re  rG   r0   r.   comfy_entrypointrm    s     $&&s   )T)7r[   ior   r   typing_extensionsr   comfy_api.latestr   r   r   r   comfy_api_nodes.apis.hunyuan3dr	   r
   r   r   r   r   r   r   r   r   r   r   comfy_api_nodes.utilr   r   r   r   r   r   r   r   r   r   r   r    r   objectboolr/   r2   r,   rn   ri  rv   rk  rx   r  r'  rF  rP  rX  re  rm  rG   r0   r.   <module>ru     s8      & = =       S  4 # #$)C )L )Z SW%25KODt
R\\ t
nj
bll j
ZW
R\\ W
tV
r|| V
rE
 E
PX
r|| X
v

 

' 9 'r0   