
    +j(5                     N   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 d dlmZmZmZmZmZmZmZmZmZmZ dddd	d
dddZddddddZddddddZdhZg dZg dZdZ e dz  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)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                   d    e Zd Zed             Zededej        dede	de
j        f
d            ZdS )	HitPawGeneralImageEnhancec                 >   t          j        ddddt           dt           j                            dddg	          t           j                            d
          t           j                            dg d	          t           j                            ddd          gt           j                                        gt           j        j	        t           j        j
        t           j        j        gdt          j        t          j        dg          d          	  	        S )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_schemaz'HitPawGeneralImageEnhance.define_schemaE   s   y/7+?0? ? ? w1F0UVVw''/CC
  $!c !  		 !! 	.	+	#
 /	BBB  3*
 *
 *
 *	
    r)   r.   r/   r3   returnc                   K   t          |          \  }}|}||z  |z  |z  }|t          k    r|r|||z  }	d}
t          }dD ]U}||k    r	|	|z  |z  }|t          k    r|}
d } n4t          j        |t          z            }|dk    r|}
t          ||z  z  } nV|t	          ||          }|
}n5||z  }||z  }t          d| d| d|dd	t          dd
t           d          t          | t          dd          t          t          | d| dt          | |d            d {V           dd           d {V }|j        dk    rt          d|j         d|j                   |j        j        dz  t!          | t          dd          t#          |j        j                  t&          d fdd           d {V }t)          j        t-          |j        j                   d {V           S )Nr0   )r2   r1   r0   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                     | j         j        S Nre   statusrX   s    rR   <lambda>z3HitPawGeneralImageEnhance.execute.<locals>.<lambda>   
    qv} rT   c                     S rp    rX   request_prices    rR   rt   z3HitPawGeneralImageEnhance.execute.<locals>.<lambda>       m rT         $@re   rd   status_extractorprice_extractorpoll_interval)r   MAX_PIXELS_GENERATIVEmathsqrtr   
ValueErrorrF   r   r   r
   r   r   codemessagere   consume_coinsr   r	   rn   r   r   
NodeOutputr   res_url)rQ   r)   r.   r/   r3   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_responsery   s                      @rR   executez!HitPawGeneralImageEnhance.executes   s      -U33(8?J000 $v~#8 !*  I ?22 *6*BY*N'*.CCC )+/(&*i0CF[0[&\&\O&#-- )+@YQZEZ+[( .
 $/25GWXXXE!&$6 & 8 eL e e= e e]_ e e7Lqe eYje e e   $?OOO-.#77n7776sEPTUUUUUUUUU   '#1

 

 

 

 

 

 

 

 

 s""h{?OhhS^Sfhhiii#(6=&<VLLL'{/?/FGGG-443333 
  
  
 
 
 
 
 
 
 }#?@S@[#\#\\\\\\\]]]rT   N)__name__
__module____qualname__classmethodrS   strr   rH   intboolr   r   r   rw   rT   rR   r'   r'   D   s        +
 +
 [+
Z B^B^ {B^ 	B^
 B^ 
B^ B^ B^ [B^ B^ B^rT   r'   c                   \    e Zd Zed             Zededej        dej	        fd            Z
dS )HitPawVideoEnhancec                    g }t           D ]m}|t          v rt          }nt          }|                    t
          j                            |t
          j        	                    d|          g                     nt          j
        ddddt
          j        	                    d|          t
          j        	                    d          gt
          j                                        gt
          j        j        t
          j        j        t
          j        j        gd	t          j        t          j        dd
g          d          	  	        S )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.resolutionr6   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"}
                  }
                )
                r8   r;   )VIDEO_MODELS_MODELS_MAPLIMITED_RESOLUTION_MODELSRESOLUTIONS_LIMITEDRESOLUTIONS_FULLappendr   DynamicComboOptionrG   r   rE   VideorJ   rK   rL   rM   rN   rO   rP   )rQ   model_optionsr_   resolutionss       rR   rS   z HitPawVideoEnhance.define_schema   s>   1 
	 
	J6661.  &&X^^L+^FFG     y(/+4 %%g}%EEw''
 !! 	.	+	#
 /BT8UVVV&) ) )'=
 =
 =
 =	
rT   r)   r   rU   c                   K   t          |dd           |d         }|                                \  }}|dk    r|}|}n||k    r7t          |         }||k     rt          d| d| d| d	| d| d
          |}|}nqt	          ||          }	t
          |         }||	k     rt          d| d| d|	 d          ||k    r|}t          |||z  z            }n|}t          |||z  z            }t          | t          dd          t          t          t          | |           d {V ||g||gt          |d                            dd           d {V }
|
j        j        dz  |
j        dk    rt          d|
j         d|
j                   t#          | t          dd          t%          |
j        j                  t(          d fdd           d {V }t+          j        t/          |j        j                   d {V           S )Ng      ?i  )min_durationmax_durationr   r%   zSelected resolution z (rX   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-enhancerrZ   r[   r)   )	video_urlr   original_resolutionr_   ra   rb   rc   rk   rh   ri   rj   rl   rm   c                     | j         j        S rp   rq   rs   s    rR   rt   z,HitPawVideoEnhance.execute.<locals>.<lambda>C  ru   rT   c                     S rp   rw   rx   s    rR   rt   z,HitPawVideoEnhance.execute.<locals>.<lambda>D  rz   rT   r{   r|   )r   get_dimensionsRESOLUTION_SQUARE_MAPr   minRESOLUTION_TARGET_MAPr   r   r   r
   r   r   r   re   r   r   r   r   r   rn   r   r   r   r   r   )rQ   r)   r   r   	src_width
src_heightr   r   target_sizemin_dimensionr   r   ry   s               @rR   r   zHitPawVideoEnhance.execute  s&      	 CgNNNN<(
 % 4 4 6 6	:##$L&MMJ&&3J?**$xz x x[ x x; x x,5x x8Bx x x    + + #Iz : :3J?..$Lz L L[ L L@ML L L  
 z))$/M#&{i*6L'M#N#NLL#.L$'zI7M(N$O$OM#?OOO-. 8e D DDDDDDD(-8%.
$;25>B	   '#1
 
 
 
 
 
 
 
 
 $(6=s""h{?OhhS^Sfhhiii&<VLLL&k.>.EFFF-443333 
  
  
 
 
 
 
 
 
 }#?@S@[#\#\\\\\\\]]]rT   N)r   r   r   r   rS   r   r   r   r   r   r   rw   rT   rR   r   r      sz        K
 K
 [K
Z >^>^ {>^ 
	>^ >^ >^ [>^ >^ >^rT   r   c                   L    e Zd Zedeeej                          fd            ZdS )HitPawExtensionrU   c                 "   K   t           t          gS rp   )r'   r   )selfs    rR   get_node_listzHitPawExtension.get_node_listK  s       &
 	
rT   N)	r   r   r   r   listtyper   	ComfyNoder   rw   rT   rR   r   r   J  sE        
T$r|*<%= 
 
 
 X
 
 
rT   r   rU   c                  "   K   t                      S rp   )r   rw   rT   rR   comfy_entrypointr   S  s      rT   )'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   rF   r   r'   r   r   r   rw   rT   rR   <module>r      sr    & & & & & & 6 6 6 6 6 6 6 6 6 6                                         $9#8"6"6"6/,   
   
   55  HGG JJJ  # )Y6 r^ r^ r^ r^ r^ r^ r^ r^jN^ N^ N^ N^ N^ N^ N^ N^b
 
 
 
 
n 
 
 
      rT   