
    +j                     `   d dl Zd dlZd dlmZ d dlmZ d dlZd dl	Zd dl
Zd dlmZ d dlmZmZ  ej                    dd            Z G d	 d
ej                  Z ej                    dd            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)trange)override)to_d)ComfyExtensionio       @bislerpc	           
      >   |i n|}|$t          t          |          dz  dz   d          }n%|dz  }t          |t          |          dz             }t          j        d||          dd          }	|                                }
|                    |j        d         g          }t          t          |          dz
  |          D ]} | |||         |z  fi |}| |||||         ||         |d           |}|t          |	          k     r[t          j
                            |t          |
d         |	|         z            t          |
d         |	|         z            |d	          }||dz            dk    r#|||dz            t          j        |          z  z  }|S )
N            ?r   disablexisigma	sigma_hatdenoiseddisabled)maxlenminnplinspacesizenew_onesshaper   comfyutilscommon_upscaleroundtorch
randn_like)modelr   sigmas
extra_argscallbackr   total_upscaleupscale_methodupscale_stepsupscales
orig_shapes_inr   r   s                 D/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_advanced_samplers.pysample_lcm_upscaler2      s   !)zJCKK1,q0!44M3v;;?;;{3}==abbAHJ::qwqzl##DCKK!OW555 
5 
55F1I,;;
;;H11vayvay^fgghhhs8}}**1eJrNXa[4P.Q.QSXYcdfYgjrstjuYuSvSv  yG  IS  T  TA!a%=1A!1!!4!444AH    c                   b    e Zd Zg dZedej        fd            Zedej        fd            Z	dS )SamplerLCMUpscale)r	   znearest-exactbilinearareabicubicreturnc                 F   t          j        ddt           j                            dddddd	          t           j                            d
ddddd	          t           j                            d| j                  gt           j                                        g          S )Nr5   model/sampling/samplersscale_ratior   g?g      4@{Gz?T)defaultr   r   stepadvancedscale_stepsr   i  r   r,   )options)node_idcategoryinputsoutputs)	r   SchemaFloatInputIntComboUPSCALE_METHODSSamplerOutputclss    r1   define_schemazSamplerLCMUpscale.define_schema,   s    y'.}csSWbfgg]BBDq[_``/9LMM
 Z&&(()	
 	
 	
 		
r3   c                     |dk     rd }t           j                            t          |||d          }t	          j        |          S )Nr   )r+   r-   r,   )extra_options)r!   samplersKSAMPLERr2   r   
NodeOutput)rP   r<   rA   r,   samplers        r1   executezSamplerLCMUpscale.execute9   s^    ??K.))*<^i  }H  \j  Mk  Mk)  l  l}W%%%r3   N)
__name__
__module____qualname__rL   classmethodr   rG   rQ   rV   rX    r3   r1   r5   r5   )   so        QQQO

bi 

 

 

 [

 &"- & & & [& & &r3   r5   c           	         |i n|}dgfd}|                     di                                           }t          j                            ||d          |d<   |                    |j        d         g          }t          t          |          dz
  |          D ]i}	||	         }
 | ||
|z  fi |}t          ||z
  d         z   ||	         |          }| |||	||	         |
|d           ||	dz            |
z
  }|||z  z   }j|S )	Nr   c                 *    | d         d<   | d         S )Nuncond_denoisedr   r   r]   )argstemps    r1   post_cfg_functionz*sample_euler_pp.<locals>.post_cfg_functionF   s    ()QJr3   model_optionsT)disable_cfg1_optimizationr   r   r   )
getcopyr!   model_patcher#set_model_options_post_cfg_functionr   r    r   r   r   )r'   r   r(   r)   r*   r   rc   rd   r0   r   r   r   ddtrb   s                 @r1   sample_euler_pprl   A   sX   !)zJ3D          NN?B77<<>>M"'"5"Y"YZgiz  W["Y  #\  #\J::qwqzl##DCKK!OW555  1I	5I,;;
;;XQ'H==H11vayy^fgghhhAE]Y&BJHr3   c                   Z    e Zd Zedej        fd            Zedej        fd            ZdS )
SamplerLCMr9   c                 F   t          j        dddt           j                            dddddd	
          t           j                            dddddd
          t           j                            dddddd
          gt           j                                        g          S )Nrn   r;   zdLCM sampler with tunable per-step noise. s_noise is a multiplier on the model's training noise scales_noiser   g        g      P@r=   zCPer-step noise multiplier at the first step (1.0 = match training).)r>   r   r   r?   tooltips_noise_endzYPer-step noise multiplier at the last step. Set equal to s_noise for a constant schedule.noise_clip_stdg      $@z.Clamp per-step noise to +/- N*std. 0 disables.)rC   rD   descriptionrE   rF   )r   rG   rH   rI   rM   rN   rO   s    r1   rQ   zSamplerLCM.define_schemaZ   s    y .y#3Dt'l  n n}csSW (C  D D/#4VZ'W  Y Y Z&&(()
 
 
 	
r3   c                     t           j                            dt          |          t          |          t          |          d          }t	          j        |          S )Nlcm)rp   rr   rs   )r!   rT   ksamplerfloatr   rV   )rP   rp   rr   rs   rW   s        r1   rX   zSamplerLCM.executek   sW    .)) >>$[11"'"7"7 
 
 }W%%%r3   N	rY   rZ   r[   r\   r   rG   rQ   rV   rX   r]   r3   r1   rn   rn   Y   sd        
bi 
 
 
 [
  	&bm 	& 	& 	& [	& 	& 	&r3   rn   c                   Z    e Zd Zedej        fd            Zedej        fd            ZdS )SamplerEulerCFGppr9   c           
          t          j        dddt           j                            dddgd          gt           j                                        gd	          S )
Nr{   zSamplerEulerCFG++experimentalversionregularalternativeT)rB   r@   )rC   display_namerD   rE   rF   is_experimental)r   rG   rK   rI   rM   rN   rO   s    r1   rQ   zSamplerEulerCFGpp.define_schemay   s_    y',#y9m2LW[\\ Z&&(() 	
 	
 	
 		
r3   c                     |dk    r%t           j                            t                    }nt           j                            d          }t          j        |          S )Nr   euler_cfg_pp)r!   rT   rU   rl   rw   r   rV   )rP   r~   rW   s      r1   rX   zSamplerEulerCFGpp.execute   sI    m##n--o>>GGn--n==G}W%%%r3   Nry   r]   r3   r1   r{   r{   x   sd        

bi 

 

 

 [

 & & & & [& & &r3   r{   c                   L    e Zd Zedeeej                          fd            ZdS )AdvancedSamplersExtensionr9   c                 .   K   t           t          t          gS N)r5   rn   r{   )selfs    r1   get_node_listz'AdvancedSamplersExtension.get_node_list   s       
 	
r3   N)	rY   rZ   r[   r   listtyper   	ComfyNoder   r]   r3   r1   r   r      sE        
T$r|*<%= 
 
 
 X
 
 
r3   r   r9   c                  "   K   t                      S r   )r   r]   r3   r1   comfy_entrypointr      s      $&&&r3   )NNNr   r	   N)NNN)numpyr   r%   	tqdm.autor   typing_extensionsr   comfy.model_patcherr!   comfy.samplerscomfy.utilscomfy.k_diffusion.samplingr   comfy_api.latestr   r   no_gradr2   r   r5   rl   rn   r{   r   r   r]   r3   r1   <module>r      s              & & & & & &             + + + + + + / / / / / / / /    6& & & & & & & &0    .& & & & & & & &>& & & & & & & &.
 
 
 
 
 
 
 
' 9 ' ' ' ' ' 'r3   