
    +jU                     ~    d dl Z d dlmZ d dlmZmZ d Z G d dej                  Z G d de          Z	d	e	fd
Z
dS )    N)override)ComfyExtensionioc                     t           j        j                            |g d          }| |z                      g dd          |z  }| |z
  }||fS )N)dimT)r   keepdim)torchnn
functional	normalizesum)v0v1v0_parallelv0_orthogonals       6/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_apg.pyprojectr      sZ    			&	&r|||	&	<	<B7--LLL$-??"DK$M%%    c                   Z    e Zd Zedej        fd            Zedej        fd            ZdS )APGreturnc                    t          j        dddt           j                            d          t           j                            ddddd	d
d          t           j                            ddddddd          t           j                            ddddd	dd          gt           j                                        g          S )Nr   zAdaptive Projected Guidancezmodel/sampling/custom_samplingmodeletag      ?g      $g      $@g{Gz?z[Controls the scale of the parallel guidance vector. Default CFG behavior at a setting of 1.T)defaultminmaxsteptooltipadvancednorm_thresholdg      @g        g      I@g?zQNormalize guidance vector to this value, normalization disable at a setting of 0.momentumg      zTControls a running average of guidance during diffusion, disabled at a setting of 0.)node_iddisplay_namecategoryinputsoutputs)r   SchemaModelInputFloatOutput)clss    r   define_schemazAPG.define_schema   s    y65w''y!    $o!    r!   )< X__&&'E#
 #
 #
 #	
r   c                     dd fd}|                                 }|                    |           t          j        |          S )Nr   c                 4   t          | d                   dk    r| d         S | d         d         }| d         d         }| d         d         }| d         }|k    rd|||z
  }dk    r!t          j                  s|nz  |z   }dk    rI|                    dg dd	          }t          j        t          j        |          |z            }||z  }t          ||          \  }}	|	|z  z   }
||
z   ||z
  |z  z   }||g| d         dd          z   S )
N	conds_out   r   sigma
cond_scale   r   T)pr   r   )lenr   	is_tensornormminimum	ones_liker   )argsconduncondr7   r8   guidanceguidance_normscaleguidance_parallelguidance_orthogonalmodified_guidancemodified_condr   r&   r%   
prev_sigmarunning_avgs               r   pre_cfg_functionz%APG.execute.<locals>.pre_cfg_function:   sn    4$%%**K(($Q'D+&q)FM!$El+J%%**<*<Jf}H1}}{33 D"*KK"*["88"CK&!! (|||T R ROM22"]2  $e+5<Xt5L5L22 3c<M6M M#&77D6MZ;WWM!6*T+->qrr-BBBr   )clone"set_model_sampler_pre_cfg_functionr   
NodeOutput)	r1   r   r   r%   r&   rL   mrJ   rK   s	     ```  @@r   executezAPG.execute5   s|    
%	C %	C %	C %	C %	C %	C %	C %	C %	CN KKMM	,,-=>>>}Qr   N)	__name__
__module____qualname__classmethodr   r,   r2   rO   rQ    r   r   r   r      se        $
bi $
 $
 $
 [$
L - bm -  -  -  [-  -  - r   r   c                   L    e Zd Zedeeej                          fd            ZdS )ApgExtensionr   c                    K   t           gS N)r   )selfs    r   get_node_listzApgExtension.get_node_listg   s       
 	
r   N)	rR   rS   rT   r   listtyper   	ComfyNoder\   rV   r   r   rX   rX   f   sE        
T$r|*<%= 
 
 
 X
 
 
r   rX   r   c                  "   K   t                      S rZ   )rX   rV   r   r   comfy_entrypointra   m   s      >>r   )r   typing_extensionsr   comfy_api.latestr   r   r   r_   r   rX   ra   rV   r   r   <module>rd      s     & & & & & & / / / / / / / /& & &V  V  V  V  V ", V  V  V r
 
 
 
 
> 
 
 
      r   