o
    i                     @   sr   d dl mZ d dlZd dlmZmZ dd ZG dd dejZG dd	 d	ejZ	G d
d deZ
de
fddZdS )    )overrideN)ComfyExtensionioc                 C   sz   |  | jd d}| |jd d}tj|| ddd}tj|d dddd }|| }| | jd gdg| jd   S )Nr      Tdimkeepdim   :0yE>)reshapeshapetorchsumndim)positivenegativepositive_flatnegative_flatdot_productsquared_normst_star r   4/mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_cfg.pyoptimized_scale	   s   "r   c                   @   4   e Zd ZedejfddZedejfddZdS )CFGZeroStarreturnc                 C   s(   t jddt jdgt jjddgdS )Nr   advanced/guidancemodelpatched_modeldisplay_name)node_idcategoryinputsoutputs)r   SchemaModelInputOutputclsr   r   r   define_schema   s   
zCFGZeroStar.define_schemac                 C   s$   |  }dd }|| t|S )Nc                 S   sZ   | d }| d }| d }| d }| d }t || || }|||d   || d|   S )N
cond_scaleinputcond_denoiseduncond_denoiseddenoised      ?)r   )argsguidance_scalexcond_puncond_poutalphar   r   r   cfg_zero_star'   s    z*CFGZeroStar.execute.<locals>.cfg_zero_starclone#set_model_sampler_post_cfg_functionr   
NodeOutput)r,   r   mr;   r   r   r   execute$   s   
	
zCFGZeroStar.executeN	__name__
__module____qualname__classmethodr   r'   r-   r?   rA   r   r   r   r   r      s
    
r   c                   @   r   )CFGNormr   c                 C   s>   t jddt jdt jjdddddd	gt jjd
dgddS )NrG   r   r   strengthr3           g      Y@g{Gz?)defaultminmaxstepr    r!   T)r#   r$   r%   r&   is_experimental)r   r'   r(   r)   Floatr*   r+   r   r   r   r-   4   s   
zCFGNorm.define_schemac                    s(   |  } fdd}|| t|S )Nc                    sR   | d }| d }t j|ddd}t j|ddd}||d  jddd	}||   S )
Nr0   r2   r   Tr   r   rI   r3   )rK   rL   )r   normclamp)r4   r7   
pred_text_norm_full_condnorm_pred_textscalerH   r   r   cfg_normD   s   z!CFGNorm.execute.<locals>.cfg_normr<   )r,   r   rH   r@   rW   r   rV   r   rA   A   s   
	
zCFGNorm.executeNrB   r   r   r   r   rG   3   s
    rG   c                   @   s(   e Zd Zedeeej  fddZdS )CfgExtensionr   c                    s
   t tgS N)r   rG   )selfr   r   r   get_node_listR   s   zCfgExtension.get_node_listN)	rC   rD   rE   r   listtyper   	ComfyNoder[   r   r   r   r   rX   Q   s    rX   r   c                      s   t  S rY   )rX   r   r   r   r   comfy_entrypointZ   s   r_   )typing_extensionsr   r   comfy_api.latestr   r   r   r^   r   rG   rX   r_   r   r   r   r   <module>   s    	