
    +j
                         d dl mZ d dlZd dlmZmZ dej        dej        dej        fdZ G d d	ej                  Z	 G d
 de          Z
de
fdZdS )    )overrideN)ComfyExtensionio
cond_scoreuncond_scorereturnc                    | j         d         }|                     |dd                                          }|                    |dd                                          }t          j        ||fd          }	 t          j                            |d          \  }}}nG# t          $ r: t          j                            |                                d          \  }}}Y nw xY w|ddddddf         	                    |j
                  }||                    dd          z  |z  }	|	                    |          	                    |j                  S )	zFDrop tangential components from uncond score to align with cond score.r      )dimF)full_matricesN)shapereshapefloattorchcatlinalgsvdRuntimeErrorcputodevice	transpose
reshape_asdtype)
r   r   	batch_numcond_score_flatuncond_score_flatscore_matrix_Vhv1uncond_score_tds
             7/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_tcfg.pyscore_tangential_dampingr&   	   s\     #I ((Ar::@@BBO$,,Y2>>DDFF 9/AqIIILM<##L#FF1bb M M M<##L$4$4$6$6e#LL1bbbM
 
AAAqsAAAI		+2	3	3B(2<<B+?+??2EO%%l3366|7IJJJs   9%B AC#"C#c                   :    e Zd Zed             Zed             ZdS )TCFGc           
          t          j        ddddt           j                            d          gt           j                            d          g          S )	Nr(   zTangential Damping CFGzadvanced/guidanceu   TCFG – Tangential Damping CFG (2503.18137)

Refine the uncond (negative) to align with the cond (positive) for improving quality.modelpatched_model)display_name)node_idr,   categorydescriptioninputsoutputs)r   SchemaModelInputOutput)clss    r%   define_schemazTCFG.define_schema   sZ    y1( `w'' _==
 
 
 	
    c                     |                                 }d }|                    |           t          j        |          S )Nc                     | d         }| d         }t          |          dk    sd | d         d d         v r|S |d         }|d         }t          ||z
  ||z
            }||z
  }||g|dd          z   S )Ninput	conds_outr
   conds   r   )lenr&   )argsxr<   	cond_preduncond_pred	uncond_tduncond_pred_tds          r%   tangential_damping_cfgz,TCFG.execute.<locals>.tangential_damping_cfg2   s    WA[)I9~~""dd7mBQB.?&?&?  !!I#A,K0YKPPI]N~.122>>r8   )clone"set_model_sampler_pre_cfg_functionr   
NodeOutput)r6   r*   mrF   s       r%   executezTCFG.execute.   sE    KKMM	? 	? 	? 	
,,-CDDD}Qr8   N)__name__
__module____qualname__classmethodr7   rK    r8   r%   r(   r(      sH        
 
 [
     [     r8   r(   c                   L    e Zd Zedeeej                          fd            ZdS )TcfgExtensionr   c                    K   t           gS N)r(   )selfs    r%   get_node_listzTcfgExtension.get_node_listD   s       
 	
r8   N)	rL   rM   rN   r   listtyper   	ComfyNoderV   rP   r8   r%   rR   rR   C   sE        
T$r|*<%= 
 
 
 X
 
 
r8   rR   c                  "   K   t                      S rT   )rR   rP   r8   r%   comfy_entrypointr[   K   s      ??r8   )typing_extensionsr   r   comfy_api.latestr   r   Tensorr&   rY   r(   rR   r[   rP   r8   r%   <module>r_      s    ' & & & & &  / / / / / / / /K KU\ KV[Vb K K K K*"  "  "  "  " 2< "  "  " J
 
 
 
 
N 
 
 
      r8   