
    +j                     f   d dl Z d dlmZ d dlZd dlmZ d dlmZmZm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ ddd	d
dZ%d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          Z,de,fdZ-dS )    N)BytesIO)override)IOComfyExtensionInput)CreateVideoRequestCreateVideoRequestSourceCreateVideoResponseImageAsyncTaskResponseImageDownloadResponseImageEnhanceRequestImageStatusResponseOutputInformationVideo
ResolutionVideoAcceptResponseVideoCompleteUploadRequestVideoCompleteUploadRequestPartVideoCompleteUploadResponseVideoEnhancementFilterVideoFrameInterpolationFilterVideoStatusResponse)	ApiEndpointdownload_url_to_image_tensordownload_url_to_video_outputget_fs_object_sizeget_number_of_imagespoll_opsync_opupload_images_to_comfyapi validate_container_format_is_mp4ast-2zslf-1slc-1zslp-2.5)Astra 2Starlight (Astra) FastStarlight (Astra) CreativeStarlight Precise 2.5i(#  i  c                       e Zd Zed             Ze	 	 	 	 	 	 	 	 	 	 	 dd
edej        dededede	de	dede
de
de
dededej        fd            ZdS )TopazImageEnhancec                    t          j        ddddt           j                            ddg          t           j                            d          t           j                            d	d
ddd
          t           j                            dg dd
d
          t           j                            dd
d
dd
          t           j                            dddddt           j        j	        d
dd
	  	        t           j                            dddddt           j        j	        d
dd
	  	        t           j                            ddd
dd
          t           j
                            dd d d!d"t           j        j	        d
d#d
	  	        t           j
                            d$d d d!d"t           j        j	        d
d%d
	  	        t           j
                            d&d'd"d(d"t           j        j        d
)          t           j                            d*d
d
d+d
          t           j                            d,d
d
d-d
          gt           j                                        gt           j        j        t           j        j        t           j        j        gd
.          S )/Nr(   zTopaz Image Enhancezpartner/image/Topazz2Industry-standard upscaling and image enhancement.model	ReimagineoptionsimagepromptT z5Optional text prompt for creative upscaling guidance.)	multilinedefaulttooltipoptionalsubject_detection)All
Foreground
Background)r-   r4   advancedface_enhancementz-Enhance faces (if present) during processing.)r2   r4   r3   r9   face_enhancement_creativity              ?{Gz?z.Set the creativity level for face enhancement.)r2   minmaxstepdisplay_moder4   r3   r9   face_enhancement_strengthzAControls how sharp enhanced faces are relative to the background.crop_to_fillFzBy default, the image is letterboxed when the output aspect ratio differs. Enable to crop the image to fill the output dimensions.output_widthr   i }     zmZero value means to calculate automatically (usually it will be original size or output_height if specified).output_heightzJZero value means to output in the same height as original or output width.
creativity   	   )r2   r?   r@   rA   rB   r4   face_preservationz#Preserve subjects' facial identity.color_preservationzPreserve the original colors.)node_iddisplay_namecategorydescriptioninputsoutputshiddenis_api_node)r   SchemaCombor   ImageStringBooleanFloatNumberDisplaynumberIntsliderOutputHiddenauth_token_comfy_orgapi_key_comfy_org	unique_idclss    ;/home/wildlama/comfy/ComfyUI/comfy_api_nodes/nodes_topaz.pydefine_schemazTopazImageEnhance.define_schema2   s   y'.*Lw>>w''	"S!     '???!!	    
  & !K! !   1!#!1!8!L!  
 
 /!#!1!8!_!  
 
 
  "!!N! !   "!#!1!8! L!  
 
 #!#!1!8!h!  
 
  !#!1!8!    
  ' !A! !   
  ( !;! !  wbH !! 	.	+	#
 aq
 q
 q
 q	
    r0   r6   Tr=   皙?Fr   rI   r*   r.   r/   r5   r:   r;   rC   rD   rE   rG   rH   rK   rL   returnc                   K   t          |          dk    rt          d          t          | |ddd           d {V }t          | t	          dd          t
          t          ||||||||	r|	nd |
r|
nd |t          |                                          t          |                                          |d	         d
          d           d {V }t          | t	          d|j
                   t          d d d dd           d {V  t          | t	          d|j
                   t          d           d {V }t          j        t          |j                   d {V           S )NrF   z"Only one input image is supported.z	image/pngi   )
max_images	mime_typetotal_pixelsz'/proxy/topaz/image/v1/enhance-gen/asyncPOSTpathmethodr   png)r*   r/   r5   r:   r;   rC   rD   rE   rG   rH   rK   rL   
source_urloutput_formatzmultipart/form-data)response_modeldatacontent_typez/proxy/topaz/image/v1/status/rq   c                     | j         S Nstatusxs    rf   <lambda>z+TopazImageEnhance.execute.<locals>.<lambda>       qx rh   c                 $    t          | dd          S Nprogressr   getattrr~   s    rf   r   z+TopazImageEnhance.execute.<locals>.<lambda>       J)B)B rh   c                     | j         dz  S )N{Gz?)creditsr~   s    rf   r   z+TopazImageEnhance.execute.<locals>.<lambda>   s    ai$&6 rh   g       @<   )poll_endpointrv   status_extractorprogress_extractorprice_extractorpoll_intervalestimated_durationz/proxy/topaz/image/v1/download/F)rv   monitor_progress)r   
ValueErrorr   r   r   r   r   strlowerr   
process_idr   r   r   
NodeOutputr   download_url)re   r*   r.   r/   r5   r:   r;   rC   rD   rE   rG   rH   rK   rL   r   initial_responseresultss                    rf   executezTopazImageEnhance.execute   s,     "  &&!++ABBB61+
 
 
 
 
 
 
 
 
 ")FvVVV1$"3!1,G*C)-9C\\t/<Fmm$%"%&7"8"8">">"@"@#&'9#:#:#@#@#B#B'?#    /)"
 "
 "
 
 
 
 
 
 
. %+hK[Kf+h+hiii.//BB66!	
 	
 	
 		
 		
 		
 		
 		
 		
 		
  \?O?Z\\]]]0"	
 
 
 
 
 
 
 
 
 }#?@T#U#UUUUUUUVVVrh   N)r0   r6   Tr=   ri   Fr   r   rI   TT)__name__
__module____qualname__classmethodrg   r   r   rW   boolfloatintr   r   r    rh   rf   r(   r(   1   s       r
 r
 [r
h 
 !&!%-0+.""&#'=W =W=W {=W 	=W
 =W =W &+=W $)=W =W =W =W =W  =W !=W 
=W =W =W [=W =W =Wrh   r(   c                       e Zd Zed             Ze	 	 	 	 	 	 	 	 dd	ej        d
edededededede	de	dede
dedej        fd            ZdS )TopazVideoEnhancec                    t          j        ddddt           j                            d          t           j                            dd          t           j                            d	g d
          t           j                            dddg          t           j                            dg ddddd          t           j                            ddd          t           j                            ddgddd          t           j                            ddddt           j        j        ddd          t           j                            dd d!d"t           j        j        d#d$          t           j                            d%dd&dd'          t           j	                            d(d)d*d+d*t           j        j        d,dd-	  	        t           j                            d.g d/d0d1dd          gt           j        
                                gt           j        j        t           j        j        t           j        j        gdd2	  	        S )3Nr   zTopaz Video Enhance (Legacy)partner/video/TopazLBreathe new life into video with powerful upscaling and recovery technology.videoupscaler_enabledT)r2   upscaler_model)r$   r%   r&   r,   upscaler_resolutionFullHD (1080p)
4K (2160p)upscaler_creativitylowmiddlehighr   z>Creativity level (applies only to Starlight (Astra) Creative).)r-   r2   r3   r4   r9   interpolation_enabledF)r2   r4   interpolation_modelapo-8)r-   r2   r4   r9   interpolation_slowmorF      vSlow-motion factor applied to the input video. For example, 2 makes the output twice as slow and doubles the duration.)r2   r?   r@   rB   r3   r4   r9   interpolation_frame_rater         Output frame rate.)r2   r?   r@   rB   r3   r4   interpolation_duplicate7Analyze the input for duplicate frames and remove them.)r2   r3   r4   r9   !interpolation_duplicate_thresholdr>   MbP?皙?+Detection sensitivity for duplicate frames.)r2   r?   r@   rA   rB   r3   r4   r9   dynamic_compression_levelLowMidHighr   
CQP level.)	rM   rN   rO   rP   rQ   rR   rS   rT   is_deprecated)r   rU   Videor   rY   rV   r]   r[   r\   rZ   r_   r`   ra   rb   rc   rd   s    rf   rg   zTopazVideoEnhance.define_schema   sY   y'7*fw''
  !3T BB$      4?OQ]>^__)555!\!!    
  !8%RV WW4wiQXcgrvww*!#!1!8^!!  
 
 .!#!1!80!    
  -!U!! !   7 !#!1!8I!!  
 
 /222!(!!   yDL !! 	.	+	#
 gT
 T
 T
 T	
rh   r   Fr   rF   r   r>   r   r   r   r   r   r   r   r   r   r   r   r   r   rj   c                 	  K   |du r|du rt          d          t          |           |                                \  }}t          |                                          }|                                }|                                }|}|}|}g }|rd|v rd}d}nd}d}||z  }||k    r/|}t          ||z            }||k    r|}t          ||z            }n.|}t          ||z            }||k    r|}t          ||z            }|dz  d	k    r|d
z  }|dz  d	k    r|d
z  }|                    t          t          |         t          |         dk    r|nd t          |         dk    rdnd                      |r)|	}|                    t          |||	|
|                     t          | t          dd          t          t          t          dt!          |          t          |          |                                |t%          ||                    |t'          t%          ||          |dd|                    dd           d {V }t          | t          d|j         dd          t*          dd            d {V }t-          |j                  d
k    rt1          d!          t3          j        d"d#i$          4 d {V }t7          |t8                    rp|                    d	           |                    |j        d	         |d%          4 d {V }|j        d&         }d d d           d {V  n# 1 d {V swxY w Y   ntA          j!        |d'          5 }|                    |j        d	         |d%          4 d {V }|j        d&         }d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   t          | t          d|j         d(d          tD          tG          tI          d
|)          g*          d+d,           d {V  tK          | t          d|j         d-.          tL          d/ d0 d1 d23           d {V }tO          j(        tS          |j*        j+                   d {V           S )4NFFThere is nothing to do: both upscaling and interpolation are disabled.1080p8    p        r   rF   r"   Tr*   rH   isOptimizedModer*   slowmofps	duplicateduplicate_threshold/proxy/topaz/video/ro   rp   mp4widthheight	containersizeduration
frameCount	frameRate
resolutionAACCopyr   r   
audioCodecaudioTransferdynamicCompressionLevelsourcefiltersoutputCreating taskTask createdrv   rw   
wait_labelfinal_label_on_success/acceptPATCHPreparing uploadUpload startedrv   r   r   XLarge files are not currently supported. Please open an issue in the ComfyUI repository.Content-Type	video/mp4headersrw   raise_for_statusEtagrb/complete-uploadpartNumeTaguploadResultsFinalizing uploadUpload completed/statusry   c                     | j         S r{   r|   r~   s    rf   r   z+TopazVideoEnhance.execute.<locals>.<lambda>  r   rh   c                 $    t          | dd          S r   r   r~   s    rf   r   z+TopazVideoEnhance.execute.<locals>.<lambda>  r   rh   c                 b    | j         r'| j         j        d         r| j         j        d         dz  nd S Nr   r   	estimatescostr~   s    rf   r   z+TopazVideoEnhance.execute.<locals>.<lambda>  4    Q['rUVU`UefgUh'rq{'7':T'A'Anr rh         $@rv   r   r   r   r   ),r   r    get_dimensionsr   get_frame_rateget_durationget_stream_sourceappendr   UPSCALER_MODELS_MAPr   r   r   r
   r   r	   r   get_frame_countr   r   	requestIdr   lenurlsNotImplementedErroraiohttpClientSession
isinstancer   seekputr   builtinsopenr   r   r   r   r   r   r   r   downloadurl) re   r   r   r   r   r   r   r   r   r   r   r   r   	src_width
src_heightsrc_frame_rateduration_secsrc_video_streamtarget_widthtarget_heighttarget_frame_rater   target_pixel_pmax_long_sidearinitial_res
upload_ressessionresupload_etag
video_filefinal_responses                                    rf   r   zTopazVideoEnhance.executeA  s       u$$)>%)G)Gefff(/// % 4 4 6 6	:U113344))++ 2244 "* "	---!% $!% $Z'BJ&& ."=2#566-//#0L$'r(9$:$:M  . #L2$5 6 6 =00$1M#&}r'9#:#:La1$$!q A%%"NN&-n=7J>7Z^e7e7e 3 3ko-@-PT[-[-[TTae     ! 
	 8NN--/05(I     $26BBB.#/#+,<== ..$4466,)	*MMM    -)]SSS/$"(,E    $ '#1/
 
 
 
 
 
 
 
 
2 #I;+@III   /)#3	
 	
 	
 	
 	
 	
 	
 	
 	

 z!##%j   (.+1NOOO 	: 	: 	: 	: 	: 	: 	:SZ*G44 : %%a(((";;zq'9@Pcg;hh 6 6 6 6 6 6 6lo"%+f"5K6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ]#3T:: :j&{{:?1+=Jae{ff : : : : : : :jm&)k&&9: : : : : : : : : : : : : : : : : : : : : : : : : : :: : : : : : : : : : : : : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: R;+@RRR   7+2 !(     +#5!
 
 
 	
 	
 	
 	
 	
 	
 	
$  'Q;3HQQQRRR.//BBss 
  
  
 
 
 
 
 
 
 }#?@W@[#\#\\\\\\\]]]s   AO-"M0O-
M	O-M	O-)*ON3!O3
N==O N=OO-O	O-O	O--
O7:O7N)r   Fr   rF   r   Fr>   r   )r   r   r   r   rg   r   r   r   r   r   r   r   r   r   r   rh   rf   r   r      s       U
 U
 [U
n  $)&+#*$%(*(-37).S^ S^{S^ S^ 	S^
 !S^ !S^  $S^ !S^ "S^ #&S^ "&S^ ,1S^ $'S^ 
S^ S^ S^ [S^ S^ S^rh   r   c                   h    e Zd Zed             Ze	 d
dej        dededede	j
        f
d            Zd	S )TopazVideoEnhanceV2c                 F   t          j        ddddt           j                            d          t           j                            dt           j                            dt           j                            dd	d
g          t           j                            dddddt           j        j	        d          t           j
                            ddddt           d          t           j                            dddddt           j        j	        dd          t           j                            dddddt           j        j	        dd          g          t           j                            dt           j                            dd	d
g          g          t           j                            d t           j                            dd	d
g          t           j                            dg d!d"d#          g          t           j                            d$t           j                            dd	d
g          g          t           j                            d%g           g          t           j                            d&t           j                            d%g           t           j                            d't           j                            d(d)d*d+t           j        j        d,-          t           j                            d.d/d/d0t           j        j        d1d2          t           j                            d3d4d5d6          t           j                            d7dd8dd8t           j        j        d9d          g          g          t           j                            d:g d;d<d=d>          gt           j                                        gt           j        j        t           j        j        t           j        j        gdt          j        t          j        g d?@          dAB          C	  	        S )DNr>  zTopaz Video Enhancer   r   r   r   r#   r   r   r   r,   rH   g      ?r<   r=   r   z!Creative strength of the upscale.)r2   r?   r@   rA   rB   r3   r/   Tr0   zEOptional descriptive (not instructive) scene prompt.Capping input at z  frames (~15s @ 30fps) when set.)r1   r2   r3   sharpr>   zXPre-enhance sharpness: 0.0=Gaussian blur, 0.5=passthrough (default), 1.0=USM sharpening.)r2   r?   r@   rA   rB   r3   r9   realismzJPulls output toward photographic realism.Leave at 0 for the model default.r$   r%   r   r   )r-   r2   r3   r&   Disabledr   r   r   r   r   r   r   )r2   r?   r@   rB   r3   r   rF   r   r   )r2   r?   r@   rB   r3   r9   r   Fr   )r2   r3   r9   r   r   r   r   r   r   r   )r-   r2   r3   r4   )r   z"upscaler_model.upscaler_resolutionr   )widgetsu  
                (
                  $model := $lookup(widgets, "upscaler_model");
                  $res := $lookup(widgets, "upscaler_model.upscaler_resolution");
                  $interp := $lookup(widgets, "interpolation_model");
                  $is4k := $contains($res, "4k");
                  $hasInterp := $interp != "disabled";
                  $rates := {
                    "starlight (astra) fast":     {"hd": 0.43, "uhd": 0.85},
                    "starlight precise 2.5":      {"hd": 0.70, "uhd": 1.54},
                    "astra 2":                    {"hd": 1.72, "uhd": 2.85},
                    "starlight (astra) creative": {"hd": 2.25, "uhd": 3.99}
                  };
                  $surcharge := $is4k ? 0.28 : 0.14;
                  $entry := $lookup($rates, $model);
                  $base := $is4k ? $entry.uhd : $entry.hd;
                  $hi := $base + ($hasInterp ? $surcharge : 0);
                  $model = "disabled"
                    ? {"type":"text","text":"Interpolation only"}
                    : ($hasInterp
                        ? {"type":"text","text":"~" & $string($base) & "–" & $string($hi) & " credits/src frame"}
                        : {"type":"text","text":"~" & $string($base) & " credits/src frame"})
                )
                )
depends_onexpr)	rM   rN   rO   rP   rQ   rR   rS   rT   price_badge)r   rU   r   r   DynamicComboOptionrV   rZ   r[   r^   rX   AST2_MAX_FRAMES_WITH_PROMPTr]   r\   rY   r_   r`   ra   rb   rc   
PriceBadgePriceBadgeDependsrd   s    rf   rg   z!TopazVideoEnhanceV2.define_schema  sD   y).*fw''%%$..% "/DO_amNn o o "$0,/(+(+),131A1H,O !/ !" !" !#	$,.2,.-v8S-v -v -v	 !0 !" !" !#$+,/(+(+)-131A1H-h-1 !/ 
!" 
!" !#$-,/(+(+)-131A1H-H-1 !/ 
!" 
!";(+ +X ..4X^^,AL\^jKk^lln  ..8 "/DO_amNn o o "$0,E,E,E,1,O	 !/ !" !"  ..3X^^,AL\^jKk^llm  ..z2>>CB & E EL %%)..z2>>..# "$>,.(*(+131A1H,@ !- !" !" !#$:,-()(*131A1H-n-1 !- 	!" 	!" !#
 0 0$=,1,e-1	 !1 !" !" !#$G,0(-(+).131A1H,Y-1 !/ 	!" 	!"3#& &) & , ,Z /222!(!   k|| !! 	.	+	#
 / 9 9 9   
  Wj
 j
 j
 j	
rh   r   r   r   r   r   rj   c                   K   |d         }|d         }|dk    r|dk    rt          d          t          |           |                                \  }}t          |                                          }	|                                }
|                                }|}|}|	}g }|dk    rd|d         v rd}d}nd	}d
}||z  }||k    r/|}t          ||z            }||k    r|}t          ||z            }n.|}t          ||z            }||k    r|}t          ||z            }|dz  dk    r|dz  }|dz  dk    r|dz  }t          |         }|dk    r,|                    t          ||d         d                     n|dk    r|
                                }|d         pd                                }|r&|t          k    rt          dt           d| d          |t          k    rt          dt           d| d          |d         }|                    t          ||d         |pd |d         |dk    r|nd                      n#|                    t          |                     |dk    rG|d         }|                    t          ||d          |d         |d!         |d"         #                     t          | t!          d$d%&          t"          t%          t'          d't)          |          t          |
          |
                                |	t+          ||(          )          |t-          t+          ||(          |d*d+|,          -          d.d/0           d {V }t          | t!          d$|j         d1d2&          t0          d3d45           d {V }t3          |j                  dk    rt7          d6          t9          j        d7d8i9          4 d {V }t=          |t>                    rp|                     d           |!                    |j        d         |d:          4 d {V }|j"        d;         }d d d           d {V  n# 1 d {V swxY w Y   ntG          j$        |d<          5 }|!                    |j        d         |d:          4 d {V }|j"        d;         }d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   t          | t!          d$|j         d=d2&          tJ          tM          tO          d|>          g?          d@dA0           d {V  tQ          | t!          d$|j         dBC          tR          dD dE dF dGH           d {V }tU          j+        tY          |j-        j.                   d {V           S )INr   r   rB  r   r   r   r   r   r   r   r   r   rF   r"   rH   Tr   r!   r/   r0   z$Astra 2 with a prompt is limited to z( input frames (~15s @ 30fps); video has z'. Clear the prompt or shorten the clip.zAstra 2 is limited to z input frames; video has .rA  r@  )r*   rH   r/   r@  rA  )r*   r   r   r   r   r   r   ro   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r
  r  r  ry   c                     | j         S r{   r|   r~   s    rf   r   z-TopazVideoEnhanceV2.execute.<locals>.<lambda>(  r   rh   c                 $    t          | dd          S r   r   r~   s    rf   r   z-TopazVideoEnhanceV2.execute.<locals>.<lambda>)  r   rh   c                 b    | j         r'| j         j        d         r| j         j        d         dz  nd S r  r  r~   s    rf   r   z-TopazVideoEnhanceV2.execute.<locals>.<lambda>*  r  rh   r  r  )/r   r    r  r   r  r  r  r  r  r   r  striprI  AST2_MAX_FRAMESr   r   r   r
   r   r	   r   r   r   r  r   r  r   r!  r"  r#  r$  r   r%  r&  r   r'  r(  r   r   r   r   r   r   r   r   r)  r*  )re   r   r   r   r   upscaler_choiceinterpolation_choicer+  r,  r-  r.  r/  r0  r1  r2  r   r3  r4  r5  model_idn_framesast2_promptrA  r6  r7  r8  r9  r:  r;  r<  s                                 rf   r   zTopazVideoEnhanceV2.execute  sW	      ))9:23HIj((-AZ-O-Oefff(/// % 4 4 6 6	:U113344))++ 2244 "*j((.)>???!% $!% $Z'BJ&& ."=2#566-//#0L$'r(9$:$:M  . #L2$5 6 6 =00$1M#&}r'9#:#:La1$$!q A%%"*?;H7""*&#1,#?(,      W$$ 0022-h7=2DDFF 8.I#I#I$g?Z g g5=g g g   o--$%so%s%shp%s%s%sttt(3*&#1,#? + 3t,W5,3aKKT      5HEEEFFF:-- 34N ONN-../EF+,FG12KL(;<_(`     $26BBB.#/#+,<== ..$4466,)	*MMM    -)]SSS/$"(,E    $ '#1/
 
 
 
 
 
 
 
 
2 #I;+@III   /)#3	
 	
 	
 	
 	
 	
 	
 	
 	

 z!##%j   (.+1NOOO 	: 	: 	: 	: 	: 	: 	:SZ*G44 : %%a(((";;zq'9@Pcg;hh 6 6 6 6 6 6 6lo"%+f"5K6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ]#3T:: :j&{{:?1+=Jae{ff : : : : : : :jm&)k&&9: : : : : : : : : : : : : : : : : : : : : : : : : : :: : : : : : : : : : : : : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: R;+@RRR   7+2 !(     +#5!
 
 
 	
 	
 	
 	
 	
 	
 	
$  'Q;3HQQQRRR.//BBss 
  
  
 
 
 
 
 
 
 }#?@W@[#\#\\\\\\\]]]s   %AT9QT
Q#	#T&Q#	'T *S'*S
8S'

SS'SS'T'S+	+T.S+	/T
TTN)r   )r   r   r   r   rg   r   r   dictr   r   r   r   r   rh   rf   r>  r>    s        k
 k
 [k
Z  */e^ e^{e^ e^ "	e^
 $'e^ 
e^ e^ e^ [e^ e^ e^rh   r>  c                   L    e Zd Zedeeej                          fd            ZdS )TopazExtensionrj   c                 .   K   t           t          t          gS r{   )r(   r   r>  )selfs    rf   get_node_listzTopazExtension.get_node_list1  s       
 	
rh   N)	r   r   r   r   listtyper   	ComfyNoder]  r   rh   rf   rZ  rZ  0  sE        
T$r|*<%= 
 
 
 X
 
 
rh   rZ  rj   c                  "   K   t                      S r{   )rZ  r   rh   rf   comfy_entrypointrb  :  s      rh   ).r'  ior   r"  typing_extensionsr   comfy_api.latestr   r   r   comfy_api_nodes.apis.topazr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   comfy_api_nodes.utilr   r   r   r   r   r   r   r   r    r  rR  rI  r`  r(   r   r>  rZ  rb  r   rh   rf   <module>rh     s           & & & & & & 6 6 6 6 6 6 6 6 6 6                                   $
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 %")&	   ! tW tW tW tW tW tW tW tWnm^ m^ m^ m^ m^ m^ m^ m^`U^ U^ U^ U^ U^", U^ U^ U^p

 
 
 
 
^ 
 
 
      rh   