
    +j=5                        d dl Zd dlZd dlZd dlZd dlZd dlZ G d dej        j                  Z	 G d dej        j
                  Z G d d          Z
 G d d	          Z G d
 d          Z G d de          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Ze
eeeeeeeeed
ZdS )    Nc                       e Zd Zd ZdS )LCMc                 `   |                      |                              |j        d d         d|j        dz
  z  z             }|                    |j        d d         d|j        dz
  z  z             }|||z  z
  }d}|dz  }|dz  |dz  |dz  z   z  }||dz  |dz  z   dz  z  }	|	|z  ||z  z   S )N   r         ?g      $@   )timestepviewshapendim)
selfsigmamodel_outputmodel_inputr
   x0
sigma_datascaled_timestepc_skipc_outs
             A/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_model_advanced.pycalculate_denoisedzLCM.calculate_denoised
   s    =='',,U[!_t|GX[\G\?]-]^^

5;rr?T\5F5J-KKLL<%//
"T/Q/1"4z1}"DE?A#5
A#E#"MMrzF[000    N)__name__
__module____qualname__r    r   r   r   r   	   s#        1 1 1 1 1r   r   c                   0     e Zd ZdZd fd	Zd Zd Z xZS )ModelSamplingDiscreteDistilled2   Nc                 t   t                                          ||           | j        | j        z  | _        t          j        | j        t
          j                  }t          | j                  D ]0}| j	        | j        dz
  || j        z  z
           || j        dz
  |z
  <   1| 
                    |           d S )Nzsnr)dtyper   )super__init__num_timestepsoriginal_timesteps
skip_stepstorchzerosfloat32rangesigmas
set_sigmas)r   model_configr#   sigmas_validx	__class__s        r   r&   z'ModelSamplingDiscreteDistilled.__init__   s    D111,0GG{D$;EMRRRt.// 	v 	vA<@KHZ]^H^abeietatHt<uL014q899%%%%%r   c                 b   |                                 }|                    | j        j                  | j        d d d f         z
  }|                                                    d                              |j                  | j        z  | j        dz
  z                       |j                  S )Nr   )dimr   )	logto
log_sigmasdeviceabsargminr   r   r)   )r   r   	log_sigmadistss       r   r
   z'ModelSamplingDiscreteDistilled.timestep%   s    IIKK	T_344tqqq$w7OO		""q"))..u{;;doMQUQ`cdQdeiijojvwwwr   c                 b   t          j        |                                                    | j        j                  | j        dz
  z
  | j        z                                  dt          | j                  dz
            }|	                                
                                }|                                
                                }|                                }d|z
  | j        |         z  || j        |         z  z   }|                                                    |j                  S )Nr   r   )minmax)r*   clampfloatr7   r8   r9   r)   lenr.   floorlongceilfracexp)r   r
   tlow_idxhigh_idxwr<   s          r   r   z$ModelSamplingDiscreteDistilled.sigma*   s   K(..**--do.DEE[\I\]aeappwwyy  @A  HK  LP  LW  HX  HX  [\  H\  ^  ^  ^''))..""6688==??FFHHUdog66T_X=V9VV	}}!!(/222r   )NN)r   r   r   r(   r&   r
   r   __classcell__)r3   s   @r   r   r      sd        	& 	& 	& 	& 	& 	&x x x
3 3 3 3 3 3 3r   r   c                   6    e Zd Zed             ZdZdZdZd ZdS )ModelSamplingDiscretec                 "    ddg dfddddfdiS )	NrequiredMODEL)epsv_predictionlcmr   
img_to_imgimg_to_img_flowBOOLEANFT)defaultadvanced)modelsamplingr#   r   ss    r   INPUT_TYPESz!ModelSamplingDiscrete.INPUT_TYPES4   s8    z+p+p+p*r'0eQU2V2V&W    ! 	!r   rR   patchadvanced/modelc                    |                                 }t          j        j        }|dk    rt          j        j        }nt|dk    rt          j        j        }n\|dk    rt          }t          }nG|dk    rt          j        j        }n/|dk    rt          j        j	        }n|dk    rt          j        j
        } G d d||          } ||j        j        |	          }|                    d
|           |fS )NrT   rU   rV   r   rW   rX   c                       e Zd ZdS ):ModelSamplingDiscrete.patch.<locals>.ModelSamplingAdvancedNr   r   r   r   r   r   ModelSamplingAdvancedre   R           Dr   rg   r"   model_sampling)clonecomfyri   rO   EPSV_PREDICTIONr   r   X0
IMG_TO_IMGIMG_TO_IMG_FLOWr\   r0   add_object_patch)	r   r\   r]   r#   msampling_basesampling_typerg   ri   s	            r   ra   zModelSamplingDiscrete.patch@   s   KKMM,Bu!04MM''!0=MMM:MM!03MM%%!0;MM***!0@M	 	 	 	 	M= 	 	 	 /.u{/GdSSS	+^<<<ur   N	r   r   r   classmethodr`   RETURN_TYPESFUNCTIONCATEGORYra   r   r   r   rO   rO   3   sM        ! ! [! LHH    r   rO   c                   6    e Zd Zed             ZdZdZdZd ZdS )ModelSamplingStableCascadec                     ddddddddfd	iS )
NrQ   rR   FLOATg       @              Y@{Gz?rZ   r?   r@   stepr\   shiftr   r^   s    r   r`   z&ModelSamplingStableCascade.INPUT_TYPES[   1    z(/SUZcg1h1h'i    ! 	!r   rR   ra   rb   c                    |                                 }t          j        j        }t          j        j        } G d d||          } ||j        j                  }|                    |           |                    d|           |fS )Nc                       e Zd ZdS )?ModelSamplingStableCascade.patch.<locals>.ModelSamplingAdvancedNrf   r   r   r   rg   r   l   rh   r   rg   ri   )	rj   rk   ri   StableCascadeSamplingrl   r\   r0   set_parametersrq   )r   r\   r   rr   rs   rt   rg   ri   s           r   ra   z ModelSamplingStableCascade.patchf   s    KKMM,B,0	 	 	 	 	M= 	 	 	 /.u{/GHH%%e,,,	+^<<<ur   Nru   r   r   r   r{   r{   Z   sM        ! ! [!
 LHH    r   r{   c                   8    e Zd Zed             ZdZdZdZddZdS )	ModelSamplingSD3c                     ddddddddfd	iS )
NrQ   rR   r}   g      @r~   r   r   r   r   r   r^   s    r   r`   zModelSamplingSD3.INPUT_TYPESu   r   r   rR   ra   rb     c                    |                                 }t          j        j        }t          j        j        } G d d||          }|                    d          } ||j        j                  }	|	                    ||           t          |d          r|	
                    |j                   |                    d|	           |fS )Nc                       e Zd ZdS )5ModelSamplingSD3.patch.<locals>.ModelSamplingAdvancedNrf   r   r   r   rg   r      rh   r   rg   ri   r   
multipliernoise_scale)rj   rk   ri   ModelSamplingDiscreteFlowCONSTget_model_objectr\   r0   r   hasattrset_noise_scaler   rq   )
r   r\   r   r   rr   rs   rt   rg   originalri   s
             r   ra   zModelSamplingSD3.patch   s    KKMM,F,2	 	 	 	 	M= 	 	 	 %%&677..u{/GHH%%Ej%III8]++ 	A**8+?@@@	+^<<<ur   N)r   ru   r   r   r   r   r   t   sR        ! ! [!
 LHH     r   r   c                   .    e Zd Zed             ZdZd ZdS )ModelSamplingAuraFlowc                     ddddddddfd	iS )
NrQ   rR   r}   gGz?r~   r   r   r   r   r   r^   s    r   r`   z!ModelSamplingAuraFlow.INPUT_TYPES   s1    z(/T#V[dh1i1i'j    ! 	!r   
patch_aurac                 2    |                      ||d          S )N      ?)r   )ra   )r   r\   r   s      r   r   z ModelSamplingAuraFlow.patch_aura   s    zz%3z777r   N)r   r   r   rv   r`   rx   r   r   r   r   r   r      sC        ! ! [!
 H8 8 8 8 8r   r   c                   6    e Zd Zed             ZdZdZdZd ZdS )ModelSamplingFluxc                 z    ddddddddd	fdd
ddddd	fdddt           j        ddfdddt           j        ddfdiS )NrQ   rR   r}   gffffff?r~   r   r   T)rZ   r?   r@   r   r[   r   INTi         r   )r\   	max_shift
base_shiftwidthheight)nodesMAX_RESOLUTIONr^   s    r   r`   zModelSamplingFlux.INPUT_TYPES   s    z,3cZ_hlz~55  ,A-4#cZ_hlz~66  -A(-4SXSgqr/s/s't).DTYThrs0t0t(u	    ! 	!r   rR   ra   rb   c                 ^   |                                 }d}d}||z
  ||z
  z  }	||	|z  z
  }
||z  dz  |	z  |
z   }t          j        j        }t          j        j        } G d d||          } ||j        j                  }|                    |           |                    d|           |fS )N   i   c                       e Zd ZdS )6ModelSamplingFlux.patch.<locals>.ModelSamplingAdvancedNrf   r   r   r   rg   r      rh   r   rg   )r   ri   )	rj   rk   ri   r   r   r\   r0   r   rq   )r   r\   r   r   r   r   rr   x1x2mmbr   rs   rt   rg   ri   s                   r   ra   zModelSamplingFlux.patch   s    KKMM*$b1b =1R7!;,>,2	 	 	 	 	M= 	 	 	 /.u{/GHH%%E%222	+^<<<ur   Nru   r   r   r   r   r      sM        ! ! [! LHH    r   r   c                   6    e Zd Zed             ZdZdZdZd ZdS )ModelSamplingContinuousEDMc                 >    ddg dfdddddd	d
dfdddddd	d
dfdiS )NrQ   rR   )rU   edmedm_playground_v2.5rT   cosmos_rflowr}   g      ^@r~        @@MbP?FTrZ   r?   r@   r   roundr[   gMb`?r\   r]   	sigma_max	sigma_minr   r^   s    r   r`   z&ModelSamplingContinuousEDM.INPUT_TYPES   sy    z+p+p+p*r,3s[ajoz  NR  6S  6S  ,T,3s[ajoz  NR  6S  6S  ,T    ! 	!r   rR   ra   rb   c                    |                                 }t          j        j        }d }d}|dk    rt          j        j        }	n|dk    rt          j        j        }	d}nx|dk    rt          j        j        }	n`|dk    r2t          j        j        }	d}t          j                                        }n(|dk    r"t          j        j	        }	t          j        j
        } G d d	||	          }
 |
|j        j                  }|                    |||           |                    d
|           ||                    d|           |fS )Nr   rT   r   r   rU   r   r   c                       e Zd ZdS )?ModelSamplingContinuousEDM.patch.<locals>.ModelSamplingAdvancedNrf   r   r   r   rg   r      rh   r   rg   ri   latent_format)rj   rk   ri   r   rl   EDMrm   latent_formatsSDXL_Playground_2_5COSMOS_RFLOWModelSamplingCosmosRFlowr\   r0   r   rq   )r   r\   r]   r   r   rr   rs   r   r   rt   rg   ri   s               r   ra   z ModelSamplingContinuousEDM.patch   sY   KKMM,G
u!04MM!04MJJ''!0=MM...!04MJ!0DDFFMM''!0=M!0IM	 	 	 	 	M= 	 	 	 /.u{/GHH%%iJGGG	+^<<<$>>>ur   Nru   r   r   r   r   r      sM        ! ! [! LHH    r   r   c                   6    e Zd Zed             ZdZdZdZd ZdS )ModelSamplingContinuousVc                 <    dddgfdddddd	d
dfdddddd	d
dfdiS )NrQ   rR   rU   r}   g     @@r~   r   r   FTr   gQ?r   r   r^   s    r   r`   z$ModelSamplingContinuousV.INPUT_TYPES   sv    z,:+;*=,3s[ajoz  NR  6S  6S  ,T,3cZ`iny~  MQ  6R  6R  ,S    ! 	!r   rR   ra   rb   c                 "   |                                 }d}|dk    rt          j        j        } G d dt          j        j        |          } ||j        j                  }	|	                    |||           |                    d|	           |fS )Nr   rU   c                       e Zd ZdS )=ModelSamplingContinuousV.patch.<locals>.ModelSamplingAdvancedNrf   r   r   r   rg   r     rh   r   rg   ri   )	rj   rk   ri   rm   r   r\   r0   r   rq   )
r   r\   r]   r   r   rr   r   rt   rg   ri   s
             r   ra   zModelSamplingContinuousV.patch   s    KKMM
~%%!0=M	 	 	 	 	E$8$QS` 	 	 	 /.u{/GHH%%iJGGG	+^<<<ur   Nru   r   r   r   r   r      sM        ! ! [! LHH    r   r   c                   6    e Zd Zed             ZdZdZdZd ZdS )
RescaleCFGc                     ddddddddfd	iS )
NrQ   rR   r}   gffffff?r~   r   r   r   )r\   r   r   r^   s    r   r`   zRescaleCFG.INPUT_TYPES  s1    z-4#cZ]gk6l6l,m    ! 	!r   rR   ra   rb   c                 f    fd}|                                 }|                    |           |fS )Nc                    | d         }| d         }| d         }| d         }|                     |j        d d         d|j        dz
  z  z             }| d         }|||z  dz   z  }|||z
  z
  |d	z  dz   d
z  z  |z  }|||z
  z
  |d	z  dz   d
z  z  |z  }||||z
  z  z   }t          j        |dd          }t          j        |dd          }	|||	z  z  }
|
z  dz
  |z  z   }||||z  ||z  dz   d
z  z  z
  z
  S )Nconduncond
cond_scaler   r   r   inputr   r	   r   )r   r	      T)r5   keepdim)r   r   r   r*   std)argsr   r   r   r   x_origr2   x_cfgro_posro_cfg
x_rescaledx_finalr   s               r   rescale_cfgz%RescaleCFG.patch.<locals>.rescale_cfg  sL   <D(^Fl+JMEJJu{2A2Q1GGHHE']F %%-#-.A&4-(UaZ#-=#,EE%PDFVO,!c1Ac0IIeTF Z4&=99EYt$???FYu'4@@@F&6/2J :-z1AU0JJGQ5EEMC4GC3O!OOPPr   )rj   set_model_sampler_cfg_function)r   r\   r   r   rr   s     `  r   ra   zRescaleCFG.patch  sK    	Q 	Q 	Q 	Q 	Q. KKMM	((555ur   Nru   r   r   r   r   r     sM        ! ! [! LHH    r   r   c                   6    e Zd Zed             ZdZdZdZd ZdS )ModelNoiseScalec           	           ddddddddd	fd
iS )NrQ   rR   r}   r   r~   g      P@r   zJAbsolute training noise scale. For example HiDream-O1 base: 8.0, dev: 7.5.)rZ   r?   r@   r   tooltip)r\   r   r   r^   s    r   r`   zModelNoiseScale.INPUT_TYPES3  sA    z.53s[_im CO8P 8P .Q    ! 	!r   rR   ra   rb   c                 6   |                                 }|                    d          } t          |          |j        j                  }|                    |j        |j                   |                    |           |	                    d|           |fS )Nri   r   )
rj   r   typer\   r0   r   r   r   r   rq   )r   r\   r   rr   r   mss         r   ra   zModelNoiseScale.patch?  s    KKMM%%&677T(^^AG011
8;NOOO
;'''	+R000ur   Nru   r   r   r   r   r   2  sM        ! ! [! LHH    r   r   c                   >    e Zd ZddgZed             ZdZdZdZd Z	dS )	ModelComputeDtypezmodel precisionzchange dtypec                     ddg dddifdiS )NrQ   rR   )rZ   fp32fp16bf16r[   T)r\   r$   r   r^   s    r   r`   zModelComputeDtype.INPUT_TYPESK  s/    z(K(K(KjZ^M_'`    ! 	!r   rR   ra   zadvanced/debug/modelc                 ~    |                                 }|                    t          j        |                     |fS )N)rj   set_model_compute_dtypenode_helpersstring_to_torch_dtype)r   r\   r$   rr   s       r   ra   zModelComputeDtype.patchV  s5    KKMM	!!,"DU"K"KLLLur   N)
r   r   r   SEARCH_ALIASESrv   r`   rw   rx   ry   ra   r   r   r   r   r   I  sW        '8N! ! [!
 LH%H    r   r   )
rO   r   r   r{   r   r   r   r   r   r   )comfy.sdrk   comfy.model_samplingcomfy.latent_formatsr   r*   r   ri   rl   r   rO   r   r{   r   r   r   r   r   r   r   r   NODE_CLASS_MAPPINGSr   r   r   <module>r      sn                 1 1 1 1 1%

" 1 1 13 3 3 3 3U%9%O 3 3 38% % % % % % % %N       4       :
8 
8 
8 
8 
8, 
8 
8 
8! ! ! ! ! ! ! !H+ + + + + + + +Z       :% % % % % % % %N       .       ( 3"< 8"<(2*&*    r   