
    +j                         d dl mZ d dlZd dlmZmZ 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 )    )overrideN)ComfyExtensionioc                 ^   |                      | j        d         d          }|                     |j        d         d          }t          j        ||z  dd          }t          j        |dz  dd          dz   }||z  }|                     | j        d         gdg| j        dz
  z  z             S )Nr      Tdimkeepdim   :0yE>)reshapeshapetorchsumndim)positivenegativepositive_flatnegative_flatdot_productsquared_normst_stars          6/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_cfg.pyoptimized_scaler   	   s    $$X^A%6;;M$$X^A%6;;M )MM9q$OOOK 9]a/QEEELL L(G??HN1-.!8I1JJKKK    c                   Z    e Zd Zedej        fd            Zedej        fd            ZdS )CFGZeroStarreturnc                     t          j        ddt           j                            d          gt           j                            d          g          S )Nr   advanced/guidancemodelpatched_modeldisplay_name)node_idcategoryinputsoutputs)r   SchemaModelInputOutputclss    r   define_schemazCFGZeroStar.define_schema   sO    y!(w'' X__/_BBC
 
 
 	
r   c                     |                                 }d }|                    |           t          j        |          S )Nc                     | d         }| d         }| d         }| d         }| d         }t          ||z
  ||z
            }|||dz
  z  z   ||z  d|z
  z  z   S )N
cond_scaleinputcond_denoiseduncond_denoiseddenoised      ?)r   )argsguidance_scalexcond_puncond_poutalphas          r   cfg_zero_starz*CFGZeroStar.execute.<locals>.cfg_zero_star'   su    !,/NWA/*F-.Hz"C#AJH==EUS[11^h5NRUX]R]5^^^r   )clone#set_model_sampler_post_cfg_functionr   
NodeOutput)r/   r"   mr@   s       r   executezCFGZeroStar.execute$   sG    KKMM	_ 	_ 	_ 	
--m<<<}Qr   N	__name__
__module____qualname__classmethodr   r*   r0   rC   rE    r   r   r   r      sd        
bi 
 
 
 [
  r}       [     r   r   c                   \    e Zd Zedej        fd            Zeddej        fd            ZdS )CFGNormr   c                 8   t          j        ddt           j                            d          t           j                            ddddd	          t           j                            d
ddd          gt           j                            d          gd          S )NrM   r!   r"   strengthr8           g      Y@g{Gz?)defaultminmaxsteppre_cfgFTzIf true, rescale the combined noise BEFORE the sampler's CFG combine, without clamping (can amplify). Matches the norm-scaled CFG used by models like Lens. Default false keeps the original post-CFG x0-space attenuate-only behavior.)rQ   optionaltooltipr#   r$   )r&   r'   r(   r)   is_experimental)r   r*   r+   r,   FloatBooleanr-   r.   s    r   r0   zCFGNorm.define_schema4   s    y(w''z3CUQUVV
  !!3 ! 
 
 X__/_BBC '
 
 
 	
r   Fc                     |                                 }|rfd}|                    |           nfd}|                    |           t          j        |          S )Nc                    | d         }| d         }| d         }||||z
  z  z   }t           j                            |dd          }t           j                            |dd          }t          j        |dk    ||                    d          z  t          j        |                    }||z  }	d	k    r	|z  d		z
  |z  z   }|S )
Nconduncondr3   r   Tr	   r   g-q=r8   )r   linalgvector_normwhere	clamp_min	ones_like)
r9   r]   r^   r3   comb	cond_norm	comb_normrescalerescaledrO   s
            r   cfg_norm_prez%CFGNorm.execute.<locals>.cfg_norm_preP   s    F|h!,/

dVm <<!L44Tq$4OO	!L44Tq$4OO	+M	 3 3E : ::OI.. 
  '>s??'(2cHn5LLHr   c                     | d         }| d         }t          j        |dd          }t          j        |dd          }||dz   z                      dd	          }||z  z  S )
Nr5   r7   r   Tr	   r   rP   r8   )rR   rS   )r   normclamp)r9   r<   
pred_text_norm_full_condnorm_pred_textscalerO   s         r   cfg_normz!CFGNorm.execute.<locals>.cfg_normc   sv    o.!*-
!&F4!H!H!H!&JAt!L!L!L'>D+@AHHSVYHZZ!E)H44r   )rA   set_model_sampler_cfg_functionrB   r   rC   )r/   r"   rO   rU   rD   ri   rq   s     `    r   rE   zCFGNorm.executeL   s    KKMM 	<         " ,,\::::5 5 5 5 5 11(;;;}Qr   N)FrF   rK   r   r   rM   rM   3   si        
bi 
 
 
 [
.                [        r   rM   c                   L    e Zd Zedeeej                          fd            ZdS )CfgExtensionr   c                 "   K   t           t          gS N)r   rM   )selfs    r   get_node_listzCfgExtension.get_node_listq   s       
 	
r   N)	rG   rH   rI   r   listtyper   	ComfyNoderx   rK   r   r   rt   rt   p   sE        
T$r|*<%= 
 
 
 X
 
 
r   rt   r   c                  "   K   t                      S rv   )rt   rK   r   r   comfy_entrypointr}   y   s      >>r   )typing_extensionsr   r   comfy_api.latestr   r   r   r{   r   rM   rt   r}   rK   r   r   <module>r      s    & & & & & &  / / / / / / / /L L L         ",      6:  :  :  :  : bl :  :  : z
 
 
 
 
> 
 
 
      r   