
    +j(5                     P   S SK r S SKJr  S SKJrJrJr  S SK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  SSSS	S
SSS.rSSSSSS.rSSSSSS.rS1r/ SQr/ SQrSr \ S-  r! " S S\RD                  5      r# " S S\RD                  5      r$ " S S \5      r%S!\%4S" jr&g)#    N)override)IOComfyExtensionInput)ImageEnhanceTaskCreateRequestInputVideoModelTaskCreateDataResponseTaskCreateResponseTaskStatusPollRequestTaskStatusResponseVideoEnhanceTaskCreateRequest)
ApiEndpointdownload_url_to_image_tensordownload_url_to_video_outputdownscale_image_tensorget_image_dimensionspoll_opsync_opupload_image_to_comfyapiupload_video_to_comfyapivalidate_video_durationportrait_restore_1xportrait_restore_2xgeneral_restore_1xgeneral_restore_2xgeneral_restore_4xultrahd_restore_2xgenerative_1x)zPortrait Restore Model (1x)zPortrait Restore Model (2x)zGeneral Restore Model (1x)zGeneral Restore Model (2x)zGeneral Restore Model (4x)zUltra HD Model (2x)Generative Model (1x)i  i8  i  ip  i  )720p1080p2K/QHD4K/UHD8Ki   i   r   )originalr    r!   r"   r#   )r%   r    r!   r"   r#   r$   i Hi@B c                   t    \ rS rSr\S 5       r\S\S\R                  S\	S\
S\R                  4
S j5       rS	rg
)HitPawGeneralImageEnhanceD   c                 Z   [         R                  " SSSS[         S3[         R                  R	                  SSS/S	9[         R
                  R	                  S
5      [         R                  R	                  S/ SQS	9[         R                  R	                  SSSS9/[         R
                  R                  5       /[         R                  R                  [         R                  R                  [         R                  R                  /S[         R                  " [         R                  " S/S9SS9S9	$ )Nr'   zHitPaw General Image Enhancezpartner/image/HitPawzbUpscale low-resolution images to super-resolution, eliminate artifacts and noise. Maximum output: z megapixels.modelgenerative_portrait
generativeoptionsimageupscale_factor)         auto_downscaleFzEAutomatically downscale input image if output would exceed the limit.)defaulttooltipTwidgetsa  
                (
                  $prices := {
                    "generative_portrait": {"min": 0.02, "max": 0.06},
                    "generative": {"min": 0.05, "max": 0.15}
                  };
                  $price := $lookup($prices, widgets.model);
                  {
                    "type": "range_usd",
                    "min_usd": $price.min,
                    "max_usd": $price.max
                  }
                )
                
depends_onexpr	node_iddisplay_namecategorydescriptioninputsoutputshiddenis_api_nodeprice_badge)r   SchemaMAX_MP_GENERATIVECombor   ImageBooleanOutputHiddenauth_token_comfy_orgapi_key_comfy_org	unique_id
PriceBadgePriceBadgeDepends)clss    </home/wildlama/comfy/ComfyUI/comfy_api_nodes/nodes_hitpaw.pydefine_schema'HitPawGeneralImageEnhance.define_schemaE   s    yy/7+01? w1F0UVw'/C

  $!c ! 		 ! 		..		++		##
 //	B3*
 *	
    r*   r/   r0   r4   returnc                   ^#    [        U5      u  pVUnXV-  U-  U-  nU[        :  a  U(       at  Xe-  n	Sn
[        nS HS  nX:  a  M
  X-  U-  nU[        ::  a  Un
S n  O6[        R                  " U[        -  5      nUS::  d  MF  Un
[        X-  -  n  O   Ub	  [	        X+S9nU
nO-Xg-  nXW-  n[        SU SU SUS S	[        S S
[         S35      e[        U [        SSS9[        [        U SU S3[        XS S9I S h  vN S9SSS9I S h  vN nUR                  S:w  a%  [        SUR                   SUR                   35      eUR                  R                  S-  m[!        U [        SSS9[#        UR                  R$                  S9[&        S U4S jSS9I S h  vN n[(        R*                  " [-        UR                  R.                  5      I S h  vN 5      $  N N NC N7f)Nr1   )r3   r2   r1   g       @)total_pixelszOutput size (xz = ,z) pixels) exceeds maximum allowed size of z	 pixels (zRMP). Enable auto_downscale or use a smaller input image or a lower upscale factor.z /proxy/hitpaw/api/photo-enhancerPOSTpathmethod_)
model_nameimg_urlCreating taskTask createdresponse_modeldata
wait_labelfinal_label_on_success   Task creation failed with code :   /proxy/hitpaw/api/task-statusjob_idc                 .    U R                   R                  $ Nrg   statusrZ   s    rS   <lambda>3HitPawGeneralImageEnhance.execute.<locals>.<lambda>       qvv}}rV   c                    > T$ rr    rZ   request_prices    rS   rv   rw          mrV         $@rg   rf   status_extractorprice_extractorpoll_interval)r   MAX_PIXELS_GENERATIVEmathsqrtr   
ValueErrorrG   r   r   r
   r   r   codemessagerg   consume_coinsr   r	   rp   r   r   
NodeOutputr   res_url)rR   r*   r/   r0   r4   heightwidthrequested_scaleoutput_pixelsinput_pixelsscalemax_input_pixels	candidatescale_output_pixelsdownscale_ratiooutput_widthoutput_heightinitial_resfinal_responser|   s                      @rS   execute!HitPawGeneralImageEnhance.executes   s:     -U3(8?J00$~#8 !*I 2 *6*BY*N'*.CC )+/(&*ii0CF[0[&\O&#- )+@YEZ+[( "+ $/25XE!&$6 & 8 #L>=/]STDU V77LQ6OyYjXk lde  $?O-.#WAn%5Q76sPTUU '#1

 

 s">{?O?O>PPRS^SfSfRghii#((66=&<VL'{/?/?/F/FG-43 
 
 }}#?@S@S@[@[#\\]]# V


 ]sP   A;G#A:G#<G=G#
GBG#G6G#G!	G#G#G#!G#rz   N)__name__
__module____qualname____firstlineno__classmethodrT   strr   rI   intboolr   r   r   __static_attributes__rz   rV   rS   r'   r'   D   so    +
 +
Z B^B^ {{B^ 	B^
 B^ 
B^ B^rV   r'   c                   l    \ rS rSr\S 5       r\S\S\R                  S\	R                  4S j5       rSrg)	HitPawVideoEnhance   c                    / n[          Hf  nU[        ;   a  [        nO[        nUR	                  [
        R                  R                  U[
        R                  R                  SUS9/5      5        Mh     [
        R                  " SSSS[
        R                  R                  SUS9[
        R                  R                  S5      /[
        R                  R                  5       /[
        R                  R                  [
        R                  R                  [
        R                  R                   /S	[
        R"                  " [
        R$                  " SS
/S9SS9S9	$ )N
resolutionr-   r   zHitPaw Video Enhancezpartner/video/HitPawzvUpscale low-resolution videos to high resolution, eliminate artifacts and noise. Prices shown are per second of video.r*   videoTzmodel.resolutionr7   aY  
                (
                  $m := $lookup(widgets, "model");
                  $res := $lookup(widgets, "model.resolution");
                  $standard_model_prices := {
                    "original": {"min": 0.01, "max": 0.198},
                    "720p": {"min": 0.01, "max": 0.06},
                    "1080p": {"min": 0.015, "max": 0.09},
                    "2k/qhd": {"min": 0.02, "max": 0.117},
                    "4k/uhd": {"min": 0.025, "max": 0.152},
                    "8k": {"min": 0.033, "max": 0.198}
                  };
                  $ultra_hd_model_prices := {
                    "original": {"min": 0.015, "max": 0.264},
                    "720p": {"min": 0.015, "max": 0.092},
                    "1080p": {"min": 0.02, "max": 0.12},
                    "2k/qhd": {"min": 0.026, "max": 0.156},
                    "4k/uhd": {"min": 0.034, "max": 0.203},
                    "8k": {"min": 0.044, "max": 0.264}
                  };
                  $generative_model_prices := {
                    "original": {"min": 0.015, "max": 0.338},
                    "720p": {"min": 0.008, "max": 0.090},
                    "1080p": {"min": 0.05, "max": 0.15},
                    "2k/qhd": {"min": 0.038, "max": 0.225},
                    "4k/uhd": {"min": 0.056, "max": 0.338}
                  };
                  $prices := $contains($m, "ultra hd") ? $ultra_hd_model_prices :
                             $contains($m, "generative") ? $generative_model_prices :
                             $standard_model_prices;
                  $price := $lookup($prices, $res);
                  {
                    "type": "range_usd",
                    "min_usd": $price.min,
                    "max_usd": $price.max,
                    "format": {"approximate": true, "suffix": "/second"}
                  }
                )
                r9   r<   )VIDEO_MODELS_MODELS_MAPLIMITED_RESOLUTION_MODELSRESOLUTIONS_LIMITEDRESOLUTIONS_FULLappendr   DynamicComboOptionrH   r   rF   VideorK   rL   rM   rN   rO   rP   rQ   )rR   model_optionsra   resolutionss       rS   rT    HitPawVideoEnhance.define_schema   s   1J661.  &&XX^^L+^FG 2 yy(/+4 %%g}%Ew'
 ! 		..		++		##
 //BT8UV&)'=
 =	
rV   r*   r   rW   c                   ^#    [        USSS9  US   nUR                  5       u  pEUS:X  a  UnUnOXE:X  a.  [        U   nX:  a  [        SU SU SU S	U SU S
35      eUnUnOX[	        XE5      n	[
        U   nX:  a  [        SU SU SU	 S35      eXE:  a  Un[        XU-  -  5      nOUn[        XU-  -  5      n[        U [        SSS9[        [        [        X5      I S h  vN Xg/XE/[        US      S9SSS9I S h  vN n
U
R                  R                  S-  mU
R                  S:w  a%  [        SU
R                   SU
R                    35      e[#        U [        SSS9[%        U
R                  R&                  S9[(        S U4S jSS9I S h  vN n[*        R,                  " [/        UR                  R0                  5      I S h  vN 5      $  N N NC N7f)Ng      ?i  )min_durationmax_durationr   r%   zSelected resolution z (rZ   z#) is smaller than the input video (z3). Please select a higher resolution or 'original'.z8p) is smaller than the input video's shorter dimension (z4p). Please select a higher resolution or 'original'.z /proxy/hitpaw/api/video-enhancerr\   r]   r*   )	video_urlr   original_resolutionra   rc   rd   re   rm   rj   rk   rl   rn   ro   c                 .    U R                   R                  $ rr   rs   ru   s    rS   rv   ,HitPawVideoEnhance.execute.<locals>.<lambda>C  rx   rV   c                    > T$ rr   rz   r{   s    rS   rv   r   D  r}   rV   r~   r   )r   get_dimensionsRESOLUTION_SQUARE_MAPr   minRESOLUTION_TARGET_MAPr   r   r   r
   r   r   r   rg   r   r   r   r   r   rp   r   r   r   r   r   )rR   r*   r   r   	src_width
src_heightr   r   target_sizemin_dimensionr   r   r|   s               @rS   r   HitPawVideoEnhance.execute  s;     	 CgN<(
 % 4 4 6	#$L&M&3J?*$.zl"[M;- X,,5;a
|Cvx   + + #I :3J?.$.zl"[M J@@M OKL 
 )$/M#&{*6L'M#NL#.L$'I7M(N$OM#?O-. 8 DD(8%.$;25>B	 '#1
 
 $((66=s">{?O?O>PPRS^SfSfRghii&<VL&k.>.>.E.EF-43 
 
 }}#?@S@S@[@[#\\]]) E
 
 ]sI   C G#G$G GBGG6GG		GGGGrz   N)r   r   r   r   r   rT   r   r   r   r   r   r   r   rz   rV   rS   r   r      sT    K
 K
Z >^>^ {{>^ 
	>^ >^rV   r   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)HitPawExtensioniJ  rW   c                 "   #    [         [        /$ 7frr   )r'   r   )selfs    rS   get_node_listHitPawExtension.get_node_listK  s      &
 	
s   rz   N)r   r   r   r   r   listtyper   	ComfyNoder   r   rz   rV   rS   r   r   J  s)    
T$r||*<%= 
 
rV   r   rW   c                     #    [        5       $ 7frr   )r   rz   rV   rS   comfy_entrypointr   S  s     s   )'r   typing_extensionsr   comfy_api.latestr   r   r   comfy_api_nodes.apis.hitpawr   r   r	   r
   r   r   r   comfy_api_nodes.utilr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rG   r   r'   r   r   r   rz   rV   rS   <module>r      s     & 6 6     $9#8"6"6"6/,  
  
  55  H J  # )Y6 r^ r^jN^ N^b
n 
 rV   