
    +j
                         S SK Jr  S SKrS SKJrJr  S\R                  S\R                  S\R                  4S jr " S S	\R                  5      r	 " S
 S\5      r
S\
4S jrg)    )overrideN)ComfyExtensionio
cond_scoreuncond_scorereturnc                 b   U R                   S   nU R                  USS5      R                  5       nUR                  USS5      R                  5       n[        R                  " XC4SS9n [        R
                  R                  USS9u    pgUSS2SS2SS24   R                  UR                  5      nXHR                  SS5      -  U-  n	U	R                  U5      R                  UR                  5      $ ! [         a2    [        R
                  R                  UR                  5       SS9u    pg Nf = f)	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:@@BO$,,Y2>DDF 99/AqILM<<##L#F1 
AqsAI		+22	3B(<<B+??2EO%%l366|7I7IJJ  M<<##L$4$4$6e#L1bMs   )!C2 29D.-D.c                   4    \ rS rSr\S 5       r\S 5       rSrg)TCFG   c                     [         R                  " SSSS[         R                  R                  S5      /[         R                  R	                  SS9/S9$ )	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_schemaTCFG.define_schema   sP    yy1( `w' _=
 	
    c                 v    UR                  5       nS nUR                  U5        [        R                  " U5      $ )Nc                     U S   nU S   n[        U5      S::  d  S U S   S S ;   a  U$ US   nUS   n[        X-
  X-
  5      nX-
  nX6/USS  -   $ )Ninput	conds_outr
   conds   r   )lenr&   )argsxr>   	cond_preduncond_pred	uncond_tduncond_pred_tds          r%   tangential_damping_cfg,TCFG.execute.<locals>.tangential_damping_cfg2   sv    WA[)I9~"dd7mBQ.?&?  !!I#A,K0PI]N.12>>r:   )clone"set_model_sampler_pre_cfg_functionr   
NodeOutput)r7   r+   mrH   s       r%   executeTCFG.execute.   s2    KKM	? 	
,,-CD}}Qr:    N)__name__
__module____qualname____firstlineno__classmethodr8   rN   __static_attributes__rP   r:   r%   r(   r(      s(    
 
    r:   r(   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)TcfgExtensionC   r   c                    #    [         /$ 7fN)r(   )selfs    r%   get_node_listTcfgExtension.get_node_listD   s      
 	
s   
rP   N)rQ   rR   rS   rT   r   listtyper   	ComfyNoder]   rV   rP   r:   r%   rX   rX   C   s)    
T$r||*<%= 
 
r:   rX   c                     #    [        5       $ 7fr[   )rX   rP   r:   r%   comfy_entrypointrc   K   s     ?s   )typing_extensionsr   r   comfy_api.latestr   r   Tensorr&   ra   r(   rX   rc   rP   r:   r%   <module>rg      sf    '  /K KU\\ KV[VbVb K*" 2<< " J
N 
 r:   